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

 About us
 Useful Links
 Publications
 Copyright notice
 nextnano³ documentation

 -> Download Software
 * password protected

 

 
 

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³]
   
Last modified: 25-Aug-2009   -   optimised for Microsoft Internet Explorer 7®