nextnano.com
 GUI: nextnanomat
 Tool: nextnano++
 Tool: nextnano
 Tool: nextnano.QCL

 Download | SearchCopyright | News | Publications
 * password protected

 

nextnano software

 

  Add material parameters

 

 

 
Up
 

Material parameters for binary zinc blende materials

Data base

Valid keywords for the parameters of the default parameter data base are listed in database_nn3_keywords.val.
This is the place to enter new keywords if one wants to add new parameters. In principle, one should only enter into this data base keywords, which are marked as 'required'. Through this it is warranted that corresponding entries in the data base actually do occur. (The input parser checks this, but only their existence!)
Additionally, the new keywords have to be entered into keywords.val.

For zinc blende materials the keyword is $binary_zb_default. On this basis, the entries in the data base database_nn3.in have to be complemented for the newly declared values for all affected known materials. This also includes the adaption of changes in the data types of already existing parameters (e.g. double -> double_array).

The structure of the data, which the values of the material parameters are later transferred to, are declared in a module called mod_type_binary_zb_dflt.

If new parameters are introduced (see above) the corresponding data structure has to be changed consequently. This affects directly the following sub programs:

  • MODULE module_get_material_info (only material identification parameters - no physical parameter settings)
  • allocate_material_models.f90 (counts number of various material models to use and calls allocation subroutines)
    The new pointer significant parameters have to be parked (NULLIFY) in the following sub programs that are called by allocate_material_models.f90.
    -
    allocate_binary_models.f90
    - allocate_ternary_models.f90

    Now allocate_material_models.f90 is calling default_binary_models.f90 or default_ternary_models.f90 respectively. In these sub programs the material data and (as far as the specified material is known) is read from the data base and transferred to the data structure of the material parameters. Both sub programs have to be complemented for the new parameters because ternary materials are constructed from binary materials and are therefore also affected by changes of the binary constituents.

    The purpose of the sub programs read_binary_models.f90 and read_ternary_models.f90 is to overwrite values that were read in from the data base or to specify complete parameter records for unknown materials respectively (For this the structure of the data must be known, of course. It will be read in from get_material_info.f90, see also $material).

Additionally, under the circumstances of susceptible changes of the data type the following sub programs or FUNCTIONs respectively are affected:

  • read_alloy_data.f90   needs module type material info only for input of material number, alloy FUNCTION number etc.
  • read_alloy_info.f90   needs module type material info only for input of material number, alloy FUNCTION number etc.
  • read_doping_data.f90 needs module type material info only for input of material number, doping FUNCTION number etc.
  • cb_degeneracy           provides the degeneracy factor(s) of the valley(s) of the conduction band minima
  • cb_energy                   FUNCTION, real: provides the energetic position of the specified conduction band minimum
  • cb_masses                   FUNCTION, real, double, array, pointer: provides longitudinal and transverse masses for specified conduction band minimum (3 masses)
  • cb_nonpar                   FUNCTION, real: provides nonparabolicity parameters for specified conduction band minimum: only one per minimum
  • st_dielc                   FUNCTION, real, double, array, pointer: gives values for static dielectricity constant (3 numbers)
  • vb_degeneracy           FUNCTION, integer: provides degeneracy factor for specified valence band minimum
  • vb_energy                   FUNCTION, real: provides energetic position for specified valence band minimum
  • vb_masses                   FUNCTION, real, double, array, pointer: provides longitudinal and transverse masses for specified valence band minimum (3 masses)
  • vb_nonpar                   FUNCTION, real: provides nonparabolicity parameters for specified valence band minimum:  pro only one per minimum
  • num_cbands                 FUNCTION, integer: provides number of conduction band minima that are effective
  • num_vbands                 FUNCTION, integer: provides number of valence band minima that are effective
  • op_dielc                     FUNCTION, real: provides optical dielelectricity constant (DK) of the material
  • lattice_co                 FUNCTION, real, double, array, pointer: provides values for lattice constants of the volume of the material
  • band_shift                 FUNCTION, real: provides an eigenvalue, around that all bands can be shifted in case of need
  • abs_defpot_vb           FUNCTION, real: provides absolute deformation potential for the valence band
  • abs_defpot_cbs         FUNCTION, real, double, array, pointer: provides absolute deformation potential for conduction band minima
  • uniax_vb_defpots     FUNCTION, real, double, array, pointer: provides valence band deformation potential for uniaxial stress
  • uniax_cb_defpots     FUNCTION, real, double, array, pointer: provides conduction band deformation potential for uniaxial stress
  • piezo_constants       FUNCTION, real, double, array, pointer: provides piezoelectric constants of the material
  • elastic_constants    FUNCTION, real, double, array, pointer: provides elastic constants of the material
  • kp_6x6_params           FUNCTION, real, double, array, pointer: provides kp parameters for valence band 6-band model (3 valence bands)
  • kp_8x8_params           FUNCTION, real, double, array, pointer: provides kp parameters for  8-band model (3 valence bands, 1 conduction band)
  • out_in.f90                     (for output purposes data structures are partly accessed directly; however, most of the accesses occur via the above FUNCTIONs)

 

