Hi again, > I had already tried that, but I get extra bands that I would like to get > rid of.
You could try using Christoph Groth's "wraparound" module [1] (just
download the "wraparound.py" module and put it next to your script to
be able to "import wraparound"). This will convert your Builder with
a 1D translational symmetry to a Builder with no translational symmetry,
but which takes an extra parameter, k, which corresponds to the lattice
momentum. You can then calculate and plot the bands yourself:
import numpy as np
import wraparound
import matplotlib.pyplot as plt
syst_with_sym = make_system() # *unfinalized* system (i.e. a Builder)
syst_no_sym = wraparound.wraparound(syst_no_sym).finalized()
# assumes that "syst_with_sym" took no parameters
def poor_man_bands(k):
H_k = syst_no_sym.hamiltonian_submatrix(args=(k,), sparse=False)
return sorted(np.eigvalsh(H_k))
momenta = np.linspace(-np.pi, np.pi, 53)
E_k = [poor_man_bands(k) for k in momenta]
plt.plot(momenta, E_k)
Internally all that "wraparound" does is converts hoppings between
unit cells in a translationally invariant system to onsites/hoppings
in a finite system multiplied by the appropriate phase factors which
depend on the lattice momentum.
Happy Kwanting,
Joe
[1]: https://gitlab.kwant-project.org/cwg/wraparound
signature.asc
Description: PGP signature
