https://mooseframework.inl.gov
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
LegacyDynamicTensorMechanicsAction Class Reference

#include <LegacyDynamicTensorMechanicsAction.h>

Inheritance diagram for LegacyDynamicTensorMechanicsAction:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 LegacyDynamicTensorMechanicsAction (const InputParameters &params)
 
virtual void act ()
 
void timedAct ()
 
virtual void addRelationshipManagers (Moose::RelationshipManagerType when_type)
 
MooseObjectName uniqueActionName () const
 
const std::string & specificTaskName () const
 
const std::set< std::string > & getAllTasks () const
 
void appendTask (const std::string &task)
 
MooseAppgetMooseApp () const
 
const std::string & type () const
 
const std::string & name () const
 
std::string typeAndName () const
 
MooseObjectParameterName uniqueParameterName (const std::string &parameter_name) const
 
MooseObjectName uniqueName () const
 
const InputParametersparameters () const
 
const hit::Node * getHitNode () const
 
bool hasBase () const
 
const std::string & getBase () const
 
const TgetParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const TqueryParam (const std::string &name) const
 
const TgetRenamedParam (const std::string &old_name, const std::string &new_name) const
 
T getCheckedPointerParam (const std::string &name, const std::string &error_string="") const
 
bool isParamValid (const std::string &name) const
 
bool isParamSetByUser (const std::string &name) const
 
void connectControllableParams (const std::string &parameter, const std::string &object_type, const std::string &object_name, const std::string &object_parameter) const
 
