Questaal Home

Transmission for a model step potential (ASA)

This tutorial uses empty spheres in the ASA to construct a simple model of a free electrons encountering a step potential, and uses lmpg’s implementation Landauer-Buttiker theory to calculate the transmission through it. It checks how well the ASA does for this analytically known result. The crystal structure is modeled by a bcc lattice of empty sites.

Also demonstrated here is lmpg’s use of normal modes to generate in the left end layer. This layer is a flat potential, and the bands should be simple parabolas. The machinery of the ASA indeed recovers this simple result, showing that the tight-binding hamiltonian accurately describes free electron bands.

lmpg is documented on this web page.

Table of Contents

To see structure

lmplan step -vnit=0 -vnk1=4 -vpgf=1 --pledit~q

Setup potential for and and execute transmission calculation

lmpg step -vnit=0 -vnk1=4 -vpgf=1
lmstr step -vnit=1 -vnk1=4 -vpgf=5 --no-iactiv > /dev/null
lmpg step -vnit=1 -vnk1=4 -vpgf=5

Make a picture of the transmission for the first k point

$ mcx jzk.step -inc x2==1 -e2 x1 x3 > dat
$ fplot dat
$ open


This tutorial assumes ~/lm is the top-level directory for the Questaal repository, and that Questaal executables are in your path.

For drawing postscript files, this tutorial assumes you are use the Apple open. Substitute your postscript viewer of choice for open.

Getting started

This tutorial starts from input file ctrl.step. It consists of a flat potential with a constant barrier of 0.1 Ry in the middle. There are 3+4+2 layers:

   layers   potential
   1..3     0
   4..7     0.1
   8..9     0

Copy the contents of the box below to file ctrl.step. It is the input (ctrl) file for this system.

# Free Electron Barrier: 0 0 .1 .1 .1 .1 0 0 0
# Adjust width of potential step (variable barrier) to see effect on Fano resonances
% const nk1=4 ef0=0 nz=10 pgf=5 nit=1 barrier=.1
PGF     MODE={pgf} PLATL=0 0 2*ha PLATR=0 0 2*ha GFOPTS= p3
VERS    LM:7 ASA:7
ITER    MIX=B6,w=2,1,b=.2,n=4;A6,w=1,2,n=4 XIPMX=t BETV=.03 NIT={nit} CONVC=1D-6 CONV=0
CONST   a=5.44                 # lattice constant
        pi4b3=4*pi/3           # to construct sphere radius Ra
        ha=.5 npl=9            # plane spacing, number of principal layers
        vola=a^3*ha Ra=(vola/pi4b3)^(1/3) # sphere radius
        bzj=11  # k mesh will be offset around gamma

EWALD   TOL=1d-12 NKDMX=1500 NKRMX=1500
BZ      NKABC={nk1} {nk1} 1 BZJOB=bzj
# for DOS, PGF
% if pgf==1
        EMESH=400/1 1 0 0.5 0.0000001
% endif
% if pgf==5
        EMESH=200/1 1 0.0 0.5 0.00001
% endif
# for bands, PGF
% if pgf==3
        EMESH=400 0 0 1 0
% endif
# for integrated properties, PGF
        EMESH={nz} 10 -.8 {ef0} .5

% const nl=3
STRUC   NBAS=npl*2 NSPEC=1 NL={nl}
        ALAT=a PLAT= 1 0 0   0 1 0   0 0 10.0

