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

 Download | SearchCopyright | News | Publications
 * password protected

 

nextnano software

 

  elasticity-strain-model

 

 

 
Up
 

strain-minimization-model

Under the keyword $simulation-flow-control there is the specifier strain-calculation. If for this strain-minimization is chosen, this keyword has to be present in the input file.

 

!--------------------------------------------------------!
$strain-minimization-model                    optional   !
 substrate-cluster-number         integer     required   !
reference cluster for strain
 boundary-condition-x             character   optional   ! Neumann
or periodic
 boundary-condition-y             character   optional   ! Neumann
or periodic
 boundary-condition-z             character   optional   ! Neumann
or periodic
                                                         !
 
grown-on-substrate               character   optional   ! 'yes'
or 'no' (thick substrate or freestanding structure)
 deformed-volume-correction       character   optional   ! 'yes'
or 'no'
                                                         !
 input-substrate-strain           character   optional   ! 'yes'
or 'no'
 strain-epsilon-substrate-xx      double      optional   ! epsilonxx
 strain-epsilon-substrate-yy      double      optional   ! epsilonyy
 strain-epsilon-substrate-zz      double      optional   ! epsilonzz
 strain-epsilon-substrate-xy      double      optional   ! epsilonxy
 strain-epsilon-substrate-xz      double      optional   ! epsilonxz
 strain-epsilon-substrate-yz      double      optional   ! epsilonyz
                                                         !
 input-substrate-stress           character   optional   ! 'yes'
or 'no'
 stress-sigma-substrate-xx        double      optional   ! sigmaxx
 stress-sigma-substrate-yy        double      optional   ! sigmayy
 stress-sigma-substrate-zz        double      optional   ! sigmazz
 stress-sigma-substrate-xy        double      optional   ! sigmaxy
 stress-sigma-substrate-xz        double      optional   ! sigmaxz
 stress-sigma-substrate-yz        double      optional   ! sigmayz
$end_strain-minimization-model                optional   !
!--------------------------------------------------------!
 

Syntax

substrate-cluster-number = 1
                         = 2
                         =
...

This refers to the reference cluster for strain. It is very important that this substrate cluster is somewhere at the boundary of the simulation area and that it has nothing to do with the specific device area one is interested in.
The strain in the substrate is set to zero. Especially, it is very important, that the substrate-cluster has its own
cluster-number and only its own region-number associated with it.
   cluster-number = 1    region-numbers = 1       ! CORRECT
The substrate must also have its own material.
   material-number =
1
   material-name   =
GaAs
   cluster-numbers =
1

This would be wrong:
   cluster-number = 1    region-numbers = 1 3     ! WRONG

This would be wrong:
   material-number =
1
   cluster-numbers =
1  2  5                      ! WRONG
   material-name   =
GaAs


Then Dirichlet values (strain=0; no displacement) for this cluster are set. (If the substrate-cluster would be identical to the other clusters containing the same material (i.e.
region-numbers = 1 AND 3), for both of these Dirichlet values would be set leading to a wrong strain calculation.)

 

boundary-condition-x     = periodic
                         = Neumann

 

boundary-condition-y     = periodic
                         = Neumann

 

boundary-condition-z     = periodic
                         = Neumann

Neumann boundary conditions correspond to the case of 'no external forces acting on the sample', i.e. Neumann sets the derivative of sigma (stress tensor) to zero at boundaries. Note that the stress tensor is a different quantity than the strain tensor epsilon. They are related by:

sigmaij = Cijkl epsilonij

where Cijkl is the elastic stiffness tensor.

For calculation of a quantum well in three dimensions, I got much better results (meaning more symmetric ones) when I used periodic boundary conditions.

 

Note: In 2D there exist some problems with periodic boundary conditions sometimes (strain solver BICGSTAB does not converge).
=> simple_strain_example_yx.in
The version from 2003-04-01 converges, the version from 2003-05-12 does not converge.
If I change the grid from
  x-nodes = 2 10 5 5
  y-nodes = 2 10 5 5