void paramError (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramWarning (const std::string &param, Args... args) const
 
void paramInfo (const std::string &param, Args... args) const
 
std::string messagePrefix (const bool hit_prefix=true) const
 
std::string errorPrefix (const std::string &) const
 
void mooseError (Args &&... args) const
 
void mooseDocumentedError (const std::string &repo_name, const unsigned int issue_num, Args &&... args) const
 
void mooseErrorNonPrefixed (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarning (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseDeprecatedNoTrace (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr, const bool show_trace=true) const
 
std::string getDataFileName (const std::string &param) const
 
std::string getDataFileNameByName (const std::string &relative_path) const
 
std::string getDataFilePath (const std::string &relative_path) const
 
PerfGraphperfGraph ()
 
const Parallel::Communicator & comm () const
 
processor_id_type n_processors () const
 
processor_id_type processor_id () const
 

Static Public Member Functions

static InputParameters validParams ()
 
static MultiMooseEnum outputPropertiesType ()
 
static MultiMooseEnum materialOutputOrders ()
 
static MultiMooseEnum materialOutputFamilies ()
 
static void addCartesianComponentOutput (const std::string &name, const std::string &prop_name="")
 
static void callMooseError (MooseApp *const app, const InputParameters &params, std::string msg, const bool with_prefix, const hit::Node *node, const bool show_trace=true)
 

Public Attributes

 usingCombinedWarningSolutionWarnings
 
const ConsoleStream _console
 

Static Public Attributes

static const std::string unique_action_name_param
 
static const std::string type_param
 
static const std::string name_param
 
static const std::string unique_name_param
 
static const std::string app_param
 
static const std::string moose_base_param
 
static const std::string kokkos_object_param
 
static constexpr auto SYSTEM
 
static constexpr auto NAME
 
static const std::vector< char > _component_table = {'x', 'y', 'z'}
 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_directional_component_table
 
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_cylindrical_component_table
 
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_spherical_component_table
 

Protected Types

enum class  Strain { Small , Finite }
 strain formulation More...
 
enum class  StrainAndIncrement { SmallTotal , FiniteTotal , SmallIncremental , FiniteIncremental }
 strain formulation More...
 
enum class  PlanarFormulation { None , WeakPlaneStress , PlaneStrain , GeneralizedPlaneStrain }
 use an out of plane stress/strain formulation More...
 
enum class  OutOfPlaneDirection { x , y , z }
 
enum class  LKFormulation { Total , Updated }
 New kernel system kinematics types. More...
 

Protected Member Functions

virtual std::string getKernelType () override
 
virtual InputParameters getKernelParameters (std::string type) override
 
void actSubdomainChecks ()
 
void actOutputGeneration ()
 
void actEigenstrainNames ()
 
void actOutputMatProp ()
 
void actGatherActionParameters ()
 
void verifyOrderAndFamilyOutputs ()
 
void actLagrangianKernelStrain ()
 
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 compat mode the NEW pipeline writes Cauchy stress + rotated mechanical strain under different names than the OLD pipeline.
 
template<typename T , typename T2 >
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 "setup" lambda that performs the input parameter setup for the output material object.
 
bool addRelationshipManagers (Moose::RelationshipManagerType when_type, const InputParameters &moose_object_pars)
 
void associateWithParameter (const std::string &param_name, InputParameters &params) const
 
void associateWithParameter (const InputParameters &from_params, const std::string &param_name, InputParameters &params) const
 
const TgetMeshProperty (const std::string &data_name, const std::string &prefix)
 
const TgetMeshProperty (const std::string &data_name)
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name, const std::string &prefix) const
 
bool hasMeshProperty (const std::string &data_name) const
 
bool hasMeshProperty (const std::string &data_name) const
 
std::string meshPropertyName (const std::string &data_name) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level) const
 
PerfID registerTimedSection (const std::string &section_name, const unsigned int level, const std::string &live_message, const bool print_dots=true) const
 
std::string timedSectionName (const std::string &section_name) const
 
void flagInvalidSolutionInternal (const InvalidSolutionID invalid_solution_id) const
 
InvalidSolutionID registerInvalidSolutionInternal (const std::string &message, const bool warning) const
 

Static Protected Member Functions

static std::string meshPropertyName (const std::string &data_name, const std::string &prefix)
 

Protected Attributes

std::vector< AuxVariableName > _velocities
 
std::vector< AuxVariableName > _accelerations
 
Moose::CoordinateSystemType _coord_system
 
std::vector< SubdomainName > _subdomain_names
 if this vector is not empty the variables, kernels and materials are restricted to these subdomains
 
std::set< SubdomainID_subdomain_ids
 set generated from the passed in vector of subdomain names
 
std::set< SubdomainID_subdomain_id_union
 set generated from the combined block restrictions of all SolidMechanics/Master action blocks
 
enum QuasiStaticSolidMechanicsPhysics::Strain _strain
 
enum QuasiStaticSolidMechanicsPhysics::StrainAndIncrement _strain_and_increment
 
enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation _planar_formulation
 
const OutOfPlaneDirection _out_of_plane_direction
 
const std::string _base_name
 base name for the current master action block
 
bool _use_displaced_mesh
 use displaced mesh (true unless _strain is SMALL)
 
std::vector< std::string > _generate_output
 output materials to generate scalar stress/strain tensor quantities
 
MultiMooseEnum _material_output_order
 
MultiMooseEnum _material_output_family
 
bool _cylindrical_axis_point1_valid
 booleans used to determine if cylindrical axis points are passed
 
bool _cylindrical_axis_point2_valid
 
bool _direction_valid
 
bool _verbose
 
Point _cylindrical_axis_point1
 points used to determine axis of rotation for cylindrical stress/strain quantities
 
Point _cylindrical_axis_point2
 
Point _direction
 
bool _spherical_center_point_valid
 booleans used to determine if spherical center point is passed
 
Point _spherical_center_point
 center point for spherical stress/strain quantities
 
const bool _auto_eigenstrain
 automatically gather names of eigenstrain tensors provided by simulation objects
 
std::vector< MaterialPropertyName > _eigenstrain_names
 
const bool _compatibility_mode
 OLD-compat shim: auto-configures the Lagrangian kernel system to reproduce StressDivergenceTensors + ComputeFiniteStrain + ComputeStressBase bit-for-bit when set.
 
const bool _lagrangian_kernels
 New or old kernel system. True if new_system = true OR compatibility_mode = true.
 
const bool _lk_large_kinematics
 Simplified flag for small/large deformations, Lagrangian kernel system.
 
const LKFormulation _lk_formulation
 
const bool _lk_locking
 Simplified volumetric locking correction flag for new kernels.
 
bool _lk_homogenization
 Flag indicating if the homogenization system is present for new kernels.
 
const std::string _hname = "hvar"
 
const std::string _integrator_name = "integrator"
 
const std::string _homogenization_strain_name = "homogenization_gradient"
 
MultiMooseEnum _constraint_types
 
std::vector< FunctionName > _targets
 
const bool _lk_h_off_jac
 Whether to use the off diagonal scalar jacobian for the homogenization system.
 
const bool _use_ad
 
std::string _registered_identifier
 
std::string _specific_task_name
 
std::set< std::string > _all_tasks
 
ActionWarehouse_awh
 
const std::string & _current_task
 
std::shared_ptr< MooseMesh > & _mesh
 
std::shared_ptr< MooseMesh > & _displaced_mesh
 
std::shared_ptr< FEProblemBase > & _problem
 
PerfID _act_timer
 
MooseApp_app
 
Factory_factory
 
ActionFactory_action_factory
 
const std::string & _type
 
const std::string & _name
 
const InputParameters_pars
 
MooseApp_pg_moose_app
 
const std::string _prefix
 
const Parallel::Communicator & _communicator
 
std::vector< VariableName > _displacements
 displacement variables
 
unsigned int _ndisp
 Number of displacement variables.
 
std::vector< VariableName > _coupled_displacements
 Coupled displacement variables.
 
std::vector< AuxVariableName > _save_in
 residual debugging
 
std::vector< AuxVariableName > _diag_save_in
 

Static Protected Attributes

static const std::map< unsigned int, std::string > _order_mapper
 
static std::map< std::string, std::string > _rank_two_cartesian_component_table
 

Private Member Functions

bool addRelationshipManager (Moose::RelationshipManagerType input_rm_type, const InputParameters &moose_object_pars, std::string rm_name, Moose::RelationshipManagerType rm_type, Moose::RelationshipManagerInputParameterCallback rm_input_parameter_func, Moose::RMSystemType sys_type=Moose::RMSystemType::NONE)
 
virtual std::string meshPropertyPrefix (const std::string &data_name) const
 
const RestartableDataValuegetMeshPropertyInternal (const std::string &data_name, const std::string &prefix) const
 
void mooseErrorInternal (Args &&... args) const
 

Static Private Member Functions

static const hit::Node * getHitNode (const InputParameters &params)
 
static std::string messagePrefix (const InputParameters &params, const bool hit_prefix)
 

Private Attributes

const ParallelParamObject_parent
 
MooseApp_meta_data_app
 
const MooseObject *const _meta_data_object
 
const MooseBase_si_moose_base
 
const FEProblemBase_si_problem
 

Detailed Description

Definition at line 14 of file LegacyDynamicTensorMechanicsAction.h.

Member Enumeration Documentation

◆ LKFormulation

enum class QuasiStaticSolidMechanicsPhysics::LKFormulation
strongprotectedinherited

New kernel system kinematics types.

Enumerator
Total 
Updated 

Definition at line 154 of file QuasiStaticSolidMechanicsPhysics.h.

◆ OutOfPlaneDirection

enum class QuasiStaticSolidMechanicsPhysics::OutOfPlaneDirection
strongprotectedinherited

◆ PlanarFormulation

enum class QuasiStaticSolidMechanicsPhysics::PlanarFormulation
strongprotectedinherited

use an out of plane stress/strain formulation

Enumerator
None 
WeakPlaneStress 
PlaneStrain 
GeneralizedPlaneStrain 

Definition at line 93 of file QuasiStaticSolidMechanicsPhysics.h.

◆ Strain

enum class QuasiStaticSolidMechanicsPhysics::Strain
strongprotectedinherited

strain formulation

Enumerator
Small 
Finite 

Definition at line 77 of file QuasiStaticSolidMechanicsPhysics.h.

◆ StrainAndIncrement

enum class QuasiStaticSolidMechanicsPhysics::StrainAndIncrement
strongprotectedinherited

strain formulation

Enumerator
SmallTotal 
FiniteTotal 
SmallIncremental 
FiniteIncremental 

Definition at line 84 of file QuasiStaticSolidMechanicsPhysics.h.

Constructor & Destructor Documentation

◆ LegacyDynamicTensorMechanicsAction()

LegacyDynamicTensorMechanicsAction::LegacyDynamicTensorMechanicsAction ( const InputParameters params)

Member Function Documentation

◆ act()

void LegacyDynamicTensorMechanicsAction::act ( )
virtual

Reimplemented from DynamicSolidMechanicsPhysics.

Definition at line 36 of file LegacyDynamicTensorMechanicsAction.C.

37{
38 if (_current_task == "add_kernel" || _current_task == "validate_coordinate_systems")
39 // note that we do not call SolidMechanicsAction::act() here, because the old
40 // behavior is not to add inertia kernels
42}
const std::string & _current_task

◆ actEigenstrainNames()

void QuasiStaticSolidMechanicsPhysics::actEigenstrainNames ( )
protectedinherited

Definition at line 694 of file QuasiStaticSolidMechanicsPhysics.C.

695{
696 // Create containers for collecting blockIDs and eigenstrain names from materials
697 std::map<std::string, std::set<SubdomainID>> material_eigenstrain_map;
698 std::set<std::string> eigenstrain_set;
699
700 std::set<MaterialPropertyName> verified_eigenstrain_names;
701
702 std::map<std::string, std::string> remove_add_map;
703 std::set<std::string> remove_reduced_set;
704
705 // Loop over all the materials(eigenstrains) already created
706 auto materials = _problem->getMaterialWarehouse().getObjects();
707 for (auto & mat : materials)
708 {
709 std::shared_ptr<BlockRestrictable> blk = std::dynamic_pointer_cast<BlockRestrictable>(mat);
710 const InputParameters & mat_params = mat->parameters();
711 auto & mat_name = mat->type();
712
713 // Check for eigenstrain names, only deal with those materials
714 if (mat_params.isParamValid("eigenstrain_name"))
715 {
716 std::shared_ptr<MaterialData> mat_dat;
717 auto name = mat_params.get<std::string>("eigenstrain_name");
718
719 // Check for base_name prefix
720 if (mat_params.isParamValid("base_name"))
721 name = mat_params.get<std::string>("base_name") + '_' + name;
722
723 // Check block restrictions
724 if (!blk)
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();
728
729 if (std::includes(blocks.begin(), blocks.end(), _subdomain_ids.begin(), _subdomain_ids.end()))
730 {
731 material_eigenstrain_map[name].insert(blocks.begin(), blocks.end());
732 eigenstrain_set.insert(name);
733 }
734 }
735
736 // Account for reduced eigenstrains and CompositeEigenstrains
737 if (mat_name == "ComputeReducedOrderEigenstrain")
738 {
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());
742 }
743 // Account for CompositeEigenstrains
744 if (mat_name == "CompositeEigenstrain")
745 {
746 auto remove_list = mat_params.get<std::vector<MaterialPropertyName>>("tensors");
747 for (auto i : remove_list)
748 remove_reduced_set.insert(i);
749 }
750
751 // Account for MaterialADConverter , add or remove later
752 if (mat_name == "RankTwoTensorMaterialADConverter")
753 {
754 std::vector<MaterialPropertyName> remove_list;
755 std::vector<MaterialPropertyName> add_list;
756
757 if (mat_params.isParamValid("ad_props_out") && mat_params.isParamValid("reg_props_in") &&
758 _use_ad)
759 {
760 remove_list = mat_params.get<std::vector<MaterialPropertyName>>("reg_props_in");
761 add_list = mat_params.get<std::vector<MaterialPropertyName>>("ad_props_out");
762 }
763 if (mat_params.isParamValid("ad_props_in") && mat_params.isParamValid("reg_props_out") &&
764 !_use_ad)
765 {
766 remove_list = mat_params.get<std::vector<MaterialPropertyName>>("ad_props_in");
767 add_list = mat_params.get<std::vector<MaterialPropertyName>>("reg_props_out");
768 }
769
770 // These vectors are the same size as checked in MaterialADConverter
771 for (unsigned int index = 0; index < remove_list.size(); index++)
772 remove_add_map.emplace(remove_list[index], add_list[index]);
773 }
774 }
775 // All the materials have been accounted for, now remove or add parts
776
777 // Remove names which aren't eigenstrains (converter properties)
778 for (auto remove_add_index : remove_add_map)
779 {
780 const bool is_in = eigenstrain_set.find(remove_add_index.first) != eigenstrain_set.end();
781 if (is_in)
782 {
783 eigenstrain_set.erase(remove_add_index.first);
784 eigenstrain_set.insert(remove_add_index.second);
785 }
786 }
787 for (auto index : remove_reduced_set)
788 eigenstrain_set.erase(index);
789
790 // Compare the blockIDs set of eigenstrain names with the vector of _eigenstrain_names for the
791 // current subdomainID
792 std::set_union(eigenstrain_set.begin(),
793 eigenstrain_set.end(),
794 _eigenstrain_names.begin(),
795 _eigenstrain_names.end(),
796 std::inserter(verified_eigenstrain_names, verified_eigenstrain_names.begin()));
797
798 // Ensure the eigenstrain names previously passed include any missing names
799 _eigenstrain_names.resize(verified_eigenstrain_names.size());
800 std::copy(verified_eigenstrain_names.begin(),
801 verified_eigenstrain_names.end(),
802 _eigenstrain_names.begin());
803
804 Moose::out << COLOR_CYAN << "*** Automatic Eigenstrain Names ***"
805 << "\n"
806 << _name << ": " << Moose::stringify(_eigenstrain_names) << "\n"
807 << COLOR_DEFAULT << std::flush;
808}
char ** blocks
std::shared_ptr< FEProblemBase > & _problem
std::vector< std::pair< R1, R2 > > get(const std::string &param1, const std::string &param2) const
bool isParamValid(const std::string &name) const
const std::string & name() const
void mooseError(Args &&... args) const
const std::string & _name
std::set< SubdomainID > _subdomain_ids
set generated from the passed in vector of subdomain names
std::vector< MaterialPropertyName > _eigenstrain_names
std::string stringify(const T &t)

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ actGatherActionParameters()

