Boundary Conditions

Various types of boundary conditions can be defined on points (nodes), lines, surfaces and volumes. These conditions are defined in the general section format

--DESIGN [POINT|LINE|SURF|VOL] <condition type> CONDITIONS

with subsequent lines defining the region and the specific values of the boundary conditions. Note that some boundary condition types do not follow this general structure. For each particular condition, refer to the boundary condition reference.

A point conditions must be followed by DPOINT <num>, a line condition by DLINE <num>, a surface by DSURF <num> and a volume by DVOL <num>. The number to be entered in num is the number of conditions to follow.

Each subsequent line starts with an E <set> -, where set is the number of the TOPOLOGY set defined in terms of points, lines, surfaces and volumes, respectively.

Note that all boundary conditions are given in terms of node sets. Boundary conditions may be applied in arbitrary coordinate directions, which do not need to coincide with the original coordinate system of the geometry. For this aspect one may define a local (rotated) coordinate system.

Local Coordinate System

Local coordinates may be defined on points, lines, surfaces and volumes. The coordinate system is given by an axis \(\mathbf{n}\) and an angle \(\alpha\) (in rad) around which the coordinate is rotated clockwise.

Since the axis is a unit vector, the angle is given as the length of the vector, so that the complete rotation can be entered in three values: \([\alpha \cdot n_x, \, \alpha \cdot n_y, \, \alpha \cdot n_z]\).

The complete definition of a local coordinate system writes:

------------------------DESIGN [POINT/VOL] LOCSYS CONDITIONS
DPOINT/DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - ROTANGLE 0.0 0.0 0.0 FUNCT 0 0 0 USEUPDATEDNODEPOS 0
// num corresponds to the set_descriptor_id defined in DNODE/DVOL-NODE TOPOLOGY block

for point and volume definitions, and

------------------------DESIGN [LINE|SURF] LOCSYS CONDITIONS
DPOINT|DLINE|DSURF    numtotal   //  numtotal is the number of subsequent lines
E num - ROTANGLE 0.0 0.0 0.0 FUNCT 0 0 0 USEUPDATEDNODEPOS 0  USECONSISTENTNODENORMAL 0
// num corresponds to the set_descriptor_id defined in DLINE/DSURF-NODE TOPOLOGY block

for lines and surfaces.

The rotation may depend on time and/or space, that is, it can be combined with a function definition, see the proper definition in the functions section.

In addition, it is possible to calculate a spatial dependence either on the original node coordinates or on the updated (displaced) node coordinate, which may be important in a large displacement analysis. This is done by the USEUPDATEDNODEPOS parameter (=0: original coordinates, =1: updated coordinates).

Todo

The parameter USECONSISTENTNODENORMAL can (at this time) only be used for ALE and fluid simulation. However, there is no test input using this parameter anyway.

Dirichlet Boundary Conditions

Dirichlet boundary conditions (BC) are defined by specifying the number of DOFs of the nodes in the respective node set (NUMDOF). A binary switch that indicates which of these DOFs should be constrained (ONOFF= 0 or 1, with 0=unconstrained and 1=constrained). A list of entries to which value the respective DOFs are constrained (VAL). If applicable, the specifier (FUNCT) giving the ID of a function that defines a dependence of the constraint DOFs on other simulation parameters like, e.g., the time (see below) and, if applicable, a (TAG) entry. It is noted that, the number of entries following ONOFF, VAL and FUNCT must be the same as NUMDOF value. The geometry entity that the Dirichlet boundary condition applies is specified by num value. Depending on which block description of the boundary condition, the type of corresponding geometry will be selected appropriately, see the comments of the table below for more information. The value of num can only be from 1 to the number of the design descriptor.

In the case that two or more boundary conditions are intersected, the intersection geometry must be constrained with the constraint information of both BCs. This feature shall be handled properly by the pre-processor.

Of course, the applied Dirichlet boundary condition may depend on time and on the position of the node. This is achieved by a function definition, after the keyword FUNCT. The number of the function (for each component) can be specified in order to define a spatial or temporal dependence. The proper definition of functions is given in the functions section.

