Skip to content

Constraint Commands

Constraints are defined using *Constraint. Each constraint has a unique name, and duplicate names are not allowed. Constraints include both narrow definitions such as single-point constraints (e.g., support conditions) and multi-point constraints, as well as broader concepts that apply limitations to finite element objects like boundaries or connections. Examples include viscous boundaries or linear springs acting on surfaces without material property changes during the analysis step. Unlike *Load, constraints are immediately applied and removed within a *Step and do not change characteristics within that step.

Hyfeast uses an automatic selection of slave DOF and over-constraint handling, so common issues in other finite element programs, such as over-constraint problems or the inability to use slave DOFs in multiple constraints, do not occur.

*Constraint

Define constraints based on the given type.

*Constraint, Type=type, Name=name
  ...
Keyword line
  • Type=type: Specifies the type of constraint. Options include RigidLink, BeamLink, MPC, NodeToSurface, etc.

    • Support: Fixed boundary condition (always zero displacement).
    • RigidLink: Constrains corresponding DOFs between two nodes.
    • BeamLink: Constrains DOFs considering rotation between two nodes.
    • NodeToSurface: Constrains nodes, nsets, or surface nodes to another surface.
    • MPC: User-defined linear multi-point constraint.
    • Embedded: Embeds nodes in the host elements.
    • Spring: Connects nodes with springs or dampers.
    • EarthSpring: Connects nodes with ground springs or dampers.
    • SpringBoundary: Applies springs/dampers to a surface or line (beam or truss elements).
    • ViscousBoundary: Models a viscous boundary.
    • AcousticImpedance: Models an impedance boundary for acoustic elements.
    • AcousticSolidLink: Models an linkage between acoustic and solid elements.
  • Name=name: Unique name of the constraint.

*Constraint, Type=Support

Defines fixed boundary conditions (zero displacement).

*Constraint, Type=Support, Name=name
  targetNode, dof, CS=orientation
  targetNset, dof, CS=orientation
  targetSurface, dof, CS=orientation
  ...
First dataline and subsequent datalines
  • targetNode: Target node (required).
  • targetNset: Target nset (required).
  • targetSurface: Target surface (required).
  • dof: The DOF to constrain. Can be X, Y, Z, RX, RY, RZ, or combinations like X|Y (required).
  • CS=orientation: Coordinate system in which the support condition is applied. Specify the name defined via *CoordinateSystem, TYPE=Orientation. If omitted, the global coordinate system (GCS) is used. (optional)

The command first looks for targetNset, targetSurface, and then targetNode in that order. Nsets and surfaces are case-sensitive and should be carefully named. If the same DOF is specified multiple times, only one constraint is applied without error.

A local coordinate system can be specified to define inclined boundary conditions. Internally, this is handled by imposing a multi-point constraint (MPC). Output results are provided in the GCS by default. If results are needed in the local coordinate system, this must be explicitly specified in the *Print or *History commands. The *Output command does not support specifying a local coordinate system, but hfVisualizer allows postprocessing and conversion of results into a local coordinate system.

Example
*Constraint, Type=Support, Name=initialBC
 1, X|Y
 all, Z|RX|RY

*Constraint, Type=Support, Name=C
 101, X
 101, X   # OK, but neglected

*CoordinateSystem, TYPE=Orientation, Name=inc
 1,1,0, 0,1,0

*Constraint, Type=Support, Name=initialBC
 1, X|Y
 5, X, CS=inc

Constrains corresponding DOFs between two nodes.

*Constraint, Type=RigidLink, Name=name
  slaveNode, masterNode, dof
  slaveNset, masterNode, dof
  slaveNset, masterNset, dof
  ...
First dataline and subsequent datalines
  • slaveNode, masterNode: The two nodes to be connected (required).
  • slaveNset, masterNode: Connect all nodes in slaveNset to masterNode (required).
  • slaveNset, masterNset: Connect the closest node pairs between the two sets (1:1). Both sets must have the same number of nodes unless masterNset has only one node, in which case it behaves like slaveNset, masterNode (required).
  • dof: DOF to constrain (required). The DOF can be X, Y, Z, RX, RY, RZ, P, etc. Can be combinations like X|RX, Y|RZ, etc.