void QuasiStaticSolidMechanicsPhysics::actGatherActionParameters ( )
protectedinherited

Definition at line 988 of file QuasiStaticSolidMechanicsPhysics.C.

989{
990 // Gather info about all other solid mechanics physics when we add variables
991 if (_current_task == "validate_coordinate_systems" && getParam<bool>("add_variables"))
992 {
994 for (const auto & action : actions)
995 {
996 const auto size_before = _subdomain_id_union.size();
997 const auto added_size = action->_subdomain_ids.size();
998 _subdomain_id_union.insert(action->_subdomain_ids.begin(), action->_subdomain_ids.end());
999 const auto size_after = _subdomain_id_union.size();
1000
1001 if (size_after != size_before + added_size)
1002 mooseError("The block restrictions in the SolidMechanics/QuasiStatic actions must be "
1003 "non-overlapping.");
1004
1005 if (added_size == 0 && actions.size() > 1)
1006 mooseError(
1007 "No SolidMechanics/QuasiStatic action can be block unrestricted if more than one "
1008 "SolidMechanics/QuasiStatic action is specified.");
1009 }
1010 }
1011}
std::vector< const T * > getActions()
ActionWarehouse & _awh
std::set< SubdomainID > _subdomain_id_union
set generated from the combined block restrictions of all SolidMechanics/Master action blocks

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ actLagrangianKernelStrain()

void QuasiStaticSolidMechanicsPhysics::actLagrangianKernelStrain ( )
protectedinherited

Definition at line 1014 of file QuasiStaticSolidMechanicsPhysics.C.