The TAG option allows to monitor the reaction forces at the constraint nodes by setting it to monitor_reaction. With this (TAG) set, the reaction forces are written to .csv files in a newly created sub directory of the simulation directory. Note that even even the TAG parameter can be given for any dirichlet boundary condition, it only produces results for forces and moments in a structural analysis.

One needs also to set the corresponding IO, such as

-------------------------------------IO/MONITOR STRUCTURE DBC
INTERVAL_STEPS                   1
PRECISION_FILE                   16
PRECISION_SCREEN                 5
FILE_TYPE                        csv
WRITE_HEADER                     no

, see IO/MONITOR STRUCTURE DBC, and set the right time integration strategy, INT_STRATEGY, by which the standard one, i.e. Generalized Newmark Alpha, should always work.

--------------------------------------------STRUCTURAL DYNAMIC
INT_STRATEGY                     Standard

Note that the TAG parameter may only be set for linear elements, not for quadratic ones (HEX20, TET10)

Below is the valid block definition for various types of Dirichlet boundary conditions.

------------------------DESIGN [POINT|LINE|SURF|VOL] DIRICH CONDITIONS
DPOINT|DLINE|DSURF|DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TAG none
// num corresponds to the point_descriptor_id defined in DNODE/DLINE/DSURF/DVOL-NODE TOPOLOGY block
--------------------DESIGN [POINT|LINE|SURF|VOL] ALE DIRICH CONDITIONS
DPOINT|DLINE|DSURF|DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TAG none
--------------DESIGN [POINT|LINE|SURF|VOL] TRANSPORT DIRICH CONDITIONS
DPOINT|DLINE|DSURF|DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TAG none
-----------------DESIGN [POINT|LINE|SURF|VOL] THERMO DIRICH CONDITIONS
DPOINT|DLINE|DSURF|DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TAG none
-------------------DESIGN [POINT|LINE|SURF|VOL] PORO DIRICH CONDITIONS
DPOINT|DLINE|DSURF|DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TAG none
---------------DESIGN [POINT|LINE|SURF|VOL] NURBS LS DIRICH CONDITIONS
DPOINT|DLINE|DSURF|DVOL    numtotal   //  numtotal is the number of subsequent lines
E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TAG none

See the respective reference sections for mechanical, ALE, TRANSPORT, THERMO, PORO, NURBS LS.

Neumann Boundary Conditions

Neumann boundary conditions are flux conditions. This means that in contrast to the Dirichlet boundary conditions, they have to be provided in terms of flux per applied geometry. A POINT NEUMANN condition is, for example, a concentrated force or heat flux, while a SURF NEUMANN is a pressure or surface heat flux, accordingly.

----------------------------DESIGN [POINT|LINE|SURF|VOL] NEUMANN CONDITIONS
DPOINT|DLINE|DSURF|DVOL     numtotal   //  numtotal is the number of subsequent lines
//E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TYPE Live
-------------------------------------------DESIGN POINT MOMENT EB CONDITIONS
DPOINT|DLINE|DSURF|DVOL     numtotal
//E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TYPE Live
-----------------------DESIGN [POINT|LINE|SURF] TRANSPORT NEUMANN CONDITIONS
DPOINT|DLINE|DSURF          numtotal
//E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TYPE Live
----------------------DESIGN [POINT|LINE|SURF|VOL] THERMO NEUMANN CONDITIONS
DPOINT|DLINE|DSURF|DVOL     numtotal
//E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TYPE Live
------------------------DESIGN [POINT|LINE|SURF|VOL] PORO NEUMANN CONDITIONS
DPOINT|DLINE|DSURF|DVOL     numtotal
//E num - NUMDOF 0  ONOFF 0  VAL 0.0  FUNCT none   TYPE Live

See the respective reference sections for mechanical, MOMENT EB, TRANSPORT, THERMO, PORO.

Robin (Spring-Dashpot) conditions

