LLLBosonDynamics
Abstract
Python and C++ code to simulate the dynamical instability of a strip-like BEC in the lowest Landau level with exact diagonalization and to produce figures for publication. All Python code uses Python 3 and the packages NumPy, SciPy, Matplotlib, and optionally tqdm for progress bars. C++ code uses the linear algebra package Eigen and OpenMP for parallelization. The use of a parallelized LAPACK and BLAS backend is highly recommended; in particular, on machines with Intel CPUs, Intel MKL should be used. To do so, modify the paths to the include and lib directories in the relevant Makefile. Main files: landau_dynamics.py Does the exact diagonalization of a Bose gas with contact interactions in the LLL on a torus in the Landau gauge. Takes the number of particles `N`, the number of flux quanta `N_PHI`, and the size of the torus along the y-direction `L_Y` as input parameters. Uses periodic boundary conditions by default (`PBC = True`). Generates a computational basis (functions `generate_basis`) in terms of the momenta of the bosons. Generates the Hamiltonian (functions `potential` and `generate_hamiltonian`) for a Bose gas with contact interactions as a (dense) matrix, optionally saving it as a .npy file. Diagonalizes said Hamiltonian and performs time evolution according to the Schroedinger equation, saving the expectation values of the density as a function of time in a .npy file. ld_sparse.py Has the same input parameters and functions as landau_dynamics.py, but with sparse matrices implemented in the SciPy library. Time evolution is carried out with the `expm_multiply` routine for sparse matrices. symmetric_landau.py Does the exact diagonalization in the symmetric gauge. Takes the number of particles `N` and the total angular momentum `ANG_MOM` as inputs. Otherwise similar to landau_dynamics.py, except that no time evolution is computed. projector.py (Deprecated) Generates the operators $\int \prod_{i} \mathrm{d}^2 r_i \, \psi^\dagger(r_i)^{n_i} \psi(r_i)^{n_i}$ in the same computational basis. This is done with `generate_projector`, where the argument is a list containing the powers $\{n_i\}$. By changing `potential`, one can include other functions in the integrals performed. Optionally parallelizes the computation. Deprecated due to performance issues; usage of the C++ version is preferred. correlator.py Generates the correlation functions in real space at a time `t`. To be run with a command line argument for the time, e.g., `python3 correlator.py 10` for the correlation function at t=10. Scripts in plots/ Produces the figures used in the paper Strong Correlations in the Dynamical Evolution of Lowest Landau Level Bosons. Run `make all` to produce all figures. Scripts in landau/ A C++ port of the Python code. They should be used over the Python code when possible for performance. `basis.h` defines the computational basis. `projector.cpp` performs identically to `projector.py`, with a difference being that its output is a simple binary file with the entries of the matrix stored as double precision floating point numbers. `diag.cpp` handles the diagonalization of matrices and uses Eigen and BLAS libraries. `gp2.cpp` and `gross_pitaevskii.cpp` (the latter deprecated) simulate the time-dependent Gross—Pitaevskii equation with the Runge—Kutta 4 method, the step sizes are customizable. The output is a file with the Gross—Pitaevskii wavefunction as a function of time. Scripts in symmetric/ A C++ implementation of the functions in the symmetric gauge on a disk. The inputs are likewise identical to other code.
Publication details
- Journal / source
- Apollo (University of Cambridge)
- Publication date
- 20 February 2026
- Language
- EN