20 PenaltyMortarUserObjectAux,
25 "normal_pressure accumulated_slip_one "
26 "tangential_pressure_one tangential_velocity_one accumulated_slip_two "
27 "tangential_pressure_two tangential_velocity_two normal_gap "
28 "normal_lm delta_tangential_lm_one delta_tangential_lm_two active_set");
35 "Populates an auxiliary variable with a contact quantities from penalty mortar contact.");
39 "The desired contact quantity to output as an auxiliary variable.");
42 "The penalty mortar user object to get values from. Note that the user object "
43 "must implement the corresponding getter function.");
52 _user_object(getUserObject<
UserObject>(
"user_object")),
59 {
"WeightedGapUserObject",
67 {
"PenaltyFrictionUserObject",
72 {
"PenaltyFrictionUserObject",
77 {
"WeightedVelocitiesUserObject",
82 {
"PenaltyFrictionUserObject",
87 {
"PenaltyFrictionUserObject",
92 {
"WeightedVelocitiesUserObject",
97 {
"PenaltyWeightedGapUserObject",
102 {
"PenaltyFrictionUserObject",
107 {
"PenaltyFrictionUserObject",
112 {
"PenaltyWeightedGapUserObject",
119 mooseError(
"This auxiliary kernel requires nodal variables to obtain contact pressure values");
122 const auto it = _outputs.find(_contact_quantity);
123 if (it == _outputs.end())
124 mooseError(
"Internal error: Contact quantity request in MortarUserObjectAux is not "
126 if (!std::get<1>(it->second))
127 paramError(
"user_object",
129 _contact_quantities.getNames()[
static_cast<int>(it->first)],
130 "' quantity is only provided by a '",
131 std::get<0>(it->second),
132 "' or derived object.");
void mooseError(Args &&... args)
const ExecFlagType EXEC_TIMESTEP_END
registerMooseObjectRenamed("ContactApp", PenaltyMortarUserObjectAux, "04/01/2026 00:00", MortarUserObjectAux)
registerMooseObject("ContactApp", MortarUserObjectAux)
const Node *const & _current_node
static InputParameters validParams()
Auxiliary kernel to output mortar penalty contact quantities of interest.
ContactQuantityEnum
What type of contact quantity we are querying.
@ FRICTIONAL_PRESSURE_TWO
@ DELTA_TANGENTIAL_LM_ONE
@ FRICTIONAL_PRESSURE_ONE
@ DELTA_TANGENTIAL_LM_TWO
@ TANGENTIAL_VELOCITY_TWO
@ TANGENTIAL_VELOCITY_ONE
const PenaltyWeightedGapUserObject * _pwguo
static const MooseEnum _contact_quantities
available contact quantities
std::map< ContactQuantityEnum, std::tuple< std::string, const void *, std::function< Real(void)> > > _outputs
Definition of the output quantities and.
MortarUserObjectAux(const InputParameters ¶meters)
Factory constructor, takes parameters so that all derived classes can be built using the constructor.
static InputParameters validParams()
const PenaltyFrictionUserObject * _pfuo
virtual Real computeValue() override
const ContactQuantityEnum _contact_quantity
What penalty mortar contact quantity we'd like to output.
const WeightedGapUserObject * _wguo
Cast pointers to specific UOs.
const WeightedVelocitiesUserObject * _wvuo
User object that computes tangential pressures due to friction using a penalty approach,...
virtual Real getDeltaTangentialLagrangeMultiplier(const Node *const node, const unsigned int component) const override
virtual Real getFrictionalContactPressure(const Node *const node, const unsigned int component) const override
virtual Real getAccumulatedSlip(const Node *const node, const unsigned int component) const override
User object for computing weighted gaps and contact pressure for penalty based mortar constraints.
virtual bool getActiveSetState(const Node *const node) const
virtual Real getNormalLagrangeMultiplier(const Node *const node) const
Creates dof object to weighted gap map.
virtual Real getTangentialVelocity(const Node *const, const unsigned int) const
virtual Real getNormalGap(const Node *const) const
virtual Real getNormalContactPressure(const Node *const) const =0
Creates dof object to weighted tangential velocities map.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real