24#include "libmesh/string_to_enum.h"
33 "validate_coordinate_systems");
47 "add_master_action_material");
57 params.
addClassDescription(
"Set up stress divergence kernels with coordinate system aware logic");
61 params.
addParam<std::vector<SubdomainName>>(
"block",
63 "The list of ids of the blocks (subdomain) "
64 "that the stress divergence kernels will be "
70 "Add scalar quantity output for stress and/or strain (will be "
71 "appended to the list in `generate_output`)");
73 "additional_material_output_order",
75 "Specifies the order of the FE shape function to use for this variable.");
78 "additional_material_output_family",
80 "Specifies the family of FE shape functions to use for this variable.");
83 "additional_material_output_family",
87 "The base name used for the strain. If not provided, it will be set equal to base_name");
88 params.
addParam<std::vector<TagName>>(
90 "The tag names for extra vectors that residual data should be saved into");
91 params.
addParam<std::vector<TagName>>(
"absolute_value_vector_tags",
92 "The tag names for extra vectors that the absolute value "
93 "of the residual should be accumulated into");
94 params.
addParam<Real>(
"scaling",
"The scaling to apply to the displacement variables");
96 "cylindrical_axis_point1",
97 "Starting point for direction of axis of rotation for cylindrical stress/strain.");
99 "cylindrical_axis_point2",
100 "Ending point for direction of axis of rotation for cylindrical stress/strain.");
101 params.
addParam<Point>(
"spherical_center_point",
102 "Center point of the spherical coordinate system.");
103 params.
addParam<Point>(
"direction",
"Direction stress/strain is calculated in");
104 params.
addParam<
bool>(
"automatic_eigenstrain_names",
106 "Collects all material eigenstrains and passes to required strain "
107 "calculator within TMA internally.");
113 "Type of each constraint: strain, stress, or none. The types are specified in the "
114 "column-major order, and there must be 9 entries in total.");
115 params.
addParam<std::vector<FunctionName>>(
116 "targets", {},
"Functions giving the targets to hit for constraint types that are not none.");
118 "homogenized_off_diagonal_jacobian",
120 "Whether to include the off-diagonal scalar contributions to the homogenized jacobian");
125 "cylindrical_axis_point1 cylindrical_axis_point2 spherical_center_point direction",
126 "Coordinate system");
135 _displacements(getParam<
std::vector<VariableName>>(
"displacements")),
136 _ndisp(_displacements.size()),
137 _coupled_displacements(_ndisp),
138 _save_in(getParam<
std::vector<AuxVariableName>>(
"save_in")),
139 _diag_save_in(getParam<
std::vector<AuxVariableName>>(
"diag_save_in")),
140 _subdomain_names(getParam<
std::vector<SubdomainName>>(
"block")),
144 _out_of_plane_direction(
146 _base_name(isParamValid(
"base_name") ? getParam<
std::string>(
"base_name") +
"_" :
""),
147 _material_output_order(getParam<
MultiMooseEnum>(
"material_output_order")),
148 _material_output_family(getParam<
MultiMooseEnum>(
"material_output_family")),
149 _cylindrical_axis_point1_valid(params.isParamSetByUser(
"cylindrical_axis_point1")),
150 _cylindrical_axis_point2_valid(params.isParamSetByUser(
"cylindrical_axis_point2")),
151 _direction_valid(params.isParamSetByUser(
"direction")),
152 _verbose(getParam<bool>(
"verbose")),
153 _spherical_center_point_valid(params.isParamSetByUser(
"spherical_center_point")),
154 _auto_eigenstrain(getParam<bool>(
"automatic_eigenstrain_names")),
155 _compatibility_mode(getParam<bool>(
"compatibility_mode")),
156 _lagrangian_kernels(getParam<bool>(
"new_system") || _compatibility_mode),
157 _lk_large_kinematics(_strain ==
Strain::Finite),
159 _lk_formulation(_compatibility_mode
162 _lk_locking(getParam<bool>(
"volumetric_locking_correction")),
163 _lk_homogenization(false),
165 _targets(getParam<
std::vector<FunctionName>>(
"targets")),
166 _lk_h_off_jac(getParam<bool>(
"homogenized_off_diagonal_jacobian"))
171 const bool incremental = getParam<bool>(
"incremental");
188 mooseInfo(
"SolidMechanics Action: selecting 'total small strain' formulation. Use "
189 "`incremental = true` to select 'incremental small strain' instead.");
194 mooseInfo(
"SolidMechanics Action: selecting 'incremental finite strain' formulation.");
204 bool use_displaced_mesh_param = getParam<bool>(
"use_displaced_mesh");
206 mooseError(
"Wrong combination of use displaced mesh and strain model");
211 for (
unsigned int i = 0; i <
_ndisp; ++i)
215 mooseError(
"Number of save_in variables should equal to the number of displacement variables ",
220 "Number of diag_save_in variables should equal to the number of displacement variables ",
230 "Planar formulations are not yet available through the Physics syntax with new_system = "
231 "true. They can be enabled by manually setting up the appropriate objects. Please refer "
232 "to the documentation and regression tests for examples.");
236 "out_of_plane_strain should only be specified with planar_formulation=WEAK_PLANE_STRESS");
239 mooseError(
"out_of_plane_strain must be specified with planar_formulation=WEAK_PLANE_STRESS");
243 for (
const auto & out : getParam<MultiMooseEnum>(
"generate_output"))
245 std::string lower(out);
246 std::transform(lower.begin(), lower.end(), lower.begin(), ::tolower);
254 if (
_ndisp == 1 && getParam<bool>(
"volumetric_locking_correction"))
255 mooseError(
"Volumetric locking correction should be set to false for 1D problems.");
259 "The scaling parameter has no effect unless add_variables is set to true. Did you "
260 "mean to set 'add_variables = true'?");
278 _eigenstrain_names = getParam<std::vector<MaterialPropertyName>>(
"eigenstrain_names");
284 if (ctype_set || targets_set)
286 if (!(ctype_set && targets_set))
287 mooseError(
"To use the Lagrangian kernel homogenization system you "
288 "most provide both the constraint_types and the targets "
293 mooseError(
"The Lagrangian kernel homogenization system requires the "
294 "use of formulation = TOTAL");
303 static const std::vector<std::string> new_system_only = {
304 "formulation",
"constraint_types",
"targets",
"homogenized_off_diagonal_jacobian"};
305 static const std::vector<std::string> legacy_only = {
"use_finite_deform_jacobian",
310 for (
const auto &
p : legacy_only)
315 "' belongs to the legacy StressDivergenceTensors kernel system and cannot be "
316 "combined with new_system = true or compatibility_mode = true. The Lagrangian "
317 "kernel system produces the exact Jacobian natively; homogenization replaces "
323 "The Lagrangian kernel system is not yet compatible with automatic "
331 "decomposition_method is not used by the Lagrangian kernel system. Set the "
332 "equivalent option on the ComputeLagrangianStrain material via "
333 "kinematic_approximation instead.");
341 "compatibility_mode requires formulation = TOTAL (the OLD kernel system is "
342 "always total Lagrangian on the displaced mesh).");
346 "compatibility_mode derives kinematic_approximation from decomposition_method; "
347 "do not set it explicitly.");
350 paramError(
"volumetric_locking_correction_mode",
351 "compatibility_mode derives the F-bar mode from volumetric_locking_correction; "
352 "do not set volumetric_locking_correction_mode explicitly.");
355 "compatibility_mode reproduces the legacy backward-Euler update; do not set "
356 "generalized_midpoint_alpha explicitly.");
363 const std::string decomp = getParam<MooseEnum>(
"decomposition_method");
364 if (decomp !=
"TaylorExpansion" && decomp !=
"EigenSolution")
366 "compatibility_mode + strain = FINITE supports only "
367 "decomposition_method = TaylorExpansion or EigenSolution; '",
369 "' has no Lagrangian kinematic_approximation counterpart.");
375 for (
const auto &
p : new_system_only)
380 "' belongs to the new Lagrangian kernel system. Set new_system = true (or "
381 "compatibility_mode = true) to use it.");
388 std::string ad_prepend =
"";
407 const std::string
type =
"GeneralizedPlaneStrainAction";
409 action_params.
set<
bool>(
"_built_by_moose") =
true;
410 action_params.set<std::string>(
"registered_identifier") =
"(AutoBuilt)";
417 {
"use_displaced_mesh",
418 "out_of_plane_pressure",
419 "out_of_plane_pressure_function",
423 action_params.set<
bool>(
"use_automatic_differentiation") =
_use_ad;
426 action_params.set<FunctionName>(
"out_of_plane_pressure") =
427 getParam<FunctionName>(
"out_of_plane_pressure");
429 action_params.set<FunctionName>(
"out_of_plane_pressure_function") =
430 getParam<FunctionName>(
"out_of_plane_pressure_function");
432 action_params.set<Real>(
"factor") = getParam<Real>(
"factor");
434 action_params.set<Real>(
"pressure_factor") = getParam<Real>(
"pressure_factor");
437 auto action = MooseSharedNamespace::static_pointer_cast<MooseObjectAction>(
449 if (common_actions.empty() && getParam<bool>(
"add_variables"))
453 const bool second =
_problem->mesh().hasSecondOrderElements();
455 params.
set<
MooseEnum>(
"order") = second ?
"SECOND" :
"FIRST";
456 params.set<
MooseEnum>(
"family") =
"LAGRANGE";
458 params.set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"scaling")};
467 _problem->addVariable(
"MooseVariable", disp, params);
475 const std::map<bool, std::vector<unsigned int>> mg_order_max{{
true, {1, 4, 9}},
477 std::size_t mg_order = 0;
486 "Number of non-none constraint types must not be greater than ",
516 for (
unsigned int i = 0; i <
_ndisp; ++i)
530 params.set<
unsigned int>(
"component") = i;
532 params.set<NonlinearVariableName>(
"variable") =
_displacements[i];
535 params.set<std::vector<AuxVariableName>>(
"save_in") = {
_save_in[i]};
537 params.set<std::vector<AuxVariableName>>(
"diag_save_in") = {
_diag_save_in[i]};
539 params.set<std::vector<VariableName>>(
"out_of_plane_strain") = {
540 getParam<VariableName>(
"out_of_plane_strain")};
544 params.set<std::vector<VariableName>>(
"scalar_variable") = {
_hname};
546 params.set<std::vector<FunctionName>>(
"targets") =
_targets;
549 _problem->addKernel(ad_prepend + tensor_kernel_type, kernel_name, params);
555 std::string wps_kernel_name =
"TM_WPS_" +
name();
556 params.set<NonlinearVariableName>(
"variable") = getParam<VariableName>(
"out_of_plane_strain");
558 _problem->addKernel(ad_prepend +
"WeakPlaneStress", wps_kernel_name, params);
574 paramError(
"block",
"Subdomain \"" +
name +
"\" not found in mesh.");
583 const auto & check_subdomains =
585 if (check_subdomains.empty())
590 for (
auto subdomain : check_subdomains)
592 mooseError(
"The SolidMechanics action requires all subdomains to have the same coordinate "
598 mooseError(
"'out_of_plane_direction' must be 'z' for axisymmetric simulations");
604 "Must specify two displacements for plane strain when the out of plane direction is z");
606 mooseError(
"Must specify three displacements for plane strain when the out of plane "
607 "direction is x or y");
621 unsigned int index = 0;
627 std::string
type = (order ==
"CONSTANT" && family ==
"MONOMIAL")
628 ?
"MooseVariableConstMonomial"
634 params.set<
MooseEnum>(
"family") = family;
636 if (family ==
"MONOMIAL")
648 std::string ad_prepend =
_use_ad ?
"AD" :
"";
650 unsigned int index = 0;
659 params.
set<MaterialPropertyName>(
"property") =
_base_name + out;
664 ad_prepend +
"MaterialRealAux",
_base_name + out +
'_' +
name(), params);
671 std::string ad_prepend =
_use_ad ?
"AD" :
"";
673 unsigned int index = 0;
682 params.
set<MaterialPropertyName>(
"prop_name") =
_base_name + out;
683 params.
set<NonlinearVariableName>(
"variable") =
_base_name + out;
686 ad_prepend +
"MaterialPropertyValue",
_base_name + out +
'_' +
name(), params);
697 std::map<std::string, std::set<SubdomainID>> material_eigenstrain_map;
698 std::set<std::string> eigenstrain_set;
700 std::set<MaterialPropertyName> verified_eigenstrain_names;
702 std::map<std::string, std::string> remove_add_map;
703 std::set<std::string> remove_reduced_set;
706 auto materials =
_problem->getMaterialWarehouse().getObjects();
707 for (
auto & mat : materials)
709 std::shared_ptr<BlockRestrictable> blk = std::dynamic_pointer_cast<BlockRestrictable>(mat);
711 auto & mat_name = mat->type();
716 std::shared_ptr<MaterialData> mat_dat;
717 auto name = mat_params.
get<std::string>(
"eigenstrain_name");
721 name = mat_params.
get<std::string>(
"base_name") +
'_' +
name;
725 mooseError(
"Internal error, Material object that does not inherit form BlockRestricted");
726 const std::set<SubdomainID> &
blocks =
727 blk->blockRestricted() ? blk->blockIDs() : blk->meshBlockIDs();
732 eigenstrain_set.insert(
name);
737 if (mat_name ==
"ComputeReducedOrderEigenstrain")
739 auto input_eigenstrain_names =
740 mat_params.
get<std::vector<MaterialPropertyName>>(
"input_eigenstrain_names");
741 remove_reduced_set.insert(input_eigenstrain_names.begin(), input_eigenstrain_names.end());
744 if (mat_name ==
"CompositeEigenstrain")
746 auto remove_list = mat_params.
get<std::vector<MaterialPropertyName>>(
"tensors");
747 for (
auto i : remove_list)
748 remove_reduced_set.insert(i);
752 if (mat_name ==
"RankTwoTensorMaterialADConverter")
754 std::vector<MaterialPropertyName> remove_list;
755 std::vector<MaterialPropertyName> add_list;
760 remove_list = mat_params.
get<std::vector<MaterialPropertyName>>(
"reg_props_in");
761 add_list = mat_params.
get<std::vector<MaterialPropertyName>>(
"ad_props_out");
766 remove_list = mat_params.
get<std::vector<MaterialPropertyName>>(
"ad_props_in");
767 add_list = mat_params.
get<std::vector<MaterialPropertyName>>(
"reg_props_out");
771 for (
unsigned int index = 0; index < remove_list.size(); index++)
772 remove_add_map.emplace(remove_list[index], add_list[index]);
778 for (
auto remove_add_index : remove_add_map)
780 const bool is_in = eigenstrain_set.find(remove_add_index.first) != eigenstrain_set.end();
783 eigenstrain_set.erase(remove_add_index.first);
784 eigenstrain_set.insert(remove_add_index.second);
787 for (
auto index : remove_reduced_set)
788 eigenstrain_set.erase(index);
792 std::set_union(eigenstrain_set.begin(),
793 eigenstrain_set.end(),
796 std::inserter(verified_eigenstrain_names, verified_eigenstrain_names.begin()));
800 std::copy(verified_eigenstrain_names.begin(),
801 verified_eigenstrain_names.end(),
804 Moose::out << COLOR_CYAN <<
"*** Automatic Eigenstrain Names ***"
807 << COLOR_DEFAULT << std::flush;
818 "The number of orders assigned to material outputs must be: 0 to be assigned "
819 "CONSTANT; 1 to assign all outputs the same value, or the same size as the number "
820 "of generate outputs listed.");
825 "The number of families assigned to material outputs must be: 0 to be assigned "
826 "MONOMIAL; 1 to assign all outputs the same value, or the same size as the number "
827 "of generate outputs listed.");
839 Moose::out << COLOR_CYAN <<
"*** Automatic applied material output orders ***"
842 << COLOR_DEFAULT << std::flush;
854 Moose::out << COLOR_CYAN <<
"*** Automatic applied material output families ***"
857 << COLOR_DEFAULT << std::flush;
870 if (prop_name ==
"stress")
871 return "cauchy_stress";
872 if (prop_name ==
"mechanical_strain")
873 return "rotated_mechanical_strain";
880 std::string ad_prepend =
_use_ad ?
"AD" :
"";
894 for (
unsigned int a = 0;
a < 3; ++
a)
895 for (
unsigned int b = 0;
b < 3; ++
b)
898 auto type = ad_prepend +
"RankTwoCartesianComponent";
900 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
902 params.
set<
unsigned int>(
"index_i") =
a;
903 params.
set<
unsigned int>(
"index_j") =
b;
906 params.
set<MaterialPropertyName>(
"property_name") =
_base_name + out;
917 [&](std::string prop_name, std::string invariant)
919 auto type = ad_prepend +
"RankTwoDirectionalComponent";
921 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
925 params.
set<MaterialPropertyName>(
"property_name") =
_base_name + out;
933 [&](std::string prop_name, std::string invariant)
935 auto type = ad_prepend +
"RankTwoInvariant";
937 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
941 params.
set<MaterialPropertyName>(
"property_name") =
_base_name + out;
950 [&](std::string prop_name, std::string component)
954 "Cannot use cylindrical component output in a spherical coordinate system.");
955 auto type = ad_prepend +
"RankTwoCylindricalComponent";
957 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
959 params.
set<
MooseEnum>(
"cylindrical_component") = component;
961 params.
set<MaterialPropertyName>(
"property_name") =
_base_name + out;
969 [&](std::string prop_name, std::string component)
971 auto type = ad_prepend +
"RankTwoSphericalComponent";
973 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
975 params.
set<
MooseEnum>(
"spherical_component") = component;
977 params.
set<MaterialPropertyName>(
"property_name") =
_base_name + out;
982 paramError(
"generate_output",
"Unable to add output Material for '", out,
"'");
991 if (
_current_task ==
"validate_coordinate_systems" && getParam<bool>(
"add_variables"))
994 for (
const auto & action : actions)
1001 if (size_after != size_before + added_size)
1002 mooseError(
"The block restrictions in the SolidMechanics/QuasiStatic actions must be "
1003 "non-overlapping.");
1005 if (added_size == 0 && actions.size() > 1)
1007 "No SolidMechanics/QuasiStatic action can be block unrestricted if more than one "
1008 "SolidMechanics/QuasiStatic action is specified.");
1018 type =
"ComputeLagrangianStrain";
1020 type =
"ComputeLagrangianStrainAxisymmetricCylindrical";
1022 type =
"ComputeLagrangianStrainCentrosymmetricSpherical";
1029 params.
set<std::string>(
"base_name") = getParam<std::string>(
"strain_base_name");
1032 params.set<std::vector<MaterialPropertyName>>(
"eigenstrain_names") =
_eigenstrain_names;
1038 mooseError(
"Volumetric locking correction should not be used for "
1039 "higher-order elements.");
1041 params.set<
bool>(
"stabilize_strain") =
_lk_locking;
1045 params.set<
MooseEnum>(
"kinematic_approximation") = getParam<MooseEnum>(
"kinematic_approximation");
1046 params.set<Real>(
"alpha") = getParam<Real>(
"generalized_midpoint_alpha");
1047 params.set<
MooseEnum>(
"F_bar_mode") = getParam<MooseEnum>(
"volumetric_locking_correction_mode");
1051 params.set<std::vector<MaterialPropertyName>>(
"homogenization_gradient_names") = {
1063 const std::string decomp = getParam<MooseEnum>(
"decomposition_method");
1064 if (decomp ==
"TaylorExpansion")
1065 params.set<
MooseEnum>(
"kinematic_approximation") =
"rashid_approximate";
1066 else if (decomp ==
"EigenSolution")
1067 params.set<
MooseEnum>(
"kinematic_approximation") =
"rashid_eigen";
1077 params.set<
MooseEnum>(
"F_bar_mode") =
"incremental";
1092 const std::string wrap_type =
"ComputeLagrangianWrappedStress";
1095 wrap_params.
set<std::string>(
"base_name") = getParam<std::string>(
"base_name");
1098 wrap_params.set<
MooseEnum>(
"objective_rate") =
"rashid";
1103 _problem->addMaterial(wrap_type,
name() +
"_compatibility_wrap", wrap_params);
1109 std::string
type =
"ComputeHomogenizedLagrangianStrain";
1113 params.set<std::vector<VariableName>>(
"macro_gradient") = {
_hname};
1115 params.set<std::vector<FunctionName>>(
"targets") =
_targets;
1124 std::string ad_prepend =
_use_ad ?
"AD" :
"";
1131 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1137 "ComputeAxisymmetricRZIncrementalStrain"},
1139 "ComputeAxisymmetricRZFiniteStrain"},
1142 "ComputeRSphericalIncrementalStrain"},
1144 "ComputeRSphericalFiniteStrain"}};
1147 if (type_it != type_map.end())
1148 type = type_it->second;
1150 mooseError(
"Unsupported strain formulation");
1157 paramError(
"use_automatic_differentiation",
"AD not setup for use with PlaneStrain");
1159 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1165 "ComputeAxisymmetric1DIncrementalStrain"},
1167 "ComputeAxisymmetric1DFiniteStrain"}};
1171 if (type_it != type_map.end())
1172 type = type_it->second;
1174 mooseError(
"Unsupported coordinate system for plane strain.");
1177 mooseError(
"Unsupported planar formulation");
1183 {
"displacements",
"use_displaced_mesh",
"out_of_plane_strain",
"scalar_out_of_plane_strain"});
1186 params.set<std::string>(
"base_name") = getParam<std::string>(
"strain_base_name");
1189 params.set<
bool>(
"use_displaced_mesh") =
false;
1192 params.set<std::vector<VariableName>>(
"scalar_out_of_plane_strain") = {
1193 getParam<VariableName>(
"scalar_out_of_plane_strain")};
1196 params.set<std::vector<VariableName>>(
"out_of_plane_strain") = {
1197 getParam<VariableName>(
"out_of_plane_strain")};
1199 params.set<std::vector<MaterialPropertyName>>(
"eigenstrain_names") =
_eigenstrain_names;
1213 type =
"HomogenizedTotalLagrangianStressDivergence";
1215 type =
"TotalLagrangianStressDivergence";
1217 type =
"UpdatedLagrangianStressDivergence";
1224 mooseError(
"The Lagrangian mechanics kernels do not yet support homogenization in "
1225 "coordinate systems other than Cartesian.");
1227 type =
"TotalLagrangianStressDivergenceAxisymmetricCylindrical";
1229 mooseError(
"The Lagrangian mechanics kernels do not yet support the updated Lagrangian "
1230 "formulation in RZ coordinates.");
1235 mooseError(
"The Lagrangian mechanics kernels do not yet support homogenization in "
1236 "coordinate systems other than Cartesian.");
1238 type =
"TotalLagrangianStressDivergenceCentrosymmetricSpherical";
1240 mooseError(
"The Lagrangian mechanics kernels do not yet support the updated Lagrangian "
1241 "formulation in RZ coordinates.");
1249 std::map<Moose::CoordinateSystemType, std::string> type_map = {
1256 if (type_it != type_map.end())
1257 return type_it->second;
1269 {
"displacements",
"use_displaced_mesh",
"save_in",
"diag_save_in",
"out_of_plane_strain"});
1275 params.
set<
bool>(
"use_displaced_mesh") =
1279 params.
set<
MooseEnum>(
"F_bar_mode") = getParam<MooseEnum>(
"volumetric_locking_correction_mode");
const ExecFlagType EXEC_TIMESTEP_END
registerMooseAction("SolidMechanicsApp", QuasiStaticSolidMechanicsPhysics, "meta_action")
std::shared_ptr< Action > create(const std::string &action, const std::string &action_name, InputParameters ¶meters)
InputParameters getValidParams(const std::string &name)
std::vector< const T * > getActions()
void addActionBlock(std::shared_ptr< Action > blk)
std::shared_ptr< MooseMesh > & _mesh
std::shared_ptr< FEProblemBase > & _problem
const std::string & _current_task
static libMesh::FEType feType(const InputParameters ¶ms)
static std::string variableType(const libMesh::FEType &fe_type, const bool is_fv=false, const bool is_array=false)
Store common tensor mechanics parameters.
InputParameters getValidParams(const std::string &name) const
const InputParameters & parameters() const
const std::string & type() const
void mooseDocumentedError(const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
const std::string & name() const
void paramError(const std::string ¶m, Args... args) const
bool isParamSetByUser(const std::string &name) const
void mooseError(Args &&... args) const
const std::string & _name
void mooseInfo(Args &&... args) const
bool isParamValid(const std::string &name) const
std::set< MooseEnumItem >::const_iterator find(const MooseEnumItem &other) const
void setAdditionalValue(const std::string &names)
unsigned int get(unsigned int i) const
unsigned int size() const
ActionFactory & _action_factory
static InputParameters validParams()
static MultiMooseEnum outputPropertiesType()
static std::map< std::string, std::string > _rank_two_cartesian_component_table
static const std::vector< char > _component_table
table data for output generation
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_invariant_table
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_spherical_component_table
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_directional_component_table
static MultiMooseEnum materialOutputOrders()
static MultiMooseEnum materialOutputFamilies()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_cylindrical_component_table
Moose::CoordinateSystemType _coord_system
bool _cylindrical_axis_point2_valid
const bool _lk_h_off_jac
Whether to use the off diagonal scalar jacobian for the homogenization system.
bool _cylindrical_axis_point1_valid
booleans used to determine if cylindrical axis points are passed
std::set< SubdomainID > _subdomain_ids
set generated from the passed in vector of subdomain names
MultiMooseEnum _material_output_order
const bool _lk_large_kinematics
Simplified flag for small/large deformations, Lagrangian kernel system.
void actGatherActionParameters()
void actLagrangianKernelStrain()
std::vector< FunctionName > _targets
void actSubdomainChecks()
bool _lk_homogenization
Flag indicating if the homogenization system is present for new kernels.
LKFormulation
New kernel system kinematics types.
virtual InputParameters getKernelParameters(std::string type)
const LKFormulation _lk_formulation
bool setupOutput(std::string out, T table, T2 setup)
Helper function to decode generate_outputs options using a "table" of scalar output quantities and a ...
Point _cylindrical_axis_point1
points used to determine axis of rotation for cylindrical stress/strain quantities
std::vector< AuxVariableName > _diag_save_in
std::vector< VariableName > _coupled_displacements
Coupled displacement variables.
void actEigenstrainNames()
const OutOfPlaneDirection _out_of_plane_direction
bool _spherical_center_point_valid
booleans used to determine if spherical center point is passed
std::set< SubdomainID > _subdomain_id_union
set generated from the combined block restrictions of all SolidMechanics/Master action blocks
enum QuasiStaticSolidMechanicsPhysics::Strain _strain
void actOutputGeneration()
const std::string _homogenization_strain_name
Point _cylindrical_axis_point2
QuasiStaticSolidMechanicsPhysics(const InputParameters ¶ms)
std::vector< std::string > _generate_output
output materials to generate scalar stress/strain tensor quantities
const bool _auto_eigenstrain
automatically gather names of eigenstrain tensors provided by simulation objects
const bool _compatibility_mode
OLD-compat shim: auto-configures the Lagrangian kernel system to reproduce StressDivergenceTensors + ...
const bool _lagrangian_kernels
New or old kernel system. True if new_system = true OR compatibility_mode = true.
PlanarFormulation
use an out of plane stress/strain formulation
std::vector< MaterialPropertyName > _eigenstrain_names
enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation _planar_formulation
MultiMooseEnum _constraint_types
const std::string _base_name
base name for the current master action block
static InputParameters validParams()
enum QuasiStaticSolidMechanicsPhysics::StrainAndIncrement _strain_and_increment
std::vector< VariableName > _displacements
displacement variables
bool _use_displaced_mesh
use displaced mesh (true unless _strain is SMALL)
unsigned int _ndisp
Number of displacement variables.
MultiMooseEnum _material_output_family
std::vector< AuxVariableName > _save_in
residual debugging
void actStressDivergenceTensorsStrain()
std::string remapCompatOutputProp(const std::string &prop_name) const
Apply compatibility_mode remapping to a property name pulled from the _rank_two_* output tables: in c...
std::vector< SubdomainName > _subdomain_names
if this vector is not empty the variables, kernels and materials are restricted to these subdomains
const bool _lk_locking
Simplified volumetric locking correction flag for new kernels.
virtual std::string getKernelType()
void verifyOrderAndFamilyOutputs()
Point _spherical_center_point
center point for spherical stress/strain quantities
const MultiMooseEnum constraintType("strain stress none")
ConstraintType
Constraint type: stress/PK stress or strain/deformation gradient.
std::string stringify(const T &t)
const SubdomainID INVALID_BLOCK_ID