nextnano.com
==> nextnano Documentation (New)

nextnano++ software

     

Up

This is the old documentation. Here's the link to the new documentation.

strain{}

Specifications that define strain model.

 

strain{


   
Specify strain model:
   pseudomorphic_strain{}                # homogeneous strain for 1D layer structures (analytical calculation)
                                         #
This feature also works in 2D or 3D but the user must be sure
                                         # that the model makes sense from a physical point of view
                                         # (i.e. the 2D/3D structure should consist of different layers along the growth direction
                                         # whereas the layers must be homogenous along the two perpendicular directions).
   
or
   minimized_strain{}                    #
minimization of the elastic energy for 2D and 3D geometries (numerical calculation)
                                         # It can also be used for 1D simulations. In this case, the results will be equivalent to the analytical model pseudomorphic_strain{}.

   
or
   import_strain{                        #
import strain tensor from file or analytic function and use it for calculation of polarization charges.

      import_from = "strain_tensor"      #
reference to imported data in import{}. The data being imported must have exactly 6 components.
                                         #
The expected order of strain tensor components is: epsxx  epsyy  epszz  epsxy  epsxz  epsyz
      coordinate_system = simulation     #
The imported strain tensor is with respect to the simulation coordinate system (optional parameter).
                        = crystal        #
The imported strain tensor is with respect to the crystal coordinate system. (default is simulation)
   }


In order to calculate the strain, one has to provide a substrate with respect to which the layers are strained.
This can be done with the keyword global{} ==> substrate{...}.


  
Piezo- and pyroelectric charges
      piezo_density        = yes         # calculate piezoelectric charge density and take it into account while solving the Poisson equation (default: yes). If no strain is solved, this flag is ignored.
                           = no          #
don't calculate piezoelectric charge density
      no_piezo_density     = yes         # don't calculate piezoelectric charge density (not supported any more)

      pyro_density         = yes         #
calculate pyrooelectric charge density and take it into account while solving the Poisson equation (default: yes). If material system is not wurtzite, this flag is ignored.
                           = no          # don't calculate pyroelectric charge density. The pyroelectric charge density due to spontaneous polarization applies to wurtzite only.
                                         #
In order to obtain pyroelectric charges, it is not necessary to calculate strain. Pyroelectric charges are only present in wurtzite materials but not in zinc blende.
      no_pyro_density      = yes         # don't calculate pyroelectric charge density (not supported any more)

      second_order_piezo   = no          # (default)
                           = yes         #
include 2nd order piezoelectric coefficients in the calculation
                                         # Note: Not fully implemented for wurtzite, only "standard growth directions" supported for wurtzite as the most general formula was not known to us at the time of implementation.
 

   Specify growth direction (for pseudomorphic strain model)
      
growth_direction = [1, 0, 0]             # vector in crystal coordinate system
                                         # can be specified in a 2D or 3D simulation but not in a 1D simulation (x axis is taken by default in 1D)
                                        
# If not set, x axis of simulation coordinate system is taken by default.
 

    Solver definitions
   linear_solver{                        #
      iterations   = 10000               #
number of iterations for linear equation solver in strain algorithm (default is: 10000)
      abs_accuracy = 1e-8                #
absolute accuracy (default is: 1e-8 [GPa] (1D), 1e-8 [GPa nm] (2D), 1e-8 [GPa nm2] (3D))
      rel_accuracy = 1e-12               #
relative accuracy (default is: 1e-12 [dimensionless]), 0.0 <= rel_accuracy <= 0.01
      use_cscg     = yes/no              #
composite step conjugate gradient solver (try this one if standard solver fails to converge)

                                         # Only for debugging purposes, enabling will make code much slower or prevent convergence.
      force_diagonal_preconditioner = no # yes
or  no (default is: no) Forces the use of a slower but more robust diagonal preconditioner.
                                         # Only for debugging purposes, enabling will make code much slower or prevent convergence.
                                         # Please try setting it to
yes in case preconditioning fails or the linear solver diverges. If set to yes, iterations may have to be further increased.
   }

   debuglevel      = -1..3               #
The higher this integer number, the more information on the numerical solver is printed to the screen output. (default: debuglevel = 2)

 

   Output definitions
   output_strain_tensor{                 # output (symmetric) strain tensor epsilonij:    epsilonij = 1/2 (uij + uji) [dimensionless]
      crystal_system    = yes/no         #
output strain tensor in crystal coordinate system (default no)
      simulation_system = yes/no         #
output strain tensor in simulation coordinate system (default yes)
                                         #
(useful if simulation coordinate system differs from crystal coordinate system)
                                         #
The ordering of the strain tensor components is: epsxx, epsyy, epszz, epsxy, epsxz, epsyz
      boxes             = yes/no         #
For each grid point, in 1D two points are printed out to mimic
                                         # abrupt discontinuities at interfaces (in 2D four points, in 3D eight points)
                                         #
Obsolete: The strain tensor output is in percent (This is different compared to nextnano³.)
   }

   output_stress_tensor{                 #
output (symmetric) stress tensor sigmaij:    sigmakl = Cijkl epsilonij) [GPa]
      crystal_system    = yes/no         #
output stress tensor in crystal coordinate system (default no)
      simulation_system = yes/no         #
output stress tensor in simulation coordinate system (default yes)
                                         #
(useful if simulation coordinate system differs from crystal coordinate system)
                                         #
The ordering of the stress tensor components is: sigmaxx, sigmayy, sigmazz, sigmaxy, sigmaxz, sigmayz
      boxes             = yes/no         #
   }

   output_hydrostatic_strain
{            #
prints out the hydrostatic strain, i.e. the trace of the strain tensor
                                         # Tr(epsilonij) = epsilonxx + epsilonyy + epsilonzz  [dimensionless]
      boxes             = yes/no         #
                                         #
Note: The hydrostatic strain output is in percent (This is different compared to nextnano³.)
   }

   output_distortion_tensor{             #
output distortion tensor uij (which can be nonsymmetric for certain growth directions) uxx uyy uzz uxy uyx uxz uzx uyz uzy [dimensionless]
      crystal_system    = yes/no         #
output distortion tensor in crystal coordinate system (default no)
      simulation_system = yes/no         #
output distortion tensor in simulation coordinate system (default yes)
      boxes             = yes/no         #
   }

   output_displacement{                  #
output displacement vector [nm]
      crystal_system    = yes/no         #
output displacement vector in crystal coordinate system (default no)
      simulation_system = yes/no         #
output displacement vector in simulation coordinate system (default yes)
      boxes             = yes/no         #
   }

   output_force_density{                 #
output force density vector field fi [nN/nm^3] (at moment output may be not fully correct; not tested sufficiently)
      crystal_system    = yes/no         #
output force density vector field in crystal coordinate system (default no)
      simulation_system = yes/no         #
output force density vector field in simulation coordinate system (default yes)
      boxes             = yes/no         #
   }

   output_elastic_energy_density
{        #
output elastic energy density (1/2 Cijkl epsilonij epsilonkl) [eV/nm^3]
                                         #
The integrated elastic energy is printed out in log file.
      boxes             = yes/no         #
   }

   output_polarization_charges{}         #
