fedoo.constraint.RigidTie

class RigidTie(list_nodes, center=None, use_quaternion=True, name='Rigid Tie')

Constraint 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. By default, the center of rotation is located at the center of the bounding box defined by all nodes tied together. The rotation center move with the rigid displacement. RigidTie constraint add 6 global_dof to the problem: “RigidDispX”, “RigidDispY”, “RigidDispZ”, “RigidRotX”, “RigidRotY”, “RigidRotZ” and two global_dot vectors:

  • “RigidDisp” = [“RigidDispX”, “RigidDispY”, “RigidDispZ”] for rigid displacement

  • “RigidRot” = [“RigidRotX”, “RigidRotY”, “RigidRotZ”] for rigid rotation

If several RigidTime constraints are used with the same problem, all the previous variables will contains several dof, the indice of the dof being associated to order in which the constraint has been added. For instance, pb.global_dof[‘RigidDispX’][0] will be associated to the first added RigidTie and dof[‘RigidDispX’][1] to the second one.

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

  • center (int of np.array[float] with shape = (3), optional) – If center is an int, the rotation center will be initialized at the coordinates of the corresponding node in the mesh. If center is an array (or list, …) it contains the initial coordinates of the rotation center. By default, the center is set at the midle of the rigid sets.

  • use_quaternion (bool, optional) – If True (default), the rotational DOFs describe an incremental rotation vector relative to the last converged orientation. The increment is composed multiplicatively and the converged orientation is stored as a quaternion. If False, the DOFs are interpreted as one total rotation vector.

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

Definition of rotations

RigidRotX, RigidRotY and RigidRotZ use a rotation-vector convention. The vector direction defines the rotation axis and its norm is the rotation angle. With use_quaternion=True, this rotation vector is the current increment and is composed with the last converged orientation; the quaternion is an orientation storage format, not a different DOF convention.

Notes

  • The node given in list_nodes are eliminated from the system (slave nodes) and can’t be used in other boundary conditions. The boundary conditions should be enforce using the added global dof.

  • 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()

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)
__init__(list_nodes, center=None, use_quaternion=True, name='Rigid Tie')

Methods

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

RigidTie.get_all()

RigidTie.initialize(problem)

RigidTie.pre_update(problem)

Refresh rigid slave positions before contact assemblies update.

RigidTie.register_global_dofs(problem)

Register global DOFs required by this boundary condition.

RigidTie.rotation_jacobian(rotvec, points)

Rotation matrix and per-point displacement/rotation derivatives.

RigidTie.set_start(problem)

Commit a converged incremental rotation to the quaternion state.

RigidTie.str_condensed()

Return a condensed one line str describing the object

RigidTie.to_start(problem)

Leave the last converged quaternion unchanged after a failed step.

RigidTie.Q_total

Last converged quaternion orientation, or None in total mode.

RigidTie.name