24 "($M \\cdot acceleration$) and the contribution of mass" 25 " dependent Rayleigh damping and HHT time " 26 " integration scheme ($\\eta \\cdot M \\cdot" 27 " ((1+\\alpha)velq2-\\alpha \\cdot vel-old) $)");
28 params.
set<
bool>(
"use_displaced_mesh") =
true;
30 params.
addCoupledVar(
"acceleration",
"acceleration variable");
31 params.
addParam<
Real>(
"beta",
"beta parameter for Newmark Time integration");
32 params.
addParam<
Real>(
"gamma",
"gamma parameter for Newmark Time integration");
33 params.
addParam<MaterialPropertyName>(
"eta",
35 "Name of material property or a constant real " 36 "number defining the eta parameter for the " 38 params.
addParam<MaterialPropertyName>(
41 "Name of material property to add mass scaling in explicit simulations.");
44 "alpha parameter for mass dependent numerical damping induced " 45 "by HHT time integration scheme");
46 params.
addParam<MaterialPropertyName>(
47 "density",
"density",
"Name of Material Property that provides the density");
54 _density(this->template getGenericMaterialProperty<
Real, is_ad>(
"density")),
55 _has_beta(this->isParamValid(
"beta")),
56 _has_gamma(this->isParamValid(
"gamma")),
57 _beta(_has_beta ? this->template getParam<
Real>(
"beta") : 0.1),
58 _gamma(_has_gamma ? this->template getParam<
Real>(
"gamma") : 0.1),
59 _has_velocity(this->isParamValid(
"velocity")),
60 _has_acceleration(this->isParamValid(
"acceleration")),
61 _eta(this->template getGenericMaterialProperty<
Real, is_ad>(
"eta")),
62 _density_scaling(this->template getMaterialProperty<
Real>(
"density_scaling")),
63 _alpha(this->template getParam<
Real>(
"alpha")),
64 _time_integrator(_sys.getTimeIntegrator(this->_var.number()))
68 _vel_old = &this->coupledValueOld(
"velocity");
69 _accel_old = &this->coupledValueOld(
"acceleration");
70 _u_old = &this->valueOld();
91 mooseError(
"InertialForce: Either all or none of `beta`, `gamma`, `velocity`and `acceleration` " 92 "should be provided as input.");
96 mooseError(
"InertialForce: HHT time integration parameter can only be used with Newmark-Beta " 101 mooseError(
"InertialForce: Newmark-beta integration parameter, beta, cannot be provided along " 102 "with an explicit time " 109 "Density (mass) scaling can only be used in lumped mass, explicit simulations");
112 template <
bool is_ad>
120 auto accel = 1.0 / _beta *
121 (((_u[_qp] - (*_u_old)[_qp]) / (_dt * _dt)) - (*_vel_old)[_qp] / _dt -
122 (*_accel_old)[_qp] * (0.5 - _beta));
124 (*_vel_old)[_qp] + (_dt * (1.0 - _gamma)) * (*_accel_old)[_qp] + _gamma * _dt * accel;
125 return _test[_i][_qp] * _density[_qp] *
126 (accel + vel * _eta[_qp] * (1.0 + _alpha) - _alpha * _eta[_qp] * (*_vel_old)[_qp]);
133 else if (_time_integrator.isLumped() && _time_integrator.isExplicit() && !is_ad)
134 return _test[_i][_qp] * (_density[_qp] + _density_scaling[_qp]);
139 return _test[_i][_qp] * _density[_qp] *
140 ((*_u_dotdot_factor)[_qp] + (*_u_dot_factor)[_qp] * _eta[_qp] * (1.0 + _alpha) -
141 _alpha * _eta[_qp] * (*_u_dot_old)[_qp]);
159 if (!_time_integrator.isLumped() || !_time_integrator.isExplicit())
162 for (
unsigned int i = 0; i < _test.size(); ++i)
163 this->_local_re(i) *= (*_u_dotdot_factor_dof)[i] + _eta[0] * (*_u_dot_factor_dof)[i];
182 return _test[_i][_qp] * _density[_qp] / (_beta * _dt * _dt) * _phi[this->_j][_qp] +
183 _eta[_qp] * (1 + _alpha) * _test[_i][_qp] * _density[_qp] * _gamma / _beta / _dt *
186 return _test[_i][_qp] * _density[_qp] * (*_du_dotdot_du)[_qp] * _phi[this->_j][_qp] +
187 _eta[_qp] * (1 + _alpha) * _test[_i][_qp] * _density[_qp] * (*_du_dot_du)[_qp] *
Moose::GenericType< Real, is_ad > GenericReal
void mooseError(Args &&... args)
const VariableValue * _u_dot_factor
const VariableValue * _u_dot_factor_dof
virtual void computeResidualAdditional()
const VariableValue * _u_dotdot_factor_dof
const VariableValue * _accel_old
const VariableValue * _vel_old
typename std::conditional< is_ad, ADTimeKernel, TimeKernel >::type InertialForceParent
registerMooseObject("SolidMechanicsApp", InertialForce)
virtual bool isExplicit() const
static InputParameters validParams()
const VariableValue * _u_dot_old
const VariableValue * _u_old
const TimeIntegrator & _time_integrator
The TimeIntegrator.
InputParameters validParams()
const VariableValue * _u_dotdot_factor
const VariableValue * _du_dot_du
TagID uDotDotFactorTag() const
virtual GenericReal< is_ad > computeQpResidual()
const bool _has_acceleration
TagID uDotFactorTag() const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual const bool & isLumped() const
const VariableValue * _du_dotdot_du
InertialForceTempl(const InputParameters ¶meters)
virtual Real computeQpJacobian()