21 "tangential) for constraint enforcement.");
24 "The Lagrange multiplier variable representing the normal contact pressure value.");
26 "lm_variable_tangential_one",
27 "The Lagrange multiplier variable representing the tangential contact pressure along the " 28 "first tangential direction (the only one in two dimensions).");
30 "The Lagrange multiplier variable representing the tangential contact " 31 "pressure along the second tangential direction.");
33 "use_petrov_galerkin",
false,
"Whether to use the Petrov-Galerkin approach.");
35 "Auxiliary Lagrange multiplier variable that is utilized together with the " 36 "Petrov-Galerkin approach.");
43 _lm_normal_var(getVar(
"lm_variable_normal", 0)),
44 _lm_variable_tangential_one(getVar(
"lm_variable_tangential_one", 0)),
45 _lm_variable_tangential_two(isParamValid(
"lm_variable_tangential_two")
46 ? getVar(
"lm_variable_tangential_two", 0)
48 _use_petrov_galerkin(getParam<bool>(
"use_petrov_galerkin")),
49 _aux_lm_var(isCoupled(
"aux_lm") ? getVar(
"aux_lm", 0) : nullptr)
52 auto check_input = [
this](
const auto var,
const auto & var_name)
56 "The Lagrange multiplier variable must be an actual variable and not a constant.");
59 "The Lagrange multiplier variables must be provided and be actual variables.");
68 auto check_type = [
this](
const auto & var,
const auto & var_name)
72 "The Lagrange multiplier variables must have degrees of freedom exclusively on " 73 "nodes, e.g. they should probably be of finite element type 'Lagrange'.");
83 "We need to specify an auxiliary variable `aux_lm` while using the Petrov-Galerkin " 88 "Auxiliary LM variable needs to use standard shape function, i.e., set `use_dual = " virtual bool isCoupledConstant(const std::string &var_name) const
LMWeightedVelocitiesUserObject(const InputParameters ¶meters)
const bool _use_petrov_galerkin
Whether to use Petrov-Galerkin approach.
Creates dof object to weighted tangential velocities map.
virtual const VariableTestValue & test() const override
virtual const ADVariableValue & contactPressure() const override
bool isParamValid(const std::string &name) const
const MooseVariable *const _aux_lm_var
The auxiliary Lagrange multiplier variable (used together whith the Petrov-Galerkin approach) ...
const MooseVariableFE< Real > *const _lm_normal_var
The Lagrange multiplier variables representing the contact pressure along various directions...
Nodal-based mortar contact user object for frictional problem.
OutputTools< Real >::VariableTestValue VariableTestValue
void paramError(const std::string ¶m, Args... args) const
Creates dof object to weighted gap map.
const MooseVariableFE< Real > *const _lm_variable_tangential_one
virtual const ADVariableValue & contactTangentialPressureDirOne() const override
const MooseVariableFE< Real > *const _lm_variable_tangential_two
static InputParameters validParams()
virtual const FieldVariablePhiValue & phiLower() const override
static InputParameters validParams()
const ADTemplateVariableValue< Real > & adSlnLower() const
registerMooseObject("ContactApp", LMWeightedVelocitiesUserObject)
virtual const ADVariableValue & contactTangentialPressureDirTwo() const override