Skip to content

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.

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

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


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

  2. Bischoff, Manfred; Ramm, E; Irslinger, J. "Models and finite elements for thin-walled structures." Encyclopedia of Computational Mechanics Second Edition, pp. 1--86 (2018). ↩

  3. MacNeal, Richard H. "A simple quadrilateral shell element." Computers \& Structures, vol. 8, pp. 175--183 (1978). ↩

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

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

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

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

  8. Klinkel, S; Gruttmann, F; Wagner, W. "A continuum based three-dimensional shell element for laminated structures." Computers \& Structures, vol. 71, pp. 43--62 (1999). ↩↩

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

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