|
| |
Regions
Basic geometry objects
To built 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 (only possible in 3D simulations):
cuboid, obelisk, cone, semiellipsoid,
hexagonal-obelisk,
triangular-prism
2-dimensional objects (only possible in 2D simulations):
rectangle, triangle, semiellipse
1-dimensional objects (only possible in 1D simulations):
line
Details of specification
3-dimensional objects
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.
Obelisk
$regions
region-number = 1
base-geometry = obelisk
region-priority = 1
base-coordinates = xmin xmax ymin ymax zmin zmax
top-coordinates = xmin xmax ymin ymax zmin zmax
$end_regions
Base and top plane of the obelisk have to be in parallel coordinate planes.
These planes are identified by the implicit rule, that a pair of coordinate
values (e.g. ymin ymax) has the same value (ymin =
ymax).
In this example, the plane is in the (x, z)-coordinate
plane. The remaining four coordinates specify a rectangle in the corresponding
plane.
Cone
$regions
region-number = 1
base-geometry = cone
region-priority = 1
base-coordinates = xmin xmax ymin ymax zmin zmax
top-coordinates = xmin xmax ymin ymax zmin zmax
$end_regions
Base and top plane of the cone have to be in parallel coordinate planes. This
plane is identified by the implicit rule, that a pair of coordinate values (e.g.
xmin xmax) has the same value (xmin =
xmax). In this
example, the plane is in the (y, z)-coordinate plane.
ymin ymax and zmin
zmax specify the
diameter of the cone top and base in the y and z direction, respectively. This
corresponds to the specification of ellipses in the base and top plane.
How to specify a cylinder?
A cylinder is specified as a special case of a "cone".
For a cone, one specifies base and top coordinates. Let us assume we have a
spherical cylinder of diameter 10 nm and height 15 nm. Then the base and top coordinates
would be, for example,
base-coordinates =
10d0 20d0 10d0 20d0 15d0 15d0
! (xmin,xmax,ymin,ymax,zmin,zmax) =
(10,20,10,20,15,15)
top-coordinates = 10d0 20d0
10d0 20d0 30d0 30d0
! (xmin,xmax,ymin,ymax,zmin,zmax) =
(10,20,10,20,30,30)
In other words, the x and y-coordinates specify the principal axes of the bottom
and top ellipse (or circle) of the cylinder, respectively, and the z-coordinates
specify the planes in which these two ellipses lie.

Semiellipsoid
$regions
region-number = 1
base-geometry = semiellipsoid
region-priority = 1
base-coordinates = xmin xmax ymin ymax zmin zmax
top-coordinates = xtop ytop ztop
$end_regions
Base plane of the semiellipsoid must be in a coordinate plane. This plane is
identified by the implicit rule, that a pair of coordinate values (e.g.
ymin ymax) has identical values (ymin =
ymax).
In this example, the plane is in the (x,z)-coordinate plane. Top coordinates
specify an arbitrary point "above" the ellipse, representing the base of the
semiellipsoid.
Example: 3D sphere
A 3D sphere can be constructed from two semiellipsoids. In this example, the
bottom planes of the two half-spheres are at z = 5 nm.
The upper half-sphere extends from 5 nm to 6 nm, the lower half-sphere from 5 nm
to 4 nm.
The extensions in x and y directions for both half-spheres are from 4 nm to 6
nm.
Consequently, the sphere has a diameter of 2 nm.
region-number = 1
base-geometry = semiellipsoid
! (upper half-sphere)
base-coordinates = 4d0 6d0 4d0 6d0
5d0 5d0 ! xmin xmax ymin ymax zmin=zmax
top-coordinates = 5d0 5d0 6d0
! xtop ytop ztop
region-number = 2
base-geometry = semiellipsoid
! (lower half-sphere)
base-coordinates = 4d0 6d0 4d0 6d0
5d0 5d0 ! xmin xmax ymin ymax zmin=zmax
top-coordinates = 5d0 5d0 4d0
! xtop ytop ztop

