Update k.p states
Subroutine
update_kp updates for
given potential phiV the k.p states.
!------------------------------------------------------------------------------------------------------
! solves kp equation for all relevant k_parallel
and writes solution to
! module
quantum_solutions
!
! input
!
! chargeC = 'el' or 'hl'
!
! num_qr ... number of
quantum region
!
! phiV(1..lengvecV) ..
electrostatic potential
!
! if no kp is done in this region --> return
!
!-----------------------------------------
! note:
!-------
!
! This subroutine assumes that
! - conduction band 1 == gamma band
! - valence bands 1,2,3 == hh,lh,soh-band
(if kp is done here)
!
! This version can only handle situations, where
throughout the whole
! region the minimum of the conduction band lies
above the maximum of the
! valence band.
! see also internal subroutine prepare_det_edge
!
!-------------------------------------------------------------------------------------------------------------
The proceeding is as follows:
1) checks if k.p is done, if not:
return
call
get_which_kp(num_qr,kpL,kind_kpC,kp_chargeC)
if (.not.kpL)
return
2) phiV
--> Note:
For setup of k.p Hamiltonian, E_c and E_v contain the
electrostatic potential
The electrostatic potential is taken from phiV in MODULE
potentials.
3) call prepare_det_edge
internal
subroutine prepare_det_edge
!------------------------------------------------------------------------------------------------------
!
sets up pot_condM,pot_valM in [J]
!
E_separate in [J]
!
!-----------------------------------------
! note:
!-------
!
! This
subroutine assumes that
! -
conduction band 1 == gamma band
! -
valence bands 1,2,3 == hh,lh,soh-band (if kp is done here)
!
! This version
can only handle situations, where throughout the whole
! region the
minimum of the conduction band lies above the maximum of the
! valence band.
!
!-------------------------------------------------------------------------------------------------------
In principle the
band edge profile for the given potential phiV and E_separate
are calculated.
NOTE:
E_separate is necessary for calculation of inner eigenvalues,
pot_condM,pot_valM for determination of energy edge.
4) calculate eigenstates for (k_parallel=0
and k_z=0) and
determines
energy_edge (above energy edge classical treatment)
NOTE:
energy_edge is only determined due to states for k_par =0
-
Setup
k.p matrix
-
Solve k.p eigenvalue
problem
5) get k_parallel points :
first get range
for k_parallel then
get k_parallel
(only for 1D and 2D)
6) determine number of eigenvalues (on
basis of k_parallel=0, k_z=0 states) and SeparationEnergyEdge
which are necessary
and define number of eigenvalues
7) calculate states for k_parallel
(/=0) (only 1D and 2D)
Technical details
- The setup routine for the k.p matrix obtains the k.p parameters from
subroutine
Get_kp_MaterialParameters.
(More
details here.)
The band edges include the
potential. This potential is passed to this subroutine via MODULE
pass_over_mod.
- In 1D, additionally superlattices are possible: Here one additionally has
a superlattice vector. The according k-points are provided by
subroutine
get_K_z_points1D.
- In case of mixed boundary conditions (Dirichlet- and Neumann) the
variable
dim_boundaryd is 2
(else 1). So the extra loop of
dim_bnd=1,dim_boundary accounts for this kind of boundary
conditions.
- The solution is written to
kp_el(hl)M in MODULE
quantum_solutions.
- For the determination of the
separation energy
the same is true as
for the single-band Schrödinger equation
(the internal subroutine
prepare_det_energy_edge is in fact
the same).
|