prints out piezo and pyroelectric charge densities [1018/cm3] in case they were calculated. Pyroelectric charges due to spontaneous polarization apply to wurtzite only.
                                        
# Piezoelectric charges can be calculated for both zinc blende and wurtzite in case the strain was calculated.
                                         # The piezo charge density is written to: density_piezoelectric_charge.dat (rhopz)
                                        
# For diamond like crystal structures that have an inversion center such a Si or Ge, piezoelectric charges do not exist.

                                        
# The pyro charge density is written to: density_pyroelectric_charge.dat (rhopy)
                                        
# It applies to wurtzite only and is independent of strain and is due to spontaneous polarization.

                                        
# If both, piezo and pyroelectric charge densities were calculated, the sum of both charge densities (total polarization charge density) is written to: density_polarization_charge.dat (rhoP = rhopz + rhopy)
                                        
# To summarize:
                                        
#    zincblende: density_piezoelectric_charge.dat (rhopz)
                                        
#    wurtzite:     density_piezoelectric_charge.dat (rhopz), density_pyroelectric_charge.dat (rhopy), density_polarization_charge.dat (rhoP = rhopz + rhopy)

   output_polarization_vector{           # prints out piezo and pyroelectric polarization vector [C/cm2]. Pyroelectric polarization due to spontaneous polarization apply to wurtzite only.
                                        
# The piezoelectric polarization vector depends on strain and it is zero if no strain is present.
      crystal_system    = yes/no         #
output polarization vector in crystal coordinate system (default no)
      simulation_system = yes/no         #
output polarization vector in simulation coordinate system (default yes)
      boxes             = yes/no         #
}


   output_sparse_matrix{                 #
output sparse matrix used in strain solver
      type = "                           #
enumerate desired types of sparse matrix output in .mtx format (optional). If type is not defined, values is taken as default type.
              values                     #
output sparse matrix as it is
              zero_nonzero               #
output matrix containing '0' and '1' for zero and non-zero entries of sparse matrix
              zero_nonzero_absolute      #
output matrix containing '0' and '1' for zero and non-zero absolute values of entries of sparse matrix
              all                        #
output all types listed above
             "                           #
   }
 

   Output of material parameters

   output_lattice_constants{             #
Output lattice constants.
      boxes             = yes/no         #
(optional)
   }
   output_elastic_constants{             #
Output elastic constants.
      boxes             = yes/no         #
(optional)
   }
   output_piezo_constants{               #
Output piezoelectric constants.
      boxes             = yes/no         #
(optional)
   }
   output_second_order_piezo_constants{  #
Output 2nd order piezoelectric constants.
      boxes             = yes/no         #
(optional)
   }
   output_pyro_constants{                #
Output pyroelectric constants, i.e. spontaneous polarization constants.
      boxes             = yes/no         #
(optional)
   }

}