Define here which nodes will be considered in the link operation.
Cutoff
GAMGI supports two methods to define the boundary between
inside (linked) and outside (unlinked) cell regions:
Object
and
Node.
With the
Object method, the link is considered
as long as the object is inside the cell volume (even if the node
is outside). This is the usual method to build crystals.
With the
Node method, the link is considered
as long as the node is inside the cell volume (even if the object
is outside). This method is useful for example to build liquids
and nanostructures.
For all cell representations, a small tolerance (by default 1.0E-4)
is added around the cell volume, to make sure that objects or nodes
exactly in the borders are included.
Nodes
When the cell volume is
Primitive,
Wigner,
Rhombus
or
Sphere, the occupation rules are applied along the primitive vectors.
When the volume is
Conventional, users can choose to apply the
occupation rules to
P nodes (the vertices of the cells) or, when
they exist, to
I nodes (in the center of the cells), to
A,
B,
C nodes (in the center of the faces normal to vectors
a,
b,
c, respectively), or to
R nodes (the
nodes inside rombohedral cells, with an obverse orientation), by pressing
the buttons labeled
P,
I,
A,
B,
C,
R.
When
Cell->Link starts, all nodes are available, though not selected.
When a Cell is selected, the available nodes are selected by default and
nonexistent nodes are automatically disabled.
Rules
GAMGI uses a small language based in patterns of occupation to define
which nodes should be linked (occupied). These pattern rules are formed
by combining the characters
* (meaning ocuppied nodes) and
_
(meaning empty nodes), plus the digits
0-9 (meaning node positions).
These rules are applied separately to each of the selected node subsets.
By default all nodes are accupied, so the initial pattern is
(*, *, *).
The most common examples of occupation rules are simple to understand:
(*, *, *) means apply to all nodes,
(1, 2, 3) means apply
to node (1, 2, 3) only,
(*_, *_, *_) means apply to alternated
nodes only, with the starting node (0, 0, 0) occupied,
(*, 2, *)
means apply only to the nodes where the second coordinate is 2,
(*5, *, *) means apply to all nodes where the first coordinate
is 5 or smaller,
(*, *, _3*) means apply to all nodes where
the third coordinate is 4 or larger.
When digits are not included, the sequences of
* and
_
characters are handled as patterns of occupation that are repeated
until all nodes are scanned. Therefore, the pattern
(*_, *, *)
is equivalent to
(*_*_, *, *) but different from
(*_*, *, *).
Nodes are scanned and marked three times, first along the
a
direction, with the first pattern, then along the
b direction,
with the second pattern and finally along the
c direction,
with the third pattern.
When the first pattern is applied, the nodes in the first plane
(along direction
a) are marked with the pattern first
character, but when the second and third patterns are applied,
the nodes in the first planes (along directions
b,
c)
are preserved (to keep the information introduced with the previous
patterns) and the patterns are scanned not from the first character
but from the character that is equal to the character of the nodes
in the first planes. Therefore, the pattern
(*_, *_, *_) is
equivalent to
(*_, _*, _*) (node (0, 0, 0) is occupied) but
different from
(_*, *_, *_) (node (0, 0, 0) is empty).
When digits are included, they are handled as node coordinates
and fix limits to the range of application of the various patterns.
They can appear in the beginning, meaning that nodes with a smaller
coordinate are empty, in the middle, meaning that the previous
pattern should be repeated only until that node inclusive, or
in the end, meaning that all nodes with a larger coordinate are
empty.
For example:
(*, *_5**_10, *) means repeat sequence one
occupied-one empty along the second direction until the second
coordinate becomes 5 inclusive, then repeat sequence two
occupied-one empty until the second coordinate becomes 10 inclusive,
all the remaing nodes are empty;
(*, *, _5*_10*) means all
nodes are empty along the third direction until the third
coordinate is 5 inclusive, then apply the sequence one occupied-
one empty until the third coordinate becomes 10 inclusive,
all the remaining nodes are occupied.
When only digits appear, nodes with that coordinate are
occupied, all the others, before and after, are empty.
We note that
(*, *, 8) is equivalent to
(*, *, 8_) (nodes are empty except when the third
coordinate is 8) but
(8, *, *) (nodes are empty except
when the first coordinate is 8) is different from
(_8, *, *) (all nodes are empty).
When marking the nodes, the sequence
* (or
** or
***, etc.), meaning these nodes
seem to be occupied, can be overrun by patterns applied
in the other directions, which in turn can be overrun by
the sequence
_ (or
__ or
___, etc.),
meaning these nodes must be empty, or by starting/ending
digits, meaning nodes before/after must be empty, this way
establishing a hierarchy for the priority of the various
patterns.
For example, the sequence
(*, *_, *10_)
means, first, all nodes seem to be occupied in the first
direction, second, alternated nodes in the second direction
are empty, (overriding the first sequence), third, nodes until
10 stay as they are (because
* has lower priority
than the pattern applied in the second direction) and
nodes after 10 are definitely empty (overriding the
second sequence).
The rules explained so far are valid for nodes with positive
coordinates along Cell directions a, b, c. To obtain the occupancy
patterns for nodes with negative coordinates, just reflect around
zero (by a mirror operation) the results obtained for positive
nodes. Therefore the rule
(1, 1, 1) actually links the eight
nodes (-1,-1,-1), (-1,-1,+1), (-1,+1,-1), (-1,+1,+1), (+1,-1,-1),
(+1,-1,+1), (+1,+1,-1) and (+1,+1,+1).
When the cell volume is a
Sphere, by default the origin is
at the center, so nodes are marked in one octant and symmetrically
replicated to the other octants. For example, for a cubic lattice
inside a sphere of radius 5, to occupy only a central
cube around the center, a pattern as
(*2_, *2_, *2_)
can be used, and to occupy all the other nodes (leaving
the cube in the center completely empty), the pattern
(___***, ___***, ___***) will work. In this
second case, a pattern as
(_2*, _2*, _2*)
will not work, because the low priority
*
sequence is overrun by the high priority
_
sequence, when applied in the other directions.
When the selected
Cutoff mode is
Objects, nodes
outside the cell volume can contribute to the contents of
the cell volume. This happens for all centered lattices with
Conventional volumes, plus
Rhombus and
Sphere
cell volumes. Therefore, the occupancy patterns must be
applied to the larger cell volumes that contain all the
contributing nodes (not just those that are visible inside
the cell). Some of these additional nodes have negative coordinates,
so they are replicated from the corresponding positive nodes.
This occurs for
Conventional centered cells, for
I,
A,
B,
C nodes, plus
Rhombus
volumes.
Changing the Cell origin, to take profit of the replication rule,
extends enormously the power of occupancy patterns. For example,
a cubic primitive lattice with 8 x 6 x 4 conventional cells has
positive nodes only. Moving the Cell origin to the volume center,
to node (4, 3, 2), seven out of the eight octants have now nodes
with negative coordinates. Applying successively the rules
(____*),
(___****) and
(__***), the cell
volume remains empty everywhere except at the six lateral faces,
where all nodes are occupied.
These techniques can be used to build arbitrarily complex, multi-layered,
nanostructures.