Nodeset and Sideset Specification

Boundary conditions such as constraints and loads are applied to the finite element model using nodesets or sidesets, also known as Genesis entities. Rather than attempting to maintain specific boundary condition information, such as load, temperature, constraint, etc., Genesis entities are the generic vehicle for the user to set up boundary conditions on the model. Nodes, elements and element faces are instead grouped together and assigned unique IDs. Node, element and face IDs assigned to Genesis entities can then be written to the Exodus II mesh file. Once imported to the intended analysis application, the nodeset and sideset IDs can be appropriately interpreted as specific physical boundary conditions.

The preferred method for creating Genesis entities is to assign vertices, curves, surfaces or volumes to a specific nodeset or sideset ID. Any mesh entity owned by the geometric entity in a nodeset or sideset is automatically assigned to the same nodeset or sideset. This allows greatest flexibility in generating and updating the finite element mesh. For example, if a surface belongs to a specific sideset, remeshing the surface will automatically delete any old faces from the sideset and add the faces of the new mesh.

In some cases, the geometric model does not provide enough resolution to define the desired boundary conditions. In this case, the model may be partitioned using Trelis's virtual geometry features. Where this may not be feasible, mesh entities can also be added directly to the desired nodeset or sideset. Where individual mesh entities have been added to nodesets or sidesets, deleting the mesh will also remove these elements from the Genesis entity. If the geometry is remeshed, the new mesh entities must also be added once again to the nodesets or sidesets.

Nodesets can be created from groups of nodes categorized by their owning volumes, surfaces, curves or vertex. Individual nodes may also be added to a nodeset. Nodes can belong to more than one nodeset.

Sidesets can be created from groups of element sides or faces categorized by their owning surfaces or curves or by their individual face IDs. Element sides and faces can also belong to more than one sideset.

Creating Nodesets and Sidesets

Nodesets and Sidesets are created in Trelis by assigning the appropriate geometry or mesh entities in the model to a nodeset or sideset ID. The following commands can be used:

Nodeset <nodeset_id> [ADD|Remove] {Curve | Surface | Volume | Vertex | Node} <range>

Sideset <sideset_id> [ADD|Remove] Group <id_range>

Sideset <sideset_id> [ADD|Remove] {Curve|Surface|Edge|Face|Tri} <id_range>

Sideset <sideset_id> [Add] Edge <id_range> [wrt {{Tri|Face} <id_range> | all } ]

Sideset <sideset_id> [Add] Face <id_range> [wrt {Hex <id_range> | all} ]

Sideset <sideset_id> [Add] Tri <id_range> [wrt {Tet <id_range> | all} ]

Sideset <sideset_id> [Add] Surface <id_range> [wrt {{Volume|Surface} <id_range> | all} ] [FORWARD|Reverse|Both]

Sideset <sideset_id> [Add] Curve <id_range> [wrt {Surface <id_range> | all} ]

Like element blocks, Nodesets and Sidesets are given arbitrary, user-defined ID numbers. If there are no user-defined Nodesets or Sidesets, none are written to the Exodus II file.

With Sidesets, direction is often important. For surfaces, the direction may be specified using the Forward, Reverse, or Both options. The Forward option will write a sideset in relation to hexes in the surface's forward volume, which is the volume that the surface's normal points away from. The Reverse option will write a sideset in relation to hexes in the surface's reverse volume, which is the volume that the surface's normal points into. The Both option will allow sidesets to be written in relation to the hexes that lie in volumes on both sides of the surface. The default is Forward. The user can additionally specify the volume from which the hexes should be taken in relation to by using the wrt Volume option.

Direction is equally important for curves in Sidesets. The wrt Surface option allows the user to indicate which surface's faces will be included in the Sideset. The wrt All option will include all faces attached to the curve. The default is wrt All.

Useful hint:

When creating nodesets and sidesets it is often useful to use the Extended Command Line Entity Specification. Here is an example that creates a nodeset which includes all the nodes on the exterior of the geometry:

# Create the geometry
Create brick x 10
Create cylinder height 10 radius 2
Move volume 2 z 10
# Merge the geometry
Merge volume all
# Mesh the geometry
Mesh volume all
# Create a nodeset that includes only those nodes
# located on the exterior of the geometry
Nodeset 1 add surface in volume all with not is_merged

The following commands remove nodes from the nodeset that belong to a surface. Continuing from the previous example:

# Remove surface 2 from the nodeset
Nodeset 1 remove surface 2
# Remove nodes from the nodeset
# that belong to the curves that bound surface 2
Nodeset 1 remove node in curve in surface 2

Nodes can also be added or removed based upon their coordinates. Here is an example that removes all the nodes with a z coordinate equal to 15. Continuing from the previous example:

# Remove the nodes with a z coordinate equal to 15
Nodeset 1 remove node in surface all with z_coord = 15


Assigning Names and Descriptions to Nodesets and Sidesets

