fedoo.constraint.RigidTie

class RigidTie(list_nodes, node_cd, var_cd, name='Rigid Tie')

Boundary conditions class that eliminate dof assuming a rigid body tie between nodes

Create an object that defines a rigid tie coupling between some nodes using several multi-points constraints. Some constraint drivers (cd) dof are used to define rigid body displacement and rotation. The center of rotation is assumed to be at the position of the first node given in the constraint driver nodes (node_cd[0]). The dof associated to a contraint driver is difined by the node indice (defined in node_cd) and the associated variable (defined in var_vd) with the following order: [DispX, DispY, DispZ, RotX, RotY, RotZ] where:

  • DispX, DispY and DispZ are the displacement of the reference node of the rigid group (reference node = node_cd[0])

  • RotX, RotY and RotZ are the rigid rotation around the 3 axes with the reference node being the center of rotation. The rotation axis are attached to the solid.

Parameters:
  • list_nodes (list (int) or 1d np.array) – list of nodes that will be eliminated considering a rigid body tie.

  • node_cd (list of int) – Nodes used as constraint drivers for each rigid displacement and rotation. The associated dof used as contraint drivers are defined in var_cd. len(node_cd) should be 6 because 6 constraint driver dof are required.

  • var_cd (list of str.) – Variables used as constraint drivers. The len of the list should be the same as node_cd (ie 6).

  • name (str, optional) – Name of the created boundary condition. The default is “Rigid Tie”.

Definition of rotations

A convention needs to be defined the orders of rotations. The convention used in this class is: First rotation around X, then rotation around Y’ (Y’ being the new Y afte r rotation around X) and finaly the rotation arould Z” (Z” beging the new Z after the 2 first rotations).

We can note that this convention can also be interpreted using global axis not attached to the solid by applying first the rotation around Z, then the rotation around Y and finally, the rotation around X.

Notes

  • The node given in list_nodes are eliminated from the system (slave nodes) and can’t be used in another mpc.

  • The rigid coupling is highly non-linear and the multi-point constraints are modified at each iteration.

  • Once created the RigidTie object needs to be associated to the problem using the Problem.add method.

Example

import fedoo as fd

mesh = fd.mesh.box_mesh()

#add nodes not associated to any element for constraint driver
node_cd = mesh.add_virtual_nodes(2)
var_cd = ['DispX', 'DispY', 'DispZ', 'DispX', 'DispY', 'DispZ']

left_face = mesh.find_nodes('X', mesh.bounding_box.xmin)
right_face = mesh.find_nodes('X', mesh.bounding_box.xmax)

rigid_tie = fd.constraint.RigidTie(right_face, node_cd, var_cd)
__init__(list_nodes, node_cd, var_cd, name='Rigid Tie')

Methods

RigidTie.generate(problem[, t_fact, t_fact_old])

RigidTie.get_all()

RigidTie.initialize(problem)

RigidTie.str_condensed()

Return a condensed one line str describing the object

RigidTie.name