Hello,

I am having significant trouble understanding which are the units of measurement of the energy and the wavenumber when using kwant *and when using different lattice constants*.

I am trying to reproduce the results of the (probably well-known paper) "Scalable Tight Binding Model for Graphene", Phys. Rev. Lett. 114, 036601 (2015).

I have read the answers to another question (https://www.mail-archive.com/kwant-discuss@kwant-project.org/msg00069.html) but I simply cannot understand which is the actual unit of measurement used internally so I can translate those to nanometers and electronVolts. Even though I have realized how I can translate internal wavenumbers into nanometers^{-1}, I cannot understand how *and why* to use properly kwants.physics.Bands().

Here is the minimal code that captures my problems:
```python
import kwant
from matplotlib import pyplot

a = 0.142 #inter-carbon distance in nm
lc = sqrt(3)*a #lattice constant in nm
t = 2.8 #hopping in eV

W = 200 #width in UNSCALED lattice constants, as if sf=1. (multiply by lc to get it in nm)

def bandstructure(sf):  #sf = scaling factor

    glat = kwant.lattice.honeycomb(sf) #sf*la for lattice constant in nm
    A, B = glat.sublattices
    # create an armchair lead
    def leadshape(pos): #set leads width
            x, y = pos
            return (0 <= x < W)

    sym_lead_vertical = kwant.TranslationalSymmetry(glat.vec((-1*sf,2*sf)))
    armchair = kwant.Builder(sym_lead_vertical)
    armchair[glat.shape(leadshape, (0, 0))] = 0  #onsite energy is 0 for Dirac
    armchair[glat.neighbors()] = -1/sf   #hopping. use t/sf for value in eV

    #function that gives the bands (energies) at a given wave vector:
    bands = kwant.physics.Bands(armchair.finalized())

    #The wavenumbers are measured in units of 1/lattice_const.
    #that is why they only need to go from -pi to pi (Bloch):
    wavenums = np.linspace(-pi/10 ,pi/10, 41)

    #I now want to get the energies, measured in eV. How????
    energies = [bands(k/sf)*(t/sf) for k in wavenums] #???? doesn't work no matter what I change!

    pyplot.figure(figsize=(6,8))

    # Rescale the wavevectors so that it is measured in nm instead of lattice constants
    wavenums /= sf*lc #this works correctly

    # plot dirac dispersion first:
    pyplot.plot(wavenums, (3/2)*a*t*wavenums, color="black") #this works correctly!

    # The band structure does not work.
    pyplot.plot(wavenums, energies)
    pyplot.xlabel(r"Wavevector [nm$^{-1}$]", family = "serif")
    pyplot.ylabel(r"Energy [eV]", family = "serif")
    pyplot.xlim(-0.4, 0.4)
    pyplot.ylim(-0.2, 0.2)

bandstructure(1)

```

From previous answers, I cannot understand what corresponds to the "the distance units that I have chosen". I have chosen here the distance units such that `lc -> 1`. When I am creating the lattice with the command honeycomb(sf), are my distance units still `lc` or are they now `lc*sf` ?

Notice that the above `bandstructure()` should give similar results independently of scaling factor (see the paper for details on why). Therefore, the only problem that may remain is the scaling of energy and/or wavenumber. Let me summarize my questions as clearly as possible, to help you giving me an easy answer:

1. Which is the unit of measurement of length? I always thought that it
   is simply `1`! If I write `honeycomb(32.123)` is the unit of
   measurement of length still `1` or does it become 32.123,
   irrespectively of how many nanometers 1 actually corresponds to?
   When I get the lattice sites, I know that they are assumed (i,j)
   TIMES the lattice constant, so the actual unit of distance  is still
   (i,j)*32.123*1, and `1` corresponds to whatever units I choose.
2. Now, is the wavenumber represented in units of `1`, or in units of
   1/32.123? If I have a value of `k=3` and my `1` corresponds to 1
   nanometer, does this value of `k` correspond to `3`nm^{-1} or to
   `3/32.123` nm^{-1} ?
3. What is the input given to the function `bands(k)`, obtained from
   `kwant.physics.Bands` ? Does it have to *always be within the
   interval -pi/2 to pi/2 *, meaning that it is always expected in
   units of 1/lattice const. /irrespectively of which are the units of
   measurement of the wavenumber?
   /
4. What is the unit of energy, that is returned by the function
   `bands()`? Does it depend on the value that I give to the hopping,
   or it depends on how I define `1` ? E.g. when I write
   `armchair[glat.neighbors()] = -1/sf` is the unit of energy
   internally defined to be `1` or `1/sf` ??? It cannot possibly be the
   latter, because I could also assign some number to the on-site
   potential. So it must be the first, right? But then, how do you
   answer my question number 4:
   //
5. Given that I know the length of the lattice constant in nanometers,
   and I know the energy of the hopping value in eV, how can I get the
   bands in eV versus nm^{-1} ?

I would also like to comment that the documentation string of `bands()` would solve all of these questions by only having 2 more sentences in it. The sentences that answer questions 2-3-4 would probably be enough. I am sure that the answers to my questions are almost trivial, but after many hours of trying to understand what is going on, I am not so confused that I had to ask. So, sorry in advance for the very easy question!

Best,
George Datseris

MPI For Dynamics & Self-Organization

Reply via email to