20 params.addRequiredCoupledVar(
21 "lm_variable",
"The Lagrange multiplier variable representing the contact pressure.");
22 params.addParam<
bool>(
23 "use_petrov_galerkin",
false,
"Whether to use the Petrov-Galerkin approach.");
24 params.addCoupledVar(
"aux_lm",
25 "Auxiliary Lagrange multiplier variable that is utilized together with the " 26 "Petrov-Galerkin approach.");
35 "Provides the mortar normal Lagrange multiplier for constraint enforcement.");
42 _lm_var(getVar(
"lm_variable", 0)),
43 _use_petrov_galerkin(getParam<bool>(
"use_petrov_galerkin")),
44 _aux_lm_var(isCoupled(
"aux_lm") ? getVar(
"aux_lm", 0) : nullptr)
51 "We need to specify an auxiliary variable `aux_lm` while using the Petrov-Galerkin " 56 "Auxiliary LM variable needs to use standard shape function, i.e., set `use_dual = " 62 const std::string & var_param_name)
const 66 "The Lagrange multiplier variable must be an actual variable and not a constant.");
69 "The Lagrange multiplier variables must be provided and be actual variables.");
74 const std::string & var_param_name)
const 77 paramError(var_param_name,
"The Lagrange multiplier variables must be of Lagrange type");
97 if (!node->n_dofs(sys_num, var_num))
98 mooseError(
"No degrees of freedom for the Lagrange multiplier at the node. If this is being " 99 "called from an aux kernel make sure that your aux variable has the same order as " 100 "your Lagrange multiplier");
102 const auto dof_number = node->dof_number(sys_num, var_num, 0);
registerMooseObject("ContactApp", LMWeightedGapUserObject)
virtual const NumericVector< Number > *const & currentSolution() const=0
const libMesh::FEType & feType() const
virtual bool isCoupledConstant(const std::string &var_name) const
void paramError(const std::string ¶m, Args... args) const
unsigned int number() const
static InputParameters validParams()
const MooseVariable *const _aux_lm_var
The auxiliary Lagrange multiplier variable (used together whith the Petrov-Galerkin approach) ...
const MooseVariableFE< Real > *const _lm_var
The Lagrange multiplier variable representing the contact pressure.
virtual const ADVariableValue & contactPressure() const override
const bool _use_petrov_galerkin
Whether to use Petrov-Galerkin approach.
OutputTools< Real >::VariableTestValue VariableTestValue
User object for computing weighted gaps and contact pressure for Lagrange multipler based mortar cons...
unsigned int number() const
void checkInput(const MooseVariable *const var, const std::string &var_name) const
Check user input validity for provided variable.
void verifyLagrange(const MooseVariable &var, const std::string &var_name) const
Verify that the provided variables have degrees of freedom at nodes.
Creates dof object to weighted gap map.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual const FieldVariablePhiValue & phiLower() const override
void mooseError(Args &&... args) const
bool isParamValid(const std::string &name) const
const ADTemplateVariableValue< Real > & adSlnLower() const
virtual const VariableTestValue & test() const override
virtual Real getNormalContactPressure(const Node *const) const override
static InputParameters validParams()
LMWeightedGapUserObject(const InputParameters ¶meters)
static InputParameters newParams()
New parameters that this sub-class introduces.