Nodesets and sidesets can be assigned names and descriptions. Using names and descriptions is often more intuitive than using traditional integer IDs. When exporting a mesh as a DART artifact, names and descriptions are included in the metadata, making them available to DART metadata-enabled applications such as SIMBA. To give a name or description to nodeset or sideset, use one of the following commands:

{Nodeset|Sideset} <ids> Name "<new_name>"

{Nodeset|Sideset} <ids> Description "<description>"

This command can also be used to define names and descriptions for Element Blocks.

Grouping Faces on a Surface into a Sideset

A sideset can be created from a subset of the faces on a given surface by using one of the following commands:

SideSet <sideset_id> Surface <id_range> Patch Maximum <x> <y> <z> Minimum <x> <y> <z>

SideSet <sideset_id> Surface <id_range> Patch Center <x> <y> <z> Radius <value> [Filter] [Partition]

SideSet <sideset_id> Surface <id_range> Patch Center <x> <y> <z> Outer_radius <value> Inner_radius <value> [Filter] [Partition]

SideSet <sideset_id> Surface <id_range> Patch Cylinder <axis_specification> Radius <rad> [Filter] [Partition]

SideSet <sideset_id> Surface <id_range> Patch Cylinder <axis_specification> Outer_radius <rad> Inner_radius <rad> [Filter] [Partition]

These commands place only the faces meeting the specified criteria into the sideset.

Normally, these commands place the individual elements into the sideset. If the mesh on the surface is deleted, the elements will be removed from the sideset. If the surface is then remeshed, new elements will NOT automatically be added to the sideset. This is usually the intended behavior.

If the filter option is included, only a single connected set of elements is added to the sideset. If the shape of the surface is such that multiple disconnected sets of elements fall within the specified spherical or cylindrical region, the filter option will limit the faces added to the sideset to the one set closest to center.

Using the partition option changes this behavior. The partition option causes the surface to be split, based on the faces included in the patch. The newly created patch surface will be added to the sideset instead of the individual elements. If the mesh is deleted and a new mesh is generated, the new mesh on the patch surface will automatically be included in the sideset, just as occurs with other geometric entities assigned to sidesets.

Note that the sideset patch commands work with both triangular and quadrilateral faces.

Grouping elements in voids and enclosures

The sideset start enclosure command creates sidesets of monotonically increasing ID numbers containing the elements comprising the watertight skin of the input elements. When there's a 'void' in the middle of the elements, a region devoid of elements, though still enclosed by elements, this enclosed region will also have a sideset defined on the skin of the enclosed region.

Sideset Start <id> Enclosure {Volume|Hex|Tet} <range>

The start id is the id of the sideset at which to start. The ID numbers will increase monotonically unless there is a conflicting ID number. The command will add as many sidesets as there are fully continuous regions or tris or faces in the input group. This function can be particularly helpful for calculations for radiation enclosures.

Deleting Nodesets and Sidesets

All Nodesets, Sidesets and Blocks may be deleted from the model using the following command:

Reset Genesis

To remove only nodesets or sidesets, the following may be used:

Reset Nodeset

Reset Sideset

To remove a specific nodeset or sideset, use:

Delete Nodeset <nodeset_id_range>

Delete Sideset <sideset_id_range>

Renumbering Nodesets and Sidesets

The nodeset and sideset renumber commands give the user the ability to renumber these entities to fit the user's needs. The command is:

{Nodeset|Sideset} <id_range> renumber start_id <id> [uniqueids]

The id_range must include existing entities or the command will fail.

The start_id plus the number of entities must specify a new id space that does not overlap with the existing id space for the entity. In other words, if the current sideset ids are 100, 105, 106, and 109, a start_id of 102 would suggest new sideset ids of 102, 103, 104, and 105. This would cause an id space conflict and the command will fail.

If the user specifies the uniqueids option, then the new entity id space must not conflict with the existing id space of all blocks, nodesets, and sidesets.

Example:

Assume:

sideset ids: 1, 2, 4, 6, 10

 

sideset all renumber start 30

After renumbering:

sideset ids: 30, 31, 32, 33, 34

 

Displaying Nodesets and Sidesets

Nodesets and Sidesets can be viewed individually through Trelis by employing the following commands:

Draw NodeSet <nodeset_id_range> [Color <color_spec>] [add]

Draw SideSet <sideset_id_range> [Color <color_spec>] [add]

Nodeset and Sideset colors can also be changed using the following commands:

Color NodeSet <nodeset_id_range> {color|Default}

Color SideSet <sideset_id_range> {color|Default}

Nodeset Associativity Data

Nodesets can be used to store geometry associativity data in the Exodus II file. This data can be used to associate the corresponding mesh to an existing geometry in a subsequent Trelis session. This functionality can be used either to associate a previously-generated mesh with a geometry (See Importing an Exodus II File), or to associate a field function with a geometry for adaptive surface meshing (See Adaptive Meshing).

The commands to control and list whether associativity data is written or read from an Exodus II files are the following:

