https://mooseframework.inl.gov
ADPenaltyVelocityContinuityNewmarkBeta.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 #include "InertialForce.h"
12 
14 
17 {
19  params.addClassDescription(
20  "Enforces continuity of flux and continuity of solution via penalty across an interface with "
21  "the solid velocity computed via the Newmark-Beta method.");
22  params.setDocString(
23  "solid_velocities",
24  "solid velocity variables whose previous timestep values we will use to compute the current "
25  "solid velocities using the Newmark-Beta time integration method");
26  params.addRequiredCoupledVar(
27  "solid_accelerations",
28  "solid acceleration variables whose previous timestep values we will use to compute the "
29  "current solid accelerations using the Newmark-Beta time integration method");
30  params.addRequiredParam<Real>("beta", "beta parameter for Newmark-Beta time integration");
31  params.addRequiredParam<Real>("gamma", "gamma parameter for Newmark-Beta time integration");
32  return params;
33 }
34 
36  const InputParameters & parameters)
37  : ADPenaltyVelocityContinuity(parameters),
38  _beta(getParam<Real>("beta")),
39  _gamma(getParam<Real>("gamma"))
40 {
41  _solid_velocities_old.resize(coupledComponents("solid_velocities"));
42  for (const auto i : index_range(_solid_velocities_old))
43  _solid_velocities_old[i] = &coupledValueOld("solid_velocities", i);
44 
45  _solid_accelerations_old.resize(coupledComponents("solid_accelerations"));
46  for (const auto i : index_range(_solid_accelerations_old))
47  _solid_accelerations_old[i] = &coupledValueOld("solid_accelerations", i);
48 
50  paramError("solid_velocities",
51  "'solid_velocities' and 'solid_accelerations' must be the same length!");
52 
53  _displacement_values.resize(_displacements.size());
55  for (const auto i : index_range(_displacement_values))
56  {
57  _displacement_values[i] = &_displacements[i]->adSln();
58  _displacement_values_old[i] = &_displacements[i]->slnOld();
59  }
60 }
61 
64 {
66  for (const auto i : index_range(_solid_velocities_old))
67  ret(i) =
69  (*_displacement_values_old[i])[qp],
70  (*_solid_velocities_old[i])[qp],
71  (*_solid_accelerations_old[i])[qp],
72  _beta,
73  _gamma,
74  _dt)
75  .first;
76  return ret;
77 }
registerMooseObject("FsiApp", ADPenaltyVelocityContinuityNewmarkBeta)
std::vector< const VariableValue * > _displacement_values_old
The displacement fields from the previous timestep. Index is by dimension.
Interface kernel for enforcing continuity of stress and velocity.
void paramError(const std::string &param, Args... args) const
void setDocString(const std::string &name, const std::string &doc)
virtual const VariableValue & coupledValueOld(const std::string &var_name, unsigned int comp=0) const
std::vector< const MooseVariable * > _displacements
Displacement variables.
void addRequiredParam(const std::string &name, const std::string &doc_string)
std::vector< const VariableValue * > _solid_accelerations_old
The solid accelerations from the previous time step. Index is by dimension.
Interface kernel for enforcing continuity of stress and velocity.
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
static std::pair< GenericReal< is_ad >, GenericReal< is_ad > > computeNewmarkBetaVelAccel(const GenericReal< is_ad > &u, const Real u_old, const Real vel_old, const Real accel_old, const Real beta, const Real gamma, const Real dt)
std::vector< const ADVariableValue * > _displacement_values
The displacement fields. Index is by dimension.
const Real _beta
Newmark-Beta time integration parameters.
virtual ADRealVectorValue solidVelocity(const unsigned int qp) const override
unsigned int coupledComponents(const std::string &var_name) const
ADPenaltyVelocityContinuityNewmarkBeta(const InputParameters &parameters)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static InputParameters validParams()
std::vector< const VariableValue * > _solid_velocities_old
The solid velocities from the previous time step. Index is by dimension.
void addClassDescription(const std::string &doc_string)
auto index_range(const T &sizable)