19 std::map<std::string, std::string>
21 {
"strain",
"total_strain"},
22 {
"mechanical_strain",
"mechanical_strain"},
24 {
"cauchy_stress",
"cauchy_stress"},
25 {
"deformation_gradient",
"deformation_gradient"},
26 {
"pk1_stress",
"pk1_stress"},
27 {
"pk2_stress",
"pk2_stress"},
28 {
"small_stress",
"small_stress"},
29 {
"elastic_strain",
"elastic_strain"},
30 {
"plastic_strain",
"plastic_strain"},
31 {
"creep_strain",
"creep_strain"},
32 {
"creep_stress",
"creep_stress"}};
37 const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
39 {
"vonmises", {
"VonMisesStress", {
"stress",
"cauchy_stress",
"pk1_stress",
"pk2_stress"}}},
40 {
"effective", {
"EffectiveStrain", {
"plastic_strain",
"creep_strain"}}},
42 {
"Hydrostatic", {
"stress",
"cauchy_stress",
"pk1_stress",
"pk2_stress",
"small_stress"}}},
53 {
"volumetric", {
"VolumetricStrain", {
"mechanical_strain",
"strain"}}},
56 {
"stress",
"cauchy_stress",
"pk1_stress",
"pk2_stress",
"small_stress",
"strain"}}},
59 {
"stress",
"cauchy_stress",
"pk1_stress",
"pk2_stress",
"small_stress",
"strain"}}},
62 {
"stress",
"cauchy_stress",
"pk1_stress",
"pk2_stress",
"small_stress",
"strain"}}},
101 {
"mechanical_strain",
110 {
"mechanical_strain",
118 const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
120 {
"directional", {
"Direction", {
"stress",
"strain"}}}};
122 const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
125 {
"AxialStress", {
"stress",
"strain",
"plastic_strain",
"creep_strain",
"elastic_strain"}}},
127 {
"HoopStress", {
"stress",
"strain",
"plastic_strain",
"creep_strain",
"elastic_strain"}}},
128 {
"radial", {
"RadialStress", {
"stress",
"strain"}}}};
130 const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
133 {
"HoopStress", {
"stress",
"strain",
"plastic_strain",
"creep_strain",
"elastic_strain"}}},
134 {
"spherical_radial", {
"RadialStress", {
"stress",
"strain"}}}};
142 "displacements",
"The nonlinear displacement variables for the problem");
143 params.
addParam<std::vector<VariableName>>(
"temperature",
"The temperature");
145 MooseEnum strainType(
"SMALL FINITE",
"SMALL");
147 params.
addParam<
bool>(
"incremental",
148 "Use incremental or total strain (if not explicitly specified this " 149 "defaults to incremental for finite strain and total for small strain)");
151 params.
addParam<std::string>(
"base_name",
"Material property base name");
153 "volumetric_locking_correction",
false,
"Flag to correct volumetric locking");
155 "use_finite_deform_jacobian",
false,
"Jacobian for corrotational finite strain");
156 params.
addParam<
bool>(
"add_variables",
false,
"Add the displacement variables");
157 params.
addParam<std::vector<MaterialPropertyName>>(
158 "eigenstrain_names", {},
"List of eigenstrains to be applied in this strain calculation");
159 params.
addParam<
bool>(
"use_automatic_differentiation",
161 "Flag to use automatic differentiation (AD) objects when possible");
163 params.
addParam<MaterialPropertyName>(
165 "Name of the global strain material to be applied in this strain calculation. " 166 "The global strain tensor is constant over the whole domain and allows visualization " 167 "of the deformed shape with the periodic BC");
170 params.
addParam<std::vector<AuxVariableName>>(
"save_in", {},
"The displacement residuals");
171 params.
addParam<std::vector<AuxVariableName>>(
172 "diag_save_in", {},
"The displacement diagonal preconditioner terms");
175 "Methods to calculate the finite strain and rotation increments");
179 MooseEnum planarFormulationType(
"NONE WEAK_PLANE_STRESS PLANE_STRAIN GENERALIZED_PLANE_STRAIN",
182 "planar_formulation", planarFormulationType,
"Out-of-plane stress/strain formulation");
183 params.
addParam<VariableName>(
"scalar_out_of_plane_strain",
184 "Scalar variable for the out-of-plane strain (in y " 185 "direction for 1D Axisymmetric or in z direction for 2D " 186 "Cartesian problems)");
187 params.
addParam<VariableName>(
"out_of_plane_strain",
188 "Variable for the out-of-plane strain for plane stress models");
189 MooseEnum outOfPlaneDirection(
"x y z",
"z");
191 "out_of_plane_direction", outOfPlaneDirection,
"The direction of the out-of-plane strain.");
193 "out_of_plane_pressure",
194 "Function used to prescribe pressure (applied toward the body) in the out-of-plane direction " 195 "(y for 1D Axisymmetric or z for 2D Cartesian problems)",
196 "This has been replaced by 'out_of_plane_pressure_function'");
198 "out_of_plane_pressure_function",
199 "Function used to prescribe pressure (applied toward the body) in the out-of-plane direction " 200 "(y for 1D Axisymmetric or z for 2D Cartesian problems)");
203 "Scale factor applied to prescribed out-of-plane pressure (both material and function)");
204 params.
addParam<MaterialPropertyName>(
"out_of_plane_pressure_material",
206 "Material used to prescribe pressure (applied toward the " 207 "body) in the out-of-plane direction");
208 params.
addParamNamesToGroup(
"planar_formulation scalar_out_of_plane_strain out_of_plane_pressure " 209 "out_of_plane_pressure_material out_of_plane_pressure_function " 210 "pressure_factor out_of_plane_direction out_of_plane_strain",
211 "Out-of-plane stress/strain");
216 "Add scalar quantity output for stress and/or strain");
219 "material_output_order",
221 "Specifies the order of the FE shape function to use for this variable.");
224 "material_output_family",
226 "Specifies the family of FE shape functions to use for this variable.");
229 params.
addParam<
bool>(
"verbose",
false,
"Display extra information.");
233 "If true use the new " 234 "LagrangianStressDiverence kernels.");
237 "compatibility_mode",
239 "If true, configure the Lagrangian kernel system to reproduce the OLD " 240 "(StressDivergenceTensors + ComputeFiniteStrain) results bit-for-bit when wrapping an " 241 "old-style ComputeStressBase material like ComputeMultiPlasticityStress. Implies " 242 "`new_system = true` and `formulation = TOTAL`; auto-adds ComputeLagrangianWrappedStress " 243 "around the user-supplied stress material; sets `kinematic_approximation` from " 244 "`decomposition_method`; sets `F_bar_mode = incremental` when " 245 "`volumetric_locking_correction = true`; redirects `stress` / `mechanical_strain` output " 246 "requests to the equivalent NEW-system properties (`cauchy_stress` / " 247 "`rotated_mechanical_strain`).");
249 MooseEnum formulationType(
"TOTAL UPDATED",
"TOTAL");
252 "Select between the total Lagrangian (TOTAL) " 253 "and updated Lagrangian (UPDATED) formulations " 254 "for the new kernel system.");
256 MooseEnum kinematicApproximation(
"linear quadratic rashid_approximate rashid_eigen",
"linear");
258 "kinematic_approximation",
259 kinematicApproximation,
260 "Approximation used by the Lagrangian strain calculator to convert the incremental " 261 "deformation gradient into the strain and vorticity increments (large deformation only).");
264 "generalized_midpoint_alpha",
266 "generalized_midpoint_alpha >= 0.5 & generalized_midpoint_alpha <= 1.0",
267 "Generalized midpoint weight for the deformation gradient in the Lagrangian strain " 268 "calculator. 1.0 = backward Euler (default), 0.5 = midpoint rule.");
270 MooseEnum volumetricLockingCorrectionMode(
"total incremental",
"total");
272 "volumetric_locking_correction_mode",
273 volumetricLockingCorrectionMode,
274 "Volumetric part averaged by the F-bar volumetric locking correction in the Lagrangian " 275 "strain calculator: the total (default) or incremental deformation gradient.");
279 "volumetric_locking_correction kinematic_approximation " 280 "generalized_midpoint_alpha volumetric_locking_correction_mode",
283 "Lagrangian formulation");
290 :
Action(parameters), _use_ad(getParam<bool>(
"use_automatic_differentiation"))
297 if (action.size() == 1)
303 MultiMooseEnum generate_output = getParam<MultiMooseEnum>(
"generate_output");
305 getParam<MultiMooseEnum>(
"additional_generate_output");
307 MultiMooseEnum material_output_order = getParam<MultiMooseEnum>(
"material_output_order");
309 getParam<MultiMooseEnum>(
"additional_material_output_order");
311 MultiMooseEnum material_output_family = getParam<MultiMooseEnum>(
"material_output_family");
313 getParam<MultiMooseEnum>(
"additional_material_output_family");
315 for (
auto & output : additional_generate_output)
317 for (
auto & order : additional_material_output_order)
318 material_output_order.setAdditionalValue(order);
319 for (
auto & family : additional_material_output_family)
320 material_output_family.setAdditionalValue(family);
345 std::string options =
"";
347 for (
unsigned int a = 0;
a < 3; ++
a)
348 for (
unsigned int b = 0;
b < 3; ++
b)
353 for (
auto & t : r2i.second.second)
354 options +=
" " + r2i.first +
"_" + t;
357 for (
auto & r : r2sdc.second.second)
358 options +=
" " + r2sdc.first +
"_" + r;
361 for (
auto & r : r2cc.second.second)
362 options +=
" " + r2cc.first +
"_" + r;
365 for (
auto & r : r2sc.second.second)
366 options +=
" " + r2sc.first +
"_" + r;
373 const std::string & prop_name)
375 if (prop_name.empty())
static void addCartesianComponentOutput(const std::string &name, const std::string &prop_name="")
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_invariant_table
void setAdditionalValue(const std::string &names)
InputParameterWarehouse & getInputParameterWarehouse()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_cylindrical_component_table
Store common tensor mechanics parameters.
static MultiMooseEnum materialOutputFamilies()
std::string getRawNames() const
MooseObjectName uniqueActionName() const
static const std::vector< char > _component_table
table data for output generation
QuasiStaticSolidMechanicsPhysicsBase(const InputParameters ¶ms)
static MultiMooseEnum materialOutputOrders()
static InputParameters validParams()
static MooseEnum decompositionType()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_directional_component_table
static std::map< std::string, std::string > _rank_two_cartesian_component_table
static InputParameters validParams()
static MooseEnum getAuxVariableOrders()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
bool isParamValid(const std::string &name) const
static MultiMooseEnum outputPropertiesType()
std::vector< const T *> getActions()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_spherical_component_table