https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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{
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");
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
55 for (const auto i : index_range(_displacement_values))
56 {
57 _displacement_values[i] = &_displacements[i]->adSln();
59 }
60}
61
64{
66 for (const auto i : index_range(_solid_velocities_old))
67 ret(i) =
70 (*_solid_velocities_old[i])[qp],
72 _beta,
73 _gamma,
74 _dt)
75 .first;
76 return ret;
77}
registerMooseObject("FsiApp", ADPenaltyVelocityContinuityNewmarkBeta)
Interface kernel for enforcing continuity of stress and velocity.
std::vector< const VariableValue * > _displacement_values_old
The displacement fields from the previous timestep. Index is by dimension.
ADPenaltyVelocityContinuityNewmarkBeta(const InputParameters &parameters)
std::vector< const VariableValue * > _solid_accelerations_old
The solid accelerations from the previous time step. Index is by dimension.
virtual ADRealVectorValue solidVelocity(const unsigned int qp) const override
std::vector< const ADVariableValue * > _displacement_values
The displacement fields. Index is by dimension.
std::vector< const VariableValue * > _solid_velocities_old
The solid velocities from the previous time step. Index is by dimension.
const Real _beta
Newmark-Beta time integration parameters.
Interface kernel for enforcing continuity of stress and velocity.
std::vector< const MooseVariable * > _displacements
Displacement variables.
virtual const VariableValue & coupledValueOld(const std::string &var_name, unsigned int comp=0) const
unsigned int coupledComponents(const std::string &var_name) const
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)
void addRequiredCoupledVar(const std::string &name, const std::string &doc_string)
void addRequiredParam(const std::string &name, const std::string &doc_string)
void setDocString(const std::string &name, const std::string &doc)
void addClassDescription(const std::string &doc_string)
void paramError(const std::string &param, Args... args) const