# We are dealing with free electrons so
# XA is just an empty sphere with  Z=0
 ATOM=XA Z=0 IDMOD=0 0 0 R=Ra NR=601 A=.02 GRP2=1
 ATOM=XA  POS= 0/2 0/2 0/2 PL=0
 ATOM=XA  POS= 1/2 1/2 1/2 PL=0

 ATOM=XA  POS= 0/2 0/2 2/2 PL=1
 ATOM=XA  POS= 1/2 1/2 3/2 PL=1
 ATOM=XA  POS= 0/2 0/2 4/2 PL=2
 ATOM=XA  POS= 1/2 1/2 5/2 PL=2

 ATOM=XA  POS= 0/2 0/2 6/2 PL=3
 ATOM=XA  POS= 1/2 1/2 7/2 PL=3
 ATOM=XA  POS= 0/2 0/2 8/2 PL=4
 ATOM=XA  POS= 1/2 1/2 9/2 PL=4

 ATOM=XA  POS= 0/2 0/2 10/2 PL=5
 ATOM=XA  POS= 1/2 1/2 11/2 PL=5
 ATOM=XA  POS= 0/2 0/2 12/2 PL=6
 ATOM=XA  POS= 1/2 1/2 13/2 PL=6

 ATOM=XA  POS= 0/2 0/2 14/2 PL=7
 ATOM=XA  POS= 1/2 1/2 15/2 PL=7
 ATOM=XA  POS= 0/2 0/2 16/2 PL=8
 ATOM=XA  POS= 1/2 1/2 17/2 PL=8

        ATOM=XA   V=0
        P=  1.7132985  2.3670680  3.1798926
        Q=  0.0000000  0.0000000  0.0000000
            0.0000000  0.0000000  0.0000000
            0.0000000  0.0000000  0.0000000
        ATOM=XA2  V=0
        ATOM=XA3  V=0
        ATOM=XA4  V=0
        ATOM=XA5  V=0
        ATOM=XA6  V=0
        ATOM=XA7  V={barrier}
        ATOM=XA8  V={barrier}
        ATOM=XA9  V={barrier}
        ATOM=XA10 V={barrier}
        ATOM=XA11 V={barrier}
        ATOM=XA12 V={barrier}
        ATOM=XA13 V={barrier}
        ATOM=XA14 V={barrier}
        ATOM=XA15 V=0
        ATOM=XA16 V=0
        ATOM=XA17 V=0
        ATOM=XA18 V=0
        ATOM=XA19 V=0
        ATOM=XA20 V=0
        ATOM=XA21 V=0
        ATOM=XA22 V=0

  • Lines beginning with  #  are comments.
  • Lines beginning with  %  are not part of the input file, but are directives to the file preprocessor. They do not become part of the preprocessed input file, but can modify its contents.
  • Otherwise lines beginning with a nonblank character denote the start of a category. Categories organize tags into groups, as described in the input file documentation. In particular  %const  declares preprocessor variables that may be parsed later in expressions in curly brackets, e.g.  {barrier}. Lines like the following
    % if pgf==1

    % endif
    will add lines between  % if  and  % endif  to the input stream if the conditional expression ( pgf==1  in this case) evaluates to nonzero.
  • %const nk1=4 … barrier=.1  creates variable nk1 and assigns it to 4; it is later parsed as data associated with  NKABC  in the  BZ   category. Its value can be superseded by a command-line argument,  -vnk1=number. Similarly  barrier  is parsed by  V  in the  START  category. It controls the barrier height in this file.

Category  PGF  supplies information needed specific to the layer code lmpg, in particular the two vector defining the cladding layer.  MODE  specifies broadly what lmpg will calculate.

CONST  supplies other variables, similar to the  %const  preprocessor variables. The difference is that they get assigned after the preprocessor completes, and you can use them in expressions without curly brackets  {…} .

VERS,  IO,  ITER,  OPTIONS,  SYMGRP, are all described in the input file documentation, but are not of great importance in this context.

BZ  controls the mesh of k-points in the plane of the interface; see below

STRUC  defines the lattice structure; it is explained below.

SPEC  specifies the chemical species. In this case there is only one, an empty site with no charge in it.

First, see what structure the ctrl corresponds to:

$ lmplan step -vnit=0 -vnk1=4 -vpgf=1 -vsparse=0 --pledit~q

At the top you should see the following:

 LMPLAN:   nbas = 18  nspec = 1  verb 41,20

 PGFSET: 9 principal layers, 18+2+2 sites.  Normal: 0 0 1
   PL |   0   1   2   3   4   5   6   7   8
 size |   2   2   2   2   2   2   2   2   2
  PLV |   0   0   0   0   0   0   0   0   0

lmplan says that there are 18 atoms in the active region (supplied by  STRUC_NBAS), cladded by left and right end regions with two atoms in each. There are 9 principal layers in the active region, each with two atoms.

The lattice vectors (taken from  STRUC  in this file) are printed out a little farther down.

 LATTIC:  Padding Plat(3) with end principal layers:
   0.000000   0.000000  10.000000 Plat(3) as input
   0.000000   0.000000   1.000000 PlatL:  angle (deg) with Plat(3) = 0
   0.000000   0.000000   1.000000 PlatR:  angle (deg) with Plat(3) = 0
   0.000000   0.000000  14.000000 Plat(3) including double padding

                Plat                                  Qlat
   1.000000   0.000000   0.000000        1.000000   0.000000   0.000000
   0.000000   1.000000   0.000000        0.000000   1.000000   0.000000
   0.000000   0.000000  14.000000        0.000000   0.000000   0.071429