Hexagonal-obelisk
$regions
region-number = 1
base-geometry =
hexagonal-obelisk
region-priority = 1
base-coordinates = xmin xmax ymin ymax zmin zmax
top-coordinates = xmin xmax ymin ymax zmin zmax
$end_regions
Base and top plane of the hexagonal-obelisk have to be in parallel coordinate planes.
These planes are identified by the implicit rule, that a pair of coordinate
values (e.g. zmin
zmax) has the same value (zmin =
zmax).
In this example, the plane is in the (x, y)-coordinate
plane. The remaining four coordinates specify a rectangle in the corresponding
plane.
This geometry element is useful for wurtzite.
Many thanks to Lu Fu-Fa (Institute of Technology (CCIT), Taiwan, R.O.C.) for
useful suggestions regarding the implementation of this geometry element.
Two hexagonal-obelisk shapes are
possible:
- 'hexagonal-cylinder' with 6-fold rotational symmetry axis oriented along
the z direction (i.e.
zmin =
zmax).
Requirements:
xmin(base) =
xmin(top)
xmax(base) =
xmax(top)
ymin(base) =
ymin(top)
ymax(base) =
ymax(top)
Note: This condition should be fullfilled:
ymax(base)
-
ymin(base)
> (xmax(base)
-
xmin(base)) / 0.866
- 'hexagonal-pyramid' with 6-fold rotational symmetry axis oriented along
the z direction (i.e.
zmin =
zmax).
Requirements:
xmin(top), xmax(top),
ymin(top), ymax(top)
arbitrary
Note: This condition should be fullfilled:
ymax -
ymin > (xmax
-
xmin) / 0.866
For both shapes it holds:
- height of pyramid/cylinder:
zmax(top)
- zmax(base)
(zmin =
zmax)
- width in x direction (distance between two parallel planes):
xmax(base) - xmin(base)
- width in y direction (distance between two corners) if the condition
ymax(base)
-
ymin(base)
> (xmax(base)
-
xmin(base)) / 0.866 is fullfilled:
[xmax(base)
- xmin(base)]/0.866 [Note:
0.866 = cos(30°)]
If the above cited condition is not fullfilled, then the width is:
ymax(base) - ymin(base)
- width along y
> width along x if ymax(base)
-
ymin(base)
> xmax(base)
-
xmin(base)
- center of hexagonal base plane on x axis: 0.5*(
xmin(base)
+ xmax(base))
- center of hexagonal base plane on y axis: 0.5*(
ymin(base)
+ ymax(base)):
ymin(base) and ymax(base)
can be used to shift the hexagon along the y axis.
Two sides of the hexagonal base plane are aligned parallel to the y axis.
To rotate the hexagonal base plane by 30 degrees, the user has to specify
values for
xmin(top), xmax(top),
ymin(top),
ymax(top) so that it holds:
xmax(top) -
xmin(top) > ymax(top)
- ymin(top)
In this case it holds:
- width in x direction (distance between two corners) if the condition
xmax(base) -
xmin(base)
> (ymax(base)
-
ymin(base)) / 0.866 is fullfilled:
[ymax(base)
- ymin(base)]/0.866 [Note: 0.866 =
cos(30°)]
- width in y direction (distance between two parallel planes):
ymax(base) -
ymin(base)
- width along y
< width along x if
xmax(base) -
xmin(base)
> ymax(base)
- ymin(base)
- center of hexagonal base plane on x axis: 0.5*(
xmin(base)
+ xmax(base)):
xmin(base) and xmax(base)
can be used to shift the hexagon along the x axis.
If the 6-fold rotational axis is oriented along the x (i.e.
xmin =
xmax) or y directions (i.e.
ymin =
ymax), cyclic permutations hold for
the above statements.
Example input file: 3DHexagonalObelisk.in
If you want to obtain this input file, please contact stefan.birner@nextnano.de.
Screenshots:
Hexagonal shaped pyramid with flat top plane:
Hexagonal shaped pyramid:
Hexagonal shaped "cylinder":

Triangular prism
$regions
region-number = 1
base-geometry =
triangular-prism
region-priority = 1
corner-coordinates = x1 y1 z1 x2 y2
z2 x3 y3 z3
x4 y4
z4 x5 y5 z5 x6 y6 z6
$end_regions

