#### RIGID_BODY_UPDATE

###### Rigid bodies
*RIGID_BODY_UPDATE
type
##### Parameter definition
VariableDescription
type Update type
options:
0 $\rightarrow$ linear update when interacting with deformable body
1 $\rightarrow$ linear update if sharing nodes with deformable body
2 $\rightarrow$ always curvilinear update
##### Description

Optional command to enforce curvilinear update of nodes belonging to rigid bodies.

By default (in order to conserve energy) rigid body nodes follow incremental linear paths during time integration, when interacting with deformable bodies. This can lead to significant geometrical errors if both time step size and the rigid body rotations are large.

##### Example
###### Linear/curvilinear update

Two cylinders, one rigid and one deformable are merged. The free end of the deformable cylinder is fixed and the rigid cylinder is rotating around its central axis, creating torsion. Due to both large time step size and rigid body rotations, a geometrical error is appearing.

One way of solving this problem is to reduce time step size. An alternative approach is to change the update type of the rigid body nodes.

*UNIT_SYSTEM
SI
*PARAMETER
%L1 = 1.0, "Length of deformable cylinder"
%L2 = 0.15, "Length of rigid cylinder"
%D = 0.1, "Diameter of cylinders"
%rot = 4*pi, "Rotation at termination"
%tend = 0.01, "Termination time"
%dx = 0.05, "Element size in axial direction"
%type = 2, "Rigid body update type [0, 1 or 2]"
#
# --- TIME and OUTPUT ---
#
*TIME
[%tend]
*OUTPUT
[%tend/5]
#
# --- MESH ---
#
*COMPONENT_CYLINDER
1, 1, [%L1/%dx], 4
0, 0, 0, 0, 0, [%L1], [%D/2]
*COMPONENT_CYLINDER
2, 2, [%L2/%dx], 4
0, 0, [%L1], 0, 0, [%L1+%L2], [%D/2]
*MERGE_DUPLICATED_NODES
P, 1, P, 2, 1e-5
#
# --- MATERIAL ---
#
*MAT_ELASTIC
1, 7800, 210e6, 0.3
*MAT_RIGID
2, 7800
*PART
1, 1, , , 50
2, 2, , , 50
*CHANGE_P-ORDER
ALL, 0, 3
#
# --- BOUNDARY CONDITIONS ---
#
*BC_MOTION
"Fix deformable end"
1
G, 1, XYZ
*GEOMETRY_SEED_COORDINATE
1
0, 0, 0
*BC_MOTION
"Rotation on rigid part"
2
P, 2, Z
D, RZ, 2
*FUNCTION
2
%rot*(t/%tend)
#
# --- RIGID BODY UPDATE ---
#
*RIGID_BODY_UPDATE
[%type]
*END