The *Constraint, TYPE=RigidLink command simply constrains the corresponding DOFs between two nodes.

Example
*Constraint, Type=RigidLink, Name=c1
 1, 2, X|Y|Z
 left, right, X

Constrains DOFs between two nodes considering rotation.

*Constraint, Type=BeamLink, Name=name
 slaveNode, masterNode, plane
 slaveNset, masterNode, plane
 slaveNset, masterNset, plane
 ...
First dataline and subsequent datalines
  • slaveNode, masterNode: The two nodes to be connected.
  • slaveNset, masterNode: Connect all nodes in slaveNset to masterNode.
  • slaveNset, masterNset: Connect the closest node pairs between the two sets (1:1). Both sets must have the same number of nodes unless masterNset has only one node.
  • plane: Plane to constrain (XY, YZ, ZX, or NOPLANE). Default is NOPLANE.

The *Constraint, TYPE=BeamLink command constrains the DOFs between two nodes considering rotational freedom to simulate rigid body motion. As shown in the figure, it can be used to connect the nodes of a shell to the nodes of a beam when modeling a shell reinforced with beams, or to connect beams that are aligned in parallel.

Example
*Constraint, Type=BeamLink, Name=c1
 1001, 1002, XY
 left, right

*Constraint, Type=NodeToSurface

Constrains nodes, nsets, or surface nodes to another surface.

*Constraint, Type=NodeToSurface, Name=name
 slaveNode, masterSurface, dof, radius, searchFlag, springCoef
 slaveNset, masterSurface, dof, radius, searchFlag, springCoef
 slaveSurface, masterSurface, dof, radius, searchFlag, springCoef
 ...
First dataline and subsequent datalines
  • slaveNode: Slave node (required).
  • slaveNset: Slave nset (required).
  • slaveSurface: Surface formed by slave nodes (required).
  • masterSurface: Master surface (required).
  • dof: DOF to constrain (required).
  • radius: Effective search radius. Default is 0 (unlimited).
  • searchFlag: Search option (One, OneF, All, AllF). Default is One.
  • springCoef: Spring coefficient. Default is 0 (no spring).

This constraint finds a projection from the slave nodes to the master surface and applies the constraint. The search method can be fine-tuned using radius and searchFlag. This constraint currently only works with translational DOFs.

Example
*Constraint, Type=NodeToSurface, Name=C
 slabLine, slab, X|Y|Z                  
 slaveSurface, slab, X|Y|Z, 0.3, AllF  
 mygirder, slab, X|Y|Z, 0.3, OneF

*Constraint, Type=MPC

Defines user-defined linear multi-point constraints.

*Constraint, Type=MPC, Name=name
  nodal_expression
  ...
  nset1, nset2, matching_expression
  ...
First dataline and subsequent datalines
  • nodal_expression: Define one multi-point constraint condition as a string (required).
  • nset1, nset2, matching_expression: Generate constraints for each node pair in the two nsets (required).

Nodal expressions define relationships between node DOFs as a linear combination. Matching expressions apply to node pairs in two sets.

Example
*Constraint, Type=MPC, Name=Y-Lock
 left, right, Y1-Y2  # matching expression
 Y3-4*Y4             # nodal expression

*Constraint, Type=Embedded

Embeds nodes into host elements.

*Constraint, Type=Embedded, Name=name
 node, hostElset
 nset, hostElset
 ...
First dataline and subsequent datalines
  • node, hostElset: Node and host elset to connect.
  • nset, hostElset: Nset and host elset to connect.

The *Constraint, TYPE=Embedded command embeds nodes into host elements by finding the host element that contains the node and constraining the node based on the host element's shape function. This is often used to model reinforcement bars within solid elements.

Example
*Constraint, Type=Embedded, Name=embed
 LineNodes, beam

*Constraint, Type=Spring

Connects nodes with springs or dampers.

