nextnano.com
 nextnano³
 Download | SearchCopyright | Publications
 * password protected

 

nextnano³ software

 

  Import-data-on-material-grid

 

 

 
Up
 

Import data on material-grid

Imports data from arbitrary rectilinear grid onto simulation grid:
 - 1D:   linear interpolation
 - 2D: bilinear interpolation
 - 3D: trilinear interpolation

Here, the term "material-grid" does not necessarily mean "material grid". E.g. the electrostatic potential and the Fermi levels are mapped onto the physical grid, and not onto the material grid. The strain is mapped onto the material grid.

This feature works for 1D, 2D and 3D simulations.

The subroutines read in ASCII data of format coordinates, data[1,...,n] with a blank as a separator, i.e.
1D:
    x1              f(x1)
    x2              f(x2)
    ...
2D:
    x1  y1          f(x1,y1)  
    ...
3D:
    x1  y1  z1      f(x1,y1,z1)
    ...
Note that the function f can also be a vector (which is necessary for the strain tensor which has n=6 independent components).
1D:  x1            f_1(x1)       ...  f_n(x1)
2D:  x1  y1        f_1(x1,y1)    ...  f_n(x1,y1)
3D:  x1  y1  z1    f_1(x1,y1,z1) ...  f_n(x1,y1,z1)
Note: It is expected that the data file contains ascending grid point coordinates.
         If the grid points are in descending order, the routine is probably much slower (especially in 3D).
Note: It is assumed that the values are sorted like this (i.e. first, the x values are increased, then y, then z):
     x1 , y1 , z1 , f(x1,y1,z1)
     x2 , y1 , z1 , f(x2,y1,z1)
     ...
     xn , y1 , z1 , f(xn,y1,z1)
     x1 , y2 , z1 , f(x1,y2,z1)
     x2 , y2 , z1 , f(x2,y2,z1)
     ...
     xn , y2 , z1 , f(xn,y2,z1)
     ...
     xn , ym , z1 , f(xn,ym,z1)
     ...
     xn , ym , zp , f(xn,ym,zp)
    
If the values are sorted differently, the computational time is slower, especially in 3D.
Note the first line of this file must start with a coordinate (number) and not with text (e.g. a headline that labels the columns is not allowed).

 

!---------------------------------------------------------!
$import-data-on-material-grid                    optional !
                                                          !
 
source-directory                     character  required !
                                                          !
 
import-static-dielectric-constants   character  optional !
 filename-static-dielectric-constants character  optional !
                                                          !
 
import-potential                     character  optional !
 filename-potential                   character  optional !
                                                          !
 
import-Fermi-level-electrons         character  optional !
 filename-Fermi-level-electrons       character  optional !
                                                          !
 
import-Fermi-level-holes             character  optional !
 filename-Fermi-level-holes           character  optional !
                                                          !
 
import-generation                    character  optional !
 filename-generation                  character  optional !
                                                          !
 
filename-strain                      character  optional !
                                                          !
$end_import-data-on-material-grid                optional !

!---------------------------------------------------------!

Note:

 

Syntax:

source-directory = your_directory/

Directory of data file to be imported, don't forget the slash (/ or \ for DOS, / for UNIX), parameter is required.

 

Importing arbitrary static dielectric constants

import-static-dielectric-constants = yes
           
                       = no

Flag whether to import the static dielectric constants (yes or no).

Note: The three dielectric tensor components have to be given in the crystal coordinate system and not in the simulation coordinate system. Please have a look here for details.

filename-static-dielectric-constants = read_in_dielectric_constant.dat

Filename of data file containing the data of the static dielectric constants has to be present if import-static-dielectric-constants = yes.
The dielectric constants must refer to the crystal coordinate system.
   1D:  coordinate_x                              epsxx  epsyy  epszz
   2D:  coordinate_x  coordinate_y                epsxx  epsyy  epszz
   3D:  coordinate_x  coordinate_y  coordinate_z  epsxx  epsyy  epszz

The units for coordinate_i are [nm]. The units of the static dielectric constants are dimensionless [].

For zinc blende materials it holds: epsxx == epsyy == epszz
For wurtzite     materials it holds: epsxx == epsyy /= epszz
Thus for zinc blende materials it is not sufficient to specify only one element. It is necessary to specify all three tensor components even if they are identical.

 

Importing arbitrary electrostatic potential data

import-potential   = yes                 ! Flag whether to import the electrostatic potential (yes or no).
               
   = no
filename-potential = potential_data.dat

File format:

   1D: coordinate_x                              potential
   2D: coordinate_x  coordinate_y                potential
   3D: coordinate_x  coordinate_y  coordinate_z  potential

The units for coordinate_i are [nm]. The units for the electrostatic potential are in [V].

Note:
- 1D: It is required that the x coordinates are in ascending order.
- 2D: It is required that either x or y coordinates are in ascending order.
          The grid must be regular and rectangular.
- 3D: It is required that either x, y or z coordinates are in ascending order.
          The grid must be regular and rectangular.