1015{
1016 std::string type;
1018 type = "ComputeLagrangianStrain";
1019 else if (_coord_system == Moose::COORD_RZ)
1020 type = "ComputeLagrangianStrainAxisymmetricCylindrical";
1022 type = "ComputeLagrangianStrainCentrosymmetricSpherical";
1023 else
1024 mooseError("Unsupported coordinate system");
1025
1026 auto params = _factory.getValidParams(type);
1027
1028 if (isParamValid("strain_base_name"))
1029 params.set<std::string>("base_name") = getParam<std::string>("strain_base_name");
1030
1031 params.set<std::vector<VariableName>>("displacements") = _coupled_displacements;
1032 params.set<std::vector<MaterialPropertyName>>("eigenstrain_names") = _eigenstrain_names;
1033 params.set<bool>("large_kinematics") = _lk_large_kinematics;
1034 params.set<std::vector<SubdomainName>>("block") = _subdomain_names;
1035
1036 // Error if volumetric locking correction is on for higher-order elements
1037 if (_problem->mesh().hasSecondOrderElements() && _lk_locking)
1038 mooseError("Volumetric locking correction should not be used for "
1039 "higher-order elements.");
1040
1041 params.set<bool>("stabilize_strain") = _lk_locking;
1042
1043 // Forward the strain time-integration options. In compatibility mode kinematic_approximation
1044 // and F_bar_mode are overridden below (and the action errors if the user also set them).
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");
1048
1050 {
1051 params.set<std::vector<MaterialPropertyName>>("homogenization_gradient_names") = {
1053 }
1054
1055 // OLD-compat configuration: map decomposition_method -> kinematic_approximation, switch the
1056 // F-bar to incremental mode (matches OLD `ComputeFiniteStrain`'s `_Fhat` F-bar), and have
1057 // the strain calc publish a real rotation_increment so the wrapped ComputeStressBase
1058 // material's FSR rotates correctly across steps.
1060 {
1062 {
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";
1068 // HughesWinget rejected in the ctor; SMALL strain ignores kinematic_approximation.
1069 }
1070
1071 // OLD's `volumetric_locking_correction = true` in incremental finite strain maps to
1072 // `F_bar_mode = incremental` on the NEW strain calc. The strain calc rejects
1073 // `incremental` for small kinematics -- for SMALL + locking we leave `F_bar_mode` at its
1074 // default (`total`), which is the additive trace correction (matches OLD's small-strain
1075 // B-bar in the locked-flag-equivalent form).
1077 params.set<MooseEnum>("F_bar_mode") = "incremental";
1078
1079 // Only meaningful with FINITE -- in SMALL the wrap runs in passthrough-off mode and the
1080 // rotation increment isn't consumed downstream.
1081 params.set<bool>("publish_rotation_increment") = _lk_large_kinematics;
1082 }
1083
1084 _problem->addMaterial(type, name() + "_strain", params);
1085
1086 // OLD-compat configuration: auto-add ComputeLagrangianWrappedStress around the user's
1087 // ComputeStressBase-style stress material. `input_stress = "stress"` and
1088 // `input_jacobian = "Jacobian_mult"` default to the property names every
1089 // ComputeStressBase descendant publishes.
1091 {
1092 const std::string wrap_type = "ComputeLagrangianWrappedStress";
1093 auto wrap_params = _factory.getValidParams(wrap_type);
1094 if (isParamValid("base_name"))
1095 wrap_params.set<std::string>("base_name") = getParam<std::string>("base_name");
1096 wrap_params.set<std::vector<SubdomainName>>("block") = _subdomain_names;
1097 // large_kinematics is derived from the strain calculator's LARGE_KINEMATICS guarantee.
1098 wrap_params.set<MooseEnum>("objective_rate") = "rashid";
1099 // FINITE: the wrap runs in passthrough mode (the wrapped material's FSR already produced
1100 // the correctly-rotated cumulative Cauchy stress, fed by our published rotation_increment).
1101 // SMALL: nothing to rotate, plain Cauchy passthrough via the rate's small-kinematics branch.
1102 wrap_params.set<bool>("rotate_old_stress") = _lk_large_kinematics;
1103 _problem->addMaterial(wrap_type, name() + "_compatibility_wrap", wrap_params);
1104 }
1105
1106 // Add the homogenization strain calculator
1108 {
1109 std::string type = "ComputeHomogenizedLagrangianStrain";
1110 auto params = _factory.getValidParams(type);
1111
1112 params.set<MaterialPropertyName>("homogenization_gradient_name") = _homogenization_strain_name;
1113 params.set<std::vector<VariableName>>("macro_gradient") = {_hname};
1114 params.set<MultiMooseEnum>("constraint_types") = _constraint_types;
1115 params.set<std::vector<FunctionName>>("targets") = _targets;
1116
1117 _problem->addMaterial(type, name() + "_compute_" + _homogenization_strain_name, params);
1118 }
1119}
InputParameters getValidParams(const std::string &name) const
T & set(const std::string &name, bool quiet_mode=false)
const std::string & type() const
bool isParamValid(const std::string &name) const
Factory & _factory
const bool _lk_large_kinematics
Simplified flag for small/large deformations, Lagrangian kernel system.
bool _lk_homogenization
Flag indicating if the homogenization system is present for new kernels.
std::vector< VariableName > _coupled_displacements
Coupled displacement variables.
const bool _compatibility_mode
OLD-compat shim: auto-configures the Lagrangian kernel system to reproduce StressDivergenceTensors + ...
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.
COORD_RSPHERICAL
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ actOutputGeneration()

void QuasiStaticSolidMechanicsPhysics::actOutputGeneration ( )
protectedinherited

Definition at line 613 of file QuasiStaticSolidMechanicsPhysics.C.

614{
615 if (_current_task == "add_material")
617
618 // Add variables (optional)
619 if (_current_task == "add_aux_variable")
620 {
621 unsigned int index = 0;
622 for (auto out : _generate_output)
623 {
624 const auto & order = _material_output_order[index];
625 const auto & family = _material_output_family[index];
626
627 std::string type = (order == "CONSTANT" && family == "MONOMIAL")
628 ? "MooseVariableConstMonomial"
629 : "MooseVariable";
630
631 // Create output helper aux variables
632 auto params = _factory.getValidParams(type);
633 params.set<MooseEnum>("order") = order;
634 params.set<MooseEnum>("family") = family;
635
636 if (family == "MONOMIAL")
637 _problem->addAuxVariable(type, _base_name + out, params);
638 else
639 _problem->addVariable(type, _base_name + out, params);
640
641 index++;
642 }
643 }
644
645 // Add output AuxKernels
646 else if (_current_task == "add_aux_kernel")
647 {
648 std::string ad_prepend = _use_ad ? "AD" : "";
649 // Loop through output aux variables
650 unsigned int index = 0;
651 for (auto out : _generate_output)
652 {
653 if (_material_output_family[index] == "MONOMIAL")
654 {
656
657 params = _factory.getValidParams("MaterialRealAux");
658 params.applyParameters(parameters());
659 params.set<MaterialPropertyName>("property") = _base_name + out;
660 params.set<AuxVariableName>("variable") = _base_name + out;
661 params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_END;
662
663 _problem->addAuxKernel(
664 ad_prepend + "MaterialRealAux", _base_name + out + '_' + name(), params);
665 }
666 index++;
667 }
668 }
669 else if (_current_task == "add_kernel")
670 {
671 std::string ad_prepend = _use_ad ? "AD" : "";
672 // Loop through output aux variables
673 unsigned int index = 0;
674 for (auto out : _generate_output)
675 {
676 if (_material_output_family[index] != "MONOMIAL")
677 {
679
680 params = _factory.getValidParams("MaterialPropertyValue");
681 params.applyParameters(parameters());
682 params.set<MaterialPropertyName>("prop_name") = _base_name + out;
683 params.set<NonlinearVariableName>("variable") = _base_name + out;
684
685 _problem->addKernel(
686 ad_prepend + "MaterialPropertyValue", _base_name + out + '_' + name(), params);
687 }
688 index++;
689 }
690 }
691}
InputParameters emptyInputParameters()
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
const InputParameters & parameters() const
std::vector< std::string > _generate_output
output materials to generate scalar stress/strain tensor quantities
const std::string _base_name
base name for the current master action block

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ actOutputMatProp()

void QuasiStaticSolidMechanicsPhysics::actOutputMatProp ( )
protectedinherited

Definition at line 878 of file QuasiStaticSolidMechanicsPhysics.C.

879{
880 std::string ad_prepend = _use_ad ? "AD" : "";
881
882 if (_current_task == "add_material")
883 {
884 // Add output Materials
885 for (auto out : _generate_output)
886 {
888
889 // RankTwoCartesianComponent
890 if (
891 [&]()
892 {
893 for (const auto & r2q : _rank_two_cartesian_component_table)
894 for (unsigned int a = 0; a < 3; ++a)
895 for (unsigned int b = 0; b < 3; ++b)
896 if (r2q.first + '_' + _component_table[a] + _component_table[b] == out)
897 {
898 auto type = ad_prepend + "RankTwoCartesianComponent";
899 params = _factory.getValidParams(type);
900 params.set<MaterialPropertyName>("rank_two_tensor") =
901 _base_name + remapCompatOutputProp(r2q.second);
902 params.set<unsigned int>("index_i") = a;
903 params.set<unsigned int>("index_j") = b;
904
905 params.applyParameters(parameters());
906 params.set<MaterialPropertyName>("property_name") = _base_name + out;
907 _problem->addMaterial(type, _base_name + out + '_' + name(), params);
908 return true;
909 }
910 return false;
911 }())
912 continue;
913
914 // RankTwoDirectionalComponent
915 if (setupOutput(out,
917 [&](std::string prop_name, std::string invariant)
918 {
919 auto type = ad_prepend + "RankTwoDirectionalComponent";
920 params = _factory.getValidParams(type);
921 params.set<MaterialPropertyName>("rank_two_tensor") =
923 params.set<MooseEnum>("invariant") = invariant;
924 params.applyParameters(parameters());
925 params.set<MaterialPropertyName>("property_name") = _base_name + out;
926 _problem->addMaterial(type, _base_name + out + '_' + name(), params);
927 }))
928 continue;
929
930 // RankTwoInvariant
931 if (setupOutput(out,
933 [&](std::string prop_name, std::string invariant)
934 {
935 auto type = ad_prepend + "RankTwoInvariant";
936 params = _factory.getValidParams(type);
937 params.set<MaterialPropertyName>("rank_two_tensor") =
939 params.set<MooseEnum>("invariant") = invariant;
940 params.applyParameters(parameters());
941 params.set<MaterialPropertyName>("property_name") = _base_name + out;
942 _problem->addMaterial(type, _base_name + out + '_' + name(), params);
943 }))
944 continue;
945
946 // RankTwoCylindricalComponent
947 if (setupOutput(
948 out,
950 [&](std::string prop_name, std::string component)
951 {
954 "Cannot use cylindrical component output in a spherical coordinate system.");
955 auto type = ad_prepend + "RankTwoCylindricalComponent";
956 params = _factory.getValidParams(type);
957 params.set<MaterialPropertyName>("rank_two_tensor") =
959 params.set<MooseEnum>("cylindrical_component") = component;
960 params.applyParameters(parameters());
961 params.set<MaterialPropertyName>("property_name") = _base_name + out;
962 _problem->addMaterial(type, _base_name + out + '_' + name(), params);
963 }))
964 continue;
965
966 // RankTwoSphericalComponent
967 if (setupOutput(out,
969 [&](std::string prop_name, std::string component)
970 {
971 auto type = ad_prepend + "RankTwoSphericalComponent";
972 params = _factory.getValidParams(type);
973 params.set<MaterialPropertyName>("rank_two_tensor") =
975 params.set<MooseEnum>("spherical_component") = component;
976 params.applyParameters(parameters());
977 params.set<MaterialPropertyName>("property_name") = _base_name + out;
978 _problem->addMaterial(type, _base_name + out + '_' + name(), params);
979 }))
980 continue;
981
982 paramError("generate_output", "Unable to add output Material for '", out, "'");
983 }
984 }
985}
for(PetscInt i=0;i< nvars;++i)
void ErrorVector unsigned int
void paramError(const std::string &param, Args... args) const
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 const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_cylindrical_component_table
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 ...
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...

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputGeneration().

