[ Home ] [ News ] [ Contact ] [ Search ] tighten

 ==> Download Software
 nextnano³ documentation

 Copyright notice
 About us
 Useful Links
 Publications
 * password protected

 

 
Up
 

 

Tight binding

!------------------------------------------------------------!
$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  !
 number-of-k-points                 integer        optional  !
 k-vector                           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-band-for-psi             integer        optional  !
 number-of-bands-to-plot            integer        optional  !
$end_tighten                                       optional  !
!------------------------------------------------------------!

 

 

!------------------------------------------------------------!
$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

 
  !--------------------------------------
  ! 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.
 

 

Syntax

rashba2tighten ==> tighten

flow-scheme = 200

 

Example

!------------------------------------------------------------!
$tighten                                                     !
 calculate-tight-binding-tighten = yes                       !
 tighten-method                  = rashba2tighten-tighten    !
 tight-binding-model             = Scholz                    ! 'Scholz', 'Sarma'
 destination-directory           = TightBinding/
 input-directory                 = H:\Tighten_for_Stefan\TIGHTEN_nextnano3\
!input-directory                 = tighten_input/
 filename-material-parameters    = TBMaterialParameters_Scholz.in
 filename-distance-parameters    = TBDistanceParameters_Scholz.in
 filename-tighten                = tighten.in
 filename-k-vectors              = k_vectors.dat             ! ==>
will be read in by tighten program
 k-vectors-sample-type           = band                      !
 number-of-k-points              = 1000                      !
 k-vector                        = 0.5d0 0.0d0 0.5d0         ! [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
 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                         !
$end_tighten                                                 !
!------------------------------------------------------------!

 

 

Syntax

 calculate-tight-binding-tighten = yes      ! do tight-binding calculation with tighten
                                 = no       !
no tight-binding calculation (default)
 

 tighten-method                  = 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             = Scholz                 ! (default) (only for III-V materials)
                                
= Sarma                  !
                    (for II-VI materials)

Scholz parameterization
  
Empirical spds* tight-binding calculation for cubic semiconductors: General method and material parameters
   J.-M. Jancu, R. Scholz, F. Beltram, F. Bassani
   Phys. Rev. B 57, 6493 (1998)

Sarma parameterization
  
Realistic tight-binding model for the electronic structure of II-VI semiconductors
   S. Sapra, N. Shanthi, D. D. Sarma
   Phys. Rev. B 66, 205202 (2002)
 

 destination-directory           = TightBinding/          ! directory name for tight-binding output
                                 =                        !
(default)
 

 input-directory                 = input_files/TightBinding/   ! directory name for tight-binding input, relative to executable path.
                                 = H:\tighten_input\           !
                                 = "H:\My tighten input\"      !
if a blank is contained in the folder name, use "".
                                 = ../tighten_input/

 filename-material-parameters    = TB_material_parameters.in
 filename-distance-parameters    = TB_distance_parameters.in
For more information on these input files, see documentation further below.
 

 filename-tighten                = tighten.in                 ! name of tight-binding input file (will be generated by rashba2tighten, and read in again by tighten)
'tighten.in'  
(default)
This file contains user input for lattice structure and tight-binding parameters.
 

 filename-k-vectors              = k_vectors.dat              ! ==> will be generated by rashba2tighten, and read in again by tighten program
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.
'k_vectors.in' (default)
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
 

 k-vectors-sample-type           = band                       ! for bandstructure plot along the lines: 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

                                 = 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)
Here one specifies how the k vectors have to be sampled for the superlattice tight-binding code.
For bulk tight-binding code the relevant options are:
                                 = band                       ! go along axes L -> Gamma -> X -> Gamma -> Z
                                 = 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)
 

 number-of-k-points              = 1000                       ! 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)

 k-vector                        = 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-vector                        = 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)
 

 power-of-distance-dependence    = 2.0d0                      ! ti = t0*(d0/di)**eta  (default: 2d0)
 

 calculate-eigenvectors          = yes                        !
                                 = no                         !
(default)   calculate eigenvalues only
 

 scale                           = 5d0                        ! scale output of wave functions and |psi|2 to improve visualization of |psi|2 in the band edges plot
                                 = 1d0                        !
(default)
 

 potential-energy-left           = 0d0                        ! [eV]  (default: 0d0)  Add potential energy to band edges (value at first layer).
 potential-energy-right          = 0d0                        ! [eV] 
