99 if (!
_problem->getDisplacedProblem())
101 "Contact requires updated coordinates. Use the 'displacements = ...' parameter in the " 108 if (!
_problem->isSNESMFReuseBaseSetbyUser())
109 _problem->setSNESMFReuseBase(
false,
false);
116 if (!
_problem->getDisplacedProblem())
117 mooseError(
"Contact requires updated coordinates. Use the 'displacements = ...' line in the " 119 unsigned int pair_number(0);
126 {
"secondary_gap_offset",
"mapped_primary_gap_offset",
"order"});
128 std::vector<VariableName> displacements =
129 getParam<std::vector<VariableName>>(
"displacements");
130 const auto order =
_problem->systemBaseNonlinear(0)
132 .variable_type(displacements[0])
135 params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
137 params.
set<std::vector<BoundaryName>>(
"boundary") = {contact_pair.second};
138 params.
set<BoundaryName>(
"paired_boundary") = contact_pair.first;
139 params.
set<AuxVariableName>(
"variable") =
"penetration";
141 params.
set<std::vector<VariableName>>(
"secondary_gap_offset") = {
142 getParam<VariableName>(
"secondary_gap_offset")};
144 params.
set<std::vector<VariableName>>(
"mapped_primary_gap_offset") = {
145 getParam<VariableName>(
"mapped_primary_gap_offset")};
146 params.
set<
bool>(
"use_displaced_mesh") =
true;
158 std::vector<VariableName> displacements = getParam<std::vector<VariableName>>(
"displacements");
159 const auto order =
_problem->systemBaseNonlinear(0)
161 .variable_type(displacements[0])
167 var_params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
168 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
169 _problem->addAuxVariable(
"MooseVariable",
"gap_rate", var_params);
176 var_params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
177 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
179 _problem->addAuxVariable(
"MooseVariable",
"penetration", var_params);
183 var_params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
184 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
186 _problem->addAuxVariable(
"MooseVariable",
"contact_pressure", var_params);
191 var_params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
192 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
194 _problem->addAuxVariable(
"MooseVariable",
"nodal_area", var_params);
199 var_params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
200 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
202 _problem->addAuxVariable(
"MooseVariable",
"nodal_density", var_params);
207 var_params.
set<
MooseEnum>(
"order") = Utility::enum_to_string<Order>(OrderWrapper{order});
208 var_params.set<
MooseEnum>(
"family") =
"LAGRANGE";
210 _problem->addAuxVariable(
"MooseVariable",
"nodal_wave_speed", var_params);
224 std::vector<BoundaryName> secondary_boundary_vector;
225 for (
const auto *
const action : actions)
226 for (
const auto j :
index_range(action->_boundary_pairs))
227 secondary_boundary_vector.push_back(action->_boundary_pairs[
j].second);
229 var_params.set<std::vector<BoundaryName>>(
"boundary") = secondary_boundary_vector;
230 var_params.set<std::vector<VariableName>>(
"variable") = {
"nodal_area"};
232 mooseAssert(
_problem,
"Problem pointer is NULL");
234 var_params.set<
bool>(
"use_displaced_mesh") =
true;
248 std::vector<BoundaryName> secondary_boundary_vector;
249 for (
const auto *
const action : actions)
250 for (
const auto j :
index_range(action->_boundary_pairs))
251 secondary_boundary_vector.push_back(action->_boundary_pairs[
j].second);
253 var_params.set<std::vector<BoundaryName>>(
"boundary") = secondary_boundary_vector;
254 var_params.set<std::vector<VariableName>>(
"variable") = {
"nodal_density"};
256 mooseAssert(
_problem,
"Problem pointer is NULL");
258 var_params.set<
bool>(
"use_displaced_mesh") =
true;
271 std::vector<BoundaryName> secondary_boundary_vector;
272 for (
const auto *
const action : actions)
273 for (
const auto j :
index_range(action->_boundary_pairs))
274 secondary_boundary_vector.push_back(action->_boundary_pairs[
j].second);
276 var_params.set<std::vector<BoundaryName>>(
"boundary") = secondary_boundary_vector;
277 var_params.set<std::vector<VariableName>>(
"variable") = {
"nodal_wave_speed"};
279 mooseAssert(
_problem,
"Problem pointer is NULL");
281 var_params.set<
bool>(
"use_displaced_mesh") =
true;
InputParameters getValidParams(const std::string &name) const
virtual const std::string & name() const
bool isParamValid(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
const InputParameters & parameters() const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< const T *> getActions()
auto index_range(const T &sizable)
const ExecFlagType EXEC_INITIAL