*Constraint, Type=Spring, Name=name
 slaveNode, masterNode, K=kx, ky, kz, C=cx, cy, cz, CS=cs
 slaveNset, masterNode, K=kx, ky, kz, C=cx, cy, cz, CS=cs
 slaveNset, masterNset, K=kx, ky, kz, C=cx, cy, cz, CS=cs
 ...
First dataline and subsequent datalines
  • slaveNode, masterNode: The two nodes to be connected by springs (required).
  • slaveNset, masterNode: Connect all nodes in slaveNset to masterNode with springs (required).
  • slaveNset, masterNset: Connect closest node pairs between the two sets with springs (1:1).
  • K=kx, ky, kz: Spring constants in each direction. Default is 0.
  • C=cx, cy, cz: Damping coefficients in each direction. Default is 0.
  • CS=cs: Coordinate system for the springs(*CoordinateSystem, TYPE=Orientation). If not specified, GCS is used.

Unlike *Element, TYPE=Spring, no element IDs are required. However, only linear springs/dampers are supported.

Example
*Constraint, TYPE=Spring, Name=connection1
 L1, L2, K=0,100,100
 L3, L4, K=0,100,100

*CoordinateSystem, Type=Orientation, Name=cs1
  2,1,0
  3,0,1  

*Constraint, TYPE=Spring, Name=connection2
 bottomNodes, topNodes, K=0,100,100, CS=cs1

*Constraint, Type=EarthSpring

Connect ground springs or dampers to a node.

*Constraint, Type=Spring, Name=name
 node, K=kx,ky,kz, C=cx,cy,cz, CS=cs
 nset, K=kx,ky,kz, C=cx,cy,cz, CS=cs
 ...
First dataline and subsequent datalines
  • node: The node to which the ground spring is connected (required).
  • nset: The nset to which the ground spring is connected (required).
  • K=kx,ky,kz: Spring constants in each direction. Default is 0.
  • C=cx,cy,cz: Damping coefficients in each direction. Default is 0.
  • CS=cs: Coordinate system for the springs(*CoordinateSystem, TYPE=Orientation). If not specified, GCS is used.

Using *Constraint, TYPE=EarthSpring allows spring connections between nodes without the need for element IDs, unlike *Element, TYPE=EarthSpring. However, it only supports linear springs/dampers and does not provide rigid arms or allow calculation of internal forces in the springs/dampers.

Example
*Constraint, TYPE=EarthSpring, Name=connection1
 L1, K=0,100,100, C=0,20,30
 L3, L4, K=0,100,100

*CoordinateSystem, Type=Orientation, Name=cs1
  2,1,0
  3,0,1  

*Constraint, TYPE=EarthSpring, Name=connection2
 bottomNodes, topNodes, K=0,100,100, CS=cs1

*Constraint, Type=SpringBoundary

Springs or dampers distributed along the surface of elements, beam elements, or truss elements.

*Constraint, Type=SpringBoundary, Name=name
 surface|line, K=kx, ky, kz, C=cx, cy, cz, CS=GCS|ECS|cs
 ...
First dataline and subsequent datalines
  • surface|line: Target surface or line made up of beam or truss elements.
  • K=kx,ky,kz: Spring constants in each direction. Default is 0.
  • C=cx,cy,cz: Damping coefficients in each direction. Default is 0.
  • CS=GCS|ECS|cs: Coordinate system to be used. GCS is the global coordinate system, ECS is the local coordinate system of the target surface or line element, and cs is a user-defined coordinate system specified by *Coordinate, TYPE=Orientation. Default is GCS.

SpringBoundary is used to model distributed springs or dampers on boundary surfaces. Unlike EarthSpring, which is used for individual springs/dampers, SpringBoundary can be easily applied to surfaces or lines composed of beam or truss elements. In 3D, spring constants and damping coefficients in all three directions are used, while in 2D, only kx, ky or cx, cy are applied. ECS refers to the local coordinate system for the surface or line, and GCS refers to the global coordinate system. You can also define a custom coordinate system using *CoordinateSystem, TYPE=Orientation.

Example
*Constraint, TYPE=SpringBoundary, Name=farBC1
 bottom, K=0,0,100
 wall, K=100,0,0, CS=ECS