(default: 0d0)  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                     = 1            ! (default)       ! 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.
                                 = 2                          !
get very detailed output, excluding Hamiltonian
                        
        = 3                          !
get very detailed output, including Hamiltonian to stdio
 

!-----------------
! Now tighten....
!-----------------
 filename-states                 = states.in
For more information on this input file, see documentation further below.
 

 calculate-only-lattice-geometry = no                        ! (default)
                               
 = yes                       ! Calculate only lattice geometry but not tight-binding Hamiltonian.
 

 output-Hamiltonian              = no                        ! (default)  Hamiltonian matrix not written to file
                                 = yes                       !
whole Hamilton matrix is written columnwise
                                 = lower                     !
lower triangle is written rowwise
 

 calculate-k-derivatives         = no                        ! (default)  do not calculate k-derivatives of H(k)
                                 = yes                       !
calculate first and second
                                 = first                     !
calculate d/dk H(k)
                                 = second                    !
calculate d2/dkikj H(k)
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                  = eigenvalues-only          ! (default)  calculate only eigenvalues (eigval)
                                 = 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  =  5   ! integer number > 0
zero of energy is taken at this band for first k-vector
This specifier only applies to the bulk tight-binding algorithm.
 

 number-of-band-for-psi          = 1                         ! (default: 1) used with 2 above, index of 1st of 4 bands w |psi|2 (actually 8 bands due to spin degeneracy)
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         = 4                         ! (default: 4)
This is the number of bands that are plotted in the files
  - out_wavegamma.dat                 -  |psi|2,... are not shifted
  - out_wavegamma_shift.dat           -
 |psi|2,... are shifted by their eigenenergies with respect to the energy dispersion plot
  - out_wavegamma_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.

 

 

Necessary input files

  • material parameters
    TB_material_parameters.in  ==> Download file: TB_material_parameters.in

    c11 c12        elastic constants 10-2 [GPa]
    a             
    lattice constant [Angstrom]
                  
    tight-binding parameters [eV]
    nc na
    esc epc esec edct2 edce
    esa epa esea edat2 edae
    Dav           
    absolute deformation potential [eV]
    sss scpas pcsas pps ppp seses secsas scseas secpas pcseas scdas dcsas pcdas dcpas pcdap dcpap secdas dcseas dds ddp ddd
    so_p_c so_p_a
    so_d_c so_d_a
    so_ppca

    Gammav        
    energy of top valence band edge at Gamma point [eV]
    Gammac        
    energy of conduction band edge at Gamma point [eV]
    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 J.-M. Jancu et al., PRB 57, 6493 (1998), Table II with the following exceptions:
    Es, Ep, Ed, Es* are shifted by +1.7683 eV.
     
  • distance parameters
    TB_distance_parameters.in  ==> Download file: 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         
    deformation potential [eV] (Note: Different meaning/definition!)
                  
    in order to modify on-site d-energies according to strain (bdeff = bd * ed_scholz)
     
  • states
    states.in                       ==> Download file: 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'

    $end

 

  • Generated output files:
    - k_vectors.in
    - 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.dat         Gamma conduction band edge and topmost valence band edge (units: atomic layer , energy [eV])
    - out_ek_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)
    - out_ek_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)
    - out_ek_tighten.dat                energy dispersion E(k) (original output)
                                        (shifted so that topmost valence band edge equals 0 eV)

 

Output files of tighten (bulk)

  • out_ek_tighten_bulk_new_noshift.dat energy dispersion E(k) (original output)
                                        (not shifted, energies correspond to tight-binding material parameters in input file)
    out_ek_tighten_bulk_new.dat         energy dispersion E(k)
                                       
    (shifted so that valence band edge of first k vector equals 0 eV)
    out_ek_tighten_bulk.dat             energy dispersion E(k) (original output)
                                        (shifted so that valence band edge of first k vector equals 0 eV)
     
  • 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 = zero-strain-amorphous

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 zero-strain-amorphous.

(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.)

 

Obsolete

  • matfileloc.txt
    H:\Tighten\
    H:\Tighten\
    # Here, the location of the intermediate output files and the material files is specified.
  • D:\nextnano3\nn3.exe -inputfile 1DTightBinding_rashba2tighten.in < in_GaAs51Sb49_bulk_gamma_L.txt

     

   
Last modified: 14-Feb-2012