to
  x-nodes = 4 20 10 10
  y-nodes = 4 20 10 10
the strain solver converges.
Major changes between these two versions:
- change in grid (Matthias)
- merging of 2D/3D strain routines to common routines (Stefan).
However, the strange thing is, that the dense grid converges with the version from 2003-05-12 but not with the one from 2003-04-01. (So it is exactly vice versa as before).

 

Strain algorithm which also works for free-standing structures

 grown-on-substrate         = yes  ! thick substrate (default)
                            = no   !
free-standing
 deformed-volume-correction = no   !
(default)
 deformed-volume-correction = no   !
can be used for free-standing
Previously when one minimizes the elastic energy one usually didn't distinguish between deformed and undeformed volume. Now one can distinguish.
The elastic constants must be zero for an 'air cluster'. An air cluster can be used to allow the structure to relax into air (free-standing).
Note: strain-calculation = strain-minimization-new must be specified in $simulation-flow-control.
See also $numeric-control for
 strain-volume-correction-residual   = ...
 strain-volume-correction-iterations = ...

An example is documented in this tutorial: Strain effects in freestanding three-dimensional nitride nanostructures

 

Substrate with arbitrary strain tensor components (e.g. hydrostatic, biaxial, uniaxial, shear strain)

There is also the possibility that a reference lattice ('substrate') has e.g. shear strain tensor components.
The user can specify them in the input file.
Note that this strain tensor refers to the simulation coordinate system, and not to the crystal coordinate system.

 input-substrate-strain           = no       ! (default)
                                  = yes      !
 strain-epsilon-substrate-xx      = 0.05d0   ! epsilonxx
 strain-epsilon-substrate-yy      = 0.05d0   ! epsilonyy
 strain-epsilon-substrate-zz      = 0.05d0   ! epsilonzz
 strain-epsilon-substrate-xy      = 0d0      ! epsilonxy
 strain-epsilon-substrate-xz      = 0d0      ! epsilonxz
 strain-epsilon-substrate-yz      = 0d0      ! epsilonyz
 

If the structure is grown on a substrate then we consider the substrate material as the reference one.
But it can happen that the substrate layer is strained (due to external stress, for example).
Then the reference lattice and the substrate lattice become different.

If this is the case, the user can provide the six strain tensor components of the substrate layer.
The code will compute the new reference lattice parameters and do the elastic energy minimization.
Obviously, these strain tensor components of the substrate can only be entered if it holds: input-substrate-strain = yes
Additional documentation including equations is available as a pdf file: substrate_with_shears.pdf

Note: strain-calculation = strain-minimization-new must be specified in $simulation-flow-control.

For further information, see also this tutorial: Growth of layers on strained substrates

Rather than specifying the strain tensor, the user can alternatively specify an arbitrary stress tensor:

 input-substrate-stress           = no       ! (default)
                                  = yes      !
 stress-sigma-substrate-xx        = 1.0d9    ! [Pa] sigmaxx
 stress-sigma-substrate-yy        = 0d0      ! [Pa] sigmayy
 stress-sigma-substrate-zz        = 0d0      ! [Pa] sigmazz
 stress-sigma-substrate-xy        = 0d0      ! [Pa] sigmaxy
 stress-sigma-substrate-xz        = 0d0      ! [Pa] sigmaxz
 stress-sigma-substrate-yz        = 0d0      ! [Pa] sigmayz
 

The units for the stress are [Pa], e.g. if the substrate is uniaxially stressed with sigmaxx = 1 GPa along the x direction, then all other sigmaij are zero.
 stress-sigma-substrate-xx = 1d9  ! [Pa]
Note that 1 bar is 105 Pa.

Again, this stress tensor refers to the simulation coordinate system, and not to the crystal coordinate system.

The code internally calculates from the stress tensor the relevant strain tensor that is present inside the substrate, and output it.

For further information, see also this tutorial: Growth of layers on strained substrates