*Constraint, Type=ViscousBoundary

Viscous boundary

*Constraint, Type=ViscousBoundary, Name=name
 surface, density, cp, cs
 surface
 ...
First dataline and subsequent datalines
  • density, cp, cs: The target surface, density, P-wave velocity (cp), and S-wave velocity (cs).
  • surface: The target surface. Density, cp, and cs are automatically calculated from the elements connected to the surface, which must be solid elements using IsoElasticity as their material property.

ViscousBoundary is used to model viscous boundaries applied to surfaces during dynamic analysis. Although damping can be specified with *Load, TYPE=DistributedSpring, this command allows for more convenient specification of density and velocity, or automatic calculation from the connected elements. The viscous boundary works in the surface's normal direction and applies damping coefficients per unit area. It operates in three directions (normal and two shear directions) for 3D solid element surfaces, and in the normal and shear directions for 2D or axisymmetric solid elements. ViscousBoundary can only be applied to surfaces composed of solid elements and cannot be applied to surfaces composed of shell elements or lines composed of beam or truss elements. It cannot be used redundantly on the same surface.

If density, cp, and cs are not directly provided, they will be calculated from the material properties of the elements forming the surface, which must use IsoElasticity.

Example
*Constraint, TYPE=ViscousBoundary, Name=farBC1
 side1
 side2

*Constraint, TYPE=ViscousBoundary, Name=farBC2
 side1                    # Calculating density, Vp, and Vs from the material model of the elements forming side1.
 side2, 1800, 300, 40      # Manually specifying density, cp, and cs.

*Constraint, Type=AcousticImpedance

Impedance boundary for acoustic elements.

*Constraint, Type=AcousticImpedance, Name=name
 surface, a, b
 ...
First dataline and subsequent datalines
  • surface: The target surface.
  • a, b: Impedance coefficients.

AcousticImpedance is used to apply impedance boundaries for acoustic elements when modeling fluid, such as sloshing conditions at free surfaces or radiation damping in an infinite domain. The surface must be defined as the outward normal of the acoustic region. This command is only available in *Step, TYPE=Dynamic and *Step, TYPE=Frequency. For more details, refer to the "Acoustic Solid Elements" section.

Example
*Constraint, TYPE=AcousticImpedance, Name=sloshing
 freeSurface, 1/9.81, 0   # surface, a, b

*Constraint, TYPE=AcousticImpedance, Name=farBC
 radiationBoundary, 0, 1.2/1480   # surface, a, b

*Constraint, Type=AcousticSolidInterface

Linkage between acoustic and solid elements.

*Constraint, Type=AcousticSolidLink, Name=name
 surface, density 
 acousticSurface, solidSurface, density, radius, formulation
 ...
First dataline and subsequent datalines
  • surface: The target surface.
  • acousticSurface, solidSurface: Shared surface between acoustic media and solid.
  • density: The density of the acoustic media.
  • radius: The effective radius for the normal vector from the acoustic surface nodes/material points to the solid surface. A value of 0 indicates an infinite radius, meaning no radius is applied. Default is 0.
  • formulation: The method for handling unaligned mesh. Either UseConstraint or UseIntegration. UseConstraint generates normal direction DOFs at nodes of the acoustic surface, while UseIntegration increases the integration order. The default is UseConstraint.

AcousticSolidLink is used when considering the interaction between acoustic and solid elements, adding effects to both the mass and stiffness matrices. It also calculates external forces in cases such as earthquakes. This constraint is used for fluid-structure interaction analysis or to input seismic loads for fluids. It is only available in *Step, TYPE=Dynamic and *Step, TYPE=Frequency.

  • Aligned Mesh: For aligned meshes where the acoustic and solid surfaces are the same, use surface and density.
  • Unaligned Mesh: For unaligned meshes, use acousticSurface, solidSurface, density, radius, and formulation.
Example
*Constraint, TYPE=AcousticSolidLink, Name=acousticSolidLink
 damUpstream, 1000    
 damBottom, 1000
 leftWater, tankRight, 1000
 water, tank, 1000, 5