39 if (actions.size() == 0)
46 bool do_add_variables = getParam<bool>(
"add_variables");
47 auto displacement_variables = getParam<std::vector<VariableName>>(
"displacements");
48 bool add_variables_block_restricted =
true;
49 std::set<SubdomainName> add_variables_blocks;
51 Real scaling_value = (scaling_set) ? getParam<Real>(
"scaling") : 1.0;
54 for (
const auto & action : actions)
56 if (action->getParam<
bool>(
"add_variables"))
59 do_add_variables =
true;
60 const auto v = action->getParam<std::vector<VariableName>>(
"displacements");
63 if (displacement_variables.size() == 0)
64 displacement_variables.insert(displacement_variables.end(),
v.begin(),
v.end());
65 else if (displacement_variables !=
v)
67 "The vector of displacement variables of the actions differ.");
71 if (add_variables_block_restricted && action->isParamValid(
"block") &&
72 action->getParam<std::vector<SubdomainName>>(
"block").size())
74 auto action_blocks = action->getParam<std::vector<SubdomainName>>(
"block");
75 mooseAssert(action_blocks.size(),
"Block restriction must not be empty");
76 add_variables_blocks.insert(action_blocks.cbegin(), action_blocks.cend());
79 add_variables_block_restricted =
false;
82 if (action->getParam<
bool>(
"add_variables") && action->isParamValid(
"scaling"))
84 const auto scaling = action->getParam<
Real>(
"scaling");
87 if (scaling_set && scaling_value != scaling)
88 paramError(
"scaling",
"The scaling parameter of the actions differ.");
92 scaling_value = scaling;
102 const bool second =
_problem->mesh().hasSecondOrderElements();
104 params.set<
MooseEnum>(
"order") = second ?
"SECOND" :
"FIRST";
105 params.set<
MooseEnum>(
"family") =
"LAGRANGE";
106 if (add_variables_block_restricted && add_variables_blocks.size() > 0)
108 std::vector<SubdomainName> blks(add_variables_blocks.begin(), add_variables_blocks.end());
109 params.set<std::vector<SubdomainName>>(
"block") = blks;
111 if (scaling_set && scaling_value != 1)
112 params.set<std::vector<Real>>(
"scaling") = {scaling_value};
115 const auto n = displacement_variables.size();
117 paramError(
"displacements",
"The vector of displacement variables is not set.");
118 if (n !=
_problem->mesh().dimension())
120 "The number of displacement variables differs from the number of dimensions of " 123 for (
const auto & disp : displacement_variables)
125 _problem->addVariable(
"MooseVariable", disp, params);
InputParameters getValidParams(const std::string &name) const
Store common tensor mechanics parameters.
void mooseWarning(Args &&... args) const
bool isParamValid(const std::string &name) const
CommonSolidMechanicsAction(const InputParameters ¶meters)
const std::string & _current_task
void paramError(const std::string ¶m, Args... args) const
static InputParameters validParams()
virtual void act() override
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
static const std::string v
registerMooseAction("SolidMechanicsApp", CommonSolidMechanicsAction, "meta_action")
std::shared_ptr< FEProblemBase > & _problem
const InputParameters & parameters() const
std::vector< const T *> getActions()