Exact Diagonalization (ED) provides a simple framework to determine the eigenstates and energy eigenvalues of a quantum Hamiltonian. It obtains Green's functions directly in real time, as opposed to imaginary time as in Diagrammatic Quantum Monte Carlo (DQMC). Here we are interested in a molecular impurity immersed in a Bose-Einstein Condensate (BEC) or superfluid helium. This problem can be conveniently studied using the concept of the angulon quasiparticle which consists of a quantum rotor dressed by a field of many-body excitations.
The ED algorithm requires an efficient representation of ket states to handle the large number of basis vectors effectively. In our implementation, we define a ket state
where
Here,
To optimize memory usage, we utilize the hashing trick. This involves converting the large ket state universe into small practical integer values using a hash function. We choose an injective hash function that efficiently distributes keys and yields a compact hash table:
The sum runs over each phonon index
In addition to the physical parameters such as the bath density
- Momentum discretization:
$\Delta k$ - Maximum momentum:
$k_{\text{max}}$ - Infinitesimal imaginary offset for spectral function:
$\epsilon$ - Maximum phonon angular momentum quantum number:
$l_{\text{max}}$ - Maximum total angular momentum quantum number:
$L_{\text{max}}$ - Number of phonons:
$N$
The implementation employs the following libraries:
- Cython with
cython.parallel
module for CPU-bound tasks andcython_gsl
for GSL integration - SciPy's
scipy.sparse.csr_matrix
to handle sparse Hamiltonian matrices - SciPy's
scipy.linalg.cython_lapack
to accesszheevr
andzgeev
functionalities from LAPACK - SymPy's
sympy.physics.quantum.cg
for Clebsch-Gordan coefficients
To run the ED calculations and compute the angulon spectral function or phonon density profiles, set the physical and numerical parameters in the config/config.py
file. Then run the main.py
script from the run
folder. The results will be dumped into the output
folder. Make sure to satisfy the dependencies mentioned above before running the code.