◆ actStressDivergenceTensorsStrain()

void QuasiStaticSolidMechanicsPhysics::actStressDivergenceTensorsStrain ( )
protectedinherited

Definition at line 1122 of file QuasiStaticSolidMechanicsPhysics.C.

1123{
1124 std::string ad_prepend = _use_ad ? "AD" : "";
1125
1126 std::string type;
1127
1128 // no plane strain
1130 {
1131 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1132 {{Moose::COORD_XYZ, StrainAndIncrement::SmallTotal}, "ComputeSmallStrain"},
1133 {{Moose::COORD_XYZ, StrainAndIncrement::SmallIncremental}, "ComputeIncrementalStrain"},
1134 {{Moose::COORD_XYZ, StrainAndIncrement::FiniteIncremental}, "ComputeFiniteStrain"},
1135 {{Moose::COORD_RZ, StrainAndIncrement::SmallTotal}, "ComputeAxisymmetricRZSmallStrain"},
1137 "ComputeAxisymmetricRZIncrementalStrain"},
1139 "ComputeAxisymmetricRZFiniteStrain"},
1140 {{Moose::COORD_RSPHERICAL, StrainAndIncrement::SmallTotal}, "ComputeRSphericalSmallStrain"},
1142 "ComputeRSphericalIncrementalStrain"},
1144 "ComputeRSphericalFiniteStrain"}};
1145
1146 auto type_it = type_map.find(std::make_pair(_coord_system, _strain_and_increment));
1147 if (type_it != type_map.end())
1148 type = type_it->second;
1149 else
1150 mooseError("Unsupported strain formulation");
1151 }
1155 {
1157 paramError("use_automatic_differentiation", "AD not setup for use with PlaneStrain");
1158
1159 std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1160 {{Moose::COORD_XYZ, StrainAndIncrement::SmallTotal}, "ComputePlaneSmallStrain"},
1161 {{Moose::COORD_XYZ, StrainAndIncrement::SmallIncremental}, "ComputePlaneIncrementalStrain"},
1162 {{Moose::COORD_XYZ, StrainAndIncrement::FiniteIncremental}, "ComputePlaneFiniteStrain"},
1163 {{Moose::COORD_RZ, StrainAndIncrement::SmallTotal}, "ComputeAxisymmetric1DSmallStrain"},
1165 "ComputeAxisymmetric1DIncrementalStrain"},
1167 "ComputeAxisymmetric1DFiniteStrain"}};
1168
1169 // choose kernel type based on coordinate system
1170 auto type_it = type_map.find(std::make_pair(_coord_system, _strain_and_increment));
1171 if (type_it != type_map.end())
1172 type = type_it->second;
1173 else
1174 mooseError("Unsupported coordinate system for plane strain.");
1175 }
1176 else
1177 mooseError("Unsupported planar formulation");
1178
1179 // set material parameters
1180 auto params = _factory.getValidParams(ad_prepend + type);
1181 params.applyParameters(
1182 parameters(),
1183 {"displacements", "use_displaced_mesh", "out_of_plane_strain", "scalar_out_of_plane_strain"});
1184
1185 if (isParamValid("strain_base_name"))
1186 params.set<std::string>("base_name") = getParam<std::string>("strain_base_name");
1187
1188 params.set<std::vector<VariableName>>("displacements") = _coupled_displacements;
1189 params.set<bool>("use_displaced_mesh") = false;
1190
1191 if (isParamValid("scalar_out_of_plane_strain"))
1192 params.set<std::vector<VariableName>>("scalar_out_of_plane_strain") = {
1193 getParam<VariableName>("scalar_out_of_plane_strain")};
1194
1195 if (isParamValid("out_of_plane_strain"))
1196 params.set<std::vector<VariableName>>("out_of_plane_strain") = {
1197 getParam<VariableName>("out_of_plane_strain")};
1198
1199 params.set<std::vector<MaterialPropertyName>>("eigenstrain_names") = _eigenstrain_names;
1200
1201 _problem->addMaterial(ad_prepend + type, name() + "_strain", params);
1202}

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ actSubdomainChecks()

void QuasiStaticSolidMechanicsPhysics::actSubdomainChecks ( )
protectedinherited

Definition at line 564 of file QuasiStaticSolidMechanicsPhysics.C.