Presumably not affected directly:

  • input_driver_module
  • get_poisson_clusters.f90
    primitives to get mapping grid -> poisson cluster: Warning - FUNCTION calls in these subs are inconsistent in argument list
  • num_of_dirichlets.f90
    apply_dirichlet_to_cluster.f90
    dirichlet_grid_points.f90
    potential_for_dirichlet.f90
  • num_of_neumanns.f90
    apply_neumann_to_cluster.f90
    field_for_neumann.f90
    neumann_grid_points.f90
  • num_of_ohmics.f90
    apply_ohmic_to_cluster.f90
    voltage_for_ohmic.f90
    current_for_ohmic.f90
    ohmic_grid_points.f90
  • num_of_schottkys.f90
    apply_schottky_to_cluster.f90
    voltage_for_schottky.f90
    current_for_schottky.f90
    barrier_for_schottky.f90
    schottky_grid_points.f90
  • match_geo_to_fid.f90

For the new parameters new sub programs have to be provided appropriately, that are returning the parameter values if requested.

Interface states - inquiry functions

---------------------------------------------------------
Contained in: if_state_inquiry_funcs.f90
---------------------------------------------------------
contains various FUNCTIONs to call for interface numbers, states associated with them, state parameters ...
 FUNCTION number_of_if_states(mat1,mat2)           RESULT (number)        ! returns zero in case that no states are defined for this interface
 FUNCTION interface_number   (mat1,mat2)           RESULT (number)        ! returns just the interface number as defined in input, otherwise zero
 FUNCTION if_state_numbers(interface_number)       RESULT (state_numbers) ! pointer, contains state numbers
 FUNCTION num_of_if_state_levels(interface_state_number) RESULT (number)  ! number of interface staes present at actual interface
 FUNCTION if_state_energies    (if_st_num)         RESULT (energies)      ! energy levels for given state number
 FUNCTION if_state_degeneracies(if_st_num)         RESULT (degenercies)   ! degeneracies of levels for given state number
 FUNCTION if_state_type        (if_st_num)         RESULT (name)          ! returns state-type = >trap< or >fixed<
 FUNCTION if_state_density(interface_state_number) RESULT (density)       ! returns density of given state
---------------------------------------------------------
 Prior call to read_mat_interfaces.f90 required for parameters
 Mapping arrays and parameters of states stored in modules
 defined in interface_data.f90
=========================================================

---------------------------------------------------------
interface_data.f90
---------------------------------------------------------
MODULE mod_mat_interfaces                                  ! maps material pair to interface number
MODULE mod_interface_to_state_num                     ! state numbers defined for each interface
MODULE mod_if_state_params                                ! state parameters
---------------------------------------------------------
Type definitions within modules
Data structures allocated/filled by read_mat_interfaces.f90
=========================================================


MODULE mod_get_strain_tensor_cxyz
CONTAINS
FUNCTION get_strain_tensor_cxyz(grid_point,symm) RESULT(result_strain_tensor_cxyz)
---------------------------------------------------------
REAL(8),DIMENSION(3,3)       :: result_strain_tensor_cxyz
---------------------------------------------------------
grid_point grid_point is scalar grid point number
symm (true,false) INPUT, flag whether displacement has to be assumed symmetric (true) or not
result_strain_tensor_cxyz is given in cartesian crystal fixed coordinate system
=========================================================
 

----------------------------------------------------------------------------
MODULE mod_piezo_polarization_xyz
CONTAINS
FUNCTION piezo_polarization_xyz (grid_point,symm) RESULT(piezo_polar_xyz)
---------------------------------------------------------
REAL(8),DIMENSION(3)         :: piezo_polar_xyz                 ! RESULT
---------------------------------------------------------
grid_point grid_point is scalar grid point number
symm (true,false) INPUT, flag whether displacement has to be assumed symmetric (true) or not (used in call for strain tensor)
Calculations are done in cxyz, then the piezo electrical polarization is transformed into xyz (simulation coordinate system)
===================
 

----------------------------------------------------------------------------
MODULE mod_piezo_polarization_cxyz
CONTAINS
FUNCTION piezo_polarization_cxyz (grid_point,symm) RESULT(piezo_polar_cxyz)
---------------------------------------------------------
REAL(8),DIMENSION(3)         :: piezo_polar_cxyz                 ! RESULT
---------------------------------------------------------
grid_point grid_point is scalar grid point number
symm (true,false) INPUT, flag whether displacement has to be assumed symmetric (true) or not (used in call for strain tensor)
Calculations are done in cxyz (crystal fixed cartesian coordinate system)
===================
 
 

