nextnano.com
 nextnano≥
 Download | SearchCopyright | Publications
 * password protected

 

nextnano≥ software

 

  Grid specification

 

 

 
Up
 

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
                                                                     
! redundant information: $simulation-dimension, orientation = ... is now used. However, this specifier must be still there. (CHECK: Why???)
 force-grid-lines-at-simulation-boundaries  character       optional  !
 force-grid-lines-at-region-boundaries      character       optional  !
                                                                      !
 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 specification

 

Grid lines (nodes) between explicitly defined grid lines

x-nodes = int1  int2  ...
y-nodes = int1  int2  ...
z-nodes = int1  int2  ...

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.)

 

 

 

Grid type

grid-type = 1 1 1 for xyz-grid
          = 1 0 1 for xz-grid
          = 1 1 0
for xy-grid
          =  ...
          = 1 0 0
for x-grid

The grid type selects by an integer array the coordinate axes relevant for the present simulation.
This specifier contains redundant information, i.e. the same information as $simulation-dimension, orientation = ... which is now used.
However, the specifier grid-type must be still there although the values specified here can be arbitrary. (CHECK: Why?)


force-grid-lines-at-simulation-boundaries = yes !
(default: yes)
                                          = no  !
Forces grid lines to exist at minimum and maximum x, y and z coordinates as specified in $domain-coordinates.

force-grid-lines-at-region-boundaries     = yes ! (default: yes)
                                          = no  !
Forces grid lines to exist at region boundary coordinates as specified in $regions.

 

Grid lines

x-grid-lines = double1  double2  double3 ... ! [nm]
y-grid-lines = double1  double2  double3 ... ! [nm]
z-grid-lines = double1  double2  double3 ... ! [nm]

Explicit specification of grid lines for the coordinate directions of the simulation domain. For each coordinate specified under keyword $regions there must exist a grid line. In addition to these, one is allowed to specify extra grid lines. At material boundaries there must be a grid line (or a grid line determined by an appropriate number of nodes specified in the following).

 

Grid lines (nodes) between explicitly defined grid lines

x-nodes = int1  int2  ...
y-nodes = int1  int2  ...
z-nodes = int1  int2  ...

Between each grid line there are a certain number of nodes. One node is a kind of grid line.
(The final grid which is called physical grid, consisting of grid lines and nodes is being transformed to the material grid (volume grid). A material grid point is placed exactly in between two physical grid points. The physical grid is being discretized to solve for instance the Poisson equation. More information on grids ...)

Subregions, specified by grid lines above, must be on a grid line of the final grid.

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.

All our equations are numerically solved on a discrete grid, i.e. for each node (i.e. grid-lines and nodes) a value for the electrostatic potential and the wave function amplitudes is calculated.
(Even in nature the crystal is not a continuum but is made from discrete atoms.
For a distance of 1 nm, 7 nodes correspond to a grid spacing of 0.142 nm which is also the distance of two neighboring atoms in graphene.
The nearest neighbor distance in diamond is 0.154 nm.
The nearest neighbor distance in silicon is 0.235 nm.
The lattice constant in silicon is 0.532 nm.)

In each direction at least three grid points have to be defined, e.g. one grid line (x-grid-lines)  +  one node (x-nodes)  +  one grid-line (x-grid-lines) = 3 grid points.

 

Grid factors (inhomogeneous grid)

x-grid-factors = double1  double2  ...
y-grid-factors = double1  double2  ...
z-grid-factors = double1  double2  ...

Grid coarsening factors in subregions. The grid factor is the exponent of a geometric series.

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.
A geometric factor of 1.0 is the equivalent of equal spacing.
(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.0.)

In a geometrically spaced region, the distance between two consecutive nodes changes by the grid factor (rate of change or common ratio).
For instance, with a geometric factor of 2.0, the largest division is twice the length of the previous division, which is twice the length of the division before that, ...

Example:

  x-grid-lines   = -32.0   0.0   32.0  ! [nm]
  x-nodes        =      31    31
  x-grid-factors =      0.5   2.0

The grid lines will be positioned at
  -32.0  -16.0  -8.0  -4.0  -2.0  -1.0  -0.5  -0.25  -0.125  -0.0625  ...  0.0  ...  4.0  8.0  16.0  32.0
So the common ratio is 0.5 and 2.0, i.e. the values are half the value of the previous one (from -32.0 to 0.0 and twice the value of the previous one (from 0.0 to  32.0).

Values of 0.5 and 2.0 are usually too "large". It is best to use values such as 0.95 or 1.05 that are closer to an equally spaced grid (1.0).

   !-------------------------------------------------------------
   ! Define the distance between the two neighboring grid lines.
   !-------------------------------------------------------------
   distance         = coordinate_max - coordinate_min
   coordinate_delta = distance * (gridfactor - 1.0) / (gridfactor**(nodes+1) - 1.0)
  DO k=1,nodes
   coordinate       = coordinate_min + coordinate_delta * (gridfactor**k - 1.0) / (gridfactor - 1.0)
  END DO

 

1D Example

$grid-specification
 grid-type      = 0 0 1
 z-grid-lines   =
0.0  50.0  100.0  108.0  116.0  196.0  246.0  296.0
 z-nodes        = 
   5     20     15     15     25     20     5
 z-grid-factors =
   1.0   2.0    1.0    1.0    1.0    1.0    1.0
$end_grid-specification

For a distance of 1 nm, 2 nodes should be a maximum (upper limit).

 

2D Example

This picture resembles the Double Gate MOSFET in 2D Tutorial.

This grid was produced by the following lines in the input file:

!---------------------------------------------------------------------------!
$regions                                                                    !
region-number = 1          base-geometry = rectangle   region-priority = 1  !
x-coordinates = 19d0 28d0  y-coordinates = 0d0 116d0                        !
Si
region-number = 2          base-geometry = rectangle   region-priority = 2  !
x-coordinates = 19d0 28d0  y-coordinates = 0d0 8d0                          !
Source
region-number = 3          base-geometry = rectangle   region-priority = 2  !
x-coordinates = 19d0 28d0  y-coordinates = 108d0 116d0                      !
Drain
region-number = 4          base-geometry = rectangle   region-priority = 2  !
x-coordinates = 0d0 17d0   y-coordinates = 39d0 78d0                        !
Gate
region-number = 5          base-geometry = rectangle   region-priority = 2  !
x-coordinates = 30d0 48d0  y-coordinates = 39d0 78d0                        !
Backgate
$end_regions                                                                !
!---------------------------------------------------------------------------!

!---------------------------------------------------------------------------!
$grid-specification
                                                         !
grid-type      = 0 1 1                                                      !
x-grid-lines   = 0d0 17d0 19d0 19.5d0 27.5d0 28d0 30d0 48d0                 !
x-nodes        =    3    5    1      10     1    5    3                     !
x-grid-factors =    1d0  1d0  1d0    1d0    1d0  1d0  1d0                   !
y-grid-lines   = 0d0 8d0 39d0 39.5d0 77.5d0 78d0 108d0 116d0                !
y-nodes        =    1   10   1      20     1    10    1                     !
y-grid-factors =    1d0 1d0  1d0    1d0    1d0  1d0   1d0                   !
$end_grid-specification                                                     !
!---------------------------------------------------------------------------!

Every x or y value under $regions has to be specified under $grid-specification. Then a grid line is set. Between these grid lines additional grid lines are set depending on the value of nodes.