$tighten

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 sp3d5s* method. For details about this method, see e.g. 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.5d0   ion-2-name = Al   ion-2-content = 0.5d0   ! Ga/Al cation / alloy content
layer-number = 2   ion-1-name = As   ion-1-content = 1.0d0                                             ! As    anion  / alloy content
layer-number = 3   ion-1-name = Ga   ion-1-content = 1.0d0                                             ! Ga    cation / alloy content
layer-number = 4   ion-1-name = As   ion-1-content = 1.0d0                                             ! 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.5d0 0.5d0 0.5d0              ! L
                                0.0d0 0.0d0 0.0d0              ! Gamma
                                1.0d0 0.0d0 0.0d0              ! X
Brillouin-zone-sections         = 0.5d0 0.5d0 0.5d0              ! L =>
                                0.0d0 0.0d0 0.0d0              ! Gamma

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

k-direction-from-k-point        =-0.5d0 0.0d0 0.5d0              ! k vector in units of [2pi/a]
k-direction-to-k-point          = 0.5d0 0.0d0 0.5d0              ! k vector in units of [2pi/a]
power-of-distance-dependence    = 2.0d0                          !
calculate-eigenvectors          = no                             ! 'yes' / 'no'
scale                           = 1d0                            !
potential-energy-left           = 0d0                            ! [eV]
potential-energy-right          = 0d0                            ! [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. G0 (0), G3 (3), G4 (4), G8 (8), G11 (11), G12 (12); The subscript is the length squared |G|2.
                                                                ! G0  = (0 0 0)    (1 vector,   total number of G vectors:  1)
                                                                ! G3  = (1 1 1)    (8 vectors,  total number of G vectors:  9)
                                                                ! G4  = (2 0 0)    (6 vectors,  total number of G vectors: 15)
                                                                ! G8  = (2 2 0)    (12 vectors, total number of G vectors: 27)
                                                                ! G11 = (3 1 1)    (24 vectors, total number of G vectors:51)
                                                                ! G12 = (2 2 2)    (8 vectors,   total number of G vectors:59))
$end_tighten                                                      !
!-----------------------------------------------------------------!

Note

The standard parameter files which 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

are located under

C:\Program Files (x86)\nextnano\nextnano3\Syntax\Tight-binding files\

Parametrization

Scholz and Sarma parametrizations are given in the articles JancuPRB1998 and Sarma2002.

Syntax

calculate-tight-binding-tighten

do tight-binding calculation with tighten

options

yes or no

default

no (no tight-binding calculation)

tighten-method
options

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

tight-binding-model
options

Scholz (default) (only for III-V materials) Sarma (for II-VI materials)

destionation-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/

filename-tighten
  • Name of tight-binding input file (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 read in again by tighten program.

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

default

k_vectors.dat

k-vectors-sample-type
  • 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.5d0*(ky+kz)    0.5d0*(kx+kz)    kx    ky    kz

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 A. Sawamura et al., Optical Materials Express 8, 1569 (2018)

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

band for band structure plot along the lines (bulk code): same as 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 A. Sawamura et al., Optical Materials Express 8, 1569 (2018)

  • (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 2pi/a (0.5,0.5,0.5); Gamma is at 2pi/a (0,0,0) ). The distance between these points is pi/a sqrt(3).

  • Gamma-X is along Delta axis, i.e. along [1,0,0] direction (X is at 2pi/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

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

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)

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.5d0 0.5d0 0.5d0  ! L
                      0.0d0 0.0d0 0.0d0  ! Gamma
                      1.0d0 0.0d0 0.0d0  ! X
                      ...   ...   ...    ! ...
                      ...   ...   ...    ! ...
Brillouin-zone-sections
example

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

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

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

                        ...   ...   ...    ! The number of entries must be a multiple of 6.
                        ...   ...   ...    !

Brillouin zone of zincblende semiconductor

  • 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 1st 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.

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

  • The line from [K] to [X] along the high-symmetry direction […] is called 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 with can specify a k vector in the Brillouin zone.

k-direction-to-k-point          = 0.5d0  0.0d0  0.5d0        ! 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.01d0 0.01d0 0.00d0       ! 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

2d0

ti = t0*(d0/di)**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

scale
default

1d0

example

5d0

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

potential-energy-left
default

0d0 [eV]

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

potential-energy-right
default

0d0 [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: C:\Program Files (x86)\nextnano\nextnano3\Syntax\Tight-binding files\

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²/dkikj H(k)

Note

ham_1deriv_output_file

ham_2deriv_output_file

… files that contain nonzero matrix elements of 1st (and 2nd) 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 1st of 4 bands w \(|\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 = 1st 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.#

Necessary input files

Material parameters

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 scpasigma sapcsigma p p sigma p p pi s*s*sigma s*csasigma s*ascsigma s*cpasigma s*apcsigma scdasigma sadcsigma pcdasigma padcsigma pcdapi padcpi s*cdasigma s*adcsigma 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 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: Es, Ep, Ed, Es* are shifted by +1.7683 eV.

Distance parameters

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

This noneditable namelist file 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_vector.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 |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.

(Internally, strain001V and the trace of the strain tensor are set to zero. The vertical lattice constant is the equilibrium lattice constant of the layer material.)