Here, `#na` determines the number of 'A' bands, i.e., the bands which are treated
exactly at k = 0. With `#na_b` and `#na_a` one can specify the number of A bands
above and below the (charge-neutral) gap. The parameters `#nl` and `#nu` determine
the number of 'lower' and 'upper' bands that are taken into account
perturbatively. If not given (cases 1., 2., 5.), then take the maximum possible
number of bands that are localized in the well. In the other cases, when
non-localized bands are included, a warning is issued, but the calculation will
continue (if no other errors occur).
The A bands may also be given as a sequence of labels `#a_labels` (cases 5. and
6.). For example, `bhz 6 E1 H1 2` is the usual four-band BHZ model with 6 and 2
bands taken into account perturbatively below and above. In this case, the order
of the basis in the output is the order of bands given as input. It is possible
to distinguish between the two spin components (e.g., by using input
`bhz 6 E1+ E1- H1+ H1- 2`, but this is not necessary. A band label without + or - implies
the two respective components.
The default value is `bhz 2 2`, i.e., the standard four-band BHZ model. Another
typical setting is `bhz E1 H1 H2` for a six-band model (possibly, `neig 50` is
necessary in order to calculate a sufficient number of bands.
Background
----------
In their seminal paper, Bernevig, Hughes, and Zhang[^BHZ] used an effective four
band Hamiltonian for explaining the transition between the topological and trivial
phases of a HgCdTe/HgTe/HgCdTe quantum well. Essentially, this Hamiltonian is an
approximate form near k = 0 incorporating four subbands close to the Fermi energy.
The procedure of deriving this Hamiltonian from a larger basis is known as
Löwdin partitioning. It follows the recipe:
1. Select the 'primary' subbands ('A bands'). The corresponding eigenstates at k = 0
form the basis of the 'new' Hamiltonian. We define $`H_0`$ as the diagonal matrix of
energies at k = 0. The other bands are the 'B bands'
2. Construct the perturbation $`H_1`$ of matrix elements within the A bands and within
the B bands.
3. Construct the perturbation $`H_2`$ of matrix elements between the A bands and the B bands.
4. Calculate the perturbation up to the desired order in terms of $`H_1`$ and $`H_2`$.
Refer to Winkler's book[^Winkler] for details.
Implementation
--------------
In kdotpy, the perturbation is calculated symbolically, so non-commuting variables (such as
kx and ky) are treated appropriately. We never go beyond second order in the momentum.
References
----------
[^BHZ]:Bernevig, Hughes, and Zhang, [Science **314**, 1757-1761 (2006)](https://doi.org/10.1126/science.1133734).
[^Winkler]:R. Winkler, "Spin-Orbit Coupling Effects in Two-Dimensional Electron and Hole Systems" (Springer-Verlag Berlin Heidelberg, 2003). See Appendix B.