17 #include "libmesh/quadrature.h" 24 "Primal variable on secondary surface.");
27 "Primal variable on primary surface. If this parameter is not provided then the primary " 28 "variable will be initialized to the secondary variable");
34 _sys(*getCheckedPointerParam<
SystemBase *>(
"_sys")),
36 isParamValid(
"secondary_variable")
37 ? _sys.getActualFieldVariable<
Real>(_tid, parameters.getMooseType(
"secondary_variable"))
38 : _sys.getActualFieldVariable<
Real>(_tid, parameters.getMooseType(
"primary_variable"))),
40 isParamValid(
"primary_variable")
41 ? _sys.getActualFieldVariable<
Real>(_tid, parameters.getMooseType(
"primary_variable"))
43 _secondary_x_dot(_secondary_var.adUDot()),
44 _primary_x_dot(_primary_var.adUDotNeighbor()),
45 _secondary_y_dot(adCoupledDot(
"disp_y")),
46 _primary_y_dot(adCoupledNeighborValueDot(
"disp_y")),
47 _secondary_z_dot(_has_disp_z ? &adCoupledDot(
"disp_z") : nullptr),
48 _primary_z_dot(_has_disp_z ? &adCoupledNeighborValueDot(
"disp_z") : nullptr),
51 if (!getParam<bool>(
"use_displaced_mesh"))
53 "'use_displaced_mesh' must be true for the WeightedVelocitiesUserObject object");
65 const auto & secondary_ip_lowerd_map =
69 std::array<ADReal, 3> primary_disp_dot{
71 std::array<ADReal, 3> secondary_disp_dot{
77 const ADReal & prim_x_dot = primary_disp_dot[0];
78 const ADReal & prim_y_dot = primary_disp_dot[1];
79 const ADReal * prim_z_dot =
nullptr;
81 prim_z_dot = &primary_disp_dot[2];
83 const ADReal & sec_x_dot = secondary_disp_dot[0];
84 const ADReal & sec_y_dot = secondary_disp_dot[1];
85 const ADReal * sec_z_dot =
nullptr;
87 sec_z_dot = &secondary_disp_dot[2];
93 relative_velocity = {sec_x_dot - prim_x_dot, sec_y_dot - prim_y_dot, *sec_z_dot - *prim_z_dot};
95 relative_velocity = {sec_x_dot - prim_x_dot, sec_y_dot - prim_y_dot, 0.0};
109 const DofObject *
const dof =
virtual MooseMesh & mesh()=0
ADRealVectorValue _qp_tangential_velocity_nodal
The value of the tangential velocity vectors at the current node.
unsigned int _qp
Quadrature point index for the mortar segments.
const ADVariableValue & _secondary_y_dot
y-velocity on the secondary face
std::map< unsigned int, unsigned int > getPrimaryIpToLowerElementMap(const Elem &primary_elem, const Elem &primary_elem_ip, const Elem &lower_secondary_elem) const
std::unordered_map< const DofObject *, std::array< ADReal, 2 > > _dof_to_real_tangential_velocity
A map from node to two interpolated, physical tangential velocities.
virtual void initialize() override
const MooseVariable *const _disp_z_var
The z displacement variable.
virtual void initialize() override
bool _3d
Automatic flag to determine whether we are doing three-dimensional work.
static InputParameters validParams()
Elem const *const & _lower_primary_elem
const bool _nodal
Whether the dof objects are nodal; if they're not, then they're elemental.
const bool _has_disp_z
For 2D mortar contact no displacement will be specified, so const pointers used.
const std::vector< Real > & _JxW_msm
const Parallel::Communicator & _communicator
DualNumber< Real, DNDerivativeType, true > ADReal
ADRealVectorValue _qp_real_tangential_velocity_nodal
The value of the real tangential velocity vectors at the current node.
Elem const *const & _lower_secondary_elem
const ADVariableValue & _primary_y_dot
y-velocity on the primary face
const AutomaticMortarGeneration & amg() const
static void trimInteriorNodeDerivatives(const std::map< unsigned int, unsigned int > &primary_ip_lowerd_map, const Variables &moose_var, DualNumbers &ad_vars, const bool is_secondary)
std::array< MooseUtils::SemidynamicVector< Point, 9 >, 2 > getNodalTangents(const Elem &secondary_elem) const
const ADVariableValue & _primary_x_dot
x-velocity on the primary face
virtual void computeQpProperties()
Computes properties that are functions only of the current quadrature point (_qp), e.g.
std::map< unsigned int, unsigned int > getSecondaryIpToLowerElementMap(const Elem &lower_secondary_elem) const
virtual void computeQpProperties() override
Computes properties that are functions only of the current quadrature point (_qp), e.g.
void paramError(const std::string ¶m, Args... args) const
const MooseArray< Real > & _coord
Member for handling change of coordinate systems (xyz, rz, spherical)
Creates dof object to weighted gap map.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool _is_weighted_gap_nodal
Whether the weighted gap is associated with nodes or elements (like for a CONSTANT MONOMIAL Lagrange ...
const ADVariableValue & _secondary_x_dot
x-velocity on the secondary face
const MooseVariable *const _disp_y_var
The y displacement variable.
WeightedVelocitiesUserObject(const InputParameters ¶meters)
virtual bool constrainedByOwner() const =0
virtual void finalize() override
unsigned int _i
Test function index.
static InputParameters validParams()
std::unordered_map< const DofObject *, std::array< ADReal, 2 > > _dof_to_weighted_tangential_velocity
A map from node to two weighted tangential velocities.
const MooseVariable *const _disp_x_var
The x displacement variable.
virtual void computeQpIProperties()
Computes properties that are functions both of _qp and _i, for example the weighted gap...
virtual void computeQpIProperties() override
Computes properties that are functions both of _qp and _i, for example the weighted gap...
virtual void finalize() override