17 #include "libmesh/string_to_enum.h" 35 "Scalar variable for global strain");
36 params.
addParam<std::vector<VariableName>>(
"displacements", {},
"The displacement variables");
37 params.
addParam<std::vector<AuxVariableName>>(
38 "auxiliary_displacements",
39 "The auxliary displacement variables to be calculated from scalar variables");
40 params.
addParam<std::vector<AuxVariableName>>(
41 "global_displacements",
42 "The global displacement variables to be calculated from scalar variables");
43 params.
addParam<std::vector<Real>>(
"applied_stress_tensor",
44 "Vector of values defining the constant applied stress " 45 "to add, in order 11, 22, 33, 23, 13, 12");
46 params.
addParam<std::string>(
"base_name",
"Material property base name");
47 params.
addParam<std::vector<SubdomainName>>(
48 "block", {},
"The block id where this variable lives");
55 _disp(getParam<
std::vector<VariableName>>(
"displacements")),
56 _aux_disp(getParam<
std::vector<AuxVariableName>>(
"auxiliary_displacements")),
57 _global_disp(getParam<
std::vector<AuxVariableName>>(
"global_displacements")),
58 _block_names(getParam<
std::vector<SubdomainName>>(
"block")),
62 mooseError(
"Number of auxiliary displacement variables should be equal to the number of " 63 "nonlinear displacement variables, i.e., ",
75 const std::string uo_name =
_name +
"_GlobalStrainUserObject";
82 std::string uo_type =
"GlobalStrainUserObject";
85 params.
set<
bool>(
"use_displaced_mesh") =
false;
88 _problem->addUserObject(uo_type, uo_name, params);
96 std::string sk_type =
"GlobalStrain";
99 params.
set<
bool>(
"use_displaced_mesh") =
false;
100 params.
set<NonlinearVariableName>(
"variable") = getParam<VariableName>(
"scalar_global_strain");
101 params.
set<UserObjectName>(
"global_strain_uo") = uo_name;
103 _problem->addScalarKernel(sk_type,
_name +
"_GlobalStrain", params);
111 std::string mat_type =
"ComputeGlobalStrain";
114 params.
set<
bool>(
"use_displaced_mesh") =
false;
115 params.
set<std::vector<VariableName>>(
"scalar_global_strain") = {
116 getParam<VariableName>(
"scalar_global_strain")};
117 params.
set<UserObjectName>(
"global_strain_uo") = uo_name;
119 _problem->addMaterial(mat_type,
_name +
"_global_strain", params);
129 const bool second =
_problem->mesh().hasSecondOrderElements();
131 params.set<
MooseEnum>(
"order") = second ?
"SECOND" :
"FIRST";
132 params.set<
MooseEnum>(
"family") =
"LAGRANGE";
134 for (
unsigned int i = 0; i <
_aux_disp.size(); ++i)
138 _problem->addAuxVariable(
"MooseVariable", aux_var_name, params);
145 _problem->addAuxVariable(
"MooseVariable", aux_var_name, params);
154 for (
unsigned int i = 0; i <
_aux_disp.size(); ++i)
158 std::string aux_type =
"GlobalDisplacementAux";
161 params.
set<AuxVariableName>(
"variable") = aux_var_name;
163 params.
set<
bool>(
"use_displaced_mesh") =
false;
164 params.
set<
bool>(
"output_global_displacement") =
false;
165 params.
set<std::vector<VariableName>>(
"scalar_global_strain") = {
166 getParam<VariableName>(
"scalar_global_strain")};
167 params.
set<UserObjectName>(
"global_strain_uo") = uo_name;
168 params.
set<
unsigned int>(
"component") = i;
170 _problem->addAuxKernel(aux_type, aux_var_name +
'_' +
name(), params);
177 std::string aux_type =
"GlobalDisplacementAux";
180 params.
set<AuxVariableName>(
"variable") = aux_var_name;
182 params.
set<
bool>(
"use_displaced_mesh") =
false;
183 params.
set<
bool>(
"output_global_displacement") =
true;
184 params.
set<std::vector<VariableName>>(
"scalar_global_strain") = {
185 getParam<VariableName>(
"scalar_global_strain")};
186 params.
set<UserObjectName>(
"global_strain_uo") = uo_name;
187 params.
set<
unsigned int>(
"component") = i;
189 _problem->addAuxKernel(aux_type, aux_var_name +
'_' +
name(), params);
std::vector< AuxVariableName > _aux_disp
registerMooseAction("SolidMechanicsApp", GlobalStrainAction, "add_user_object")
GlobalStrainAction(const InputParameters ¶ms)
std::vector< VariableName > _disp
InputParameters getValidParams(const std::string &name) const
static InputParameters validParams()
const ExecFlagType EXEC_TIMESTEP_END
virtual const std::string & name() const
std::vector< SubdomainName > _block_names
static InputParameters validParams()
std::set< SubdomainID > _block_ids
const std::string & _current_task
const ExecFlagType EXEC_LINEAR
const ExecFlagType EXEC_NONLINEAR
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem
const InputParameters & parameters() const
std::vector< AuxVariableName > _global_disp
const ExecFlagType EXEC_INITIAL