Example:
corner-coordinates = 10d0 10d0 10d0
! x1 y1 z1
10d0 30d0 10d0 ! x2 y2 z2
20d0 20d0 10d0 ! x3 y3 z3
10d0 10d0 40d0 ! x4 y4 z4
10d0 30d0 40d0 ! x5 y5 z5
20d0 20d0 40d0 ! x6 y6 z6
Restrictions: triangular-prism
must be oriented so that the triangles are perpendicular to either the x, y
or z directions.
Example: Triangles perpendicular to z direction. Then it must hold:
==> corner-coordinates => z1 = z2 = z3
z4 = z5 = z6
In addition it holds:
x1 = x4, y1 = y4
x2 = x5, y2 = y5
x3 = x6, y3 = y6
2-dimensional objects
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.
Triangle
$regions
region-number = 1
base-geometry = triangle
region-priority = 1
corner-coordinates = x1 y1 x2 y2 x3 y3
$end_regions
The corner coordinates refer to the plane, specified by the simulation
orientation.
Semiellipse
$regions
region-number = 1
base-geometry = semiellipse
region-priority = 1
semi-ellipse-base = xmin xmax ymin ymax
semi-ellipse-top = x1 y1
$end_regions
semi-ellipse-base: Here, 2 values must be equal (meaning ONLY 2
values can be equal), e.g. ymin=ymax=40d0. Then one boundary of the
object is a line at y=40 nm. Base plane of the semiellipse must be in a coordinate plane. This plane is
identified by the implicit rule, that a pair of coordinate values (e.g.
ymin ymax) has identical values (ymin =
ymax).
semi-ellipse-top: This defines a point which determines the height
of the semiellipse.
In our example (ymin = ymax), the plane is in the (x,z)-coordinate plane. Top coordinates
specify an arbitrary point "above" the ellipse, representing the base of the
semiellipse.
Top coordinate must be lower than upper coordinate of base line border in
direction of axis mentioned above.
Top coordinate must be higher than lower coordinate of base line border in
direction of axis mentioned above.
xmin < x1 <xmax
y1 < ymin=ymax or
y1 > ymin=ymax
Examples:
 |
|
semi-ellipse-base = xmin xmax ymin ymax
semi-ellipse-top = x1 y1
Example 1:
semi-ellipse-base = 60d0 120d0
40d0 40d0
semi-ellipse-top = 100d0
20d0
From these data, the following points are extracted:
(point: (x,y))
base: ( 60,40)
(120,40)
top:
(100,20) |
 |
|
Example 2:
semi-ellipse-base =
60d0 120d0 40d0 40d0
semi-ellipse-top = 100d0
60d0
We changed the y1 coordinate of semi-ellipse-top from
20d0 to 60d0. |
 |
|
Example 3:
semi-ellipse-base =
40d0 40d0 20d0 80d0
semi-ellipse-top = 100d0
60d0
Here we changed semi-ellipse-base: Now the two x
coordinates have identical values.
|
 |
|
Example 4:
semi-ellipse-base =
40d0 40d0 50d0 70d0
semi-ellipse-top = 100d0
60d0
Here we changed the ymin and ymax coordinates of
semi-ellipse-base: Now the y extension of the semiellipse is
restricted from ymin = 50 nm to ymax = 70 nm. The
baseline is at the fixed value for x = 40 nm.
|
 |
|
Example 5:
semi-ellipse-base =
40d0 40d0 40d0 80d0
semi-ellipse-top = 60d0 60d0
semi-ellipse-base = 40d0 40d0 40d0 80d0
semi-ellipse-top = 20d0 60d0
Here we built a circle out of 2 semi-ellipses.
|
 |
|
Example 6:
semi-ellipse-base =
42d0 42d0 40d0 80d0
semi-ellipse-top = 60d0 60d0
semi-ellipse-base = 38d0
38d0 40d0 80d0
semi-ellipse-top = 20d0 60d0
Same as example 5 but this time, we moved the baselines a little bit
apart from each other to make example 5 easier to understand.
|
1-dimensional objects
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.
|