Implementation details

Implementation details#

This section provides some useful information about the functionalities implemented in the lattice_builder:

Atoms:

The input keyword "atoms" refers to the general concept of a basis function representing an orbital or spin. For lattice or tight-binding models this is often referred to as "site".

Position of atoms:

The "position" keyword of an atom does not affect the coupling terms in the Hamitonian, unless the user connects them when specifying the input configuration. For example, the spectrum of the Hamiltonian is not changed when scaling the positions. However, the Builder class provides a get_velocity0 method which generates the velocity operator for fermions, which uses the position of the orbitals. Furthermore the method get_atom_positions returns an array mapping the orbital (or site/spin) indices to the positions for all sites, meaning to the entire system (and not just the unit cell!).

Lattice vectors:

Similar to the positions, the lattice vectors do not affect the coupling terms in the Hamiltonian. However, for periodic boundary conditions the lattice vectors affect the Bloch phase shift across the periodic boundary. Moreover, the lattice vectors are used to determine the k-point path (and thereby the applied Bloch phases for each k-point) using the crystal_tools package. In addition the lattice vectors are employed to expand the position of the "atoms" (see above) to the entire system.

k-points:

Bloch vector dependent coupling terms are only supported for fermions via the sparse matrix methods getH0 (non-interacting contribution to fermionic Hamiltonians) and getD (BCS pairing for fermionic Hamiltonians). In a nutshell, the k-vector determines the phase-shift of hopping amplitudes (non-local pairing contributions) across the periodic boundaries. Note that the interaction coupling terms supported by the lattice_builder are not affected by Bloch phases across the periodic boundaries.