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.");
virtual Real getAccumulatedSlip(const Node *const node, const unsigned int component) const override
virtual Real getNormalLagrangeMultiplier(const Node *const node) const
static InputParameters validParams()
void mooseError(Args &&... args)
const PenaltyFrictionUserObject * _pfuo
const Node *const & _current_node
MortarUserObjectAux(const InputParameters ¶meters)
Factory constructor, takes parameters so that all derived classes can be built using the constructor...
virtual Real getTangentialVelocity(const Node *const, const unsigned int) const
User object for computing weighted gaps and contact pressure for penalty based mortar constraints...
const ExecFlagType EXEC_TIMESTEP_END
Creates dof object to weighted tangential velocities map.
User object that computes tangential pressures due to friction using a penalty approach, following J.C.
static const MooseEnum _contact_quantities
available contact quantities
virtual Real getNormalGap(const Node *const) const
std::map< ContactQuantityEnum, std::tuple< std::string, const void *, std::function< Real(void)> > > _outputs
Definition of the output quantities and.
Auxiliary kernel to output mortar penalty contact quantities of interest.
virtual Real getDeltaTangentialLagrangeMultiplier(const Node *const node, const unsigned int component) const override
registerMooseObjectRenamed("ContactApp", PenaltyMortarUserObjectAux, "04/01/2026 00:00", MortarUserObjectAux)
Creates dof object to weighted gap map.
virtual Real getFrictionalContactPressure(const Node *const node, const unsigned int component) const override
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
const PenaltyWeightedGapUserObject * _pwguo
virtual bool getActiveSetState(const Node *const node) const
const WeightedVelocitiesUserObject * _wvuo
static InputParameters validParams()
virtual Real getNormalContactPressure(const Node *const) const =0
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.
registerMooseObject("ContactApp", MortarUserObjectAux)
ContactQuantityEnum
What type of contact quantity we are querying.