17#include "libmesh/parallel_algebra.h"
25 params.
addClassDescription(
"Normal contact force that one mortar contact pair transmits to its "
26 "secondary surface.");
29 "The weighted gap user object of the contact pair. The Contact action names it "
30 "lm_weightedgap_object_<block name> (mortar) or penalty_weightedgap_object_<block name> "
31 "(mortar_penalty), with the suffix _p_<primary>_s_<secondary> when the block has several "
33 MooseEnum component(
"x y z magnitude",
"magnitude");
35 "component", component,
"The force component to report, or its magnitude.");
42 _component(getParam<
MooseEnum>(
"component")),
43 _displaced_mesh(_fe_problem.getDisplacedProblem()->
mesh()),
44 _amg(_fe_problem.getMortarInterface(
49 {_weighted_gap_uo.primarySubdomain(), _weighted_gap_uo.secondarySubdomain()},
51 _node_to_elems(_amg.nodesToSecondaryElem())
71 const Elem & elem = *libmesh_map_find(
_node_to_elems, node->id()).front();
73 const auto weighted_pressure =
78 _force += weighted_pressure * normal;
std::vector< Point > getNodalNormals(const Elem &secondary_elem) const
static InputParameters validParams()
const InputParameters & parameters() const
BoundaryID getBoundaryID(const BoundaryName &boundary_name) const
virtual const Node * nodePtr(const dof_id_type i) const
Creates dof object to weighted gap map.
const std::unordered_map< const DofObject *, std::pair< ADReal, Real > > & dofToWeightedGap() const
Get the degree of freedom to weighted gap information.
virtual Real getNormalContactPressure(const Node *const) const =0
processor_id_type processor_id() const