A mesh consists of entities, such as nodes and elements.
Entities always have a local number, which is just the entities'
current index in its array. Entites may also have a global number,
which is the entity's index in the unpartitioned serial mesh.
Entities have data values called attributes.
For example, the location of each node might be called the
``location'' attribute of the ``node'' entity type. Attributes are
always stored in regular arrays indexed by the entity's local number.
This table lists the different attributes that can be read or
written for each type of entity.
A shared entity is a boundary entitity that two or more chunks
can both update--currently, only nodes can be shared. Shared nodes
are mixed in with regular nodes, and the framework currently provides
no way to identify which nodes are shared.
A ghost entity is a boundary entity that is asymmetrically shared--one
side provides values for the ghost from one of its real entities,
and the other sides accept read-only copies of these values.
Ghosts are described in more detail in Section 5,
and can be accessed by adding the constant FEM_GHOST to
the corresponding real entity's type.
The different kinds of entities are described in the following sections.
FEM_NODE is the entity code for nodes, the simplest kind of entity.
A node is a single point in the domain, and elements are defined by their nodes.
Nodes can have the following attributes:
FEM_DATA+ Uninterpreted user data, which might
include material properties, boundary conditions, flags, etc.
User data can have any data type and width.
can be any number from 0 to one billion--it allows you
to register several data fields with a single entity.
FEM_GLOBALNO Global node numbers. Always a 1-wide index type.
FEM_SYMMETRIES Symmetries that apply to this node.
Always a 1-wide FEM_BYTE.
FEM_NODE_PRIMARY Marker indicating that this chunk is responsible
for this node. Every node is primary in exactly one chunk.
This attribute is always a 1-wide FEM_BYTE containing 0 or 1.
FEM_ELEM+ is the entity code for one kind of element.
is a small, user-defined value that uniquely identifies
this element type. Like nodes, elements can have the attributes
FEM_DATA+, FEM_GLOBALNO, or FEM_SYMMETRIES;
but every element type must have this attribute:
FEM_CONN Lists the numbers of the nodes around this element.
See the description in the ghost section for special ghost connectivity.
Always an index type-FEM_INDEX_0 for C-style 0-based node indexing,
or FEM_INDEX_1 for Fortran-style 1-based node indexing.
FEM_SPARSE+ is the entity code for one kind of sparse element.
Again, is a small, user-defined unique value.
The only difference between ordinary elements and sparse elements
regards partitioning. Ignoring ghosts, ordinary elements are never duplicated--each
element is sent to its own chunk. Sparse elements may be duplicated,
and are always dependent on some other entity for their partitioning.
Sparse elements have all the attributes of ordinary elements:
FEM_DATA+, FEM_GLOBALNO, FEM_SYMMETRIES,
and FEM_CONN, as well as the special attribute FEM_SPARSE_ELEM.
Without the FEM_SPARSE_ELEM attribute, a sparse element will
be copied to every chunk that contains all the sparse element's nodes.
This is useful for things like node-associated boundary conditions,
where the sparse element connectivity might list the nodes with boundary
conditions, and the sparse element data might list the boundary condition values.
The FEM_SPARSE_ELEM attribute lists the ordinary element each
sparse element should be partitioned with. This attribute consists of
pairs (,), indicating that this sparse element
should be sent to wherever the 'th FEM_ELEM+
is partitioned.
FEM_SPARSE_ELEM Lists the element we should be partitioned with.
The width of this attribute is always 2, and the data type must
be an index type-FEM_INDEX_0 or FEM_INDEX_1.