565{
566 // Do the coordinate system check only once the problem is created
567 if (_current_task == "setup_mesh_complete")
568 {
569 // get subdomain IDs
570 for (auto & name : _subdomain_names)
571 {
572 auto id = _mesh->getSubdomainID(name);
573 if (id == Moose::INVALID_BLOCK_ID)
574 paramError("block", "Subdomain \"" + name + "\" not found in mesh.");
575 else
576 _subdomain_ids.insert(id);
577 }
578 }
579
580 if (_current_task == "validate_coordinate_systems")
581 {
582 // use either block restriction list or list of all subdomains in the mesh
583 const auto & check_subdomains =
584 _subdomain_ids.empty() ? _problem->mesh().meshSubdomains() : _subdomain_ids;
585 if (check_subdomains.empty())
586 mooseError("No subdomains found");
587
588 // make sure all subdomains are using the same coordinate system
589 _coord_system = _problem->getCoordSystem(*check_subdomains.begin());
590 for (auto subdomain : check_subdomains)
591 if (_problem->getCoordSystem(subdomain) != _coord_system)
592 mooseError("The SolidMechanics action requires all subdomains to have the same coordinate "
593 "system.");
594
596 {
598 mooseError("'out_of_plane_direction' must be 'z' for axisymmetric simulations");
599 }
601 {
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");
608 }
609 }
610}
std::shared_ptr< MooseMesh > & _mesh
unsigned int _ndisp
Number of displacement variables.
const SubdomainID INVALID_BLOCK_ID
if(subdm)

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ addCartesianComponentOutput()

void QuasiStaticSolidMechanicsPhysicsBase::addCartesianComponentOutput ( const std::string &  name,
const std::string &  prop_name = "" 
)
staticinherited

Definition at line 372 of file QuasiStaticSolidMechanicsPhysicsBase.C.

374{
375 if (prop_name.empty())
376 // the enum name is the actual tensor material property name
377 _rank_two_cartesian_component_table.emplace(enum_name, enum_name);
378 else
379 // supply a different name for the enum options (this is done for
380 // 'strain' -> 'mechanical_strain' in the TMA)
381 _rank_two_cartesian_component_table.emplace(enum_name, prop_name);
382}

◆ getKernelParameters()

InputParameters DynamicSolidMechanicsPhysics::getKernelParameters ( std::string  type)
overrideprotectedvirtualinherited

Reimplemented from QuasiStaticSolidMechanicsPhysics.

Definition at line 191 of file DynamicSolidMechanicsPhysics.C.

192{
194
195 if (params.isParamDefined("alpha"))
196 params.set<Real>("alpha") = getParam<Real>("hht_alpha");
197 if (params.isParamDefined("zeta"))
198 params.set<MaterialPropertyName>("zeta") =
199 getParam<MaterialPropertyName>("stiffness_damping_coefficient");
200
201 return params;
202}
bool isParamDefined(const std::string &name) const
virtual InputParameters getKernelParameters(std::string type)

◆ getKernelType()

std::string DynamicSolidMechanicsPhysics::getKernelType ( )
overrideprotectedvirtualinherited

Reimplemented from QuasiStaticSolidMechanicsPhysics.

Definition at line 181 of file DynamicSolidMechanicsPhysics.C.

182{
183 // choose kernel type based on coordinate system
185 return "DynamicStressDivergenceTensors";
186 else
187 mooseError("Unsupported coordinate system");
188}

◆ materialOutputFamilies()

MultiMooseEnum QuasiStaticSolidMechanicsPhysicsBase::materialOutputFamilies ( )
staticinherited

◆ materialOutputOrders()

MultiMooseEnum QuasiStaticSolidMechanicsPhysicsBase::materialOutputOrders ( )
staticinherited

Definition at line 329 of file QuasiStaticSolidMechanicsPhysicsBase.C.

330{
332
333 return MultiMooseEnum(orders);
334}
static MooseEnum getAuxVariableOrders()
std::string getRawNames() const

Referenced by QuasiStaticSolidMechanicsPhysics::validParams(), and QuasiStaticSolidMechanicsPhysicsBase::validParams().

◆ outputPropertiesType()

MultiMooseEnum QuasiStaticSolidMechanicsPhysicsBase::outputPropertiesType ( )
staticinherited

Definition at line 343 of file QuasiStaticSolidMechanicsPhysicsBase.C.

344{
345 std::string options = "";
346 for (auto & r2tc : _rank_two_cartesian_component_table)
347 for (unsigned int a = 0; a < 3; ++a)
348 for (unsigned int b = 0; b < 3; ++b)
349 options += (options == "" ? "" : " ") + r2tc.first + '_' + _component_table[a] +
351
352 for (auto & r2i : _rank_two_invariant_table)
353 for (auto & t : r2i.second.second)
354 options += " " + r2i.first + "_" + t;
355
356 for (auto & r2sdc : _rank_two_directional_component_table)
357 for (auto & r : r2sdc.second.second)
358 options += " " + r2sdc.first + "_" + r;
359
360 for (auto & r2cc : _rank_two_cylindrical_component_table)
361 for (auto & r : r2cc.second.second)
362 options += " " + r2cc.first + "_" + r;
363
364 for (auto & r2sc : _rank_two_spherical_component_table)
365 for (auto & r : r2sc.second.second)
366 options += " " + r2sc.first + "_" + r;
367
368 return MultiMooseEnum(options, "", true);
369}

Referenced by QuasiStaticSolidMechanicsPhysics::validParams(), and QuasiStaticSolidMechanicsPhysicsBase::validParams().

◆ remapCompatOutputProp()

std::string QuasiStaticSolidMechanicsPhysics::remapCompatOutputProp ( const std::string &  prop_name) const
protectedinherited

Apply compatibility_mode remapping to a property name pulled from the _rank_two_* output tables: in compat mode the NEW pipeline writes Cauchy stress + rotated mechanical strain under different names than the OLD pipeline.

Outside compat mode this is the identity.

Definition at line 861 of file QuasiStaticSolidMechanicsPhysics.C.

862{
863 // The OLD pipeline publishes `stress` and `mechanical_strain` directly. The NEW pipeline
864 // publishes Cauchy stress under `cauchy_stress` and (when the strain calc is configured for
865 // OLD compatibility) the OLD-equivalent mechanical strain under `rotated_mechanical_strain`.
866 // Redirect the underlying property name so user output requests like `stress_xx` keep their
867 // OLD-style aux variable name but read from the NEW-style source.
869 return prop_name;
870 if (prop_name == "stress")
871 return "cauchy_stress";
872 if (prop_name == "mechanical_strain")
873 return "rotated_mechanical_strain";
874 return prop_name;
875}

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp().

◆ setupOutput()

template<typename T , typename T2 >
bool QuasiStaticSolidMechanicsPhysics::setupOutput ( std::string  out,
T  table,
T2  setup 
)
protectedinherited

Helper function to decode generate_outputs options using a "table" of scalar output quantities and a "setup" lambda that performs the input parameter setup for the output material object.

Definition at line 184 of file QuasiStaticSolidMechanicsPhysics.h.

185{
186 for (const auto & t1 : table)
187 {
188 // find the officially supported properties
189 for (const auto & t2 : t1.second.second)
190 if (t1.first + '_' + t2 == out)
191 {
192 const auto it = _rank_two_cartesian_component_table.find(t2);
194 {
195 setup(it->second, t1.second.first);
196 return true;
197 }
198 else
199 mooseError("Internal error. The permitted tensor shortcuts must be keys in the "
200 "'_rank_two_cartesian_component_table'.");
201 }
202
203 // check for custom properties
204 auto prefix = t1.first + '_';
205 if (out.substr(0, prefix.length()) == prefix)
206 {
207 setup(out.substr(prefix.length()), t1.second.first);
208 return true;
209 }
210 }
211
212 return false;
213}
void setup(EquationSystems &systems, Mesh &mesh, GetPot &args)
OStreamProxy out(std::cout)

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp().

