$tighten

Tight-binding

The original tighten code that is used inside nextnano³ has been written by Peter Vogl, Walter Schottky Institute, Technische Universität München. It is based on the \(sp^3d^5s^{*}\) method. For details about this method, see e.g. Ref. [JancuPRB1998].

Here is a general template for the tighten code block for the input file, in which the variables should be specified as given in the explanations and examples further below.

!------------------------------------------------------------!
$tighten                                           optional  !
 calculate-tight-binding-tighten    character      required  !
 tighten-method                     character      optional  !
 tight-binding-model                character      optional  !
 destination-directory              character      required  !
 input-directory                    character      optional  !
 filename-material-parameters       character      optional  !
 filename-distance-parameters       character      optional  !
 filename-tighten                   character      optional  !
 filename-k-vectors                 character      optional  !
 k-vectors-sample-type              character      optional  !
 Brillouin-zone-path                character      optional  !
 Brillouin-zone-sections            character      optional  !
 number-of-k-points                 integer        optional  !
 k-direction-from-k-point           double_array   optional  !
 k-direction-to-k-point             double_array   required  !
 power-of-distance-dependence       double         optional  !
 calculate-eigenvectors             character      optional  !
 scale                              double         optional  !
 potential-energy-left              double         optional  !
 potential-energy-right             double         optional  !
 debug-level                        integer        optional  !
                                                            !
 filename-states                    character      optional  !
 calculate-only-lattice-geometry    character      optional  !
 output-Hamiltonian                 character      optional  !
 calculate-k-derivatives            character      optional  !
 tighten-option                     character      optional  !
 number-of-band-for-Fermi-energy    integer        optional  !
 number-of-electron-eigenvalues     integer        optional  !
 number-of-hole-eigenvalues         integer        optional  !
 number-of-band-for-psi             integer        optional  !
 number-of-bands-to-plot            integer        optional  !
 swap-cation-and-anion              character      optional  !

 rescale-to-unstrained-k-points     character      optional  ! for graphene only

!----------------------------
! Pseudopotential algorithm
!----------------------------
 pseudopotential-scaling-factor     double         optional  !
 pseudopotential-form-factors       double_array   optional  !
 G-vectors-included                 integer        optional  !

$end_tighten                                       optional  !
!------------------------------------------------------------!

$atomic-layers is only necessary for the heterostructure tight-binding code but not for the bulk tight-binding code.

!-----------------------------------------------------------!
$atomic-layers                                    optional  !
 layer-number                      integer        required  !
                                                            !
 ion-1                             character      required  !
 ion-1-content                     double         required  !
                                                            !
 ion-2                             character      optional  !
 ion-2-content                     double         optional  !
 $end_atomic-layers                               optional  !
!-----------------------------------------------------------!

Example: $atomic-layers

$atomic-layers

 !--------------------------------------
 ! layer 1: cation
 ! layer 2: anion
 !--------------------------------------
 layer-number = 1   ion-1-name = Ga   ion-1-content = 0.5   ion-2-name = Al   ion-2-content = 0.5   ! Ga/Al cation / alloy content
 layer-number = 2   ion-1-name = As   ion-1-content = 1.0                                           ! As    anion  / alloy content
 layer-number = 3   ion-1-name = Ga   ion-1-content = 1.0                                           ! Ga    cation / alloy content
 layer-number = 4   ion-1-name = As   ion-1-content = 1.0                                           ! As    anion  / alloy content

Note

  • The total number of layers in [001] superlattice direction must be integer multiple of 4 (e.g. 4, 8, 12, …) because a unit cell consists of 4 atomic layers.

  • Convert number of layers (atomic layers) into [nm] units: position = layer-number * LatticeConstant / 4

  • Convert number of molecular layers into [nm] units: position = layer-number * LatticeConstant / 2

  • The lattice constant refers to the constant distance between unit cells in a crystal lattice. A unit cell consists of 2 molecular layers in diamond/zinc blende structure.

  • It must hold: ion-1-content + ion-2-content = 1.0.

Example: $tighten

!-----------------------------------------------------------------!
$tighten                                                          !
 calculate-tight-binding-tighten = yes                            !
 tighten-method                  = rashba2tighten-tighten         !
 tight-binding-model             = Scholz                         ! 'Scholz', 'Sarma'
 destination-directory           = TightBinding/                  ! directory name for tight-binding output. This is where all output goes.
 input-directory                 = ../Syntax/Tight-binding files/ ! directory name for tight-binding input, relative to executable path
