105 if (!
_problem->getDisplacedProblem())
107 "Contact requires updated coordinates. Use the 'displacements = ...' parameter in the " 114 if (!
_problem->isSNESMFReuseBaseSetbyUser())
115 _problem->setSNESMFReuseBase(
false,
false);
122 if (!
_problem->getDisplacedProblem())
123 mooseError(
"Contact requires updated coordinates. Use the 'displacements = ...' line in the " 125 unsigned int pair_number(0);
132 {
"secondary_gap_offset",
"mapped_primary_gap_offset",
"order"});
134 std::vector<VariableName> displacements =
135 getParam<std::vector<VariableName>>(
"displacements");
136 const auto order =
_problem->systemBaseNonlinear(0)
138 .variable_type(displacements[0])
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;
164 std::vector<VariableName> displacements = getParam<std::vector<VariableName>>(
"displacements");
165 const auto order =
_problem->systemBaseNonlinear(0)
167 .variable_type(displacements[0])
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);
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);
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);
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);
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);
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);
231 std::vector<BoundaryName> secondary_boundary_vector;
232 for (
const auto *
const action : actions)
233 for (
const auto j :
index_range(action->_boundary_pairs))
234 secondary_boundary_vector.push_back(action->_boundary_pairs[
j].second);
236 var_params.set<std::vector<BoundaryName>>(
"boundary") = secondary_boundary_vector;
237 var_params.set<std::vector<VariableName>>(
"variable") = {
"nodal_area"};
239 mooseAssert(
_problem,
"Problem pointer is NULL");
241 var_params.set<
bool>(
"use_displaced_mesh") =
true;
255 std::vector<BoundaryName> secondary_boundary_vector;
256 for (
const auto *
const action : actions)
257 for (
const auto j :
index_range(action->_boundary_pairs))
258 secondary_boundary_vector.push_back(action->_boundary_pairs[
j].second);
260 var_params.set<std::vector<BoundaryName>>(
"boundary") = secondary_boundary_vector;
261 var_params.set<std::vector<VariableName>>(
"variable") = {
"nodal_density"};
263 mooseAssert(
_problem,
"Problem pointer is NULL");
265 var_params.set<
bool>(
"use_displaced_mesh") =
true;
278 std::vector<BoundaryName> secondary_boundary_vector;
279 for (
const auto *
const action : actions)
280 for (
const auto j :
index_range(action->_boundary_pairs))
281 secondary_boundary_vector.push_back(action->_boundary_pairs[
j].second);
283 var_params.set<std::vector<BoundaryName>>(
"boundary") = secondary_boundary_vector;
284 var_params.set<std::vector<VariableName>>(
"variable") = {
"nodal_wave_speed"};
286 mooseAssert(
_problem,
"Problem pointer is NULL");
288 var_params.set<
bool>(
"use_displaced_mesh") =
true;
const std::string & _name
const InputParameters & parameters() const
InputParameters getValidParams(const std::string &name) const
const std::string & name() const
const ExecFlagType EXEC_TIMESTEP_BEGIN
const std::string & _current_task
const ExecFlagType EXEC_LINEAR
std::string stringify(const T &t)
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
bool isParamValid(const std::string &name) const
std::vector< const T *> getActions()
auto index_range(const T &sizable)
const ExecFlagType EXEC_INITIAL