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.
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 = yes !
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 = ...
Deformed volumne correction: The idea is, that we have to minimize the elasticity energy:
E = \int C*eps*eps* dV.
In principle dV should be the non-deformed volume, not the final volume.
We minimize:
E = \int C * eps* eps* (1 - Tr(eps)) dV which is only a low order correction.
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
|