Input parser: Keywords - General introduction to some of the
keywords and specifiers including some examples
Specification of input file name
The specification of the input filename is done as a first entry in file keywords.in as follows:
!---------------------------------------------------!
$input_filename
optional !
input-filename
character
optional
!
$end_input_filename
optional !
!---------------------------------------------------!
Example
!---------------------------------------------------!
$input_filename
optional !
input_file1.in
character
optional
! Reads in "input_file1.in".
$end_input_filename
optional !
!---------------------------------------------------!
More information on this keyword
...
Specification of the simulation domain dimension and its orientation
!---------------------------------------------------!
$simulation-dimension
!
dimension =
2
!
orientation = 1 0 1
!
$end_simulation-dimension
!
!---------------------------------------------------!
Possible values for dimension are 1, 2, 3; specifying a one-dimensional, a
two-dimensional or a three-dimensional simulation domain,
respectively.
The specifier orientation defines the orientation of the simulation
domain relative to the (x,y,z) coordinate system. A three dimensional array,
containing 0 and/or 1, is expected.
The 1's in this array select the relevant axis.
3-dimensional simulation
dimension = 3
orientation = 1 1 1
2-dimensional simulations
dimension = 2
orientation = 1 1 0 or
1 0 1
or 0 1 1
This means, the simulation is performed in the (x,y)-plane, the (x,z)-plane or
in the (y,z)-plane
1-dimensional simulation
dimension = 1
orientation = 1 0 0 or
0 1 0
or 0 0 1
This means, the simulation is performed along the x direction, the y-direction
or the z-direction.
More information on this keyword
...
Domain coordinates:
Orientation of crystal relative to simulation coordinate
system
!------------------------------------------------------!
$domain-coordinates
required ! The global simulation domain is
restricted to be a cuboid, a plane or a line.
domain-type
integer_array required ! 1 1 1
for xyz-domain, 1 0
1 for xz-domain,
! 1 1 0 for
xy-domain, ..., 1
0 0 for x-domain
x-coordinates
double_array
optional ! xmin,xmax of simulation domain
y-coordinates
double_array
optional ! ymin,ymax of simulation domain
z-coordinates
double_array
optional ! zmin,zmax of simulation domain
hkl-x-direction-zb
integer_array optional ! Miller
indices of x-coordinate
axes [0 1 0]; required for two axes
hkl-y-direction-zb
integer_array optional ! Miller
indices of y-coordinate
axes [0 0 1]
hkl-z-direction-zb
integer_array optional ! Miller
indices of z-coordinate
axes [1 0 0]
hkil-x-direction
integer_array optional !
four-digit Miller-Bravais indices of x-coordinate
axes direction [ 1 0 -1 0]
hkil-y-direction
integer_array optional !
four-digit Miller-Bravais indices of y-coordinate
axes direction [-1 2 -1 0]
hkil-z-direction
integer_array optional !
four-digit Miller-Bravais indices of z-coordinate
axes direction [ 0 0 0 1]
growth-coordinate-axis
integer_array optional !
Must be
specified if strain related quantities have to be considered.
pseudomorphic-on
character
optional ! A default material or
user defined name.
alloy-concentration
double
optional ! In case, that default material is a ternary.
lattice-constants
double_array
optional !
lattice-constants-temp-coeff
double_array
optional !
crystal-type
character
optional ! Required for
non default substrate material: e.g. wurtzite, zincblende.
$end_domain-coordinates
required !
!------------------------------------------------------!
More information on this keyword
...
Basic geometry objects - regions
To build up a geometry, there are - dependent on the
dimension of the simulation to be performed - various basic geometry elements
available.
These geometry elements are specified within the keyword
$regions and can be clustered to a
bigger object later on.
General specifiers
region-number
An integer number >= 1.
Numbering must be unique. All region numbers together must form a dense set
1,2,3,....,maxnumber.
region-priority
An integer number >= 1.
In case of overlapping regions, the region with higher priority (= higher
numerical value) overwrites the region with lower priority.
!--------------------------------------------------!
$regions
optional !
region-number
integer
required ! an integer number to
refer to geometry element
region-priority integer
required ! a positive integer to
set overwriting priority, a smaller number
! can be overwitten by any higher
base-geometry
character
required ! type of geometry
object:
! 3D:
cuboid, obelisk,
cone, semiellipsoid,
hexagonal-obelisk,
triangular-prism
! 2D:
rectangle, triangle,
semiellipse
! 1D:
line
x-coordinates
double_array
optional ! for cuboid,
rectangle, line:
xmin, xmax
y-coordinates
double_array
optional ! for
cuboid,
rectangle, line:
ymin, ymax
z-coordinates
double_array
optional ! for
cuboid,
rectangle, line:
zmin, zmax
base-coordinates double_array
optional ! for
obelisk, cone:
! xmin xmax ymin ymax zmin zmax of
obelisk (cone)
base plane
! (one pair must be equal)
top-coordinates double_array
optional ! for
obelisk, cone,
semi-ellipse:
! xmin xmax ymin ymax zmin zmax of
obelisk (cone)
base plane
! (one pair must be equal)
! x y z for
semi-ellipse
corner-coordinates double_array
optional ! for
triangle: x1
y1 x2 y2 x3y3
! triangle corner coordinates,
interpreted via orientation
semi-ellipse-base double_array
optional ! for
semiellipse: base line ellipse:
! two pairs of
xmin,xmax ymin,ymax
zmin,zmax - one
pair equal numbers
semi-ellipse-top double_array
optional ! for
semiellipse: top coordinate pair: e.g. for
coordinate orientation (101) -> (x,z)
$end_regions
optional !
!--------------------------------------------------!
3-dimensional objects: cuboid, obelisk, cone, semiellipsoid,
hexagonal-obelisk, triangular-prism
2-dimensional objects: rectangle, triangle, semiellipse
1-dimensional objects: line
Details of specification
3D Example: Cuboid
$regions
region-number = 1
base-geometry = cuboid
region-priority = 1
x-coordinates = xmin xmax
y-coordinates = ymin ymax
z-coordinates = zmin zmax
$end_regions
The surfaces of the cuboid are assumed to be in coordinate planes of the
simulation coordinate system. The coordinates above specifiy the six coordinate
planes which limit the cuboid.
For other 3D objects like obelisk,
cone,
semiellipsoid,
hexagonal-obelisk or triangular-prism,
you can find detailed descriptions here:
$regions.
2D Example: Rectangle
$regions
region-number = 1
base-geometry = rectangle
region-priority = 1
x-coordinates = xmin xmax
y-coordinates = ymin ymax
$end_regions
Two pairs of delimiting coordinates are required. Whether
these have to be x-coordinates and y-coordinates as in the example above, or
another combination (e.g. x, z) depends on the simulation
orientation which is specified already.
For other 2D objects like triangle
or semiellipse, you can
find detailed descriptions here: $regions.
1D Example: Line
$regions
region-number = 1
base-geometry = line
region-priority = 1
x-coordinates = xmin xmax
$end_regions
Chosen coordinates must be consistent with simulation orientation.
Other 1D objects do not exist. You can find detailed descriptions here:
$regions.
Region clusters
Regions can be clustered to bigger objects by the keyword
$region-cluster. Any region must be assigned to a cluster which is
labeled by its cluster-number.
cluster-number = integer (>=1)
Also the so called default region must be assigned to a cluster. The default
region is the rest of the simulation domain which is not filled out by defined
regions. It might happen, that the default region is an empty region.
Nevertheless it must be assigned to cluster.
In any case:
default region
number = maximum region number defined + 1.
The regions which have to be clustered to one cluster are specified by their
numbers with
region-number = regnum1 regnum2 regnum3 ...
!-----------------------------------------------------!
$region-cluster
required !
cluster-number
integer
required ! An
integer number to refer to clustered geometry element.
region-numbers
integer_array
required ! Region numbers, belonging to
this cluster.
$end_region-cluster
required !
!-----------------------------------------------------!
Note:
Be careful in 3D when you specify for strain calculation "strain-minimization"
(see $strain-minimization-model)
to define your substrate as a separate cluster.
More information on this keyword ...
Similar to the 1D, 2D and 3D objects in regions, the same applies to
quantum regions and current regions.
Implementing new geometries
In order to implement new geometries (e.g. the 3D geometry
"hexagonal-obelisk") for the region, quantum and current clusters, the following
files and subroutines have to be modified:
Input files
db_keys.in
$region_restrictions
...
3D-base-geometry-5
character required
! name of new three-dimensional geometry element
...
size-3D-base-geometry-5 integer
required ! number of expected input for
the new geometry element
database.in
$region_restrictions
...
3D-base-geometry-5 =
hexagonal-obelisk ! name of new three-dimensional geometry
element
...
size-3D-base-geometry-5 = 12
! number of expected input for the new geometry element
Source code
cluster_regions.f90
MODULE
mod_cluster_regions
- SUBROUTINE cluster_regions
SUBROUTINE sizes
SUBROUTINE is_in_region (Important
subroutine where the region is defined.)
cluster_quantum_regions.f90
MODULE
mod_cluster_quantum_regions
- SUBROUTINE cluster_regions
SUBROUTINE sizes
SUBROUTINE is_in_region (Important
subroutine where the region is defined.)
cluster_current_regions.f90
MODULE
mod_cluster_current_regions
- SUBROUTINE cluster_regions
SUBROUTINE sizes
SUBROUTINE is_in_region (Important
subroutine where the region is defined.)
check_regions.f90
MODULE
mod_check_regions
- SUBROUTINE check_regions
SUBROUTINE get_base_names
check_quantum_regions.f90
MODULE
mod_check_quantum_regions
- SUBROUTINE check_quantum_regions
SUBROUTINE get_base_names
check_current_regions.f90
MODULE
mod_check_current_regions
- SUBROUTINE check_current_regions
SUBROUTINE get_base_names
Grid specification
!----------------------------------------------!
$grid-specification
required !
grid-type
integer_array required !
1 1 1 for xyz-grid,
1 0 1 for xz-grid,
1 1 0 for xy-grid ...,
1 0 0 for x-grid
x-grid-lines
double_array
optional ! specification of
gridlines required
x-nodes
integer_array optional !
subregions, specified by gridlines above must be on a grid line of the final
grid
x-grid-factors double_array
optional ! grid coarsening
factors in subregions
y-grid-lines
double_array
optional ! specification of
gridlines required
y-nodes
integer_array optional !
subregions, specified by gridlines above must be on a grid line of the final
grid
y-grid-factors double_array
optional ! grid coarsening
factors in subregions
z-grid-lines
double_array
optional ! specification of
gridlines required
z-nodes
integer_array optional !
subregions, specified by gridlines above must be on a grid line of the final
grid
z-grid-factors double_array
optional ! grid coarsening
factors in subregions
$end_grid-specification
required !
!----------------------------------------------!
Grid type
Grid type selects by an integer array the coordinate axis relevant for the
present simulation. It must be identical to the array orientation specified
under the keyword $simulation-dimension. The input for the grid
type is required and mainly used for consistency checks.
Grid lines
x-grid-lines = double1 double2 double3 ...
y-grid-lines = double1 double2 double3 ...
z-grid-lines = double1 double2 double3
...
Explicit specification of grid lines for the coordinate directions of the
simulation domain.
Grid lines (nodes) between explicitly defined grid lines
x-nodes = int1 int2 ...
y-nodes = int1 int2 ...
z-nodes = int1 int2 ...
Add int1, int2, ... grid lines between two explicitly specified grid lines
above. Between any explicitly defined pair of gridlines, the number of
additional nodes must be specified, even if zero grid lines (nodes) have to be
added.
For a distance of 1 nm, 2 nodes should be a maximum (upper limit).
Grid factors (inhomogeneous grid)
x-grid-factors = double1 double2 ...
y-grid-factors = double1 double2 ...
z-grid-factors = double1 double2 ...
The nodes specified above are distributed according to a geometric series
between the explicitly defined grid lines. The spacing between successive
additional grid lines increases (factor > 1.0) or decreases
(factor <1.0) in the corresponding coordinate axis direction.
(Comment: The term "inhomogeneous" refers to grid lines (=nodes)
between two adjacent grid lines (=x/y/z-grid-lines). However, the
total grid of the whole device is likely to be inhomogeneous in general even if
the grid factor is always 1.0d0.)
More information on this keyword
...
Material
!---------------------------------------------------------!
$material
required ! specifications, to assign material to regions
material-number
integer
required !
an integer number to refer to a specific material
cluster-numbers
integer_array required ! assign material to these
region numbers
material-name
character
required !
e.g.
GaAs, AlAs, Al(x)Ga(1-x)As, Si(x)Ge(1-x), InP, GaP
alloy-function
character
optional !
constant, function
material-model
character
optional !
material-type
character
optional !
e.g.
GaAs, AlAs, Al(x)Ga(1-x)As, Si(x)Ge(1-x), InP, GaP
!hkl-x-direction
integer_array optional ! Miller
indices of
x-coordinate axes [0 1 0]; required for two axes
!hkl-y-direction
integer_array optional ! Miller
indices of
y-coordinate axes [0 0 1]
!hkl-z-direction
integer_array optional ! Miller
indices of
z-coordinate axes [1 0 0]
!hkil-x-direction integer_array
optional ! four-digit Miller-Bravais
indices of x-coordinate axes direction
[0 0 0 1]
!hkil-y-direction
integer_array optional !
four-digit Miller-Bravais indices of
y-coordinate axes direction [2 -1 -1 0]
!hkil-z-direction
integer_array optional !
four-digit Miller-Bravais indices of
z-coordinate axes direction [1 0 0]
growth-coordinate-axis
integer_array
optional ! must be specified if strain related quantities
have to be considered
pseudomorphic-on
character
optional ! a
default material or user defined name
alloy-concentration
double
optional ! in case, that default material is a ternary
lattice-constants double_array
optional !
lattice-constants-temp-coeff double_array
optional !
crystal-type character
optional ! required for nondefault substrate material:
either wurtzite or zincblende
$end_material
required !
!---------------------------------------------------------!
More information on this keyword ...
|