The first two lattice vectors specify the plane defined by periodic boundary conditions. They are the Cartesian axes and in this case.

The third lattice vector, Plat(3), is of length 10, and is cladded by a left layer of length 1 and a right layer of length 1. A second cladding layer is added to converge the electrostatics. (lmpg uses periodic boundary conditions for now to compute the electrostatic Madelung potential. This will change in future.) The active region with doubly cladded layers combine to make a the third lattice vector of the entire cell, with length 14.

Next follows a list of all the atoms and their projection on the axis normal to the periodic plane.

 Gtplan: 22 different planes normal to (    0.000000    0.000000    1.000000)
 Projection of normal onto P1, P2, P3:      0.000000    0.000000   14.000000
   ib      Class       Plane  PL       x-x.h     y-y.h     z-z.h      h       del h
   19(L)   19:XA19        1    0      0.00000   0.00000   0.00000  -1.00000   3.50000
   20(L)   20:XA20        2    0      0.50000   0.50000   0.00000  -0.50000   0.50000
    1       1:XA          3    1      0.00000   0.00000   0.00000   0.00000   0.50000
    2       2:XA2         4    1      0.50000   0.50000   0.00000   0.50000   0.50000
    3       3:XA3         5    2      0.00000   0.00000   0.00000   1.00000   0.50000
    4       4:XA4         6    2      0.50000   0.50000   0.00000   1.50000   0.50000
    5       5:XA5         7    3      0.00000   0.00000   0.00000   2.00000   0.50000
    6       6:XA6         8    3      0.50000   0.50000   0.00000   2.50000   0.50000
    7       7:XA7         9    4      0.00000   0.00000   0.00000   3.00000   0.50000
    8       8:XA8        10    4      0.50000   0.50000   0.00000   3.50000   0.50000
    9       9:XA9        11    5      0.00000   0.00000   0.00000   4.00000   0.50000
   10      10:XA10       12    5      0.50000   0.50000   0.00000   4.50000   0.50000
   11      11:XA11       13    6      0.00000   0.00000   0.00000   5.00000   0.50000
   12      12:XA12       14    6      0.50000   0.50000   0.00000   5.50000   0.50000
   13      13:XA13       15    7      0.00000   0.00000   0.00000   6.00000   0.50000
   14      14:XA14       16    7      0.50000   0.50000   0.00000   6.50000   0.50000
   15      15:XA15       17    8      0.00000   0.00000   0.00000   7.00000   0.50000
   16      16:XA16       18    8      0.50000   0.50000   0.00000   7.50000   0.50000
   17      17:XA17       19    9      0.00000   0.00000   0.00000   8.00000   0.50000
   18      18:XA18       20    9      0.50000   0.50000   0.00000   8.50000   0.50000
   21(R)   21:XA21       21   10      0.00000   0.00000   0.00000   9.00000   0.50000
   22(R)   22:XA22       22   10      0.50000   0.50000   0.00000   9.50000   0.50000

There is exactly one atom/plane, and the hamiltonian is short ranged enough that only two planes are needed to make a principal layer. Atoms 19-20 are the left cladding layer; atoms 21-22 are the right cladding layer.


First set up the potential and tight-binding structure constants. lmpg uses mode 1 for self-consistent calculations. Here we don’t need self-consistency but we do need to set up the potential parameters, even for this flat potential.

The reduced Green’s function is where are the structure constants. can be build from the potential parameters. By running lmpg with 0 iterations it will make the potential parameters without doing any Green’s function calculations. lmstr makes the structure constants.

$ lmpg step -vnit=0 -vnk1=4 -vpgf=1 -vsparse=0
$ lmstr step -vnit=1 -vnk1=4 -vpgf=1 -vsparse=0 --no-iactiv > /dev/null

Finally, calculate the transmission. lmpg calculates transmission in mode 5.

$ lmpg step -vnit=1 -vnk1=4 -vpgf=5 -vsparse=0

The transmission probabilities are written to files jzk.step (resolved by k) and jz.step (integrated over k)

$ fplot -inc x2==1 -ord x3 jz.step
$ open

Three Fano resonances are seen, corresponding to kinetic energy where each of the three k points crosses the step height, 0.1 Ry.

It is perhaps more instructive to look at the transmission from one k point. Use the mcx calculator to extract two columns of data (energy, transmission) from just the first k point and plot it:

