101{
102
104 {
105 if (!
_problem->getDisplacedProblem())
107 "Contact requires updated coordinates. Use the 'displacements = ...' parameter in the "
108 "Mesh block.");
109
110
111
112
113
114 if (!
_problem->isSNESMFReuseBaseSetbyUser())
115 _problem->setSNESMFReuseBase(
false,
false);
116 }
117
119
121 {
122 if (!
_problem->getDisplacedProblem())
123 mooseError(
"Contact requires updated coordinates. Use the 'displacements = ...' line in the "
124 "Mesh block.");
125 unsigned int pair_number(0);
126
128 {
129 {
132 {"secondary_gap_offset", "mapped_primary_gap_offset", "order"});
133
134 std::vector<VariableName> displacements =
135 getParam<std::vector<VariableName>>("displacements");
136 const auto order =
_problem->systemBaseNonlinear(0)
137 .system()
138 .variable_type(displacements[0])
139 .order.get_order();
140
141 params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
143 params.
set<std::vector<BoundaryName>>(
"boundary") = {contact_pair.second};
144 params.
set<BoundaryName>(
"paired_boundary") = contact_pair.first;
145 params.
set<AuxVariableName>(
"variable") =
"penetration";
147 params.
set<std::vector<VariableName>>(
"secondary_gap_offset") = {
148 getParam<VariableName>("secondary_gap_offset")};
150 params.
set<std::vector<VariableName>>(
"mapped_primary_gap_offset") = {
151 getParam<VariableName>("mapped_primary_gap_offset")};
152 params.
set<
bool>(
"use_displaced_mesh") =
true;
154 pair_number++;
156 }
157 }
158
160 }
161
163 {
164 std::vector<VariableName> displacements = getParam<std::vector<VariableName>>("displacements");
165 const auto order =
_problem->systemBaseNonlinear(0)
166 .system()
167 .variable_type(displacements[0])
168 .order.get_order();
169
170
171 {
174 var_params.set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
175 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
176 _problem->addAuxVariable(
"MooseVariable",
"gap_rate", var_params);
177 }
179 {
180
181 {
184 var_params.set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
185 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
186 _problem->addAuxVariable(
"MooseVariable",
"penetration", var_params);
187 }
188 {
191 var_params.set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
192 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
193 _problem->addAuxVariable(
"MooseVariable",
"contact_pressure", var_params);
194 }
195
196 {
199 var_params.set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
200 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
201 _problem->addAuxVariable(
"MooseVariable",
"nodal_area", var_params);
202 }
203
204 {
207 var_params.set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
208 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
209 _problem->addAuxVariable(
"MooseVariable",
"nodal_density", var_params);
210 }
211
212 {
215 var_params.set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
216 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
217 _problem->addAuxVariable(
"MooseVariable",
"nodal_wave_speed", var_params);
218 }
219 }
220 }
221
223 {
224 {
226
227
228
230
231 std::vector<BoundaryName> secondary_boundary_vector;
232 for (const auto * const action : actions)
234 secondary_boundary_vector.push_back(action->
_boundary_pairs[j].second);
235
236 var_params.set<std::vector<BoundaryName>>("boundary") = secondary_boundary_vector;
237 var_params.set<std::vector<VariableName>>("variable") = {"nodal_area"};
238
239 mooseAssert(
_problem,
"Problem pointer is NULL");
241 var_params.set<bool>("use_displaced_mesh") = true;
242
245 }
246
247 {
248
250
251
252
254
255 std::vector<BoundaryName> secondary_boundary_vector;
256 for (const auto * const action : actions)
258 secondary_boundary_vector.push_back(action->
_boundary_pairs[j].second);
259
260 var_params.set<std::vector<BoundaryName>>("boundary") = secondary_boundary_vector;
261 var_params.set<std::vector<VariableName>>("variable") = {"nodal_density"};
262
263 mooseAssert(
_problem,
"Problem pointer is NULL");
265 var_params.set<bool>("use_displaced_mesh") = true;
266
269 }
270 {
271
273
274
275
277
278 std::vector<BoundaryName> secondary_boundary_vector;
279 for (const auto * const action : actions)
281 secondary_boundary_vector.push_back(action->
_boundary_pairs[j].second);
282
283 var_params.set<std::vector<BoundaryName>>("boundary") = secondary_boundary_vector;
284 var_params.set<std::vector<VariableName>>("variable") = {"nodal_wave_speed"};
285
286 mooseAssert(
_problem,
"Problem pointer is NULL");
288 var_params.set<bool>("use_displaced_mesh") = true;
289
292 }
293 }
294}
const ExecFlagType EXEC_TIMESTEP_BEGIN
const ExecFlagType EXEC_INITIAL
const ExecFlagType EXEC_LINEAR
for(PetscInt i=0;i< nvars;++i)
std::vector< const T * > getActions()
std::shared_ptr< FEProblemBase > & _problem
const std::string & _current_task
InputParameters getValidParams(const std::string &name) const
const InputParameters & parameters() const
const std::string & name() const
void mooseError(Args &&... args) const
const std::string & _name
bool isParamValid(const std::string &name) const
std::string stringify(const T &t)
auto index_range(const T &sizable)