https://mooseframework.inl.gov
Loading...
Searching...
No Matches
WeightedGapUserObject.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#pragma once
11
12#include "MortarUserObject.h"
13
18{
19public:
21
23
24 virtual void initialize() override;
25 virtual void execute() override;
26 virtual void finalize() override;
27 virtual void initialSetup() override;
28
32 const std::unordered_map<const DofObject *, std::pair<ADReal, Real>> & dofToWeightedGap() const;
33
37 virtual const ADVariableValue & contactPressure() const = 0;
38
43 virtual Real getNormalContactPressure(const Node * const /*node*/) const = 0;
44
49 virtual Real getNormalGap(const Node * const /*node*/) const;
50
54 Real physicalGap(const std::pair<ADReal, Real> & gap) const
55 {
56 return MetaPhysicL::raw_value(gap.first) / gap.second;
57 }
58
59 ADReal adPhysicalGap(const std::pair<ADReal, Real> & gap) const { return gap.first / gap.second; }
60
66 virtual Real getFrictionalContactPressure(const Node * const /*node*/,
67 const unsigned int /*component*/) const
68 {
69 mooseError("Not available in base class.");
70 }
71
77 virtual Real getAccumulatedSlip(const Node * const /*node*/,
78 const unsigned int /*component*/) const
79 {
80 mooseError("Not available in base class.");
81 }
82
88 virtual Real getTangentialVelocity(const Node * const /*node*/,
89 const unsigned int /*component*/) const
90 {
91 mooseError("Not available in base class.");
92 }
93
94protected:
99 virtual void computeQpProperties();
100
104 virtual void computeQpIProperties();
105
109 virtual const VariableTestValue & test() const = 0;
110
115 virtual bool constrainedByOwner() const = 0;
116
120 template <typename K, typename V>
121 V
122 findValue(const std::unordered_map<K, V> & map, const K & key, const V & default_value = 0) const
123 {
124 const auto it = map.find(key);
125 if (it == map.end())
126 return default_value;
127 return it->second;
128 }
129
132
135
138
140 const bool _nodal;
141
147 const bool _has_disp_z;
150
163
166
169
172
174 std::unordered_map<const DofObject *, std::pair<ADReal, Real>> _dof_to_weighted_gap;
175
177 std::unordered_map<const DofObject *, ADRealVectorValue> _dof_to_weighted_displacements;
178
180 const ADReal * _weighted_gap_ptr = nullptr;
181 const Real * _normalization_ptr = nullptr;
182
185 const VariableTestValue * _test = nullptr;
186
191
193 unsigned int _qp = 0;
194
196 unsigned int _i = 0;
197};
198
199inline const std::unordered_map<const DofObject *, std::pair<ADReal, Real>> &
DualNumber< Real, DNDerivativeType, true > ADReal
const InputParameters & parameters() const
void mooseError(Args &&... args) const
Creates dof object to weighted gap map.
static InputParameters validParams()
const ADVariableValue *const _primary_disp_z
z-displacement on the primary face
virtual Real getAccumulatedSlip(const Node *const, const unsigned int) const
const std::unordered_map< const DofObject *, std::pair< ADReal, Real > > & dofToWeightedGap() const
Get the degree of freedom to weighted gap information.
virtual Real getFrictionalContactPressure(const Node *const, const unsigned int) const
unsigned int _i
Test function index.
V findValue(const std::unordered_map< K, V > &map, const K &key, const V &default_value=0) const
Find a value in a map or return a default if the key doesn't exist.
const ADVariableValue & _secondary_disp_x
x-displacement on the secondary face
const MooseVariable *const _disp_x_var
The x displacement variable.
virtual Real getTangentialVelocity(const Node *const, const unsigned int) const
virtual void computeQpProperties()
Computes properties that are functions only of the current quadrature point (_qp),...
const bool _has_disp_z
For 2D mortar contact no displacement will be specified, so const pointers used.
virtual void finalize() override
virtual void execute() override
ADRealVectorValue _qp_gap_nodal
Vector for computation of weighted gap with nodal normals.
virtual void initialSetup() override
unsigned int _qp
Quadrature point index for the mortar segments.
Real _qp_factor
The value of the LM at the current quadrature point.
virtual Real getNormalGap(const Node *const) const
FEProblemBase & _fe_problem
The base finite element problem.
virtual const ADVariableValue & contactPressure() const =0
virtual Real getNormalContactPressure(const Node *const) const =0
ADReal adPhysicalGap(const std::pair< ADReal, Real > &gap) const
const ADVariableValue & _primary_disp_y
y-displacement on the primary face
const MooseArray< Real > & _coord
Member for handling change of coordinate systems (xyz, rz, spherical)
const ADVariableValue & _secondary_disp_y
y-displacement on the secondary face
const ADVariableValue & _primary_disp_x
x-displacement on the primary face
ADReal _qp_gap
The value of the gap at the current quadrature point.
const MooseVariable *const _disp_y_var
The y displacement variable.
std::unordered_map< const DofObject *, std::pair< ADReal, Real > > _dof_to_weighted_gap
A map from node to weighted gap and normalization (if requested)
virtual const VariableTestValue & test() const =0
const MooseVariable *const _disp_z_var
The z displacement variable.
ADRealVectorValue _qp_displacement_nodal
Vector for computation of relative displacement (determines mixity ratio in interface problems)
const ADVariableValue *const _secondary_disp_z
z-displacement on the secondary face
virtual void computeQpIProperties()
Computes properties that are functions both of _qp and _i, for example the weighted gap.
virtual void initialize() override
bool _is_weighted_gap_nodal
Whether the weighted gap is associated with nodes or elements (like for a CONSTANT MONOMIAL Lagrange ...
const ADReal * _weighted_gap_ptr
A pointer members that can be used to help avoid copying ADReals.
std::unordered_map< const DofObject *, ADRealVectorValue > _dof_to_weighted_displacements
A map from node to weighted displacements.
virtual bool constrainedByOwner() const =0
Real physicalGap(const std::pair< ADReal, Real > &gap) const
Compute physical gap from integration gap quantity.
const VariableTestValue * _test
A pointer to the test function associated with the weighted gap.
const bool _nodal
Whether the dof objects are nodal; if they're not, then they're elemental.
auto raw_value(const Eigen::Map< T > &in)
VariableShapeValue< true > VariableTestValue
VariableValueTempl< true > ADVariableValue