Dynamic problems like response of a multi degree of freedom structure to external forcing and wave propagation in a medium can also be solved using the Tensor Mechanics module.

The equation of motion for a typical dynamics problem has the following format: \begin{eqnarray} \mathbf{M}\mathbf{\ddot{u}}+ \mathbf{C}\mathbf{\dot{u}} +\mathbf{K}\mathbf{u} = \mathbf{F_{ext}} \end{eqnarray}

## Implementation in Moose

In the moose framework, the mass and stiffness matrices are not explicitly calculated. Only the residuals are calculated. To get the residual, the equation of motion (with Rayleigh damping and HHT time integration) can be written as: \begin{eqnarray} \rho\mathbf{\ddot{u}}(t+\Delta t) + \eta \rho [(1+\alpha)\dot{u}(t + \Delta t)-\alpha \dot{u}(t)] + \zeta \nabla \cdot [(1+\alpha)\frac{d}{dt}\boldsymbol{\sigma}(t+\Delta t)- \alpha \frac{d}{dt}\boldsymbol{\sigma}(t)] + \nabla \cdot [(1+\alpha) \boldsymbol{\sigma}(t+\Delta t) - \alpha \boldsymbol{\sigma}(t)] = \mathbf{F_{ext}}(t+ (1 + \alpha) \Delta t) \end{eqnarray}

Here, $$\rho$$$is the density of the material and $$\boldsymbol{\sigma}$$$ is the stress tensor. The weak form of the above equation is used to get the residuals.

The first two terms to the left ($$\rho\mathbf{\ddot{u}}(t+\Delta t) + \eta \rho [(1+\alpha)\dot{u}(t + \Delta t)-\alpha \dot{u}(t)]$$$)are addressed in InertialForce.C. $$\alpha$$$, $$\beta$$$, $$\gamma$$$ and $$\eta$$$need to be passed as input to the InertialForce kernel. The input file syntax for calculating the residual due to Inertial force is:  [./Inertial_Force] type = InertialForce variable = disp_x velocity = vel_x acceleration = accel_x alpha = 0.11 beta = 0.25 gamma = 0.5 eta = 0.1 [../]  The default values for $$\alpha$$$, $$\eta$$$and $$\zeta$$$ are zero.

The next two terms to the left involving $$\boldsymbol{\sigma}$$$are addressed in DynamicStressDivergenceTensors.C. Note that the time derivative of $$\boldsymbol{\sigma}(t+\Delta t)$$$ and $$\boldsymbol{\sigma}(t)$$$are approximated as follows: \begin{eqnarray} \frac{d}{dt}\boldsymbol{\sigma}(t+\Delta t) &=& \frac{\boldsymbol{\sigma}(t+\Delta t)-\boldsymbol{\sigma}(t)}{\Delta t} \\ \frac{d}{dt}\boldsymbol{\sigma}(t) &=& \frac{\boldsymbol{\sigma}(t)-\boldsymbol{\sigma}(t-\Delta t)}{\Delta t} \end{eqnarray} The input file syntax for calculating the residual due to terms containing $$\boldsymbol{\sigma}$$$ is:

   [./DynamicTensorMechanics]
displacement = 'disp_x disp_y disp_z'
zeta = 0.1
alpha = 0.11
[../]


Here, ./DynamicTensorMechanics is the action that calls DynamicStressDivergence.C

For calculating the time derivative of the stress, we require old and older states of stress, i.e., $$\boldsymbol{\sigma}(t)$$$and $$\boldsymbol{\sigma}(t-\Delta t)$$$, respectively. These values need to be stored only when DynamicStressDivergence.C is used. Therefore, we can request ComputeStressBase.C to store the old states of stress through the boolean flag store_stress_old when DynamicStressDivergence.C is used. This boolean flag can be set to true in the input file through one of the child classes of ComputeStressBase.C

The input file syntax for setting store_stress_old to true is as follows:

  [Materials]
[./stress]
type = ComputeLinearElasticStress
store_stress_old = true
block = 0
[../]
[]


Finally, external forces like gravity and pressure also require $$\alpha$$$as input. For example, the input file syntax for a Pressure boundary condition is as follows:  [BCs] [./Pressure] [./Side1] boundary = bottom function = pressure_function disp_x = disp_x disp_y = disp_y disp_z = disp_z factor = 1 alpha = 0.11 [../] [../] []  When the default values for $$\eta$$$ and $$\zeta$$$are used, then Rayleigh damping is not included in the problem. Similarly, for the default value of $$\alpha$$$, Newmark time integration method is used.

For examples on using Rayleigh damping and Time integration schemes, please check tensor_mechanics/tests/dynamics/rayleigh_damping and tensor_mechanics/tests/dynamics/time_integration, respectively.

For 1D wave propagation in a bar element, please check tensor_mechanics/tests/wave_1D

References:

1. Newmark time integration: Newmark, N. M. (1959) A method of computation for structural dynamics. Journal of Engineering Mechanics, ASCE, 85 (EM3) 67-94.

2. HHT time integration: Hughes, T. J. R. (2000) The finite element method: Linear static and dynamic finite element analysis, Dover Publications, Mineola, NY.