22 "Adds Rayleigh mass damping, eta * M * v, to an ExplicitMixedOrder solid mechanics model.");
27 "Damping strength. Mass damping helps to damp low-frequency, large-scale oscillations. A " 28 "reasonable value to use initially is eta = 2 * d * omega, where d is the damping fraction " 29 "(typically 0.1) and omega is the lowest relevant frequency mode of the model. For " 30 "instance, if the model is can oscillate longitudinally, omega = (pi / model_length) * " 31 "sqrt(youngs_modulus / density)");
37 _eta(getParam<
Real>(
"eta")),
38 _mass_matrix_lumped(initLumpedMass()),
39 _u_dot_old(_var.nodalValueDotOld())
54 if (nl.hasVector(
"mass_matrix_lumped"))
55 return nl.
getVector(
"mass_matrix_lumped");
57 mooseError(
"Lumped mass matrix is missing. Make sure ExplicitMixedOrder is being used as the " static InputParameters validParams()
const NumericVector< Number > & _mass_matrix_lumped
The lumped mass matrix.
const Real _eta
Damping coefficient.
virtual Real computeQpResidual() override
registerMooseObject("SolidMechanicsApp", ExplicitMassDamping)
const NumericVector< Number > & initLumpedMass()
Initialize the lumped mass matrix.
FEProblemBase & _fe_problem
ExplicitMassDamping(const InputParameters ¶meters)
NonlinearSystemBase & getNonlinearSystemBase(const unsigned int sys_num)
unsigned int number() const
MooseVariableFE< Real > * _variable
Calculates eta * mass * velocity for use in ExplicitMixedOrder time integration.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const dof_id_type & nodalDofIndex() const override
void mooseError(Args &&... args) const
static InputParameters validParams()
const Real & _u_dot_old
The old velocity.
virtual NumericVector< Number > & getVector(const std::string &name)