$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 / 4Convert number of molecular layers into [nm] units: position =
layer-number* LatticeConstant / 2The 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:
yesorno- default:
no(no tight-binding calculation)- tighten-method
[rashba2tighten
==>tighten]
- options:
rashba2tighten-tightengenerate input file for tighten and do tight-binding calculation with tighten
rashba2tightenonly generate input file for tighten
tightentight-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-directoryand 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:
bandfor band structure plot along some predefined lines (the lines are different for the bulk and superlattice code, see below)
user-defined-pathas defined inBrillouin-zone-path = ...
user-defined-sectionsas defined inBrillouin-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_superlatticeX = -0.5 G1 ==> (along \(\Delta\) to) \(\Gamma\) ==> Z = 0.5 G3
k_parallel_110-Gamma-k_superlatticeM = -0.5 (G1+G2) ==> (along \(\Sigma\) to) \(\Gamma\) ==> Z = 0.5 G3
110G3 values, namely (000), (kx0,0,0), (0,kx0,0), [110] direction and [1-10] direction
100D“100D” - “001D”
two2 values, namely (000) and the one specified (kx0,ky0,kz0)
cirGcircle \(\Gamma\) =(000) with radius kmod=|k0|, surrounding \(\Gamma\) point at distance specified.
xyznumber_of_k_pointsvalues 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-ASee p. 404, Fig. 8.37 of C. Hamaguchi, Basic Semiconductor Physis, 2nd edition and Fig. 8.29
Gamma-X-R-Z-Gamma-M-A-GammaSee Fig. 8 of [SawamuraOME2018]Bulk tight-binding code
For the bulk tight-binding code the relevant options are:
bandfor band structure plot along the lines (bulk code); This is equivalent toL-Gamma-X-W-L-K-Gammafor 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-Gammae.g. S. Sapra et al., PRB 66, 205202 (2002) (same asband)
L-Gamma-X-K-Gammafrom L to \(\Gamma\) to X to K to from L to \(\Gamma\)
L-Gamma-X-U-K-Gammae.g. Tom P. Pearsall, Quantum Photonics (Band structure plots for pseudopotential calculations) (to do: eliminate the path between U and K)
L-Gamma-Xfrom L to \(\Gamma\) to X
X-Gamma-Z-U'-L-Gamma-K(for strain)
110G3 values, namely (000) , (kx0,kx0,0) , (-kx0, kx0,0)
110X3 values, namely (001) , (kx0,kx0,1) , ( kx0,-kx0,1)
110D3 values, namely (00kz0), (kx0,kx0,kz0), (-kx0, kx0,kz0)
110L3 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)
100G3 values, namely (000), (kx0,0,0),(0,ky0,0)
two2 values, namely (000) and (kx0,ky0,kz0)
cirGcircle Gamma=(000) in kz=0 plane with radius kmod=|k0|
cirXcircle X =(001) in kz=1 plane with radius kmod=|k0|
cirLcircle L =(111) in plane lambda*(1,1,-2) + mu*(1,-1,0) with radius kmod=|k0|
xyznumber_of_k_pointsvalues from (0,0,0) ==> (kx0,ky0,kz0)
xffnumber_of_k_pointsvalues from (0,ky0,kz0) ==> (kx0,ky0,kz0)
ffznumber_of_k_pointsvalues 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,xyzso 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:
yesorno- default:
nocalculate eigenvalues only- scale
- default:
1.0- example:
5.0scale 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:
1get 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:
2get very detailed output, excluding Hamiltonian
3get very detailed output, including Hamiltonian to stdio- filename-states
- default:
states.inThe full filename is then:
input-directory\filename-statesThis 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:
yesCalculate only lattice geometry but not tight-binding Hamiltonian.- output-Hamiltonian
- default:
noHamiltonian matrix not written to file- options:
yeswhole Hamilton matrix is written column wise
lowerlower triangle is written row wise- calculate-k-derivatives
- default:
nodo not calculate k-derivatives of H(k)- options:
yescalculate first and second
firstcalculate d/dk H(k)
secondcalculate 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-onlycalculate only eigenvalues (eigval)- options:
eigenvectors-and-densitycalculate eigenvectors and density of tight-binding Hamiltonian (ev+dens)
eigenvectors-and-g-factorcalculate eigenvectors and g-factor (ev+g)
no-eigenvaluesno diagonalization- number-of-band-for-Fermi-energy
- range:
\(\mathbb{N_0}\)
- default:
0i.e. highest valence band number- example:
8zero 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:
15This specifier only applies to the superlattice tight-binding algorithm.
Include
11electron and15hole energies in E(k) energy dispersion plot.- number-of-band-for-psi
- default:
1used 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 ofnumber-of-bands-to-plot/2 consecutive bands, starting withnumber-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:
4This 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 plotstarting 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:
noDo 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:
yesRescale 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:
c11c12elastic constants \(10^{-2}\) [GPa]
alattice constant [Angstrom]
...tight binding parameters [eV]
Tight-binding material parameters
ncnanumber of electrons on cation and number of electrons on anion (e.g. 3 for Ga and 5 for As in GaAs; 4 for Si)
EscEpcEsecEdct2Edceorbital energies [eV], e.g.Escis s-orbital energy of cation
EsaEpaEseaEdat2Edaeorbital energies [eV], e.g.Esais s-orbital energy of anion(
Edct2andEdat2are used instead ofEdto allow for d-orbital splitting)
Davabsolute 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.
sssscpaspcsasppspppsesessecsasscseassecpaspcseasscdasdcsaspcdasdcpaspcdapdcpapsecdasdcseasddsddpddd\(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_cso_p_aonsite and intersite spin-orbit couplings
so_d_cso_d_a
so_ppca
Gammavenergy of unstrained top of valence band edge at Gamma point;
Gammacenergy of unstrained conduction band edge minimum at Gamma point [eV]Both,
GammavandGammac, 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.datandband_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.dattighten.in
These are the input files for tighten.
out_structure.txtband_edges_unstrained_nm.datGamma conduction band edge and topmost valence band edge (units: position [nm], energy [eV], band gap [eV])band_edges_unstrained_layers.datGamma conduction band edge and topmost valence band edge (units: atomic layer , energy [eV])E(k)_tighten_new_bandedges.datenergy 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.datenergy 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.datenergy 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.