$ mcx jzk.step -inc x2==1 -e2 x1 x3 > dat
$ fplot dat
$ open

The transmission switches from 0 to 1 in a smooth way, around 0.15 Ry. The oscillations are the well known Fano resonances.

Square well barrier transmission

The k point mesh

The k mesh was controlled by tags  BZ_NKABC, which controlled the number of divisions along each of the three axes of the lattice vectors (note for lmpg the third number should always be 1); and by  BZJOB, which tells lmpg whether to include Γ as a mesh point, or defined the grid so that it straddles Γ.

The k-mesh is not printed out unless you use a high verbosity. To see the mesh we used in this example, try the following:

$ lmpg step -vnk1=4 --quit=ham --pr60,20

You should see in the output

 BZMESH: 3 irreducible QP from 16 ( 4 4 1 )  shift= T T F
              Qx          Qy          Qz      Multiplicity    Weight
    1      0.125000    0.125000    0.000000         4        0.500000
    2      0.375000    0.125000    0.000000         8        1.000000
    3      0.375000    0.375000    0.000000         4        0.500000

The mesh has 16 points; all but three are symmetry-equivalent to other points. Note there is no point at k=0.

Try another mesh, e.g.

$ lmpg step -vnk1=5 --quit=ham --pr60,20
$ lmpg step -vnk1=4 -vbzj=0 --quit=ham --pr60,20

The first line also generates 16 points but one of them lies at Γ. In this case there are 6 inequivalent points.

The second line generates 25 points (6 inequivalent ones).

Energy bands of left cladding layer

lmpg has a special mode (PGF_MODE=3) to find for the left cladding layer, as if it were fully periodic (as opposed to being semi-infinite) on the third axis. It does this by solving a quadratic eigenvalue problem in the principal layers, which give the normal modes for a given energy. This is the inverse of the usual eigenvalue problem, where is calculated for a given . On the third axis periodic boundary conditions are not imposed, so can be complex. In mode 3, lmpg calculates for a particular energy all of the for a given , and writes out those for which is small.

In the present test case the energy bands are free electrons, with dispersion since in atomic Rydberg units. We can see how well the ASA recovers the exact result.

In the transmission calculation of the preceding section, we singled out the first k-point and will do the same here. The first point is (0.125,0.125,0) in units , so this mode should trace out for which .

Note that ctrl.step has the lines

% if pgf==3
        EMESH=200 0 0 .5 0
% endif

When lmpg is run in mode 3, it uses the energy mesh specified by this tag which is a uniformly spaced set of 200 points between 0 and 0.5 Ry on the real axis.

Run the calculation as follows:

lmpg step -vnit=1 -vnk1=4 -vpgf=3

lmpg It will print to stdout and also file bnds.step, for each energy on the mesh values of for which is real. Note that values it prints out are in units of .

Inspect ctrl.step to see that is 5.44 a.u. The analytic values of it should find should correspond to .

Make a figure comparing the contents of bnds.step to this analytic formula:

$ fplot -s circ:.6 -lt 0 bnds.step -ord '(x1*2*pi/5.44)^2'+0.0416881 -lt 1,bold=3,col=1,0,0 -tp -.5:.5:.01
$ open

It plots circles for in the file, against a continuous red line for the analytic result. They should agree almost exactly. Note that there are higher lying parabolas as well. These correspond to free electron energy bands in the folded zone.

Free electron energy bands

Things to consider

  1. The transmission for the first k point “turns on” at about 0.14 Ry. If the Γ point had been the first mesh point (see k point mesh). The transmission would have turned on at the barrier height, 0.1 Ry. Explain why the transmission turns on at 0.14 Ry in this test.

  2. For energy above a barrier of length and height , the exact result for the transmission probability is given by

    where . Work out numerically what it should be for this case and compare to what was calculated numerically.

Footnotes and references

Implementation of Green’s functions in the ASA context, and its connection to the LMTO-ASA hamiltonian is described in detail in O. K. Andersen, Z. Pawlowska, and O. Jepsen, Phys. Rev. B 34, 5253 (1986).

Implementation of the layer Green’s function technique, including the non-equilibrium capability can be found in S. V. Faleev, et al, Phys. Rev. B71, 195422 (2005).

The original derivation of normal modes used to find the energy band structure of the left cladding layer can be found in Phys. Rev. B39, 923 (1989).

Questions or Comments

If this page has any errors, there is something you think is missing or unclear, or for any other issues, you can create a post here letting us know.