Priority (you can check the priority in main.f90):

  • Highest priority: If zero-potential = yes is chosen ($numeric-control), then potential = 0 is assumed and the solving of the first Poisson equation is skipped.
  • Next priority: If raw-potential-in = no (default) is chosen ($simulation-flow-control), then the Poisson equation is solved.
  • Further priority:  If raw-potential-in = yes is chosen ($simulation-flow-control), then the electrostatic potential is read in:
    If import-potential = yes is chosen, then the electrostatic potential is imported from the data file (filename-pot = potential_data.dat) from an arbitrary rectilinear grid onto the simulation grid.
  • Lowest priority: If import-potential = no (default) is chosen, then the electrostatic potential can be read in from raw data, e.g. raw_data/potentials_store1D.raw or from raw_data/potentials_store1D_ind001.raw. In the latter case, the potential can also originate from a voltage sweep step ($voltage-sweep) where the step number must be specified ($simulation-flow-control).
    Currently, import-potential = yes has higher priority than raw-potential-in = yes, but raw-potential-in = yes must be specified in order to import potential data on material grid.

The code layout in main.f90 looks like this:

 IF (ZeroPotential == 'yes') THEN ! This option allows to skip calculation of Poisson equation.
    ! => zero-potential = yes
    phiV = 0.0d0                  ! Set potential to zero.
    ...
 ELSE IF (.NOT.RAW_POT_IN) THEN
    ! => raw-potential-in = no
    ...
    CALL poisson_block ! solve Poisson equation

 ELSE
    ! => raw-potential-in = yes
    !--------------------
    ! Read in potential.
    !--------------------

    IF (IMPORT_POTENTIAL_DATA) THEN
       ! => import-potential = yes
       !----------------------------------------------------------------
       ! See if data should be read in ($import-data-on-material-grid).
       !----------------------------------------------------------------
       ...
    ELSE
      ! => raw-potential-in = yes
      !------------------------
      ! Read in raw potential.
      !------------------------
    END IF
 END IF

 

Importing arbitrary electron and hole Fermi levels

Instead of using a constant Fermi level for electrons and holes which is set by default to 0 eV (This is the boundary condition for the Poisson equation!), one can read in files with data
  "x [nm],  EF,n(x) [eV]"   for the spatial variation of the Fermi level of the electrons and, optionally, another file with data
  "x [nm],  EF,p(x) [eV]"   for the spatial variation of the Fermi level of the holes.
The grid can be arbitrary and it will be interpolated linearly between grid points onto the simulation grid.

Such a feature might be useful in order to mimic the change of electrostatic potential due to a side gate.

 

import-Fermi-level-electrons   = yes        ! Flag whether to import the Fermi level of the electrons in units of [eV].
                        
      = no
filename-Fermi-level-electrons = 1DFermi_level_electrons_to_be_read_in.dat


import-Fermi-level-holes       = yes        !
Flag whether to import the Fermi level of the holes in units of [eV].
                        
      = no
filename-Fermi-level-holes     = 1DFermi_level_holes_to_be_read_in.dat

 

Example: Double quantum well heterostructure

==> 1DAlGaAs_GaAs_DQW_read_in_Fermi_level.in
    1DFermi_level_electrons_to_be_read_in.dat

If you want to obtain the input files that were used for this example, please submit a support ticket.

a) constant Fermi level at 0 eV:
    The two quantum wells are nearly symmetric having one bonding and one antibonding state that contribute to the density.

a) constant Fermi level at 0 eV and a constant Fermi level of 50 meV in the right quantum well:
    Now, the self-consistent solution of the Schrödinger-Poisson equation leads to an asymmetric conduction band profile.
    The density of the right quantum well is now larger.

There are further options to manipulate the Fermi levels, see Fermi level.

 

 

Importing arbitrary generation rate profile

import-generation = yes
           
      = no

Flag whether to import the generation rate profile (yes or no).

filename-generation = read_in_generation_rate.dat

Filename of data file containing the data of the generation rate G(x,y,z) has to be present if import-generation = yes.
   1D:  coordinate_x                              G(x)
   2D:  coordinate_x  coordinate_y                G(x,y)
   3D:  coordinate_x  coordinate_y  coordinate_z  G(x,y,z)

The units for coordinate_i are [nm]. The units of the generation rate are 1018 [cm-3 s-1].

(For an example input file, please see the GaAs solar cell example.)

 

 

Importing arbitrary strain data

The flag whether to import strain has to be specified via the keyword $simulation-flow-control.
 strain-calculation = import-strain-simulation-coordinate-system
or
 strain-calculation = import-strain-crystal-coordinate-system
,
Note: The strain tensor has to be given either with respect to the simulation coordinate system or crystal coordinate system. Please have a look here for details.

filename-strain = strain_data.dat

Filename of data file containing strain data has to be present if strain-calculation = import-strain-....
The strain to be read in must not be given in Voigt notation, it must be given in ordinary tensor notation and must refer to the simulation or crystal coordinate system.
   1D:  coordinate_x                              exx  eyy  ezz  exy  exz  eyz
   2D:  coordinate_x  coordinate_y                exx  eyy  ezz  exy  exz  eyz
   3D:  coordinate_x  coordinate_y  coordinate_z  exx  eyy  ezz  exy  exz  eyz

The units for coordinate_i are [nm]. The strain tensor units are dimensionless [].

Note: The eij components refer to shear strain and not to "engineer shear strain".
Shear strain is the average of two strain tensor components, i.e. eij = 1/2 (dui/dxj + duj/dxi)  whereas engineering shear strain is defined as the total shear strain eij = dui/dxj + duj/dxi.