!input-directory                 = H:\Tighten\TIGHTEN_nextnano3\  ! directory name for tight-binding input, absolute path
 filename-material-parameters    = TB_material_parameters.in      ! The full filename is then: input-directory/filename-material-parameters
 filename-distance-parameters    = TB_distance_parameters.in      ! The full filename is then: input-directory/filename-distance-parameters
 filename-tighten                = tighten.in                     ! This file is written to destination-directory/ and will be read in again by the tighten algorithm.
                                                                  ! If tighten-method = tighten, the full filename is then: input-directory/filename-tighten
 filename-k-vectors              = k_vectors.dat                  ! This file is written to destination-directory/ and will be read in again by the tighten algorithm.
                                                                  ! If tighten-method = tighten, the full filename is then: input-directory/filename-k-vectors

 k-vectors-sample-type           = band                           !
 Brillouin-zone-path             = 0.5 0.5 0.5                    ! L
                                   0.0 0.0 0.0                    ! Gamma
                                   1.0 0.0 0.0                    ! X
 Brillouin-zone-sections         = 0.5 0.5 0.5                    ! L =>
                                   0.0 0.0 0.0                    ! Gamma

                                   0.0 0.0 0.0                    ! Gamma =>
                                   1.0 0.0 0.0                    ! X
 number-of-k-points              = 1000                           !

 k-direction-from-k-point        =-0.5 0.0 0.5                    ! k vector in units of [2pi/a]
 k-direction-to-k-point          = 0.5 0.0 0.5                    ! k vector in units of [2pi/a]
 power-of-distance-dependence    = 2.0                            !
 calculate-eigenvectors          = no                             ! 'yes' / 'no'
 scale                           = 1.0                            !
 potential-energy-left           = 0.0                            ! [eV]
 potential-energy-right          = 0.0                            ! [eV]
 debug-level                     = 1                              ! '1', '2', '3'

 !-----------------
 ! Now tighten....
 !-----------------
 filename-states                 = states.in                      ! The full filename is then: input-directory/filename-states

 calculate-only-lattice-geometry = no                             ! 'yes' / 'no'
 output-Hamiltonian              = no                             ! 'yes' / 'lower' / 'no'
 calculate-k-derivatives         = no                             ! 'yes' / 'first' / 'second' / 'no'
 tighten-option                  = eigenvalues-only               ! 'eigenvalues-only', 'eigenvectors-and-density', 'eigenvectors-and-g-factor', 'no-eigenvalues'
 number-of-band-for-psi          = 1                              ! used with 2 above, index of 1st of 4 bands w |psi|^2
 number-of-bands-to-plot         = 4                              !

 swap-cation-and-anion           = no                             ! 'no' / 'yes' (default is no. For testing only, cation and anion material parameters of database are exchanged.)


 !----------------------------------------------------------------------------------------------
 ! Pseudopotential algorithm ==> Reference: T. P. Pearsall, Quantum Photonics (2017), Chapter 4
 !----------------------------------------------------------------------------------------------
 pseudopotential-scaling-factor = 1.0                             ! (default is 1.0. scaling factor for potentials (0.0 <= ... <= 1.0)
                                                                  ! 0.0 = no potential, i.e. free electron, 1.0 = full periodic potential, anything in between is a mixture
                                                                  ! ==> Note: This feature can be used to obtain the free-electron dispersion in a zincblende lattice.
 pseudopotential-form-factors   = 0.0 ... 0.136                   ! 10 values:   U0,s   U3,s    U4,s    U8,s    U11,s  U0,a   U3,a    U4,a    U8,a    U11,a
                                                                  ! U0,s and U0,a can be chosen both as 0.0. They just determine the reference energy.
                                                                  ! The subscripts s and a refer to the symmetric and antisymmetric form factors.
                                                                  ! The lattice constant is also needed!!!
 G-vectors-included             = 11                              ! include reciprocal G vectors up to this subscript, e.g. G_0 (0), G_3 (3), G_4 (4), G_8 (8), G_11 (11), G_12 (12); The subscript is the length squared |G|^2.
                                                                  ! G_0  = (0 0 0)    ( 1 vector,  total number of G vectors:  1)
                                                                  ! G_3  = (1 1 1)    ( 8 vectors, total number of G vectors:  9)
                                                                  ! G_4  = (2 0 0)    ( 6 vectors, total number of G vectors: 15)
                                                                  ! G_8  = (2 2 0)    (12 vectors, total number of G vectors: 27)
                                                                  ! G_11 = (3 1 1)    (24 vectors, total number of G vectors: 51)
                                                                  ! G_12 = (2 2 2)    ( 8 vectors, total number of G vectors: 59)
$end_tighten                                                      !
!-----------------------------------------------------------------!

Parametrization

Scholz and Sarma parametrizations are given in the articles [JancuPRB1998] and [Sarma2002]. The different models can be chosen using tight-binding-model.

Note

The standard parameter files are specified as follows

filename-material-parameters = TB_material_parameters.in  ! The full filename is then: input-directory/filename-material-parameters
filename-distance-parameters = TB_distance_parameters.in  ! The full filename is then: input-directory/filename-distance-parameters

and are located under

\nextnano3\Syntax\Tight-binding files\

\nextnano3\Syntax\Tight-binding files\TB_material_parameters.in

\nextnano3\Syntax\Tight-binding files\TB_material_parameters_JancuPRB1998.in

\nextnano3\Syntax\Tight-binding files\TB_material_parameters_SawamuraOME2018.in

Syntax

It is important to select the appropriate flow-scheme needed for tight-binding in $simulation-flow-control, e.g. flow-scheme = 200.

calculate-tight-binding-tighten

do tight-binding calculation with tighten

options:

yes or no

default:

no (no tight-binding calculation)

tighten-method

[rashba2tighten ==> tighten]

options:

rashba2tighten-tighten generate input file for tighten and do tight-binding calculation with tighten

rashba2tighten only generate input file for tighten

tighten tight-binding calculation (tighten only)

tight-binding-model
options:

Scholz (default) (only for III-V materials)

Sarma (for II-VI materials)

destination-directory

directory name for tight-binding output. This is where all output goes.

default:

./

example:

TightBinding/

input-directory

directory name for tight-binding input, relative to executable path.

default:

./

example:

../Syntax/Tight-binding files/

example:

"H:\My tight-binding folder\"

filename-tighten
  • Name of tight-binding input file. It will be generated by rashba2tighten, and read in again by tighten.

  • This file is written to destination-directory and will be read in again by the tighten algorithm.

  • If tighten-method = tighten, the full filename is then: input-directory \ filename-tighten

default:

tighten.in

filename-k-vectors
  • This file contains user input for lattice structure and tight-binding parameters.

  • It will be generated by rashba2tighten, and is read in again by tighten program.

  • If tighten-method = tighten, the full filename is then: input-directory \ filename-k-vectors.

  • This file contains the k vectors for the tight-binding Hamiltonian that will be diagonalized, i.e. for which the eigenenergies and eigenfunctions will be calculated.

  • The columns in this file are:

    REAL(loop_index_over_k)    0.5*(kx+ky)    0.5*(ky+kz)    0.5*(kx+kz)    kx    ky    kz

default:

k_vectors.dat

k-vectors-sample-type

Here one specifies how the k vectors have to be sampled for the bulk or superlattice tight-binding code.

options:

band for band structure plot along some predefined lines (the lines are different for the bulk and superlattice code, see below)

user-defined-path as defined in Brillouin-zone-path = ...

user-defined-sections as defined in Brillouin-zone-sections = ...

For the superlattice tight-binding code the relevant options are:

band

  • for band structure plot along the lines (superlattice code): \(\Gamma\) ==> (along \(\Delta\) to) X = 0.5 G1 ==> (along Z to) M = 0.5 (G1+G2) ==> (along \(\Sigma\) to) \(\Gamma\) ==> Z = 0.5 G3

  • reciprocal primitive vectors:

    G1 = (2pi sqrt(2)/a_lateral ) * (1 0 0) ==> along (1 0 0) in-plane direction

    G2 = (2pi sqrt(2)/a_lateral ) * (0 1 0) ==> along (0 1 0) in-plane direction

    G3 = (2pi /a_vertical) * (0 0 1) ==> along superlattice direction

    a_lateral: in-plane lattice constant

    a_vertical: out-of-plane lattice constant

Some predefined paths are:

k_parallel_100-Gamma-k_superlattice X = -0.5 G1 ==> (along \(\Delta\) to) \(\Gamma\) ==> Z = 0.5 G3

k_parallel_110-Gamma-k_superlattice M = -0.5 (G1+G2) ==> (along \(\Sigma\) to) \(\Gamma\) ==> Z = 0.5 G3

110G 3 values, namely (000), (kx0,0,0), (0,kx0,0), [110] direction and [1-10] direction

100D “100D” - “001D”

two 2 values, namely (000) and the one specified (kx0,ky0,kz0)

cirG circle \(\Gamma\) =(000) with radius kmod=|k0|, surrounding \(\Gamma\) point at distance specified.

xyz number_of_k_points values from ( 0 , 0 , 0 ) ==> (kx0,ky0,kz0)

Lprojected-Gamma-Xprojected

L-Gamma-Xprojected

L-Gamma-X

k1-Gamma-k2

k1-k2

R-Z-Gamma-X-M-A See p. 404, Fig. 8.37 of C. Hamaguchi, Basic Semiconductor Physis, 2nd edition and Fig. 8.29

Gamma-X-R-Z-Gamma-M-A-Gamma See Fig. 8 of [SawamuraOME2018]

Bulk tight-binding code

For the bulk tight-binding code the relevant options are:

band for band structure plot along the lines (bulk code); This is equivalent to L-Gamma-X-W-L-K-Gamma for the bulk tight-binding code.

Some predefined paths are:

L-Gamma-X-W-K-L-W-X-K-Gamma

  • same as [JancuPRB1998] and Fig. 1 of [SawamuraOME2018]

  • The points U and K have the same energies but the path to these points from \(\Gamma\) or X is not equivalent.

  • L-\(\Gamma\) is along \(\Lambda\) axis, i.e. along [1,1,1] direction (L is at \(2\pi/a\) (0.5,0.5,0.5); \(\Gamma\) is at \(2\pi/a\) (0,0,0) ). The distance between these points is \(\sqrt{3}\pi/a\).

  • \(\Gamma\)-X is along \(\Delta\) axis, i.e. along [1,0,0] direction (X is at \(2\pi/a\) (1,0,0) )

  • X-W is along V

  • W-K is along

  • K-L is along

  • L-W is along Q

  • W-X is along V

  • X-K is along

  • K-\(\Gamma\) is along \(\Sigma\)

L-Gamma-X-W-L-K-Gamma e.g. S. Sapra et al., PRB 66, 205202 (2002) (same as band)

L-Gamma-X-K-Gamma from L to \(\Gamma\) to X to K to from L to \(\Gamma\)

L-Gamma-X-U-K-Gamma e.g. Tom P. Pearsall, Quantum Photonics (Band structure plots for pseudopotential calculations) (to do: eliminate the path between U and K)

L-Gamma-X from L to \(\Gamma\) to X

X-Gamma-Z-U'-L-Gamma-K (for strain)

110G 3 values, namely (000) , (kx0,kx0,0) , (-kx0, kx0,0)

110X 3 values, namely (001) , (kx0,kx0,1) , ( kx0,-kx0,1)

110D 3 values, namely (00kz0), (kx0,kx0,kz0), (-kx0, kx0,kz0)

110L 3 values, namely (0.5,0.5,0.5), (0.5+kx0,0.5+kx0,0.5-2kx0), (0.5+kx0,0.5-kx0,0.5)

100G 3 values, namely (000), (kx0,0,0),(0,ky0,0)

two 2 values, namely (000) and (kx0,ky0,kz0)

cirG circle Gamma=(000) in kz=0 plane with radius kmod=|k0|

cirX circle X =(001) in kz=1 plane with radius kmod=|k0|

cirL circle L =(111) in plane lambda*(1,1,-2) + mu*(1,-1,0) with radius kmod=|k0|

xyz number_of_k_points values from (0,0,0) ==> (kx0,ky0,kz0)

xff number_of_k_points values from (0,ky0,kz0) ==> (kx0,ky0,kz0)

ffz number_of_k_points values from (kx0,ky0,0) ==> (kx0,ky0,kz0)

Graphene

For the bulk tight-binding code of graphene the relevant options are:

M'_K_Gamma_M_K'_M' band structure of graphene along the path M’ ==> K ==> Gamma ==> M ==> K’ ==> M’

K_Gamma_M_K' band structure of graphene along the path K ==> Gamma ==> M ==> K’

Brillouin-zone-path

This is a path through the Brillouin zone passing through all these k points in this order. The number of entries must be a multiple of 3.

example:

Brillouin-zone-path = 0.5  0.5  0.5  ! L
                      0.0  0.0  0.0  ! Gamma
                      1.0  0.0  0.0  ! X
                      ...  ...  ...  ! ...
                      ...  ...  ...  ! ...
Brillouin-zone-sections

Here one can specify segments along where to sample the Brillouin zone. The number of entries must be a multiple of 6.

example:

Brillouin-zone-sections = 0.5  0.5  0.5  ! L     ! Section 1: This is a path through the Brillouin zone between these two k points. L ==> Gamma
                          0.0  0.0  0.0  ! Gamma

                          0.0  0.0  0.0  ! Gamma ! Section 2: Then a path through the Brillouin zone between these two k points is taken. Gamma ==> X
                          1.0  0.0  0.0  ! X

                          0.0  0.0  0.0  ! Gamma ! Section 3: Then a path through the Brillouin zone between these two k points is taken. Gamma ==> L
                          0.5  0.5  0.5  ! L

                          ...  ...  ...  !
                          ...  ...  ...  !

Brillouin zone of zincblende semiconductor

In order to understand the location of the k points in the Brillouin zone, the following website is very helpful: http://lampx.tugraz.at/~hadley/ss1/bzones/fcc.php

  • Define Brillouin zone boundaries in units of 2pi/a where a is the lattice constant.

  • The first Brillouin zone comprises those points in reciprocal space that are closer to the origin (i.e. to the Gamma point) than to any other point of the reciprocal lattice.

  • The high symmetry points are called:

    • L [ 1/2 , -1/2 , 1/2 ] ~[1-11]

    • \(\Gamma\) [ 0 , 0 , 0 ] (origin, i.e. center of the first Brillouin zone)

    • X [ 1 , 0 , 0 ] ~[100]

    • U [ 1 , 1/4 , -1/4 ]

    • K [ 0 , 3/4 , 3/4 ]

    • \(\Gamma\) [ 0 , 0 , 0 ]

    • W [ 1 , \(\sqrt{2}/2\) , 0 ]

  • The line from \(\Gamma\) to [X] along the high-symmetry direction [100] is called Delta \(\Delta\).

  • The line from \(\Gamma\) to [L] along the high-symmetry direction [111] is called Lambda \(\Lambda\).

  • The line from [K] to [X] along the high-symmetry direction […] is called Sigma \(\Sigma\). (should be checked)

  • The distance in k space from \(\Gamma\) to [L] is \(\sqrt{3} \pi/a\).

  • If one goes from \(\Gamma\) to [X] along the line \(\Delta\), the cubic symmetry splits the 8 bands into 2 bands.

  • At the zone center \(\Gamma\), the energy value is 8-fold degenerate.

  • At the [X] point, there are two bands, each of which is 4-fold degenerate.

  • If one goes from \(\Gamma\) to [L] along the line \(\Lambda\), the cubic symmetry splits the 8 bands into 4 bands, the upper and lower one is 1-fold degenerate, the two intermediate ones are each 3-fold degenerate.

  • The electronic wave function at the \(\Gamma\) point in the center of the Brillouin zone sees the maximum symmetry of the fcc lattice.

  • There are 48 operations (rotations, reflections, inversion) that leave the structure invariant.

    number-of-k-points

    number of k vectors for which to calculate eigenvalues (only relevant for band, k_parallel_100-Gamma-k_superlattice, k_parallel_100-Gamma-k_superlattice, xyz so far)

    example:

    1000

With the following flags one can specify a k vector in the Brillouin zone.

k-direction-to-k-point   =  0.5   0.0   0.5  ! for superlattice tight-binding code: k = (kx,ky,kSL) vector in dimensionless units [2sqrt(2)pi/alateral], [2pi/avertical]
k-direction-to-k-point   =  0.01  0.01  0.0  ! for bulk         tight-binding code: k = (kx,ky,kz)  vector in units of 2pi/(kx0/alateral,ky0/alateral,kz0/avertical)

The superlattice k.p dispersion can be calculated along an arbitrary line from the k point k-direction-from-k-point to the Gamma point and then to the k point k-direction-to-k-point. Either k-direction-from-k-point or k-direction-to-k-point or both can be zero. If both are zero, then only the Gamma point is calculated. k-direction-from-k-point can be omitted.

You can use this flag to specify a customized plot for the E(k) dispersion, e.g. along a line from [110] to the Gamma point and then to the [001] point.

k-direction-from-k-point = -0.5  -0.5   0.0  ! k vector in units of [2pi/a]
k-direction-to-k-point   =  0.0   0.0   0.0  ! k vector in units of [2pi/a]
power-of-distance-dependence
default:

2.0

\(t_i = t_0 (d_0/d_i)^\eta\)

It seems that this value is not used inside the code, unscaled matrix elements are used.

calculate-eigenvectors
value:

yes or no

default:

no calculate eigenvalues only

scale
default:

1.0

example:

5.0

scale output of wave functions and \(|\psi|^2\) to improve visualization of \(|\psi|^2\) in the band edges plot

potential-energy-left
default:

0.0 [eV]

Add potential energy to band edges (value at first layer).

potential-energy-right
default:

0.0 [eV]

Add potential energy to band edges (value at last layer). The values in between are interpolated for each layer. This way an electrostatic potential or electric field can be included.

debug-level
default:

1

get reduced standard output, this is appropriate to generate an input file if unit cell has many atoms. Note: Only first element of star is printed.

options:
  • 2 get very detailed output, excluding Hamiltonian

  • 3 get very detailed output, including Hamiltonian to stdio

filename-states
default:

states.in

The full filename is then: input-directory \ filename-states

This file is located in the folder: \nextnano3\Syntax\Tight-binding files\

For more information on this input file, see documentation further below.

calculate-only-lattice-geometry
default:

no

option:

yes Calculate only lattice geometry but not tight-binding Hamiltonian.

output-Hamiltonian
default:

no Hamiltonian matrix not written to file

options:
  • yes whole Hamilton matrix is written column wise

  • lower lower triangle is written row wise

calculate-k-derivatives
default:

no do not calculate k-derivatives of H(k)

options:
  • yes calculate first and second

  • first calculate d/dk H(k)

  • second calculate d²/dk_ik_j H(k)

Note

ham_1deriv_output_file

ham_2deriv_output_file

… files that contain nonzero matrix elements of first (and second) k-derivative of H in same format as ham_output_file,

but only SPIN_UP/SPIN_UP part since SPIN-DN/SPIN-DN is identical and SPIN-DN/SPIN-UP=0.

der1.dat: ham_1deriv_output_file = 'der1.dat'

der2.dat: ham_2deriv_output_file = 'der2.dat'

tighten-option
default:

eigenvalues-only calculate only eigenvalues (eigval)

options:
  • eigenvectors-and-density calculate eigenvectors and density of tight-binding Hamiltonian (ev+dens)

  • eigenvectors-and-g-factor calculate eigenvectors and g-factor (ev+g)

  • no-eigenvalues no diagonalization

number-of-band-for-Fermi-energy
range:

\(\mathbb{N_0}\)

default:

0 i.e. highest valence band number

example:

8

zero of energy is taken at this band for Gamma point (or first k vector)

This specifier only applies to the bulk tight-binding algorithm and the pseudopotential code.

number-of-electron-eigenvalues
range:

\(\mathbb{N}\)

default:

11

number-of-electron-eigenvalues
range:

\(\mathbb{N}\)

default:

15

This specifier only applies to the superlattice tight-binding algorithm.

Include 11 electron and 15 hole energies in E(k) energy dispersion plot.

number-of-band-for-psi
default:

1

used with 2 above, index of first of 4 bands with \(|\psi|^2\) (actually 8 bands due to spin degeneracy)

Note

  • If ieigenvalues_flag = 2, wave functions are calculated at Gamma for every second of number-of-bands-to-plot/2 consecutive bands, starting with number-of-band-for-psi, where -1 and 0 = top of valence band, 1 and 2 = first conduction band. Choose an odd number.

  • If ieigenvalues_flag = 3, g-factor tensor for this plus following (nondegenerate) band is calculated

number-of-bands-to-plot
default:

4

This is the number of bands that are plotted in the files

  • Gamma_psi_squared.dat \(|\psi|^2\), … are not shifted

  • Gamma_psi_squared_shift.dat \(|\psi|^2\), … are shifted by their eigenenergies with respect to the energy dispersion plot

  • Gamma_psi_squared_shift_bandedges.dat \(|\psi|^2\), … are shifted by their eigenenergies with respect to the band edges plot

starting from the band indicated with number-of-band-for-psi.

This number does not take into account spin. E.g. if you specify 4, the program will print out 8 bands, i.e. twice as much, i.e. spin is taken into account automatically by the program.

rescale-to-unstrained-k-points
default:

no Do not rescale band structure to unstrained k points. It can be useful to keep the high symmetry points fixed on the graph in order to compare different strains.

option:

yes Rescale band structure to unstrained k points. This moves the high symmetry points if strained.

This flag is only relevant for the tight-binding code of graphene.

Required input files

Material parameters

TB_material_parameters.in: located in folder nextnano3\Syntax\Tight-binding files\TB_material_parameters.in

Material parameters that also occur in the normal nextnano database:

c11 c12 elastic constants \(10^{-2}\) [GPa]

a lattice constant [Angstrom]

... tight binding parameters [eV]

Tight-binding material parameters

nc na number of electrons on cation and number of electrons on anion (e.g. 3 for Ga and 5 for As in GaAs; 4 for Si)

Esc Epc Esec Edct2 Edce orbital energies [eV], e.g. Esc is s-orbital energy of cation

Esa Epa Esea Edat2 Edae orbital energies [eV], e.g. Esa is s-orbital energy of anion

(Edct2 and Edat2 are used instead of Ed to allow for d-orbital splitting)

Dav absolute deformation potential [eV]; difference in absolute valence band deformation potentials (in eV) between intrinsic Scholz values and Van de Walle/Needs values. Inclusion of this term guarantees that calculated av agrees with Van de Walle/Needs.

sss scpas pcsas pps ppp seses secsas scseas secpas pcseas scdas dcsas pcdas dcpas pcdap dcpap secdas dcseas dds ddp ddd

\(s s \sigma\), \(s_c p_a \sigma\), \(s_a p_c \sigma\), \(p p \sigma\), \(p p \pi\), \(s^* s^* \sigma\), \(s^*_c s_a \sigma\), \(s^*_a s_c \sigma\), \(s^*_c p_a \sigma\), \(s^*_a p_c \sigma\), \(s_c d_a \sigma\), \(s_a d_c \sigma\), \(p_c d_a \sigma\), \(p_a d_c \sigma\), \(p_c d_a \pi\), \(p_a d_c \pi\), \(s^*_c d_a \sigma\), \(s^*_a d_c \sigma\), \(d d \sigma\), \(d d \pi\), \(d d \delta\)

so_p_c so_p_a onsite and intersite spin-orbit couplings

so_d_c so_d_a

so_ppca

Gammav energy of unstrained top of valence band edge at Gamma point;

Gammac energy of unstrained conduction band edge minimum at Gamma point [eV]

Both, Gammav and Gammac, are with respect to an absolute energy scale (crude estimate only).

The last two values are not used for the tight-binding calculation. However, these are the relevant values that are contained in the output files band_edges_nm.dat and band_edges.dat. They are the values of the unstrained band edges on an absolute energy scale. They are crude estimates only. As already said, they are not input to the actual tight-binding calculation but they are similar to the results of a bulk tight-binding calculation.

The empirical tight-binding material parameters for Ge are the ones of [JancuPRB1998], Table II with the following exceptions: \(E_s\), \(E_p\), \(E_d\), \(E_{s^*}\) are shifted by +1.7683 eV.

Distance parameters

TB_distance_parameters.in: located in folder nextnano3\Syntax\Tight-binding files\TB_distance_parameters.in

These parameters are relevant for strained materials or for alloys.

nsss nscpas npcsas npps nppp nseses nsecsas nscseas nsecpas npcseas nscdas ndcsas npcdas ndcpas npcdap ndcpap nsecdas ndcseas ndds nddp nddd

bdeff strain dependent shift of onsite-d energies in [eV] (deformation potential). It is chosen to be identical for cation and anion.

bdeff = bd * ed_Scholz

States

states.in: located in folder nextnano3\Syntax\Tight-binding files\states.in

This noneditable namelist file (namelist is a Fortran feature) will be read in by the tighten program and contains the following information:

&state_description

 number_state_ref   = 10

 state_ref_name(1)  = 's'
 state_ref_name(2)  = 'px'
 state_ref_name(3)  = 'py'
 state_ref_name(4)  = 'pz'
 state_ref_name(5)  = 'se'
 state_ref_name(6)  = 'dxy'
 state_ref_name(7)  = 'dyz'
 state_ref_name(8)  = 'dzx'
 state_ref_name(9)  = 'dx2y2'
 state_ref_name(10) = 'dz2r2'

 number_coup_ref    = 21

 coup_ref_name(1)   = 'sss'
 coup_ref_name(2)   = 'sps'
 coup_ref_name(3)   = 'pss'
 coup_ref_name(4)   = 'pps'
 coup_ref_name(5)   = 'ppp'
 coup_ref_name(6)   = 'seses'
 coup_ref_name(7)   = 'sess'
 coup_ref_name(8)   = 'sses'
 coup_ref_name(9)   = 'seps'
 coup_ref_name(10)  = 'pses'
 coup_ref_name(11)  = 'sds'
 coup_ref_name(12)  = 'dss'
 coup_ref_name(13)  = 'pds'
 coup_ref_name(14)  = 'dps'
 coup_ref_name(15)  = 'pdp'
 coup_ref_name(16)  = 'dpp'
 coup_ref_name(17)  = 'seds'
 coup_ref_name(18)  = 'dses'
 coup_ref_name(19)  = 'dds'
 coup_ref_name(20)  = 'ddp'
 coup_ref_name(21)  = 'ddd'

/

Generated output files

  • k_vectors.dat

  • tighten.in

These are the input files for tighten.

  • out_structure.txt

  • band_edges_unstrained_nm.dat Gamma conduction band edge and topmost valence band edge (units: position [nm], energy [eV], band gap [eV])

  • band_edges_unstrained_layers.dat Gamma conduction band edge and topmost valence band edge (units: atomic layer , energy [eV])

  • E(k)_tighten_new_bandedges.dat energy dispersion E(k) where the x axis is either in units of [1/Angstrom] or integer numbers indicating the number of k points (not shifted, energies correspond to tight-binding material parameters in input file)

  • E(k)_tighten_new.dat energy dispersion E(k) where the x axis is either in units of [1/Angstrom] or integer numbers indicating the number of k points (shifted so that topmost valence band edge equals 0 eV)

  • E(k)_tighten.dat energy dispersion E(k) (original output) (shifted so that topmost valence band edge equals 0 eV)

Output files of tighten (bulk)

E(k)_tighten_bulk_new_noshift.dat energy dispersion E(k) (original output) (not shifted, energies correspond to tight-binding material parameters in input file)

E(k)_tighten_bulk_new.dat energy dispersion E(k) (shifted so that valence band edge of first k vector equals 0 eV)

E(k)_tighten_bulk.dat energy dispersion E(k) (original output) (shifted so that valence band edge of Gamma k vector equals 0 eV (default) (shifted so that valence band edge of first k vector equals 0 eV (debug-level = 10)

If k-vectors-sample-type = xyz, then the \(|\bf{k}|\) vectors are in units of [1/nm] of the files out_ek_tighten_bulk_new*.dat.

hamtightenout_bulk.txt

driver_file_sl.in

'hamtightenout.dat': ham_output_file = 'hamout.dat'

Strain

$simulation-flow-control
 ...
 strain-calculation = homogeneous-strain

Include biaxial strain for superlattice tighten code.

strain-calculation = no-strain

No strain is considered for superlattice tighten code, i.e. strain tensor is zero and each layer has equilibrium lattice constant in growth direction.

In any case, the lattice constant in the lateral growth direction is the one of the substrate material specified in

$domain-ccordinates
 ...
 pseudomorphic-on = GaAs

for both, homogeneous-strain and no-strain. Without strain, the vertical lattice constant is the equilibrium lattice constant of the layer material.