----------------------------------------------------------------------------
MODULE mod_piezo_constants
CONTAINS
FUNCTION piezo_constants(material_number,alloyc)  RESULT (piezoco)
----------------------------------------------------------------------------
REAL(8),DIMENSION(:),POINTER :: piezoco
Result is vector containing piezo electric constants of given material
Ordering:
ZB: e14
WZ: e33, e31, e15
=========================================================

----------------------------------------------------------------------------
MODULE mod_elastic_constants
CONTAINS
FUNCTION elastic_constants(material_number,alloyc)  RESULT (elasticco)
REAL(8),DIMENSION(:),POINTER :: elasticco
Result is vector containing elastic constants of given material
Ordering:
ZB: c11,c12,c44
WZ: C11,C12,C13,C33,C44
=========================================================

---------------------------------------------------------
MODULE mod_qm_cluster_grid_points                                                                       !
 USE module_type_cluster_grid_points                                                                        ! type definition in file type_info.f90
 TYPE(type_cluster_grid_points),DIMENSION(:),POINTER::qm_cluster_grid_points  ! qm_cluster_grid_points()%grid_points()
 LOGICAL                       ,DIMENSION(:),POINTER::cluster_active                             !
 INTEGER                       ,DIMENSION(:),POINTER::qm_boundary_condition              !
 INTEGER                                            ::n_qm_clusters_defined                                   !
END MODULE mod_qm_cluster_grid_points                                                                !
!-----------------------------------------------------------!
=========================================================

--------------------------------------------------------------
get_quantum_clusters.f90
CONTAINS
 SUBROUTINE get_quantum_clusters(domain_boundaries)
  USE mod_check_quantum_regions
  USE mod_check_quantum_clusters
  USE mod_cluster_quantum_regions
************************************************************************!
  CALL check_quantum_regions(domain_boundaries,quantum_region_priorities)
  CALL check_quantum_clusters(quantum_region_priorities,num_of_quantum_clusters,quareg_to_cluster,warning)
  CALL cluster_quantum_regions(domain_boundaries,quantum_region_priorities,num_of_quantum_clusters,quareg_to_cluster,warning)
=========================================================
check_quantum_regions.f90
check_quantum_clusters.f90
cluster_quantum_regions.f90
=========================================================

quantum_cluster_grid_points.f90
This file contains modules with data type definitions and data structures
MODULE mod_qm_cluster_grid_points
MODULE
mod_type_qm_model_specs
MODULE
mod_qm_models
MODULE
mod_qmods_sorted

MODULE mod_sort_quantum_models which contains SUBROUTINE sort_quantum_models
OUTPUT to
USE mod_qmods_sorted
USE mod_qm_models
These MODULEs are contained in quantum_cluster_grid_points.f90
!----------------------------------------------------------------------------!
! INTEGER                                              :: n_cb_efm                        ! OUTPUT to mod_qmods_sorted - number of effective mass models c-band
! INTEGER                                              :: n_cb_8kp                        ! OUTPUT to mod_qmods_sorted - number of 8x8kp models for gamma min c-band
! INTEGER                                              :: n_vb_efm                         ! OUTPUT to mod_qmods_sorted - number of effective mass models v-band
! INTEGER                                              :: n_vb_8kp                         ! OUTPUT to mod_qmods_sorted - number of 8x8kp models for valence band
! INTEGER                                              :: n_vb_6kp                         ! OUTPUT to mod_qmods_sorted - number of 6x6kp models for valence band
! INTEGER, DIMENSION(:), POINTER   :: cb_efm_to_qm_modnum       ! OUTPUT to mod_qmods_sorted - contains quantum model numbers to be used
! INTEGER, DIMENSION(:), POINTER   :: cb_8kp_to_qm_modnum       ! OUTPUT to mod_qmods_sorted - contains quantum model numbers to be used
! INTEGER, DIMENSION(:), POINTER   :: vb_efm_to_qm_modnum       ! OUTPUT to mod_qmods_sorted - contains quantum model numbers to be used
! INTEGER, DIMENSION(:), POINTER   :: vb_8kp_to_qm_modnum       ! OUTPUT to mod_qmods_sorted - contains quantum model numbers to be used
! INTEGER, DIMENSION(:), POINTER   :: vb_6kp_to_qm_modnum       ! OUTPUT to mod_qmods_sorted - contains quantum model numbers to be used
!----------------------------------------------------------------------------!
The detailed specifications for all quantum models are stored in
MODULE mod_qm_models
 USE mod_type_qm_model_specs
  TYPE(type_qm_model), DIMENSION(:), POINTER  :: qm_models(quantum model number)%.....
END MODULE mod_qm_models
contained in quantum_cluster_grid_points.f90. The data type definition of qm_models()%... is also given in the file, mentioned above.