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 paramError(
"use_automatic_differentiation",
"AD not setup for use with PlaneStrain");
409 const std::string
type =
"GeneralizedPlaneStrainAction";
411 action_params.
set<
bool>(
"_built_by_moose") =
true;
412 action_params.set<std::string>(
"registered_identifier") =
"(AutoBuilt)";
419 {
"use_displaced_mesh",
420 "out_of_plane_pressure",
421 "out_of_plane_pressure_function",
427 action_params.set<FunctionName>(
"out_of_plane_pressure") =
428 getParam<FunctionName>(
"out_of_plane_pressure");
430 action_params.set<FunctionName>(
"out_of_plane_pressure_function") =
431 getParam<FunctionName>(
"out_of_plane_pressure_function");
433 action_params.set<
Real>(
"factor") = getParam<Real>(
"factor");
435 action_params.set<
Real>(
"pressure_factor") = getParam<Real>(
"pressure_factor");
450 if (common_actions.empty() && getParam<bool>(
"add_variables"))
454 const bool second =
_problem->mesh().hasSecondOrderElements();
456 params.set<
MooseEnum>(
"order") = second ?
"SECOND" :
"FIRST";
457 params.set<
MooseEnum>(
"family") =
"LAGRANGE";
459 params.set<std::vector<Real>>(
"scaling") = {getParam<Real>(
"scaling")};
468 _problem->addVariable(
"MooseVariable", disp, params);
476 const std::map<bool, std::vector<unsigned int>> mg_order_max{{
true, {1, 4, 9}},
478 std::size_t mg_order = 0;
487 "Number of non-none constraint types must not be greater than ",
517 for (
unsigned int i = 0; i <
_ndisp; ++i)
531 params.set<
unsigned int>(
"component") = i;
533 params.set<NonlinearVariableName>(
"variable") =
_displacements[i];
536 params.set<std::vector<AuxVariableName>>(
"save_in") = {
_save_in[i]};
538 params.set<std::vector<AuxVariableName>>(
"diag_save_in") = {
_diag_save_in[i]};
540 params.set<std::vector<VariableName>>(
"out_of_plane_strain") = {
541 getParam<VariableName>(
"out_of_plane_strain")};
545 params.set<std::vector<VariableName>>(
"scalar_variable") = {
_hname};
547 params.set<std::vector<FunctionName>>(
"targets") =
_targets;
550 _problem->addKernel(ad_prepend + tensor_kernel_type, kernel_name, params);
556 std::string wps_kernel_name =
"TM_WPS_" +
name();
557 params.set<NonlinearVariableName>(
"variable") = getParam<VariableName>(
"out_of_plane_strain");
559 _problem->addKernel(ad_prepend +
"WeakPlaneStress", wps_kernel_name, params);
575 paramError(
"block",
"Subdomain \"" +
name +
"\" not found in mesh.");
584 const auto & check_subdomains =
586 if (check_subdomains.empty())
591 for (
auto subdomain : check_subdomains)
593 mooseError(
"The SolidMechanics action requires all subdomains to have the same coordinate " 599 mooseError(
"'out_of_plane_direction' must be 'z' for axisymmetric simulations");
605 "Must specify two displacements for plane strain when the out of plane direction is z");
607 mooseError(
"Must specify three displacements for plane strain when the out of plane " 608 "direction is x or y");
622 unsigned int index = 0;
628 std::string
type = (order ==
"CONSTANT" && family ==
"MONOMIAL")
629 ?
"MooseVariableConstMonomial" 635 params.set<
MooseEnum>(
"family") = family;
637 if (family ==
"MONOMIAL")
649 std::string ad_prepend =
_use_ad ?
"AD" :
"";
651 unsigned int index = 0;
672 std::string ad_prepend =
_use_ad ?
"AD" :
"";
674 unsigned int index = 0;
698 std::map<std::string, std::set<SubdomainID>> material_eigenstrain_map;
699 std::set<std::string> eigenstrain_set;
701 std::set<MaterialPropertyName> verified_eigenstrain_names;
703 std::map<std::string, std::string> remove_add_map;
704 std::set<std::string> remove_reduced_set;
707 auto materials =
_problem->getMaterialWarehouse().getObjects();
708 for (
auto & mat : materials)
710 std::shared_ptr<BlockRestrictable> blk = std::dynamic_pointer_cast<
BlockRestrictable>(mat);
712 auto & mat_name = mat->type();
715 if (mat_params.isParamValid(
"eigenstrain_name"))
717 std::shared_ptr<MaterialData> mat_dat;
718 auto name = mat_params.get<std::string>(
"eigenstrain_name");
721 if (mat_params.isParamValid(
"base_name"))
722 name = mat_params.get<std::string>(
"base_name") +
'_' +
name;
726 mooseError(
"Internal error, Material object that does not inherit form BlockRestricted");
727 const std::set<SubdomainID> &
blocks =
728 blk->blockRestricted() ? blk->blockIDs() : blk->meshBlockIDs();
733 eigenstrain_set.insert(
name);
738 if (mat_name ==
"ComputeReducedOrderEigenstrain")
740 auto input_eigenstrain_names =
741 mat_params.get<std::vector<MaterialPropertyName>>(
"input_eigenstrain_names");
742 remove_reduced_set.insert(input_eigenstrain_names.begin(), input_eigenstrain_names.end());
745 if (mat_name ==
"CompositeEigenstrain")
747 auto remove_list = mat_params.get<std::vector<MaterialPropertyName>>(
"tensors");
748 for (
auto i : remove_list)
749 remove_reduced_set.insert(i);
753 if (mat_name ==
"RankTwoTensorMaterialADConverter")
755 std::vector<MaterialPropertyName> remove_list;
756 std::vector<MaterialPropertyName> add_list;
758 if (mat_params.isParamValid(
"ad_props_out") && mat_params.isParamValid(
"reg_props_in") &&
761 remove_list = mat_params.get<std::vector<MaterialPropertyName>>(
"reg_props_in");
762 add_list = mat_params.get<std::vector<MaterialPropertyName>>(
"ad_props_out");
764 if (mat_params.isParamValid(
"ad_props_in") && mat_params.isParamValid(
"reg_props_out") &&
767 remove_list = mat_params.get<std::vector<MaterialPropertyName>>(
"ad_props_in");
768 add_list = mat_params.get<std::vector<MaterialPropertyName>>(
"reg_props_out");
772 for (
unsigned int index = 0; index < remove_list.size(); index++)
773 remove_add_map.emplace(remove_list[index], add_list[index]);
779 for (
auto remove_add_index : remove_add_map)
781 const bool is_in = eigenstrain_set.find(remove_add_index.first) != eigenstrain_set.end();
784 eigenstrain_set.erase(remove_add_index.first);
785 eigenstrain_set.insert(remove_add_index.second);
788 for (
auto index : remove_reduced_set)
789 eigenstrain_set.erase(index);
793 std::set_union(eigenstrain_set.begin(),
794 eigenstrain_set.end(),
797 std::inserter(verified_eigenstrain_names, verified_eigenstrain_names.begin()));
801 std::copy(verified_eigenstrain_names.begin(),
802 verified_eigenstrain_names.end(),
805 Moose::out << COLOR_CYAN <<
"*** Automatic Eigenstrain Names ***" 808 << COLOR_DEFAULT << std::flush;
819 "The number of orders assigned to material outputs must be: 0 to be assigned " 820 "CONSTANT; 1 to assign all outputs the same value, or the same size as the number " 821 "of generate outputs listed.");
826 "The number of families assigned to material outputs must be: 0 to be assigned " 827 "MONOMIAL; 1 to assign all outputs the same value, or the same size as the number " 828 "of generate outputs listed.");
840 Moose::out << COLOR_CYAN <<
"*** Automatic applied material output orders ***" 843 << COLOR_DEFAULT << std::flush;
855 Moose::out << COLOR_CYAN <<
"*** Automatic applied material output families ***" 858 << COLOR_DEFAULT << std::flush;
871 if (prop_name ==
"stress")
872 return "cauchy_stress";
873 if (prop_name ==
"mechanical_strain")
874 return "rotated_mechanical_strain";
881 std::string ad_prepend =
_use_ad ?
"AD" :
"";
895 for (
unsigned int a = 0;
a < 3; ++
a)
896 for (
unsigned int b = 0;
b < 3; ++
b)
899 auto type = ad_prepend +
"RankTwoCartesianComponent";
900 params = _factory.getValidParams(type);
901 params.set<MaterialPropertyName>(
"rank_two_tensor") =
902 _base_name + remapCompatOutputProp(r2q.second);
903 params.set<unsigned int>(
"index_i") = a;
904 params.set<unsigned int>(
"index_j") = b;
906 params.applyParameters(parameters());
907 params.set<MaterialPropertyName>(
"property_name") = _base_name + out;
908 _problem->addMaterial(type, _base_name + out +
'_' + name(), params);
918 [&](std::string prop_name, std::string invariant)
920 auto type = ad_prepend +
"RankTwoDirectionalComponent";
922 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
934 [&](std::string prop_name, std::string invariant)
936 auto type = ad_prepend +
"RankTwoInvariant";
938 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
951 [&](std::string prop_name, std::string
component)
955 "Cannot use cylindrical component output in a spherical coordinate system.");
956 auto type = ad_prepend +
"RankTwoCylindricalComponent";
958 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
970 [&](std::string prop_name, std::string
component)
972 auto type = ad_prepend +
"RankTwoSphericalComponent";
974 params.
set<MaterialPropertyName>(
"rank_two_tensor") =
983 paramError(
"generate_output",
"Unable to add output Material for '",
out,
"'");
992 if (
_current_task ==
"validate_coordinate_systems" && getParam<bool>(
"add_variables"))
995 for (
const auto & action : actions)
998 const auto added_size = action->_subdomain_ids.size();
1002 if (size_after != size_before + added_size)
1003 mooseError(
"The block restrictions in the SolidMechanics/QuasiStatic actions must be " 1004 "non-overlapping.");
1006 if (added_size == 0 && actions.size() > 1)
1008 "No SolidMechanics/QuasiStatic action can be block unrestricted if more than one " 1009 "SolidMechanics/QuasiStatic action is specified.");
1019 type =
"ComputeLagrangianStrain";
1021 type =
"ComputeLagrangianStrainAxisymmetricCylindrical";
1023 type =
"ComputeLagrangianStrainCentrosymmetricSpherical";
1030 params.
set<std::string>(
"base_name") = getParam<std::string>(
"strain_base_name");
1033 params.set<std::vector<MaterialPropertyName>>(
"eigenstrain_names") =
_eigenstrain_names;
1039 mooseError(
"Volumetric locking correction should not be used for " 1040 "higher-order elements.");
1042 params.set<
bool>(
"stabilize_strain") =
_lk_locking;
1046 params.set<
MooseEnum>(
"kinematic_approximation") = getParam<MooseEnum>(
"kinematic_approximation");
1047 params.set<
Real>(
"alpha") = getParam<Real>(
"generalized_midpoint_alpha");
1048 params.set<
MooseEnum>(
"F_bar_mode") = getParam<MooseEnum>(
"volumetric_locking_correction_mode");
1052 params.set<std::vector<MaterialPropertyName>>(
"homogenization_gradient_names") = {
1064 const std::string decomp = getParam<MooseEnum>(
"decomposition_method");
1065 if (decomp ==
"TaylorExpansion")
1066 params.set<
MooseEnum>(
"kinematic_approximation") =
"rashid_approximate";
1067 else if (decomp ==
"EigenSolution")
1068 params.set<
MooseEnum>(
"kinematic_approximation") =
"rashid_eigen";
1078 params.set<
MooseEnum>(
"F_bar_mode") =
"incremental";
1093 const std::string wrap_type =
"ComputeLagrangianWrappedStress";
1096 wrap_params.
set<std::string>(
"base_name") = getParam<std::string>(
"base_name");
1099 wrap_params.set<
MooseEnum>(
"objective_rate") =
"rashid";
1104 _problem->addMaterial(wrap_type,
name() +
"_compatibility_wrap", wrap_params);
1110 std::string
type =
"ComputeHomogenizedLagrangianStrain";
1114 params.set<std::vector<VariableName>>(
"macro_gradient") = {
_hname};
1116 params.set<std::vector<FunctionName>>(
"targets") =
_targets;
1125 std::string ad_prepend =
_use_ad ?
"AD" :
"";
1132 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1138 "ComputeAxisymmetricRZIncrementalStrain"},
1140 "ComputeAxisymmetricRZFiniteStrain"},
1143 "ComputeRSphericalIncrementalStrain"},
1145 "ComputeRSphericalFiniteStrain"}};
1148 if (type_it != type_map.end())
1149 type = type_it->second;
1151 mooseError(
"Unsupported strain formulation");
1160 "AD not setup for use with PlaneStrain or GeneralizedPlaneStrain");
1162 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1168 "ComputeAxisymmetric1DIncrementalStrain"},
1170 "ComputeAxisymmetric1DFiniteStrain"}};
1174 if (type_it != type_map.end())
1175 type = type_it->second;
1177 mooseError(
"Unsupported coordinate system for plane strain.");
1180 mooseError(
"Unsupported planar formulation");
1186 {
"displacements",
"use_displaced_mesh",
"out_of_plane_strain",
"scalar_out_of_plane_strain"});
1189 params.set<std::string>(
"base_name") = getParam<std::string>(
"strain_base_name");
1192 params.set<
bool>(
"use_displaced_mesh") =
false;
1195 params.set<std::vector<VariableName>>(
"scalar_out_of_plane_strain") = {
1196 getParam<VariableName>(
"scalar_out_of_plane_strain")};
1199 params.set<std::vector<VariableName>>(
"out_of_plane_strain") = {
1200 getParam<VariableName>(
"out_of_plane_strain")};
1202 params.set<std::vector<MaterialPropertyName>>(
"eigenstrain_names") =
_eigenstrain_names;
1216 type =
"HomogenizedTotalLagrangianStressDivergence";
1218 type =
"TotalLagrangianStressDivergence";
1220 type =
"UpdatedLagrangianStressDivergence";
1227 mooseError(
"The Lagrangian mechanics kernels do not yet support homogenization in " 1228 "coordinate systems other than Cartesian.");
1230 type =
"TotalLagrangianStressDivergenceAxisymmetricCylindrical";
1232 mooseError(
"The Lagrangian mechanics kernels do not yet support the updated Lagrangian " 1233 "formulation in RZ coordinates.");
1238 mooseError(
"The Lagrangian mechanics kernels do not yet support homogenization in " 1239 "coordinate systems other than Cartesian.");
1241 type =
"TotalLagrangianStressDivergenceCentrosymmetricSpherical";
1243 mooseError(
"The Lagrangian mechanics kernels do not yet support the updated Lagrangian " 1244 "formulation in RZ coordinates.");
1252 std::map<Moose::CoordinateSystemType, std::string> type_map = {
1259 if (type_it != type_map.end())
1260 return type_it->second;
1272 {
"displacements",
"use_displaced_mesh",
"save_in",
"diag_save_in",
"out_of_plane_strain"});
1278 params.
set<
bool>(
"use_displaced_mesh") =
1282 params.
set<
MooseEnum>(
"F_bar_mode") = getParam<MooseEnum>(
"volumetric_locking_correction_mode");
const bool _lk_large_kinematics
Simplified flag for small/large deformations, Lagrangian kernel system.
void mooseInfo(Args &&... args) const
MultiMooseEnum _material_output_order
void actGatherActionParameters()
std::set< SubdomainID > _subdomain_id_union
set generated from the combined block restrictions of all SolidMechanics/Master action blocks ...
enum QuasiStaticSolidMechanicsPhysics::StrainAndIncrement _strain_and_increment
std::vector< AuxVariableName > _save_in
residual debugging
virtual InputParameters getKernelParameters(std::string type)
const std::string & _name
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 ...
const bool _compatibility_mode
OLD-compat shim: auto-configures the Lagrangian kernel system to reproduce StressDivergenceTensors + ...
void paramError(const std::string ¶m, Args... args) const
std::vector< AuxVariableName > _diag_save_in
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_invariant_table
std::set< SubdomainID > _subdomain_ids
set generated from the passed in vector of subdomain names
InputParameters getValidParams(const std::string &name)
void setAdditionalValue(const std::string &names)
unsigned int _ndisp
Number of displacement variables.
static const std::string component
void actStressDivergenceTensorsStrain()
const InputParameters & parameters() const
ActionFactory & _action_factory
LKFormulation
New kernel system kinematics types.
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_cylindrical_component_table
InputParameters getValidParams(const std::string &name) const
const bool _auto_eigenstrain
automatically gather names of eigenstrain tensors provided by simulation objects
registerMooseAction("SolidMechanicsApp", QuasiStaticSolidMechanicsPhysics, "meta_action")
unsigned int size() const
void mooseDocumentedError(const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
void addActionBlock(std::shared_ptr< Action > blk)
Store common tensor mechanics parameters.
Moose::CoordinateSystemType _coord_system
const ExecFlagType EXEC_TIMESTEP_END
std::vector< VariableName > _displacements
displacement variables
static MultiMooseEnum materialOutputFamilies()
std::vector< std::string > _generate_output
output materials to generate scalar stress/strain tensor quantities
static const std::vector< char > _component_table
table data for output generation
std::shared_ptr< Action > create(const std::string &action, const std::string &action_name, InputParameters ¶meters)
enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation _planar_formulation
const LKFormulation _lk_formulation
QuasiStaticSolidMechanicsPhysics(const InputParameters ¶ms)
static MultiMooseEnum materialOutputOrders()
const SubdomainID INVALID_BLOCK_ID
void verifyOrderAndFamilyOutputs()
std::vector< SubdomainName > _subdomain_names
if this vector is not empty the variables, kernels and materials are restricted to these subdomains ...
bool _use_displaced_mesh
use displaced mesh (true unless _strain is SMALL)
const std::string & name() const
enum QuasiStaticSolidMechanicsPhysics::Strain _strain
std::vector< VariableName > _coupled_displacements
Coupled displacement variables.
MultiMooseEnum _material_output_family
bool _cylindrical_axis_point1_valid
booleans used to determine if cylindrical axis points are passed
std::vector< FunctionName > _targets
const std::string & type() const
const std::string & _current_task
static std::string variableType(const libMesh::FEType &fe_type, const bool is_fv=false, const bool is_array=false)
std::string stringify(const T &t)
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
std::vector< MaterialPropertyName > _eigenstrain_names
const OutOfPlaneDirection _out_of_plane_direction
std::shared_ptr< MooseMesh > & _mesh
static libMesh::FEType feType(const InputParameters ¶ms)
unsigned int get(unsigned int i) const
static InputParameters validParams()
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void actSubdomainChecks()
ConstraintType
Constraint type: stress/PK stress or strain/deformation gradient.
const bool _lagrangian_kernels
New or old kernel system. True if new_system = true OR compatibility_mode = true. ...
void actLagrangianKernelStrain()
const bool _lk_locking
Simplified volumetric locking correction flag for new kernels.
static InputParameters validParams()
void mooseError(Args &&... args) const
const std::string _homogenization_strain_name
std::shared_ptr< FEProblemBase > & _problem
Point _spherical_center_point
center point for spherical stress/strain quantities
const MultiMooseEnum constraintType("strain stress none")
Point _cylindrical_axis_point2
bool isParamValid(const std::string &name) const
void actOutputGeneration()
bool _spherical_center_point_valid
booleans used to determine if spherical center point is passed
const std::string _base_name
base name for the current master action block
static MultiMooseEnum outputPropertiesType()
std::vector< const T *> getActions()
bool _cylindrical_axis_point2_valid
auto index_range(const T &sizable)
MultiMooseEnum _constraint_types
PlanarFormulation
use an out of plane stress/strain formulation
void actEigenstrainNames()
virtual std::string getKernelType()
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_spherical_component_table
Point _cylindrical_axis_point1
points used to determine axis of rotation for cylindrical stress/strain quantities ...
const bool _lk_h_off_jac
Whether to use the off diagonal scalar jacobian for the homogenization system.
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...
bool _lk_homogenization
Flag indicating if the homogenization system is present for new kernels.