A spring-dashpot condition, also called a Robin boundary condition, is used to give a surface boundary (and only surface boundaries!) a stiffness and/or viscosity with respect to its displacement. For each degree of freedom the stiffness and/or viscosity may be considered or not. Also, both stiffness and viscosity may depend on a function definition. The Direction can be given in the global coordinate system or with respect to the surface normal. The input looks like this:

------------------------------DESIGN SURF ROBIN SPRING DASHPOT CONDITIONS
E <surfset> NUMDOF 3 ONOFF 0 0 0 \
STIFF <X_STIFF> <Y_STIFF> <Z_STIFF> TIMEFUNCTSTIFF 0 0 0 \
VISCO <X_VISCO> <Y_VISCO> <Z_VISCO> TIMEFUNCTVISCO 0 0 0 \
DISPLOFFSET 0.0 0.0 0.0 TIMEFUNCTDISPLOFFSET 0 0 0 FUNCTNONLINSTIFF 0 0 0 \
DIRECTION xyz|refsurfnormal|cursurfnormal COUPLING none
  • Commonly the Robin boundary condition couples the nodes at the surface to its original position. However, by giving a value to DISPLOFFSET, one may introduce a prestressing of the spring. The point in space, to which it the surface nodes are coupled, may also move with time (TIMEFUNCTDISPLOFFSET).

  • The direction in which the spring and dashpot are acting can be specified by the parameter DIRECTION. This is either a global direction (DIRECTION xyz) or the surface normal (then only the x-axis has to be specified a finite value, but all three axis have to be given). The surface normal may then be either the reference one (refsurfnormal), or the current one (cursurfnormal).

  • The Robin boundary condition can also couple the surface to another surface by specifying a couplingID (COUPLING <int>). The coupled surface is then given by a DESIGN SURF ROBIN SPRING DASHPOT COUPLING CONDITIONS, see the following input:

------------------------------DESIGN SURF ROBIN SPRING DASHPOT CONDITIONS
E <surfset> NUMDOF 3 ONOFF 0 0 0 \
STIFF <X_STIFF> <Y_STIFF> <Z_STIFF> TIMEFUNCTSTIFF 0 0 0 \
VISCO <X_VISCO> <Y_VISCO> <Z_VISCO> TIMEFUNCTVISCO 0 0 0 \
DISPLOFFSET 0.0 0.0 0.0 TIMEFUNCTDISPLOFFSET 0 0 0 FUNCTNONLINSTIFF 0 0 0 \
DIRECTION xyz|refsurfnormal|cursurfnormal COUPLING <couplingID>
//
------------------------------DESIGN SURF ROBIN SPRING DASHPOT COUPLING CONDITIONS
DSURF <numtotal>
E <surfset> - <couplingID>

See also DESIGN POINT ROBIN SPRING DASHPOT CONDITIONS and DESIGN SURF ROBIN SPRING DASHPOT COUPLING CONDITIONS.

Constraint conditions

Often, it is useful to prescribe not an absolute value of a nodal displacement or force, but rather a displacement relative to other displacements, which is commonly called constraint condition. 4C has a number of options to define such constraints.

Several nodes coupled for specific degrees of freedom

----------------------------------DESIGN POINT COUPLING CONDITIONS
DPOINT <numtotal>
E <pointset> - NUMDOF 6 ONOFF 1 1 1 1 1 1

Some applications (typically in structural / solid mechanics) require the coupling of certain DoFs of two or more nodes at the same geometrical position, while certain other DoFs of those nodes shall remain independent (e.g. joints and hinges in frames). While it is very easy to couple all(!) DoFs of several nodes at the same geometrical position (by simply merging the nodes into one node), things are more complicated if only certain DoFs are to be coupled. While it would always be possible to introduce this coupling as a Dirichlet condition / Multipoint Constraint into the final system of equations, we have decided to implement this at a more fundamental level by changing the assignment of DoFs according to the existing coupling conditions. Thus, if a point coupling condition is introduced for a set of nodes, the DoFs to be coupled are identified and the same(!) DoFs are then assigned to all participating nodes, while the remaining uncoupled DoFs are created and assigned independently for each node. This required some changes in the way nodal DoFs are assigned and handled in 4C. However, after the initial DoF handling, the nice thing about this approach is that nothing needs to be done anymore at the system matrix level because the coupling is inherently included in the DoF-maps. If you think of a web-like frame structure with many joints and hinges, this also means that the global system size is drastically reduced as compared to a Dirichlet type handling of such constraints.

