12 #include "Conversion.h"
13 #include "FEProblem.h"
14 #include "MooseMesh.h"
15 #include "NonlinearSystemBase.h"
17 #include "libmesh/string_to_enum.h"
35 params.addClassDescription(
"Set up the GlobalStrainAction environment");
36 params.addRequiredParam<VariableName>(
"scalar_global_strain",
37 "Scalar variable for global strain");
38 params.addParam<std::vector<VariableName>>(
"displacements",
"The displacement variables");
39 params.addParam<std::vector<AuxVariableName>>(
40 "auxiliary_displacements",
41 "The auxliary displacement variables to be calculated from scalar variables");
42 params.addParam<std::vector<AuxVariableName>>(
43 "global_displacements",
44 "The global displacement variables to be calculated from scalar variables");
45 params.addParam<std::vector<Real>>(
"applied_stress_tensor",
46 "Vector of values defining the constant applied stress "
47 "to add, in order 11, 22, 33, 23, 13, 12");
48 params.addParam<std::string>(
"base_name",
"Material property base name");
49 params.addParam<std::vector<SubdomainName>>(
"block",
"The block id where this variable lives");
56 _disp(getParam<std::vector<VariableName>>(
"displacements")),
57 _aux_disp(getParam<std::vector<AuxVariableName>>(
"auxiliary_displacements")),
58 _global_disp(getParam<std::vector<AuxVariableName>>(
"global_displacements")),
59 _block_names(getParam<std::vector<SubdomainName>>(
"block")),
63 mooseError(
"Number of auxiliary displacement variables should be equal to the number of "
64 "nonlinear displacement variables, i.e., ",
76 const std::string uo_name = _name +
"_GlobalStrainUserObject";
81 if (_current_task ==
"add_user_object")
83 std::string uo_type =
"GlobalStrainUserObject";
84 InputParameters params = _factory.getValidParams(uo_type);
85 params.applyParameters(parameters());
86 params.set<
bool>(
"use_displaced_mesh") =
false;
87 params.set<ExecFlagEnum>(
"execute_on") = {EXEC_INITIAL, EXEC_LINEAR, EXEC_NONLINEAR};
89 _problem->addUserObject(uo_type, uo_name, params);
95 else if (_current_task ==
"add_scalar_kernel")
97 std::string sk_type =
"GlobalStrain";
98 InputParameters params = _factory.getValidParams(sk_type);
99 params.applyParameters(parameters());
100 params.set<
bool>(
"use_displaced_mesh") =
false;
101 params.set<NonlinearVariableName>(
"variable") = getParam<VariableName>(
"scalar_global_strain");
102 params.set<UserObjectName>(
"global_strain_uo") = uo_name;
104 _problem->addScalarKernel(sk_type, _name +
"_GlobalStrain", params);
110 else if (_current_task ==
"add_material")
112 std::string mat_type =
"ComputeGlobalStrain";
113 InputParameters params = _factory.getValidParams(mat_type);
114 params.applyParameters(parameters(), {
"scalar_global_strain"});
115 params.set<
bool>(
"use_displaced_mesh") =
false;
116 params.set<std::vector<VariableName>>(
"scalar_global_strain") = {
117 getParam<VariableName>(
"scalar_global_strain")};
118 params.set<UserObjectName>(
"global_strain_uo") = uo_name;
120 _problem->addMaterial(mat_type, _name +
"_global_strain", params);
126 else if (_current_task ==
"add_aux_variable")
128 auto params = _factory.getValidParams(
"MooseVariable");
130 const bool second = _problem->mesh().hasSecondOrderElements();
132 params.set<MooseEnum>(
"order") = second ?
"SECOND" :
"FIRST";
133 params.set<MooseEnum>(
"family") =
"LAGRANGE";
135 for (
unsigned int i = 0; i <
_aux_disp.size(); ++i)
139 _problem->addAuxVariable(
"MooseVariable", aux_var_name, params);
146 _problem->addAuxVariable(
"MooseVariable", aux_var_name, params);
153 else if (_current_task ==
"add_aux_kernel")
155 for (
unsigned int i = 0; i <
_aux_disp.size(); ++i)
159 std::string aux_type =
"GlobalDisplacementAux";
160 InputParameters params = _factory.getValidParams(aux_type);
161 params.applyParameters(parameters(), {
"scalar_global_strain"});
162 params.set<AuxVariableName>(
"variable") = aux_var_name;
163 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
164 params.set<
bool>(
"use_displaced_mesh") =
false;
165 params.set<
bool>(
"output_global_displacement") =
false;
166 params.set<std::vector<VariableName>>(
"scalar_global_strain") = {
167 getParam<VariableName>(
"scalar_global_strain")};
168 params.set<UserObjectName>(
"global_strain_uo") = uo_name;
169 params.set<
unsigned int>(
"component") = i;
171 _problem->addAuxKernel(aux_type, aux_var_name +
'_' +
name(), params);
178 std::string aux_type =
"GlobalDisplacementAux";
179 InputParameters params = _factory.getValidParams(aux_type);
180 params.applyParameters(parameters(), {
"scalar_global_strain"});
181 params.set<AuxVariableName>(
"variable") = aux_var_name;
182 params.set<ExecFlagEnum>(
"execute_on") = EXEC_TIMESTEP_END;
183 params.set<
bool>(
"use_displaced_mesh") =
false;
184 params.set<
bool>(
"output_global_displacement") =
true;
185 params.set<std::vector<VariableName>>(
"scalar_global_strain") = {
186 getParam<VariableName>(
"scalar_global_strain")};
187 params.set<UserObjectName>(
"global_strain_uo") = uo_name;
188 params.set<
unsigned int>(
"component") = i;
190 _problem->addAuxKernel(aux_type, aux_var_name +
'_' +
name(), params);