◆ validParams()

InputParameters LegacyDynamicTensorMechanicsAction::validParams ( )
static

Definition at line 21 of file LegacyDynamicTensorMechanicsAction.C.

22{
24 params.addParam<bool>(
25 "use_displaced_mesh", false, "Whether to use displaced mesh in the kernels");
26 return params;
27}
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)

◆ verifyOrderAndFamilyOutputs()

void QuasiStaticSolidMechanicsPhysics::verifyOrderAndFamilyOutputs ( )
protectedinherited

Definition at line 811 of file QuasiStaticSolidMechanicsPhysics.C.

812{
813 // Ensure material output order and family vectors are same size as generate output
814
815 // check number of supplied orders and families
817 paramError("material_output_order",
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.");
821
822 if (_material_output_family.size() > 1 &&
824 paramError("material_output_family",
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.");
828
829 // if no value was provided, chose the default CONSTANT
830 if (_material_output_order.size() == 0)
832
833 // For only one order, make all orders the same magnitude
834 if (_material_output_order.size() == 1)
836 std::vector<std::string>(_generate_output.size(), _material_output_order[0]);
837
838 if (_verbose)
839 Moose::out << COLOR_CYAN << "*** Automatic applied material output orders ***"
840 << "\n"
841 << _name << ": " << Moose::stringify(_material_output_order) << "\n"
842 << COLOR_DEFAULT << std::flush;
843
844 // if no value was provided, chose the default MONOMIAL
845 if (_material_output_family.size() == 0)
847
848 // For only one family, make all families that value
849 if (_material_output_family.size() == 1)
851 std::vector<std::string>(_generate_output.size(), _material_output_family[0]);
852
853 if (_verbose)
854 Moose::out << COLOR_CYAN << "*** Automatic applied material output families ***"
855 << "\n"
856 << _name << ": " << Moose::stringify(_material_output_family) << "\n"
857 << COLOR_DEFAULT << std::flush;
858}
void setAdditionalValue(const std::string &names)
unsigned int size() const

Referenced by QuasiStaticSolidMechanicsPhysics::QuasiStaticSolidMechanicsPhysics().

Member Data Documentation

◆ _accelerations

std::vector<AuxVariableName> DynamicSolidMechanicsPhysics::_accelerations
protectedinherited

Definition at line 28 of file DynamicSolidMechanicsPhysics.h.

Referenced by DynamicSolidMechanicsPhysics::act().

◆ _auto_eigenstrain

const bool QuasiStaticSolidMechanicsPhysics::_auto_eigenstrain
protectedinherited

automatically gather names of eigenstrain tensors provided by simulation objects

Definition at line 139 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

◆ _base_name

const std::string QuasiStaticSolidMechanicsPhysics::_base_name
protectedinherited

base name for the current master action block

Definition at line 111 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputGeneration(), and QuasiStaticSolidMechanicsPhysics::actOutputMatProp().

◆ _compatibility_mode

const bool QuasiStaticSolidMechanicsPhysics::_compatibility_mode
protectedinherited

◆ _component_table

const std::vector< char > QuasiStaticSolidMechanicsPhysicsBase::_component_table = {'x', 'y', 'z'}
staticinherited

◆ _constraint_types

MultiMooseEnum QuasiStaticSolidMechanicsPhysics::_constraint_types
protectedinherited

◆ _coord_system

Moose::CoordinateSystemType QuasiStaticSolidMechanicsPhysics::_coord_system
protectedinherited

◆ _coupled_displacements

std::vector<VariableName> QuasiStaticSolidMechanicsPhysics::_coupled_displacements
protectedinherited

◆ _cylindrical_axis_point1

Point QuasiStaticSolidMechanicsPhysics::_cylindrical_axis_point1
protectedinherited

points used to determine axis of rotation for cylindrical stress/strain quantities

Definition at line 128 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::QuasiStaticSolidMechanicsPhysics().

◆ _cylindrical_axis_point1_valid

bool QuasiStaticSolidMechanicsPhysics::_cylindrical_axis_point1_valid
protectedinherited

booleans used to determine if cylindrical axis points are passed

Definition at line 122 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::QuasiStaticSolidMechanicsPhysics().

◆ _cylindrical_axis_point2

Point QuasiStaticSolidMechanicsPhysics::_cylindrical_axis_point2
protectedinherited

◆ _cylindrical_axis_point2_valid

bool QuasiStaticSolidMechanicsPhysics::_cylindrical_axis_point2_valid
protectedinherited

◆ _diag_save_in

std::vector<AuxVariableName> QuasiStaticSolidMechanicsPhysics::_diag_save_in
protectedinherited

◆ _direction

Point QuasiStaticSolidMechanicsPhysics::_direction
protectedinherited

◆ _direction_valid

bool QuasiStaticSolidMechanicsPhysics::_direction_valid
protectedinherited

◆ _displacements

std::vector<VariableName> QuasiStaticSolidMechanicsPhysics::_displacements
protectedinherited

◆ _eigenstrain_names

std::vector<MaterialPropertyName> QuasiStaticSolidMechanicsPhysics::_eigenstrain_names
protectedinherited

◆ _generate_output

std::vector<std::string> QuasiStaticSolidMechanicsPhysics::_generate_output
protectedinherited

◆ _hname

const std::string QuasiStaticSolidMechanicsPhysics::_hname = "hvar"
protectedinherited

◆ _homogenization_strain_name

const std::string QuasiStaticSolidMechanicsPhysics::_homogenization_strain_name = "homogenization_gradient"
protectedinherited

◆ _integrator_name

const std::string QuasiStaticSolidMechanicsPhysics::_integrator_name = "integrator"
protectedinherited

Definition at line 172 of file QuasiStaticSolidMechanicsPhysics.h.

◆ _lagrangian_kernels

const bool QuasiStaticSolidMechanicsPhysics::_lagrangian_kernels
protectedinherited

◆ _lk_formulation

const LKFormulation QuasiStaticSolidMechanicsPhysics::_lk_formulation
protectedinherited

◆ _lk_h_off_jac

const bool QuasiStaticSolidMechanicsPhysics::_lk_h_off_jac
protectedinherited

Whether to use the off diagonal scalar jacobian for the homogenization system.

Definition at line 179 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::getKernelParameters().

◆ _lk_homogenization

bool QuasiStaticSolidMechanicsPhysics::_lk_homogenization
protectedinherited

◆ _lk_large_kinematics

const bool QuasiStaticSolidMechanicsPhysics::_lk_large_kinematics
protectedinherited

◆ _lk_locking

const bool QuasiStaticSolidMechanicsPhysics::_lk_locking
protectedinherited

◆ _material_output_family

MultiMooseEnum QuasiStaticSolidMechanicsPhysics::_material_output_family
protectedinherited

◆ _material_output_order

MultiMooseEnum QuasiStaticSolidMechanicsPhysics::_material_output_order
protectedinherited

◆ _ndisp

unsigned int QuasiStaticSolidMechanicsPhysics::_ndisp
protectedinherited

◆ _order_mapper

const std::map<unsigned int, std::string> QuasiStaticSolidMechanicsPhysics::_order_mapper
staticprotectedinherited

Definition at line 168 of file QuasiStaticSolidMechanicsPhysics.h.

◆ _out_of_plane_direction

const OutOfPlaneDirection QuasiStaticSolidMechanicsPhysics::_out_of_plane_direction
protectedinherited

◆ _planar_formulation

enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation QuasiStaticSolidMechanicsPhysics::_planar_formulation
protectedinherited

◆ _rank_two_cartesian_component_table

std::map< std::string, std::string > QuasiStaticSolidMechanicsPhysicsBase::_rank_two_cartesian_component_table
staticprotectedinherited
Initial value:
= {
{"strain", "total_strain"},
{"mechanical_strain", "mechanical_strain"},
{"stress", "stress"},
{"cauchy_stress", "cauchy_stress"},
{"deformation_gradient", "deformation_gradient"},
{"pk1_stress", "pk1_stress"},
{"pk2_stress", "pk2_stress"},
{"small_stress", "small_stress"},
{"elastic_strain", "elastic_strain"},
{"plastic_strain", "plastic_strain"},
{"creep_strain", "creep_strain"},
{"creep_stress", "creep_stress"}}

Definition at line 20 of file QuasiStaticSolidMechanicsPhysicsBase.h.

25 :
27 static const std::vector<char> _component_table;
28 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
30 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
32 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp(), QuasiStaticSolidMechanicsPhysicsBase::addCartesianComponentOutput(), QuasiStaticSolidMechanicsPhysicsBase::outputPropertiesType(), and QuasiStaticSolidMechanicsPhysics::setupOutput().

◆ _rank_two_cylindrical_component_table

const std::map< std::string, std::pair< std::string, std::vector< std::string > > > QuasiStaticSolidMechanicsPhysicsBase::_rank_two_cylindrical_component_table
staticinherited
Initial value:
= {
{"axial",
{"AxialStress", {"stress", "strain", "plastic_strain", "creep_strain", "elastic_strain"}}},
{"hoop",
{"HoopStress", {"stress", "strain", "plastic_strain", "creep_strain", "elastic_strain"}}},
{"radial", {"RadialStress", {"stress", "strain"}}}}

Definition at line 123 of file QuasiStaticSolidMechanicsPhysicsBase.h.

136 : public Action
137{
138public:
140
142
146
147public:
149 static const std::vector<char> _component_table;
150 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
152 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
154 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
156 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
159
160 static void addCartesianComponentOutput(const std::string & name,
161 const std::string & prop_name = "");
162
163protected:
164 static std::map<std::string, std::string> _rank_two_cartesian_component_table;
165
166 const bool _use_ad;
167};
static void addCartesianComponentOutput(const std::string &name, const std::string &prop_name="")

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp(), and QuasiStaticSolidMechanicsPhysicsBase::outputPropertiesType().

◆ _rank_two_directional_component_table

const std::map< std::string, std::pair< std::string, std::vector< std::string > > > QuasiStaticSolidMechanicsPhysicsBase::_rank_two_directional_component_table
staticinherited
Initial value:
= {
{"directional", {"Direction", {"stress", "strain"}}}}

Definition at line 119 of file QuasiStaticSolidMechanicsPhysicsBase.h.

132 : public Action
133{
134public:
136
138
142
143public:
145 static const std::vector<char> _component_table;
146 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
148 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
150 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
152 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
155
156 static void addCartesianComponentOutput(const std::string & name,
157 const std::string & prop_name = "");
158
159protected:
160 static std::map<std::string, std::string> _rank_two_cartesian_component_table;
161
162 const bool _use_ad;
163};

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp(), and QuasiStaticSolidMechanicsPhysicsBase::outputPropertiesType().

◆ _rank_two_invariant_table

const std::map< std::string, std::pair< std::string, std::vector< std::string > > > QuasiStaticSolidMechanicsPhysicsBase::_rank_two_invariant_table
staticinherited

◆ _rank_two_spherical_component_table

const std::map< std::string, std::pair< std::string, std::vector< std::string > > > QuasiStaticSolidMechanicsPhysicsBase::_rank_two_spherical_component_table
staticinherited
Initial value:
= {
{"spherical_hoop",
{"HoopStress", {"stress", "strain", "plastic_strain", "creep_strain", "elastic_strain"}}},
{"spherical_radial", {"RadialStress", {"stress", "strain"}}}}

Definition at line 131 of file QuasiStaticSolidMechanicsPhysicsBase.h.

144 : public Action
145{
146public:
148
150
154
155public:
157 static const std::vector<char> _component_table;
158 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
160 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
162 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
164 static const std::map<std::string, std::pair<std::string, std::vector<std::string>>>
167
168 static void addCartesianComponentOutput(const std::string & name,
169 const std::string & prop_name = "");
170
171protected:
172 static std::map<std::string, std::string> _rank_two_cartesian_component_table;
173
174 const bool _use_ad;
175};

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp(), and QuasiStaticSolidMechanicsPhysicsBase::outputPropertiesType().

◆ _save_in

std::vector<AuxVariableName> QuasiStaticSolidMechanicsPhysics::_save_in
protectedinherited

◆ _spherical_center_point

Point QuasiStaticSolidMechanicsPhysics::_spherical_center_point
protectedinherited

center point for spherical stress/strain quantities

Definition at line 136 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::QuasiStaticSolidMechanicsPhysics().

◆ _spherical_center_point_valid

bool QuasiStaticSolidMechanicsPhysics::_spherical_center_point_valid
protectedinherited

booleans used to determine if spherical center point is passed

Definition at line 133 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::QuasiStaticSolidMechanicsPhysics().

◆ _strain

enum QuasiStaticSolidMechanicsPhysics::Strain QuasiStaticSolidMechanicsPhysics::_strain
protectedinherited

◆ _strain_and_increment

enum QuasiStaticSolidMechanicsPhysics::StrainAndIncrement QuasiStaticSolidMechanicsPhysics::_strain_and_increment
protectedinherited

◆ _subdomain_id_union

std::set<SubdomainID> QuasiStaticSolidMechanicsPhysics::_subdomain_id_union
protectedinherited

set generated from the combined block restrictions of all SolidMechanics/Master action blocks

Definition at line 74 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::actGatherActionParameters().

◆ _subdomain_ids

std::set<SubdomainID> QuasiStaticSolidMechanicsPhysics::_subdomain_ids
protectedinherited

◆ _subdomain_names

std::vector<SubdomainName> QuasiStaticSolidMechanicsPhysics::_subdomain_names
protectedinherited

if this vector is not empty the variables, kernels and materials are restricted to these subdomains

Definition at line 68 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::actLagrangianKernelStrain(), and QuasiStaticSolidMechanicsPhysics::actSubdomainChecks().

◆ _targets

std::vector<FunctionName> QuasiStaticSolidMechanicsPhysics::_targets
protectedinherited

◆ _use_ad

const bool QuasiStaticSolidMechanicsPhysicsBase::_use_ad
protectedinherited

◆ _use_displaced_mesh

bool QuasiStaticSolidMechanicsPhysics::_use_displaced_mesh
protectedinherited

◆ _velocities

std::vector<AuxVariableName> DynamicSolidMechanicsPhysics::_velocities
protectedinherited

Definition at line 27 of file DynamicSolidMechanicsPhysics.h.

Referenced by DynamicSolidMechanicsPhysics::act().

◆ _verbose

bool QuasiStaticSolidMechanicsPhysics::_verbose
protectedinherited

The documentation for this class was generated from the following files: