Constraints¶
Constraints allow to limit kinematic freedom of bodies, e.g. control displacements or prevent interpenetration. This is reflected on the level of dynamics via reaction forces, which are used to produce desired kinematic effects. Solfec-1.0 includes equality constraints, or joints, and contact constraints applied at individual contact points. In this section we briefly demonstrate how constraints are incorporated into the time stepping schemes introduced earlier.
From global to local velocity¶
Velocity \(\mathbf{u}\), as defined for rigid, pseudo-rigid, and finite–element bodies, can be qualified as a global, or generalized, or bodytextendash space entity. In order to obtain a local, spatial 3–dimensional velocity vector, \(\mathbf{U}\), of any spatial image \(\mathbf{x}\) of a referential point \(\mathbf{X}\), we shall use a linear transformation of the kind
Most generally the local velocity \(\mathbf{U}\) will be expressed in a local coordinate system, made up of three linearly independent 3–vectors, \(\mathbf{a}_{i}\), juxtaposed, in a column–wise manner into a matrix \(\left\{ \mathbf{a}_{i}\right\}\), also called local frame, cf. Fig. 5. Such matrix will have an inverse which we can denote as \(\left\{ \mathbf{a}^{i}\right\} ^{T}=\left\{ \mathbf{a}_{i}\right\} ^{-1}\). The two coordinate systems, \(\left\{ \mathbf{a}_{i}\right\}\) and \(\left\{ \mathbf{a}^{i}\right\}\), are traditionally referred to as covariant and contravariant, respectively. In Solfec-1.0 we use an orthogonal local base \(\left\{ \mathbf{a}_{i}\right\}\) and in this case \(\left\{ \mathbf{a}^{i}\right\} =\left\{ \mathbf{a}_{i}\right\}\), so that \(\left\{ \mathbf{a}^{i}\right\} ^{T}=\left\{ \mathbf{a}_{i}\right\} ^{T}\). Consequently, the local frame is functionally equivalent to a rotation matrix.
The linear transformation (44) can be most generally derived as follows. Take any motion
and calculate its derivative with respect to time
Then transform this spatial velocity from the global Euclidean frame into the local frame
Thus
Specific forms of this transformation are described in sections below.
Rigid kinematics¶
For rigid bodies, there holds
and hence
where the hat operator makes an anti–symmetric matrix out of a 3–vector, and \(\mathbf{I}\) is a \(3\times3\) identity matrix.
Pseudo–rigid kinematics¶
For pseudo-rigid bodies, there holds
and hence
Finite–element kinematics¶
For finite–element bodies, there holds
and hence
Time stepping with constraints¶
If we wish to control components of a local velocity \(\mathbf{U}\) at a point \(\mathbf{x}\), we can do this by applying a force \(\mathbf{R}\) at this point. Such local force \(\mathbf{R}\) is reflected as a global, or generalized, or body–space force, \(\mathbf{r}\) as follows
The momentum balance is modified accordingly
In case of multiple forces, \(\mathbf{R}_{\alpha}\), applied at multiple points \(\mathbf{x}_{\alpha}\), and controlling multiple local velocities \(\mathbf{U}_{\alpha}\), the modified momentum balance reads
Our attempt to control components of local velocities can be interpreted as applying constraints. With such understanding, we can call \(\mathbf{U}_{\alpha}\) constraints velocities, and \(\mathbf{R}_{\alpha}\) constraints reactions. For the sake of convenience, in case of a multi–body system, we can use symbols \(\mathbf{M}\), \(\mathbf{q}\), \(\mathbf{u}\), \(\mathbf{f}\), \(\mathbf{H}\), \(\mathbf{U}\), \(\mathbf{R}\), etc. as suitably juxtaposing matrices and vectors of all associated individual bodies or constraints. For example
With such understanding in mind, we can incorporate any set of constraints into a multi–body system, by saying
where the relation \(\mathbf{C}\left(\mathbf{U},\mathbf{R}\right)=\mathbf{0}\) implicitly expresses a control over local velocities \(\mathbf{U}_{\alpha}\), exerted using reaction forces \(\mathbf{R}_{\alpha}\). Now, including constraints, we can modify the previously introduced time stepping as follows
The first step (57) is explicit. Equations (58), (59), (60) are solved together, implicitly. The final step (61) is again explicit. This form of constrained time integration is implemented in Solfec-1.0.
Implementation¶
Calculation of the global to local velocity mapping \(\mathbf{H}\) is implement in bod.c (rigid, pseudo–rigid) and fem.c (finite–element) files. A constraint data structure, including the local frame \(\left\{ \mathbf{a}_{i}\right\}\), the spatial point \(\mathbf{x}\), the constraint velocity \(\mathbf{U}\), and rection \(\mathbf{R}\), is declared in dom.h as follows:
67#define VELODIR1(Z) ((Z)[1]) /* prescribed velocity at (t+h) */
68#define VELODIR2(Z) ((Z)[2]) /* prescribed velocity at (t+h) */
69
70enum constraint_state
71 {CON_COHESIVE = 0x01,
72 CON_NEW = 0x02, /* newly inserted constraint */
73 CON_IDLOCK = 0x04, /* locked ID cannot be freed to the pool */
74 CON_EXTERNAL = 0x08, /* a boundary constraint migrated in from another processor */
75 CON_DONE = 0x10}; /* auxiliary flag used in several places */
76
77struct constraint
78{
124 /* put parallel data at the end of the structutre so that
Evaluation of (45) in accessed via bod.c:BODY_Gen_To_Loc_Operator.
Assembling of (46) is in bod.c:rig_operator_H.
Assembling of (47) is in bod.c:prb_operator_H.
Assembling of (48) is in fem.c:FEM_Gen_To_Loc_Operator.