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

 ==> Download Software
 nextnano³ documentation

 Copyright notice
 About us
 Useful Links
 Publications
 
 * password protected

 

 
 

Determine range for k||

k.p dispersion in 1D

The 2D Brillouin zone is discretized in order to calculate the k.p density.

Note: If the energy exceeds a certain value the Fermi distribution function becomes zero, so this k_parallel is no longer valid for the density calculation.

 The aim of subroutine get_range_k is to determine this k_parallel:

!----------------------------------------------------------------
 SUBROUTINE get_range_k(num_qr,chargeC,en_level,SeparationEnergyEdge,range_k)
!----------------------------------------------------------------
calculates range of k|| vectors (range_k in [1/AA])
en-level
is the lowest eigenvalue for k_par = 0    (given in [eV])
chargeC = 'el'
or 'hl'
SeparationEnergyEdge
is the maximum energy which contributes to the quantum mechanical density [eV].

Therefore the discretized k.p Hamiltonian is diagonalized for k_parallel=0 and this energy is given as input in en_level. In SeparationEnergyEdge there is the maximum energy (on absolute scale).

The program proceeds as follows:

1) fermi  --> the maximum Fermi level (electrons,  for holes: minimum)  is calculated [eV]     [get_fermi_kp]

2) energy -->  energy such that      Fermi[(energy-fermi)/kT] <= bnd_fermi
                    [bnd_fermi in MODULE parameters_for_kpar_max]

    -->  SELECT CASE(chargeC)
         CASE('el')
          energy = min(energy,SeparationEnergyEdge)
         CASE('hl')
          energy = max(energy,SeparationEnergyEdge)
        END SELECT

 3) determine extremous energy such that

   !-------------------------------------------------------------
   ! extremous_energy + en_level  >= energy      
for electrons
   !                              <= energy      
for holes
   !-------------------------------------------------------------

starts with k_beg_min, k_beg_max [MODULE parameters_for_kpar_max]
does maxit iterations

FUNCTION extremous_energy(k_par)  provides for given |k_parallel| extremous energy, i.e. it diagonalizes the bulk Hamiltonian in three directions (kx, ky, and between) [quantization in z-direction] and takes the extremous energies of them. This is done for every point within the quantum cluster.

Then k_b and k_e are adjusted accordingly.
The loop is exited, if |k_e-k_b| < max_diff_k.
The minimum value for range_k is range_k_min:

  IF (range_k < range_k_min) THEN
   WRITE(*,*) 'range_k = ',range_k,' [1/Angstrom]'
   WRITE(*,*) 'Warning: range_k too small!'
   WRITE(*,*) '         range_k is set to range_k_min = ',range_k_min
   range_k = range_k_min
  END IF

See also in:

!------------------------------
MODULE parameters_for_kpar_max
!------------------------------
contains parameters that are used in MODULE determine_range_for_kpar

bnd_fermi     -->  k_parmax
is determined such that
                   Fermi[(E_kparmax-fermi)/kT] <= bnd_fermi   --> energy [eV]
delta_energy  --> 
The energy calculated above is increased/decreased by
                   delta_energy [eV]
[security buffer, may be set to zero]

starts with minimum and maximum value for k_parallel : k_beg_min,k_beg_max
                                                       in [1/AA]

maxit        --> 
maximum number of iterations
max_diff_k   --> 
loop stops for |k_low-k_up| < max_diff_k  [1/AA]

range_k_min  --> 
minimum value of range_k that is returned
                  
must be >= 0.0d0  [1/AA]

--------------------------------------------------------------

to determine energy for shift inverse
shift_energy_param  -->

 E_separate = E_cond - shift_energy_param*(E_cond-E_val)
for electrons
 E_separate = E_val  + shift_energy_param*(E_cond-E_val)
for holes
 
accessed in subroutine update_kp
 
must be within [0,1]

This is now a $numeric-control variable: separation-energy-shift


k.p dispersion in 2D

Here one only has to discretize a one-dimensional Brillouin zone.

The maximum value for k_parallel is determined the same way as in 1D:

SUBROUTINE get_range_k, MODULE parameters_for_kpar_max.

   
Last modified: 09-Jun-2011