# 3D and 2D reciprocal lattice vectors (Python example)

When I started using Density Functional Theory and, even more, when trying to re-create its results in a meaningful piece of material, like a nanoribbon or a nanowire, a lot of the problems came during geometry creation. This is natural, as DFT is a theory to derive quantities like eigenenergies, in a crystal lattice with periodicity. But when trying to switch to a model that is finite in one or more directions, you have to start a sort of mix and match procedure.

During this time (and assuming you are not the one who writes the software), visualizing vectors is maybe the less useful thing to do. Still, there are cases where you need it in order to get a better understanding of things, like visualizing Weyl points.

# Vector potential with an angle to the periodic direction

One of the most difficult aspects in Tight Binding models is the incorporation of the magnetic field. And that is because a lot of the things that exist in simple analytical expressions in quantum mechanics, change when we are talking about a Tight Binding model, and especially one derived from First Principles using Density Functional Theory as that discussed here.

One of the problems that could emerge is that there exists an angle $\theta$ between the periodic direction and the direction the magnetic field is applied. This differs from the case of the Peierls phase, defined as,

# Nearest neighbour hoppings in TBModels for kwant

TBModels is a python module that belongs to the Z2Pack toolkit, and can be used to constructuct Tight Binding models to be used with Kwant software for transport calculations using the Landauer-Buttinker formula.

When deriving Hamiltonian matrices from first principles with Wannier90 for kwant, TBmodels will restore all the hoppings between adjacent unit cells. This can be proven very time-consuming both when preparing and solving systems with lots of atoms. Often, only nearest neighbor (nn) interactions are needed, especially if next-nearest neighbor (nnn) etc. decay considerably that can be safely ignored.

For example, in my system, WFs 4 and 2 are neighbors. When looking at the Wannier_hr.dat file, I see the following:

0 0 0 4 2 -1.287933 0.000000

[…]

0 1 0 4 2 0.056218 0.000000

[…]

0 2 0 4 2 0.004991 -0.000000

[…]

0 3 0 4 2 0.008744 -0.000000

[…]

0 4 0 4 2 -0.004063 -0.000000

The first three numbers signify the unit cell, which is [0,0,0] in the home, [0,1,0] one hop in the y direction, [0,2,0] two hops in the y direction etc. The next numbers are the WFs (namely 4 and 2) and the last term is the hopping term. In my system, there is no repetition in the z direction, and so only x and y are important. z stays 0.