3.6 Mesh Section¶
The Mesh section contains all the mesh data, including nodal coordinates and element connectivity. It has the following sub-sections:
Nodes defines the nodal coordinates of the mesh
Elements defines the elements of the mesh. If the name attribute is provided, then this also defines an element set. Element sets defined this way are also referred to as parts.
NodeSet defines a node set
Edge defines an edge, i.e. a set of line elements
Surface defines a surface, i.e. a set of facets
DiscreteSet defines a set of discrete elements (e.g. springs)
ElementSet defines an element set
SurfacePair define a surface pair that can be used by a contact definition.
PartList define a named list of parts (i.e. element sets defined via the Elements tag)
At least one Nodes section must be defined and one Elements section. The other sections are optional. The NodeSet, Edge, Surface, DiscreteSet, ElementSet, SurfacePair, and PartList sections define sets of nodes, edges, facets, discrete elements, elements, surface pairs, and part lists, respectively, and can be referenced by other sections of the model file. For instance, boundary conditions can be defined by referencing the sets to which the boundary condition will be applied.
Nodes Section¶
The Nodes section contains nodal coordinates. It has an optional attribute called name. If this attribute is defined, the Nodes section also defines a node set.
<Nodes [name="<set name>"]>
The nodes are defined using the node tag which is a child of the Nodes section. Repeat the following XML-element for each node:
<node id="n">x,y,z</node>
The id attribute is the global identifier of the node and must be a unique number within the model definition. Nodal ids must be defined in increasing order, but do not have to be sequential. This id is used as a reference in the element connectivity section.
Multiple Nodes sections can be defined, but each node can only be defined once. For example:
<Nodes name="set01">
<node id="1">0,0,0</node>
...
<node id="101">1,1,1</node>
</Nodes>
<Nodes name ="set02">
<node id="102">2,1,1</node>
...
<node id="999">2,2,2</node>
</Nodes>
Elements Section¶
The Elements sections contain a list of the element connectivity data. Multiple Elements sections can be defined. The Elements section has the following attributes.
| Attribute | Description |
|---|---|
| type | element type |
| name | unique name that identifies this domain |
Each Elements section contains multiple elem elements that define the element connectivities. Each elem tag has a id attribute that defines the element number. For example, the following Elements section defines a list of hexahedral elements:
<Elements type="hex8" name="part1">
<elem id="1">1,2,3,4,5,6,7,8</elem>
<elem id="2">9,10,11,12,13,14,15,16</elem>
...
</Elements>
FEBio classifies elements in three categories, namely solids, shells, and beams.
Solid Elements¶
The following solid element types are defined:
| hex8 | 8-node trilinear hexahedral element |
|---|---|
| hex20 | 20-node quadratic hexahedral elements |
| hex27 | 27-node quadratic hexahedral elements |
| penta6 | 6-node linear pentahedral (wedge) element |
| penta15 | 15-node quadratic pentahedral (wedge) element |
| pyra5 | 5-node linear pyramidal element |
| pyra13 | 13-node quadratic pyramidal element |
| tet4 | 4-node linear tetrahedral element |
| tet10 | 10-node quadratic tetrahedral element |
| tet15 | 15-node quadratic tetrahedral element |
The node numbering has to be defined as in the figure below.
Node numbering for solid elements
Shell Elements¶
FEBio currently supports the following shell elements:
| tri3 | 3-node linear triangular shell element (compatible strain) |
|---|---|
| tri6 | 6-node quadratic triangular shell element (compatible strain) |
| quad4 | 4-node linear quadrilateral shell element (compatible strain) |
| quad8 | 8-node quadratic quadrilateral shell element (compatible strain) |
| quad9 | 9-node quadratic quadrilateral shell element (compatible strain) |
| q4ans | 4-node linear quadrilateral shell element (assumed natural strain) |
| q4eas | 4-node linear quadrilateral shell element (enhanced assumed strain) |
For shell elements that use a compatible strain formulation, the calculation of strain components is based on nodal displacements, similar to hexahedral or pentrahedral elements. Users should be aware that this compatible strain formulation is very susceptible to element locking when the shell thickness is much smaller than the shell size (e.g., when the aspect ratio is less than 0.01). Therefore, these shell formulations should be used with caution, keeping in mind this important constraint. Conversely, these shell elements perform very well when they are attached to solid elements (e.g., skin over muscle), or sandwiched between shell elements (e.g., cell membrane separating cytoplasm from extra-cellular matrix), as described in 1.
Node numbering for shell elements
The element-locking limitation of compatible strain shell formulations has motivated the development of specialized shell formulations that attempt to overcome locking. The FE literature on this subject is rather extensive and we refer the reader to the excellent review chapter by Bischoff et al. 2 on this topic. Methods for overcoming locking include the assumed natural strain (ANS) formulation for transverse shear strains 34 and transverse normal strains 56. The ANS formulation may be supplemented with the enhanced assumed strain (EAS) method 7 and extended to large deformations 8910. FEBio includes the ANS (q4ans) and EAS (q4eas) quadrilateral shell element formulations of Vu-Quoc and Tan 9, using a seven-parameter EAS interpolation, which is otherwise substantially similar to the five-parameter interpolation presented in an earlier study by Klinkel et al. 8. These shell elements are not suitable for attachment to a solid element, nor sandwiching between two solid elements. Since they don't experience element locking, they should be loaded more slowly than compatible strain shell elements. The most accurate of these shell formulation is q4eas.
By default, the nodes of a shell element define its top face. The location of the shell element bottom face is calculated from the nodal values of the shell thickness, along the opposite direction of nodal normals. The nodal normal is evaluated by averaging the top face normal of all shell elements sharing that node. When a shell element is attached to a solid element (e.g., when the shell nodes also represent the nodes of one face of the solid element), FEBio automatically accounts for the shell thickness, reducing the height of the solid element in the direction of the shell normal. It is the user's responsibility to ensure that the shell thickness is less than that of the solid element; otherwise, a negative Jacobian error will be automatically generated.
Prior to FEBio 2.6, the nodes of a shell element defined its middle face (halfway between top and bottom, such that the shell element extends above and below the face defined by the shell nodes). This older formulation can be recovered by setting shell_formulation to 0 in the Control section. This setting only works with compatible strain shell formulations.
By default, stresses and strains reported for a shell element are evaluated by averaging all the integration point values within the shell element, thus producing values that reflect the response along the middle surface. To display shell stresses or strains at the top or bottom faces, use plot variables that start with 'shell top...' or 'shell bottom...', such as 'shell top stress' or 'shell bottom nodal strain'.
When shell domains intersect such that three or more shell elements share the same edge, as in a T-connection, users should set shell_normal_nodal to 0 in the ShellDomain section. This setting ensures that the bottom face of a shell element is calculated using the top face normal, instead of nodal normals, since the latter would be ill-defined for nodes belonging to such an edge.
Finally, please note that shell elements cannot be stacked in FEBio.
Beam Elements¶
FEBio supports some truss and beam element formulations. Currently, only linear trusses and linear and quadratic beam elements are supported.
| line2 | 2-node linear truss or beam element |
|---|---|
| line3 | 3-node quadratic beam element |
Whether a truss or beam formulation is used, is determined in the corresponding BeamDomain section.
NodeSet Section¶
The NodeSet section allows users to define node sets. These node sets can then later be used in the definition of boundary conditions and loads. A node set is defined by the NodeSet tag. This tag takes one required attribute, name, which defines the name of the node set. A node set definition is followed by a list of node IDs. For example,
<NodeSet name="nodeset1">1, 2, 101, 102</NodeSet>
For larger nodesets, it is recommended to split the list across several lines.
<NodeSet name="nodeset1">
1, 2, 3, 4,
5, 6, 7, 8,
9, 10, 11, 12
</NodeSet>
Edge Section¶
The Edge section allows users to define a set of edges. These edges can be used to define boundary conditions or loads.
<Edge name="edge1">
<line2 lid="1">1,2</line2>
<line2 lid="2">2,3</line2>
</Edge>
Here, the lid attribute defines the local id of the edge, local with respect to the edge definition. The local ids must begin at 1 and defined sequentially.
The edge elements are defined by using a tag that depends on the type of the edge element. The following edge elements are currently supported.
line2 2-node line element
line3 3-node line element
Edges cannot overlap element boundaries and must be a valid edges of elements.
Surface Section¶
The Surface section allows users to define surfaces. These surfaces can then later be used to define the boundary conditions and contact definitions. A surface definition is followed by a list of surface elements, following the format described below.
<Surface name="named_surface">
<quad4 id="1">1,2,3,4</quad4>
<...>
</Surface>
The Surface takes one required attribute, namely the name. This attribute sets the name of the surface. This name will be used later to refer back to this surface.
The following surface elements are available:
quad4 4-node quadrilateral element
quad8 8-node serendipity quadrilateral element
tri3 3-node triangular element
tri6 6-node quadratic triangular element
tri7 7-node quadratic triangular element
The value for the surface element is the nodal connectivity:
<quad4 id="n">n1,n2,n3,n4</quad4>
<tri3 id="n">n1,n2,n3</tri3>
Surface elements cannot overlap element boundaries. That is, the surface element must belong to a specific element. Surface elements do not contribute to the total number of elements in the mesh. They are also not to be confused with shell elements.
ElementSet Section¶
The ElementSet section can be used to define an element set. Element sets can be used to output data for only a subset of elements. An element set is defined through the ElementSet tag, which takes one attribute, namely name that specifies the name of the element set. The value of the tag is the list of element IDs. For example,
<ElementSet name="set01">
1, 2, 3, 4
5, 6, 7, 8
</ElementSet>
DiscreteSet Section¶
The DiscreteSet section defines sets of discrete elements. These sets can then be used to define e.g. springs.
<DiscreteSet name="springs">
<delem>1,2</delem>
<delem>3,4</delem>
</DiscreteSet>
SurfacePair Section¶
The SurfacePair section defines a pair of surfaces that can be used to define surface-to-surface interactions (e.g. contact).
<SurfacePair name="contact1">
<primary>surface1</primary>
<secondary>surface2</secondary>
</SurfacePair>
The surfaces (i.e. surface1 and surface2) are surfaces defined in Surface sections. Because surfaces must already be defined before they can be referenced in the SurfacePair section, the Surface sections must be defined before the SurfacePair section.
PartList¶
A part is an element set that is defined via the Elements tag. Parts can be grouped together in part lists. A part list is defined via the PartList tag. The value of this tag is a list of the names of the parts that belong to the list.
<PartList name="allParts">part1,part2</PartList>
Here, part1 and part2 are parts defined via Elements sections. Because part lists depend on the Elements sections, the PartList tag must be defined after all Elements sections have been defined.
Part lists can be used, for instance, in body loads if the body load is to be applied to multiple parts.
Implicit Partitions¶
In addition to the explicit mesh partitions that can be defined in the Mesh section, as detailed above, FEBio also supports implicit partitions. This allows you to assign a different type of partition to a model component than the target partition. For instance, if a boundary condition requires a node set, using implicit partitioning, you can assign a surface or an element set.
Consider the following example.
<bc type="zero displacement" node_set="set1"/>
FEBio expects a node set with the name set1 defined in the Mesh section. However, if set1 is a surface, then this surface can be assigned to the boundary condition using the following syntax.
<bc type="zero displacement" node_set="@surface:set1"/>
The presence of the specifier @surface informs FEBio that set1 is a surface and the node set needs to be extracted from the surface definition.
Mesh partitions can only be assigned this way if the target partition is a subset of the source partition. For instance, it is not possible to assign a node set to a surface partition.
The following specifiers are available.
| specifier | description | Target partition |
|---|---|---|
| @surface | References a surface | nodeset |
| @edge | References an edge | nodeset |
| @elem_set | References an element set (either via Elements or ElementSet) | nodeset |
| @part_list | References a part list | nodeset, surface |
Note that the @part_list is the only specifier that can be used to assign a part list to a surface. This can be useful for defining contact surfaces where the surface might have a complex shape and is difficult to extract manually.
-
Hou, Jay C; Maas, Steve A; Weiss, Jeffrey A; Ateshian, Gerard A. "Finite Element Formulation of Multiphasic Shell Elements for Cell Mechanics Analyses in FEBio." Journal of Biomechanical Engineering, vol. 140 (2018). ↩
-
Bischoff, Manfred; Ramm, E; Irslinger, J. "Models and finite elements for thin-walled structures." Encyclopedia of Computational Mechanics Second Edition, pp. 1--86 (2018). ↩
-
MacNeal, Richard H. "A simple quadrilateral shell element." Computers \& Structures, vol. 8, pp. 175--183 (1978). ↩
-
Bathe, Klaus-Jürgen; Dvorkin, Eduardo N. "A formulation of general shell elements---the use of mixed interpolation of tensorial components." International journal for numerical methods in engineering, vol. 22, pp. 697--722 (1986). ↩
-
Betsch, P; Stein, E. "An assumed strain approach avoiding artificial thickness straining for a non-linear 4-node shell element." Communications in Numerical Methods in Engineering, vol. 11, pp. 899--909 (1995). ↩
-
Bischoff, M; Ramm, E. "Shear deformable shell elements for large strains and rotations." International Journal for Numerical Methods in Engineering, vol. 40, pp. 4427--4449 (1997). ↩
-
Simo, Juan C; Rifai, MS10587420724. "A class of mixed assumed strain methods and the method of incompatible modes." International journal for numerical methods in engineering, vol. 29, pp. 1595--1638 (1990). ↩
-
Klinkel, S; Gruttmann, F; Wagner, W. "A continuum based three-dimensional shell element for laminated structures." Computers \& Structures, vol. 71, pp. 43--62 (1999). ↩↩
-
Vu-Quoc, L; Tan, XG. "Optimal solid shells for non-linear analyses of multilayer composites. I. Statics." Computer methods in applied mechanics and engineering, vol. 192, pp. 975--1016 (2003). ↩↩
-
Simo, JC; Armero, F; Taylor, RL. "Improved versions of assumed enhanced strain tri-linear elements for 3D finite deformation problems." Computer methods in applied mechanics and engineering, vol. 110, pp. 359--386 (1993). ↩