Dynamics¶
For a body \(\mathcal{B}\), the conservation of linear and angular momentum respectively read
where \(t\) is time, \(\rho\) is the mass density, \(\dot{\mathbf{x}}\) is the point velocity, \(\mathbf{t}\) is the surface traction, \(\mathbf{b}\) is the body force, and \(\bar{\mathbf{x}}\) is a selected point. All of the mentioned quantities are spatial and so is the integration domain \(\mathcal{B}\), being the current configuration of the body. Sections below rephrase these balance principles, as required, for each of the kinematic models available in Solfec-1.0.
Rigid dynamics¶
Linear momentum balance reads
The spatial angular momentum balance reads
The referential angular momentum balance reads
where \(\mathbf{m}\) is the torque
and \(\mathbf{j}\) and \(\mathbf{J}\) are
the spatial and the referential inertia tensors, respectively. \(\mathbf{I}\) is the \(3\times3\) identity matrix. \(\mathbf{E}_{0}\) is the referential Euler tensor
where \(\mathcal{B}_{0}\) is the reference configuration, \(\rho_{0}\) is the referential mass density, and the tensor product operator \(\otimes\) makes a \(3\times3\) matrix out of two 3-vectors, e.g. \(\mathbf{a}=\mathbf{b}\otimes\mathbf{c}\) means \(a_{ij}=b_{i}c_{j}\).
In matrix notation these balance principles read
where
and
Pseudo–rigid dynamics¶
Linear momentum balance reads
The referential angular momentum balance reads
where \(\mathbf{E}_{0}\) is defined in (22), \(V\) is the volume of the domain, and \(\bar{\mathbf{P}}\) is the average referential first Piola stress, defined as
where the hyperelastic Saint Venant – Kirchhoff material is adopted. In the above \(\lambda\) and \(\mu\) are Lam'e constants, while \(\delta_{ij}\) is the Kronecker delta. The Lam'e constants can be expressed in terms of the Young modulus \(E\) and the Poisson ratio \(\nu\) as
In matrix notation these balance principles read
where
and
It should be noted, that it is the row–wise composition of \(\dot{\mathbf{F}}\) in \(\mathbf{u}\) (cf. Kinematics), which allows us to use the computationally convenient block–diagonal form of \(\mathbf{M}\) for pseudo–rigid bodies.
Finite–element dynamics¶
The linear momentum balance reads
where \(\mathbf{M}\) is the mass matrix, \(\mathbf{f}_{\text{int}}\) is a vector of internal forces, \(\mathbf{f}_{\text{damp}}\) is a vector of damping forces, and \(\mathbf{f}_{\text{ext}}\) is a vector of external forces. These matrices and vectors are defined as follows
where, except for \(\mathbf{f}_{\text{ext}}\), the so called total Lagrangian notation was used. The contraction of the strain matrix \(\mathbf{B}=\left\{ \partial\mathbf{N}/\partial\mathbf{X}\right\}^{T}\) with the first Piola stress tensor, \(\mathbf{B}:\mathbf{P}=\sum_{ij}B_{ij}P_{ij}\), creates the nodal components of the internal force vector. The derivative of the internal force with respect to displacements, \(\partial\mathbf{f}_{\text{int}}/\partial\mathbf{q}\), is customarily called the stiffness matrix, \(\mathbf{K}\). Stiffness proportional damping is used in Solfec-1.0, hence \(\mathbf{f}_{\text{damp}}=\eta\mathbf{K}\), where \(\eta\ge0\).
In matrix notation we simply have
where
Implementation¶
Dynamics is implement in bod.c (rigid, pseudo–rigid) and fem.c (finite–element) files. Mass and stiffness matrices \(\mathbf{M}\) and \(\mathbf{K}\), and the damping factor \(\eta\), are declared in bod.h as follows:
struct general_body
{
/* ... */
MX *M; /* inertia operator */
MX *K; /* stiffness operator */
double damping; /* stiffness proportional damping */
/* ... */
}
Assembling of (23) is in bod.c:rig_dynamic_inverse.
Evaluation of (24) is in bod.c:rig_static_force.
Assembling of (25) is in bod.c:prb_dynamic_explicit_inverse.
Evaluation of (26) is in bod.c:prb_dynamic_force.
Assembling of diagonalized (27) is in fem.c:diagonal_inertia.
Evaluation of (28) is in fem.c:internal_force.
Assembling of (29) is in fem.c:tangent_stiffness.
Evaluation of (30) is in fem.c:external_force.