List Import Mesh NodeSet Associativity

List [Export Mesh] NodeSet Associativity

List [Export Mesh] NodeSet Associativity Complete

set Import Mesh NodeSet Associativity [ON|off]

[set] [Export Mesh] NodeSet Associativity [on|OFF]

[set] [Export Mesh] NodeSet Associativity Complete [On|OFF]

Associativity data is stored in the Exodus II file in two locations. First, a nodeset is written for each piece of geometry (vertices, curves, etc) containing the nodes owned for that geometry. Then, the name of each geometry entity is associated with the corresponding nodeset by writing a property name and designating the corresponding nodeset as having that property. Nodeset numbers used for associativity nodesets are determined by adding a fixed base number (depending on the order of the geometric entity) to the geometric entity id number. The base numbers for various orders of geometric entities are shown in the following table. For example, nodes owned by curve number 26 would be stored in associativity nodeset 40026.

Table 1. Nodeset ID base numbers for geometric entities

Geometric Entity Base Nodeset ID
Vertex 50000
Curve 40000
Surface 30000
Volume 20000

Instead of storing just the nodes owned by a particular entity, nodes for lower order entities are also stored. For example, the associativity nodeset for a surface would contain all nodes owned by that surface as well as the nodes on the bounding curves and vertices.

Equation-Controlled Distribution Factors

By default, distribution factors on nodesets or sidesets are written with a constant value of "1" at each node. It is also possible to vary the distribution factor for each node in a nodeset or sideset, using an equation to control the value of the distribution factor at each node. To do so, an equation must first be defined using the command:

Create Equation "<expression>" name "<name>"

where expression is any mathematical expression which evaluates to a single number, and name is the name by which this equation will be known. The expression is written using aprepro syntax, with a few differences from the use of APREPRO in its usual context.

  1. The expression as a whole is not wrapped in curly braces "{" and"}".
  2. The expression may include any of the following pre-defined variables:

{x} - The x-coordinate of the current node
{y} - The y-coordinate of the current node
{z} - The z-coordinate of the current node
{n} - The CUBIT ID of the current node. This is the ID of the node in Trelis, which may not be the same as the node's ID in the Exodus II file.

For example, to define an equation which varies from -10 to 10 based on the sine of the node's x_coordinate:

Create Equation "10*sin({x})" Name "my_equation"

Once an equation has been defined, it can be applied to a nodeset or sideset:

{Nodeset|Sideset} <id> Distribution Equation "<equation_name>"

For example, to apply the equation created earlier to nodeset 10:

Nodeset 10 Distribution Equation "my_equation"

When nodeset 10 is written to an Exodus II file, "my_equation" will be evaluated once for each node in the nodeset, with the values of {x}, {y}, {z}, and {n} set to appropriate values for the node. The result is used as the distribution factor for that node.

Here is a complete example that writes out the distribution factors 0.0, 0.5, and 1.0 for the 3 nodes on the curve:

# Create a straight line from (0,0,0) to (1,0,0)
create vertex 0 0 0
create vertex 1 0 0
create curve vertex 1 2
# Mesh with 3 nodes
curve 1 interval 2
mesh curve 1
# Create a block and a nodeset
block 1 curve 1
nodeset 1 curve 1
# Define an equation and apply it to the nodeset
create equation "{x}" name "simple_eq"
nodeset 1 distribution equation "simple_eq"
# Write the mesh
export mesh "temp.g" overwrite

Here is another complete example that varies the distribution factors for sideset 20 from zero to 1, depending on the node's x-coordinate. The sideset is applied to sides of HEX20 elements, so each element side has 8 different distribution factors.

# Mesh a cube
brick x 10
mesh volume 1
# Create a block of 20-noded hexes
block 1 volume 1
block 1 element type hex20
# Apply a sideset to be used for a variable pressure
sideset 20 surface 1
# Define an equation and apply it to the sideset
create equation "({x}+5)/10" name "zero_to_one"
sideset 20 distribution equation "zero_to_one"
# Write the mesh
export mesh "temp.g" overwrite

Note that distribution equations only affect Exodus II output. Equations are currently ignored for other mesh file types.

See APREPRO in the appendix.

Nodesets/Sidesets/Blocks Behavior with Geometric Entity Copy

The below commands can be used to set the behavior of nodesets/sideset/blocks when a copy command is applied on geometric entities. The default OFF option states that the nodesets/sideset/blocks will not be copied to new geometric entity if the original geometric entity contains nodesets/sideset/blocks. The "on" option implies that the nodesets/sideset/blocks present in the original geometric entity will be copied to new geometric entity. The use_original option indicates that the new geometric entities created after the copy command will have the nodesets/sidesets/blocks present in the original geometric entities.

 

set copy_nodeset_on_geometry_copy [on | OFF| use_original]

set copy_sideset_on_geometry_copy [on | OFF| use_original]

set copy_block_on_geometry_copy [on | OFF| use_original]