Structural Mechanics Models

Bar Model

[Fn]=[K][Dn]\begin{bmatrix}F_{n} \end{bmatrix}=\begin{bmatrix} K \end{bmatrix} \begin{bmatrix}D_{n} \end{bmatrix}

Each element (bar) has 6 degrees of freedom:

Fx1 Fy1 Fz1 Fx2 Fy2 Fz2=[K]X1 Y1 Z1 X2 Y2 Z2\begin{vmatrix}F_{x1} \\\ F_{y1} \\\ F_{z1} \\\ F_{x2} \\\ F_{y2} \\\ F_{z2} \end{vmatrix}=\begin{bmatrix} K \end{bmatrix} \begin{vmatrix} X_{1} \\\ Y_{1} \\\ Z_{1} \\\ X_{2} \\\ Y_{2} \\\ Z_{2} \end{vmatrix}

(2D Version of K matrix)

[K]=EcIl3126l126l 4l26l2l2 126l 4l2 \begin{bmatrix} K \end{bmatrix}= \frac{ E_c I}{l^3} \begin{vmatrix} 12 & 6l & -12& 6l \\\ & 4l^2 & -6l& 2l^2\\\ & & 12 & -6l\\\ & & & 4l^2 \end{vmatrix}


Beam Model

[Fn Mn]=[K][Dn θn]\begin{bmatrix}F_{n} \\\ M_{n} \end{bmatrix}=\begin{bmatrix} K \end{bmatrix} \begin{bmatrix}D_{n} \\\ \theta_{n} \end{bmatrix}

Each element (bar) has 12 degrees of freedom:

Fx1 Fy1 Fz1 Mx1 My1 Mz1 Fx2 Fy2 Fz2 Mx2 My2 Mz2=[K]X1 Y1 Z1 θx1 θy1 θz1 X2 Y2 Z2 θx2 θy2 θz2\begin{vmatrix}F_{x1} \\\ F_{y1} \\\ F_{z1} \\\ M_{x1} \\\ M_{y1}\\\ M_{z1} \\\ F_{x2} \\\ F_{y2} \\\ F_{z2} \\\ M_{x2} \\\ M_{y2}\\\ M_{z2} \end{vmatrix}=\begin{bmatrix} K \end{bmatrix} \begin{vmatrix} X_{1} \\\ Y_{1} \\\ Z_{1} \\\ \theta_{x1} \\\ \theta_{y1} \\\ \theta_{z1} \\\ X_{2} \\\ Y_{2} \\\ Z_{2} \\\ \theta_{x2} \\\ \theta_{y2} \\\ \theta_{z2} \end{vmatrix}

[K]=a100000a100000 b1000b20b1000b2 b10b2000b10b20 a200000a200 2b3000b20b30 2b30b2000b3 a100000 b1000b2 b10b20 a200 (sym)2b30 2b3 \begin{bmatrix} K \end{bmatrix}= \begin{vmatrix} a_1 & 0 & 0 & 0 & 0 & 0 & -a_1 & 0 & 0 & 0 & 0 & 0 \\\ & b_1 & 0 & 0 & 0 & b_2 & 0 & -b_1 & 0 & 0 & 0 & b_2 \\\ & & b_1 & 0 & -b_2 & 0 & 0 & 0 & -b_1 & 0 & -b_2 & 0 \\\ & & & a_2 & 0 & 0 & 0 & 0 & 0 & -a_2 & 0 & 0 \\\ & & & & 2b_3 & 0 & 0 & 0 & b_2 & 0 & b_3 & 0 \\\ & & & & & 2b_3 & 0 & -b_2 & 0 & 0 & 0 & b_3 \\\ & & & & & & a_1 & 0 & 0 & 0 & 0 & 0 \\\ & & & & & & & b_1 & 0 & 0 & 0 & -b_2 \\\ & & & & & & & & b_1 & 0 & b_2 & 0 \\\ & & & & & & & & & a_2 & 0 & 0 \\\ & (sym) & & & & & & & & & 2b_3 & 0 \\\ & & & & & & & & & & & 2b_3 \end{vmatrix}

a1=EcAla_1= \frac{E_c A}{l}

a2=GcJla_2= \frac{G_c J}{l}

b1=12EcIl3b_1= \frac{12 E_c I}{l^3}

b2=6EcIl2b_2= \frac{6 E_c I}{l^2}

b3=2EcIlb_3= \frac{2 E_c I}{l}

Bending Moment of Inertia I=bh312Bending\ Moment\ of\ Inertia \ I= \frac{bh^3}{12}

Polar Moment of Inertia J=bh(bb+hh)12Polar \ Moment\ of\ Inertia\ J= \frac{bh(bb+hh)}{12}

Modulus of Rigidity G=E2(1+nu)Modulus \ of\ Rigidity\ G= \frac{E}{2(1+nu)}


Dynamic Parallel Model