Features:

  • new point coupling condition - e.g. for joints / hinges in structural mechanics

  • no interference (hopefully) with element or face DoFs

  • DofSet class is now able to handle repeated assignment of DoFs to more than one node

  • DofSet class is now tracking and storing not only the first DoF ID of a node but all DoF IDs of a node

NOT included so far:

  • support for derived DofSet classed that overload AssignDegreesOfFreedom (e.g. MortarDofSet, PotentialDofSet)

  • support for special DofSet stuff (e.g. TransparentDofSet, Proxies…)

  • support for bandwidth optimization (#define BW_OPT), which is currently however not used anyway

Example input file snippet for a Y-junction of three beam elements with a pin joint (“Momentengelenk”)

------------------------------------DESIGN POINT COUPLING CONDITIONS
E 1 NUMDOF 6 ONOFF 1 1 1 0 0 0
-------------------------------------------------DNODE-NODE TOPOLOGY
NODE 17 DNODE 1
NODE 42 DNODE 1
NODE 73 DNODE 1

All nodes of the given pointset have the same displacement in the directions with ONOFF flag 1, that is, here they are coupled for the three translational DoFs, while the rotational DoFs are free; see also DESIGN POINT COUPLING CONDITIONS.

Danger

I gave a boundary condition (tried dirichlet and neumann) to a 3D structure in one coordinate direction and coupled the nodes in the other two directions. The results seem to be wrong.

Surface coupled to a node in a given direction

-----------------------------DESIGN SURFACE NORMALDIR MULTIPNT CONSTRAINT 3D
DSURF <numtotal>
E <surfset> - <conditionID> <amplitude> <curveID> <inittime> <masternodeID> <n_x> <n_y> <n_z> [disp|x] [abs|rel]
//
-----------------------------DESIGN SURFACE NORMALDIR MULTIPNT CONSTRAINT 3D PEN
DSURF <numtotal>
E <surfset> - <conditionID> <amplitude> <curveID> <inittime> <penalty> <masternodeID> <n_x> <n_y> <n_z> [disp|x] [abs|rel]

The whole surface is displaced the same amount as a single master node (which is not defined by a DPOINT, but by its ID). The penalty version uses a different algorithm, where one has to provide a penalty parameter. See also DESIGN SURFACE NORMALDIR MULTIPNT CONSTRAINT 3D and DESIGN SURFACE NORMALDIR MULTIPNT CONSTRAINT 3D PEN.

Node displacement relative to a given surface or line

—————————————DESIGN SURFACE MULTIPNT CONSTRAINT 3D DSURF <numtotal> E <surfset> - ConditionID <conditionID> amplitude <amplitude> curve <curveID> activeTime <inittime> planeNodes <node1> <node2> <node3> control [abs|rel] // —————————————DESIGN LINE MULTIPNT CONSTRAINT 2D DLINE <numtotal> E <lineset> - ConditionID <conditionID> amplitude <amplitude> curve <curveID> constrNode1 <node1> constrNode2 <node2> constrNode3 <node3> control [dist|angle] activeTime <inittime> //

This is a rather specific constraint, where a plane (or a line, respectively) is defined by three nodes, which are given as index of the <surfset>|<lineset> (the index is starting from 1 for whatever reasons), and the other nodes of this set are displaced with respect to this plane/line. See DESIGN SURFACE MULTIPNT CONSTRAINT 3D and DESIGN LINE MULTIPNT CONSTRAINT 2D

Periodic boundary conditions

--------------------------DESIGN SURF PERIODIC BOUNDARY CONDITIONS
DSURF  <numtotal>
// definition of slave surface
E <surfset> - ID 1 MASTER_OR_SLAVE Slave PLANE [xy|xz|yz] LAYER 1 ANGLE 0.0 ABSTREETOL 1e-6
// definition of master surface
E <surfset> - ID 1 MASTER_OR_SLAVE Master PLANE [xy|xz|yz] LAYER 1 ANGLE 0.0 ABSTREETOL 1e-6
//
--------------------------DESIGN LINE PERIODIC BOUNDARY CONDITIONS
DLINE  <numtotal>
// definition of slave line
E <lineset> - ID 1 MASTER_OR_SLAVE Slave PLANE [xy|xz|yz] LAYER 1 ANGLE 0.0 ABSTREETOL 1e-6
// definition of master line
E <lineset> - ID 1 MASTER_OR_SLAVE Master PLANE [xy|xz|yz] LAYER 1 ANGLE 0.0 ABSTREETOL 1e-6

Periodic boundaries are defined as conditions, where nodes on one surface (normal to any of the cartesian coordinate directions, i.e., xy, yz, or xz), are bound to the respective nodes on the opposite side, see the reference DESIGN SURF PERIODIC BOUNDARY CONDITIONS, DESIGN LINE PERIODIC BOUNDARY CONDITIONS. They can be defined at one or several sides of the structure. Nodes at either side must be at equal plane coordinates (within the tolerance given by ABSTREETOL), and the normal distance must be equal for each nodal pair.

The definition of ANGLE is used for rotational symmetry. For this case, the master must always be in the defined PLANE, and the slave is rotated by the given angle, while the same plane must be given.

Contact conditions

Contact conditions, which in 4C are set up by the keyword MORTAR are defined along lines (2D) or surfaces (3D). At least one contact pair is necessary:

---------------------------DESIGN LINE|SURF MORTAR CONTACT CONDITIONS 2D|3D
DLINE              <numtotal>
//E <num> - InterfaceID <interfaceID> Side <Master|Slave|Selfcontact> Initialization <Inactive|Active> [FrCoeffOrBound 0.0] [AdhesionBound 0.0] [Application <Solidcontact|Beamtosolidcontact|Beamtosolidmeshtying>] [DbcHandling <DoNothing|RemoveDBCSlaveNodes>] [TwoHalfPass 0.0] [RefConfCheckNonSmoothSelfContactSurface 0.0] [ConstitutiveLawID 0]

The parameters FrCoeffOrBound, AdhesionBound, Application, DbcHandling, TwoHalfPass, RefConfCheckNonSmoothSelfContactSurface and ConstitutiveLawID are optional. You’ll find more information about contact in the contact and meshtying section.

Definition in a .bc file (for use with pre_exodus)

In general, boundary conditions are defined in the .bc file. This is done per previously defined node and side set or element block by the following general syntax (cf. the default.bc file):

Node Set, named:
Property Name: INFLOW
has 45107 Nodes
'*ns0="CONDITION"'
sectionname=""
description=""

for boundary conditions acting on nodes, like displacements or temperatures, and

Side Set, named: innerSurface
has 45107 Nodes
'*ss0="CONDITION"'
sectionname=""
description=""

for boundary conditions acting on element surfaces, like surface pressure or thermal convection, and

Element Block, named:
of Shape: HEX8
has 9417816 Elements
*eb0="ELEMENT"
sectionname="STRUCTURE"
description="MAT 1 KINEM nonlinear "

for element types, respectively (the values of the sectionname and description are just examples).

Note that you can specify a condition also on an ElementBlock, just replace ‘ELEMENT’ with ‘CONDITION’ The ‘E num’ in the dat-file depends on the order of the specification below

These syntax blocks are automatically created for a given mesh when running the pre_exodus script on the corresponding .e file and are then collected at the top of the default.bc file. The node set IDs *ns and element set IDs *eb are automatically matched the IDs in the .e file in this case.

To apply boundary conditions, a string has to be given for sectionname= and description=. A collection of all currently implemented boundary conditions is given in the Prescribed condition reference. In this, the sectionname of a boundary condition is given first (e.g. DESIGN POINT DIRICH CONDITIONS) followed by the E num entry which (without the E num) has to be put as the description (see above).