|
| |
Setup of material data
The subroutines in material_data_block_two are used to allocate
the variables in MODULE
physical_data.
!----------------------------------------------------------------------------------
MODULE
physical_data
!----------------------------------------------------------------------------------
!
! temperature, beta :: beta = 1/kT -->
SI [1/J]
!
temperature always in Kelvin
! elcharge_beta :: electron_charge*beta
[in SI]
!
! epsilonV (1..lengvecV) --> no units
!
! max_cond = maxval(num_cond_bandsV)
! max_val = maxval(num_val_bandsV)
!
!
! num_cond_bands3DV (1..lengvecV) --> for each
point on stefan's grid number of conduction bands
!
considered for classical density
! E_cM(1..max_cond,1..lengvecV) --> SI [J]
!
corresponding value of band edge
!
where num_cond_bandsV<maxval(num_cond_bandsV) -->
!
bands not considered are assigned the value of the
!
latest valid band edge, but densities of state are zero
!
( lastbandL=.true. in MODULE limits )
!
otherwise set to E_cb in MODULE limits
!
! for num_val_bandsV,E_vM (in J),max_valence
accordingly
!
!------------------------------------------------------
! N_cM,N_vM ... same indices as for
E_cM,E_vM
!
units in [ C/m^3 ], with positive sign
!
!------------------------------------------------------
! nonparabolicities:
! -------------------
! alpha_condM(1..max_cond,1..lengvecV)
! alpha_valM(1..max_valence,1..lengvecV)
! --> =0.0d0 by default
! indices
as with E_cM
! the
nonparabolicities here are dimensionless, i.e.
! the
nonparabolicity-factors from database (which have units
!
1/eV) are scaled according to the rule alpha-->alpha *kT
!---------------------------------------------------------------------------------
real(8) :: temperature , beta ,
elcharge_beta
real(8),dimension(:),POINTER :: epsilonV
integer :: max_cond, max_valence
integer,dimension(:),POINTER ::
num_cond_bands3DV,num_val_bands3DV
real(8),dimension(:,:),POINTER ::
E_cM,E_vM,N_cM,N_vM
real(8),dimension(:,:),POINTER ::
alpha_condM,alpha_valM
END MODULE
physical_data
!----------------------------------------------------------------------------------
Before band edges can be defined they are
adjusted to strain,... (van de Walle).
This is done by the program of Matthias and
documented there in detail.
The resulting band edges are provided by the
subroutines in
MODULE
input_block_two:
They provide the relevant information for grid
points on material grid:
!------------------------------------------------------------------------------
!
! 1. subroutine get_temperature
!
! 2. FUNCTION epsilon_material
!
! 3. subroutine get_maxval_bands
!
! 4. subroutine conduction_band
!
! 5. subroutine valence_band
!
! 6. subroutine non_parab_cond
!
! 7. subroutine non_parab_val
!
! 8. subroutine density_of_state_cond
!
! 9. subroutine density_of_state_val
!
!------------------------------------------------------------------------------
The setup in material_data_block_two
in more detail works like this:
- subroutine
setup_temperature:
reads temperature, defines temperature, beta,
elcharge_beta (MODULE physical_data)
and h2b2m_evAA2 in MODULE
derived_constants
The scheme for definition of material data
provided on material grid is always the same:
The assembles gets the material data for all eight
adjoining octants (which are each equivalent to a point on material grid).
- When there is a single point, it takes the
average of all eight values.
- When there is a double point, it takes for each
of the two points the four octants which are on the side of this point
and calculates the average of them.
- For an eightfold point each of the eight points
is ascribed the value of the according octant.
(In 2D and 1D it is in complete analogy.)
SUBROUTINE setup_dielectricity3D:
defines dielectricity --> stored in epsilonV
SUBROUTINE band_edge_setup_3D
--> takes the modified band edges of Matthias and writes them to
E_cM(1..max_cond,1..lengvecV) in
SI units.
NOTE: max_cond is the maximum number of band edges
throughout the whole device.
Nevertheless the number of bands is specified
explicitly for each point on Stefan's grid
in num_cond_bands3DV1..lengvecV).
The values in
E_cM(num_cond_bands3DV(i)..max_cond,i) for point i are
therefore not used, but they are ascribed
values by the following convention:
They are assigned the value of the latest valid
band edge (E_cM(num_cond_bands3DV(i),i)) which is not
necessarily the highest), but densities of states
are zero, if lastband L=.TRUE. in MODULE limits,
otherwise set to E_cb in
MODULE limits.
SUBROUTINE
setup_nonparabolicities3D --> the same for
nonparabolicities, zero by default
NOTE: The nonparabolicities provided by
this subroutine must have units [1/eV].
Here they are transformed to dimensionless units according to
alpha --> alpha*kT
SUBROUTINE
setup_density_of_state3D: reads in density of state in [particles/m³]
--> density of states for each band [stored in C/m³]
|