Based on (1) and (2), if at each time step I consider the first node of each element to located be on the primary X axis, X1,Y1,Z1,θx1,θy1,θz1X_{1} , Y_{1} , Z_{1} , \theta_{x1} , \theta_{y1} , \theta_{z1} will all be zeros and the transformation into the X-direction stiffness matrix is a trivial calculation. We then transform X2,Y2,Z2,θx2,θy2,θz2X_{2} , Y_{2} , Z_{2} , \theta_{x2} , \theta_{y2} , \theta_{z2} to the original rotation matrix. Therefore, the larger matrix calculation is reduced to the following equations:

Fx1=a1X2F_{x1}= -a_1 X_2

Fy1=b1Y2+b2θz2F_{y1}= -b_1 Y_2+b_2\theta_{z2}

Fz1=b1Z2+b2θy2F_{z1}= -b_1 Z_2+b_2\theta_{y2}

Mx1=a2θx2M_{x1}= -a_2 \theta_{x2}

My1=b2Z2+b3θy2M_{y1}= b_2 Z_2+b_3\theta_{y2}

Mz1=b2Y2+b3θz2M_{z1}= -b_2 Y_2+b_3\theta_{z2}

Fx2=Fx1F_{x2}= -F_{x1}

Fy2=Fy1F_{y2}= -F_{y1}

Fz2=Fz1F_{z2}= -F_{z1}

Mx2=a2θx2M_{x2}= a_2 \theta_{x2}

My2=b2Z2+2b3θy2M_{y2}= b_2 Z_2+ 2b_3\theta_{y2}

Mz2=b2Y2+2b3θz2M_{z2}= -b_2 Y_2+2b_3\theta_{z2}

Then the forces on each node is calculated as follows:

Ft=b=1b=nFbF_t= \sum_{b=1}^{b=n} \vec{F_b}

Mt=b=1b=nMbM_t= \sum_{b=1}^{b=n} \vec{M_b}


Damping

"damping must be included at the local interaction between voxels, not just applying a force proportional to each voxel’s global velocity which would also damp rigid body motion. The local damping between adjacent voxels ensures that modal resonances at the scale of a single voxel do not accumulate.".

For each edge, first the average position, velocity, and angular velocity are calculated. The velocity of the second voxel relative to the first:

V21=(V2Va)+(D2Da)ωa\vec{V}_{2 \rightarrow 1} = (\vec{V}_2-\vec{V}_a) + (\vec{D}_2-\vec{D}_a) * \vec{\omega}_a

V2\vec{V}_2 is the velocity of the second voxel, Va\vec{V}_a is the average velocity of two voxels, D2\vec{D}_2 is the position of the second voxel, Da\vec{D}_ais the average position, ωa\vec{\omega}_a is the average angular velocity.

For each voxel we calculate the damping force as

Fd=2ξmkVrF_d=2 \xi \sqrt{m k} V_r

FdF_d is the damping force, mm is the mass attached to a edge with stiffness kk and a relative velocity VrV_r. The damping ratio ξ\xi is normally selected to be 1, corresponding to critical damping.

The angular velocities are calculated as follows:

Md=2ξIkϕωrM_d=2 \xi \sqrt{I k_\phi} \omega_r

MdM_d is the damping force with rotational inertia II, with edge of stiffness kk and relative angular velocity ωr\omega_r, rotational angular ratio ξ\xi is also 1.


Timestep calculation

dt<12πω0mdt < \frac{1}{2 \pi \omega_{0_{m}}}

ω0m\omega_{0_{m}} is the maximum natural frequency of any bond, which is calculated as follows:

ω0max=kbmm\omega_{0_{max}}=\sqrt{\frac{k_b}{m_m}}

kbk_b is stiffness of the bond, mmm_m is the minimum of either mass connected to the bond.


Collision and Friction

The effective normal stiffness on the floor is limited by the maximum stiffness between any connected masses. Therefore, according to (1) I set the stiffness of each voxel contacting the floor as the the stiffness of the floor in that location. Although this allows significant floor penetration in some cases, the qualitative behavior is appropriate.

A Couloumb friction model is used, even though a standard linear model is would provide a relatively realistic simulation.

The voxel will resist motion until:

Fl>μsfn|F_l|>\mu_s f_n

FlF_l is the horizontal force parallel to the ground, μs\mu_s is the coefficient of static friction between the voxel and ground, and FnF_n is the normal force pressing te voxel into the plane of the ground.

"A boolean flag is set indicating to the simulation that this voxel should not move laterally, but can still move in the direction normal to ground such that it can be unweighted and then moved laterally".

"Once the static friction threshold has been exceeded at any given time step, the voxel is allowed to begin motion in the appropriate lateral direction by clearing the boolean static friction flag". The voxel is allowed to move in any direction, but a friction force is applied in the opposing lateral direction

Fl=μdfn|F_l|=\mu_d f_n

μd\mu_d is the dynamic coefficient of friction.

"In order to properly detect when a voxel has stopped lateral motion, a minimum motion threshold must be set".

In order to detect a stopping voxel, the voxel is halted when:

VlfnμddtmV_l\leq \frac {f_n \mu_d dt}{m}

"Collisions are also damped normal to the direction of contact with a user variable damping ratio ranging from zero (no damping) to 1 (critical damping)".