$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:
yes
orno
- 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 inBrillouin-zone-path = ...
user-defined-sections
as 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_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 toL-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 asband
)
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
orno
- 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 and15
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 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:
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 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:
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
andEdat2
are used instead ofEd
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
andGammac
, 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
andband_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.