https://mooseframework.inl.gov
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 | List of all members
DynamicSolidMechanicsPhysics Class Reference

#include <DynamicSolidMechanicsPhysics.h>

Inheritance diagram for DynamicSolidMechanicsPhysics:
[legend]

Public Types

typedef DataFileName DataFileParameterType
 

Public Member Functions

 DynamicSolidMechanicsPhysics (const InputParameters &params)
 
virtual void act () override
 
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 T & getParam (const std::string &name) const
 
std::vector< std::pair< T1, T2 > > getParam (const std::string &param1, const std::string &param2) const
 
const T * queryParam (const std::string &name) const
 
const T & getRenamedParam (const std::string &old_name, const std::string &new_name) const
 
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 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 mooseWarningNonPrefixed (Args &&... args) const
 
void mooseDeprecated (Args &&... args) const
 
void mooseInfo (Args &&... args) const
 
void callMooseError (std::string msg, const bool with_prefix, const hit::Node *node=nullptr) 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)
 

Public Attributes

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 More...
 
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  Strain { Strain::Small, Strain::Finite }
 strain formulation More...
 
enum  StrainAndIncrement { StrainAndIncrement::SmallTotal, StrainAndIncrement::FiniteTotal, StrainAndIncrement::SmallIncremental, StrainAndIncrement::FiniteIncremental }
 strain formulation More...
 
enum  PlanarFormulation { PlanarFormulation::None, PlanarFormulation::WeakPlaneStress, PlanarFormulation::PlaneStrain, PlanarFormulation::GeneralizedPlaneStrain }
 use an out of plane stress/strain formulation More...
 
enum  OutOfPlaneDirection { OutOfPlaneDirection::x, OutOfPlaneDirection::y, OutOfPlaneDirection::z }
 
enum  LKFormulation { LKFormulation::Total, LKFormulation::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 ()
 
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. More...
 
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 T & getMeshProperty (const std::string &data_name, const std::string &prefix)
 
const T & getMeshProperty (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
 

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 More...
 
std::set< SubdomainID_subdomain_ids
 set generated from the passed in vector of subdomain names More...
 
std::set< SubdomainID_subdomain_id_union
 set generated from the combined block restrictions of all SolidMechanics/Master action blocks More...
 
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 More...
 
bool _use_displaced_mesh
 use displaced mesh (true unless _strain is SMALL) More...
 
std::vector< std::string > _generate_output
 output materials to generate scalar stress/strain tensor quantities More...
 
MultiMooseEnum _material_output_order
 
MultiMooseEnum _material_output_family
 
bool _cylindrical_axis_point1_valid
 booleans used to determine if cylindrical axis points are passed More...
 
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 More...
 
Point _cylindrical_axis_point2
 
Point _direction
 
bool _spherical_center_point_valid
 booleans used to determine if spherical center point is passed More...
 
Point _spherical_center_point
 center point for spherical stress/strain quantities More...
 
const bool _auto_eigenstrain
 automatically gather names of eigenstrain tensors provided by simulation objects More...
 
std::vector< MaterialPropertyName > _eigenstrain_names
 
const bool _lagrangian_kernels
 New or old kernel system. More...
 
const bool _lk_large_kinematics
 Simplified flag for small/large deformations, Lagrangian kernel system. More...
 
const LKFormulation _lk_formulation
 
bool _lk_locking
 Simplified volumetric locking correction flag for new kernels. More...
 
bool _lk_homogenization
 Flag indicating if the homogenization system is present for new kernels. More...
 
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 _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 More...
 
unsigned int _ndisp
 Number of displacement variables. More...
 
std::vector< VariableName > _coupled_displacements
 Coupled displacement variables. More...
 
std::vector< AuxVariableName > _save_in
 residual debugging More...
 
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
 

Detailed Description

Definition at line 14 of file DynamicSolidMechanicsPhysics.h.

Member Enumeration Documentation

◆ LKFormulation

enum QuasiStaticSolidMechanicsPhysics::LKFormulation
strongprotectedinherited

New kernel system kinematics types.

Enumerator
Total 
Updated 

Definition at line 145 of file QuasiStaticSolidMechanicsPhysics.h.

146  {
147  Total,
148  Updated
149  };

◆ OutOfPlaneDirection

Enumerator

Definition at line 96 of file QuasiStaticSolidMechanicsPhysics.h.

97  {
98  x,
99  y,
100  z
101  };
const std::vector< double > y
const std::vector< double > x

◆ PlanarFormulation

use an out of plane stress/strain formulation

Enumerator
None 
WeakPlaneStress 
PlaneStrain 
GeneralizedPlaneStrain 

Definition at line 88 of file QuasiStaticSolidMechanicsPhysics.h.

89  {
90  None,
92  PlaneStrain,
enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation _planar_formulation

◆ Strain

enum QuasiStaticSolidMechanicsPhysics::Strain
strongprotectedinherited

strain formulation

Enumerator
Small 
Finite 

Definition at line 72 of file QuasiStaticSolidMechanicsPhysics.h.

73  {
74  Small,
75  Finite
76  } _strain;
enum QuasiStaticSolidMechanicsPhysics::Strain _strain

◆ StrainAndIncrement

strain formulation

Enumerator
SmallTotal 
FiniteTotal 
SmallIncremental 
FiniteIncremental 

Definition at line 79 of file QuasiStaticSolidMechanicsPhysics.h.

80  {
81  SmallTotal,
82  FiniteTotal,
83  SmallIncremental,
84  FiniteIncremental
enum QuasiStaticSolidMechanicsPhysics::StrainAndIncrement _strain_and_increment

Constructor & Destructor Documentation

◆ DynamicSolidMechanicsPhysics()

DynamicSolidMechanicsPhysics::DynamicSolidMechanicsPhysics ( const InputParameters params)

Definition at line 81 of file DynamicSolidMechanicsPhysics.C.

83  _velocities(getParam<std::vector<AuxVariableName>>("velocities")),
84  _accelerations(getParam<std::vector<AuxVariableName>>("accelerations"))
85 {
86 }
std::vector< AuxVariableName > _velocities
const T & getParam(const std::string &name) const
QuasiStaticSolidMechanicsPhysics(const InputParameters &params)
std::vector< AuxVariableName > _accelerations

Member Function Documentation

◆ act()

void DynamicSolidMechanicsPhysics::act ( )
overridevirtual

Reimplemented from QuasiStaticSolidMechanicsPhysics.

Reimplemented in LegacyDynamicTensorMechanicsAction.

Definition at line 89 of file DynamicSolidMechanicsPhysics.C.

90 {
91  const std::array<std::string, 3> dir{{"x", "y", "z"}};
92 
93  if (_velocities.size() < _ndisp)
94  paramError("velocities", "Supply one velocity variable per displacement direction");
95  if (_accelerations.size() < _ndisp)
96  paramError("accelerations", "Supply one acceleration variable per displacement direction");
97 
98  // Add aux variables for velocities and accelerations
99  if (_current_task == "add_aux_variable" && getParam<bool>("add_variables"))
100  {
101  auto params = _factory.getValidParams("MooseVariable");
102  // determine necessary order
103  const bool second = _problem->mesh().hasSecondOrderElements();
104 
105  params.set<MooseEnum>("order") = second ? "SECOND" : "FIRST";
106  params.set<MooseEnum>("family") = "LAGRANGE";
107 
108  for (unsigned int i = 0; i < _ndisp; ++i)
109  {
110  _problem->addAuxVariable("MooseVariable", _velocities[i], params);
111  _problem->addAuxVariable("MooseVariable", _accelerations[i], params);
112  }
113  }
114 
115  // Add aux kernel for velocities and accelerations
116  if (_current_task == "add_aux_kernel")
117  {
118  //
119  // Note: AuxKernels that are limited to TIMESTEP_END to not get their dependencies
120  // resolved automatically. Thus we _must_ construct the acceleration kernels _first_.
121  // NewmarkAccelAux only uses the old velocity.
122  //
123 
124  // acceleration aux kernels
125  for (unsigned int i = 0; i < _ndisp; ++i)
126  {
127  auto kernel_type = "NewmarkAccelAux";
128  auto params = _factory.getValidParams(kernel_type);
129  params.set<AuxVariableName>("variable") = _accelerations[i];
130  params.set<std::vector<VariableName>>("displacement") = {_displacements[i]};
131  params.set<std::vector<VariableName>>("velocity") = {_velocities[i]};
132  params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_END;
133  params.set<Real>("beta") = getParam<Real>("newmark_beta");
134  params.applyParameters(parameters());
135  _problem->addAuxKernel(kernel_type, "TM_" + name() + '_' + _accelerations[i], params);
136  }
137 
138  // velocity aux kernels
139  for (unsigned int i = 0; i < _ndisp; ++i)
140  {
141  auto kernel_type = "NewmarkVelAux";
142  auto params = _factory.getValidParams(kernel_type);
143  params.set<AuxVariableName>("variable") = _velocities[i];
144  params.set<std::vector<VariableName>>("acceleration") = {_accelerations[i]};
145  params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_END;
146  params.set<Real>("gamma") = getParam<Real>("newmark_gamma");
147  params.applyParameters(parameters());
148  _problem->addAuxKernel(kernel_type, "TM_" + name() + '_' + _velocities[i], params);
149  }
150  }
151 
152  // add inertia kernel
153  if (_current_task == "add_kernel")
154  {
155  for (unsigned int i = 0; i < _ndisp; ++i)
156  {
157  auto kernel_type = _use_ad ? "ADInertialForce" : "InertialForce";
158  auto params = _factory.getValidParams(kernel_type);
159 
160  params.set<NonlinearVariableName>("variable") = _displacements[i];
161  params.set<std::vector<VariableName>>("velocity") = {_velocities[i]};
162  params.set<std::vector<VariableName>>("acceleration") = {_accelerations[i]};
163  params.set<bool>("use_displaced_mesh") = false;
164  params.set<Real>("beta") = getParam<Real>("newmark_beta");
165  params.set<Real>("gamma") = getParam<Real>("newmark_gamma");
166  params.set<Real>("alpha") = getParam<Real>("hht_alpha");
167  params.set<MaterialPropertyName>("eta") =
168  getParam<MaterialPropertyName>("mass_damping_coefficient");
169 
170  params.applyParameters(parameters());
171 
172  _problem->addKernel(kernel_type, "TM_" + name() + "_inertia_" + dir[i], params);
173  }
174  }
175 
176  // call parent class method
178 }
std::vector< AuxVariableName > _velocities
void paramError(const std::string &param, Args... args) const
Factory & _factory
unsigned int _ndisp
Number of displacement variables.
const InputParameters & parameters() const
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
std::vector< VariableName > _displacements
displacement variables
const std::string & name() const
const std::string & _current_task
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
std::shared_ptr< FEProblemBase > & _problem
std::vector< AuxVariableName > _accelerations

◆ actEigenstrainNames()

void QuasiStaticSolidMechanicsPhysics::actEigenstrainNames ( )
protectedinherited

Definition at line 632 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

633 {
634  // Create containers for collecting blockIDs and eigenstrain names from materials
635  std::map<std::string, std::set<SubdomainID>> material_eigenstrain_map;
636  std::set<std::string> eigenstrain_set;
637 
638  std::set<MaterialPropertyName> verified_eigenstrain_names;
639 
640  std::map<std::string, std::string> remove_add_map;
641  std::set<std::string> remove_reduced_set;
642 
643  // Loop over all the materials(eigenstrains) already created
644  auto materials = _problem->getMaterialWarehouse().getObjects();
645  for (auto & mat : materials)
646  {
647  std::shared_ptr<BlockRestrictable> blk = std::dynamic_pointer_cast<BlockRestrictable>(mat);
648  const InputParameters & mat_params = mat->parameters();
649  auto & mat_name = mat->type();
650 
651  // Check for eigenstrain names, only deal with those materials
652  if (mat_params.isParamValid("eigenstrain_name"))
653  {
654  std::shared_ptr<MaterialData> mat_dat;
655  auto name = mat_params.get<std::string>("eigenstrain_name");
656 
657  // Check for base_name prefix
658  if (mat_params.isParamValid("base_name"))
659  name = mat_params.get<std::string>("base_name") + '_' + name;
660 
661  // Check block restrictions
662  if (!blk)
663  mooseError("Internal error, Material object that does not inherit form BlockRestricted");
664  const std::set<SubdomainID> & blocks =
665  blk->blockRestricted() ? blk->blockIDs() : blk->meshBlockIDs();
666 
667  if (std::includes(blocks.begin(), blocks.end(), _subdomain_ids.begin(), _subdomain_ids.end()))
668  {
669  material_eigenstrain_map[name].insert(blocks.begin(), blocks.end());
670  eigenstrain_set.insert(name);
671  }
672  }
673 
674  // Account for reduced eigenstrains and CompositeEigenstrains
675  if (mat_name == "ComputeReducedOrderEigenstrain")
676  {
677  auto input_eigenstrain_names =
678  mat_params.get<std::vector<MaterialPropertyName>>("input_eigenstrain_names");
679  remove_reduced_set.insert(input_eigenstrain_names.begin(), input_eigenstrain_names.end());
680  }
681  // Account for CompositeEigenstrains
682  if (mat_name == "CompositeEigenstrain")
683  {
684  auto remove_list = mat_params.get<std::vector<MaterialPropertyName>>("tensors");
685  for (auto i : remove_list)
686  remove_reduced_set.insert(i);
687  }
688 
689  // Account for MaterialADConverter , add or remove later
690  if (mat_name == "RankTwoTensorMaterialADConverter")
691  {
692  std::vector<MaterialPropertyName> remove_list;
693  std::vector<MaterialPropertyName> add_list;
694 
695  if (mat_params.isParamValid("ad_props_out") && mat_params.isParamValid("reg_props_in") &&
696  _use_ad)
697  {
698  remove_list = mat_params.get<std::vector<MaterialPropertyName>>("reg_props_in");
699  add_list = mat_params.get<std::vector<MaterialPropertyName>>("ad_props_out");
700  }
701  if (mat_params.isParamValid("ad_props_in") && mat_params.isParamValid("reg_props_out") &&
702  !_use_ad)
703  {
704  remove_list = mat_params.get<std::vector<MaterialPropertyName>>("ad_props_in");
705  add_list = mat_params.get<std::vector<MaterialPropertyName>>("reg_props_out");
706  }
707 
708  // These vectors are the same size as checked in MaterialADConverter
709  for (unsigned int index = 0; index < remove_list.size(); index++)
710  remove_add_map.emplace(remove_list[index], add_list[index]);
711  }
712  }
713  // All the materials have been accounted for, now remove or add parts
714 
715  // Remove names which aren't eigenstrains (converter properties)
716  for (auto remove_add_index : remove_add_map)
717  {
718  const bool is_in = eigenstrain_set.find(remove_add_index.first) != eigenstrain_set.end();
719  if (is_in)
720  {
721  eigenstrain_set.erase(remove_add_index.first);
722  eigenstrain_set.insert(remove_add_index.second);
723  }
724  }
725  for (auto index : remove_reduced_set)
726  eigenstrain_set.erase(index);
727 
728  // Compare the blockIDs set of eigenstrain names with the vector of _eigenstrain_names for the
729  // current subdomainID
730  std::set_union(eigenstrain_set.begin(),
731  eigenstrain_set.end(),
732  _eigenstrain_names.begin(),
733  _eigenstrain_names.end(),
734  std::inserter(verified_eigenstrain_names, verified_eigenstrain_names.begin()));
735 
736  // Ensure the eigenstrain names previously passed include any missing names
737  _eigenstrain_names.resize(verified_eigenstrain_names.size());
738  std::copy(verified_eigenstrain_names.begin(),
739  verified_eigenstrain_names.end(),
740  _eigenstrain_names.begin());
741 
742  Moose::out << COLOR_CYAN << "*** Automatic Eigenstrain Names ***"
743  << "\n"
744  << _name << ": " << Moose::stringify(_eigenstrain_names) << "\n"
745  << COLOR_DEFAULT << std::flush;
746 }
const std::string & _name
char ** blocks
std::set< SubdomainID > _subdomain_ids
set generated from the passed in vector of subdomain names
const std::string & name() const
std::string stringify(const T &t)
std::vector< MaterialPropertyName > _eigenstrain_names
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem

◆ actGatherActionParameters()

void QuasiStaticSolidMechanicsPhysics::actGatherActionParameters ( )
protectedinherited

Definition at line 907 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

908 {
909  // Gather info about all other solid mechanics physics when we add variables
910  if (_current_task == "validate_coordinate_systems" && getParam<bool>("add_variables"))
911  {
913  for (const auto & action : actions)
914  {
915  const auto size_before = _subdomain_id_union.size();
916  const auto added_size = action->_subdomain_ids.size();
917  _subdomain_id_union.insert(action->_subdomain_ids.begin(), action->_subdomain_ids.end());
918  const auto size_after = _subdomain_id_union.size();
919 
920  if (size_after != size_before + added_size)
921  mooseError("The block restrictions in the SolidMechanics/QuasiStatic actions must be "
922  "non-overlapping.");
923 
924  if (added_size == 0 && actions.size() > 1)
925  mooseError(
926  "No SolidMechanics/QuasiStatic action can be block unrestricted if more than one "
927  "SolidMechanics/QuasiStatic action is specified.");
928  }
929  }
930 }
std::set< SubdomainID > _subdomain_id_union
set generated from the combined block restrictions of all SolidMechanics/Master action blocks ...
ActionWarehouse & _awh
const std::string & _current_task
void mooseError(Args &&... args) const
std::vector< const T *> getActions()

◆ actLagrangianKernelStrain()

void QuasiStaticSolidMechanicsPhysics::actLagrangianKernelStrain ( )
protectedinherited

Definition at line 933 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

934 {
935  std::string type;
937  type = "ComputeLagrangianStrain";
938  else if (_coord_system == Moose::COORD_RZ)
939  type = "ComputeLagrangianStrainAxisymmetricCylindrical";
941  type = "ComputeLagrangianStrainCentrosymmetricSpherical";
942  else
943  mooseError("Unsupported coordinate system");
944 
945  auto params = _factory.getValidParams(type);
946 
947  if (isParamValid("strain_base_name"))
948  params.set<std::string>("base_name") = getParam<std::string>("strain_base_name");
949 
950  params.set<std::vector<VariableName>>("displacements") = _coupled_displacements;
951  params.set<std::vector<MaterialPropertyName>>("eigenstrain_names") = _eigenstrain_names;
952  params.set<bool>("large_kinematics") = _lk_large_kinematics;
953  params.set<std::vector<SubdomainName>>("block") = _subdomain_names;
954 
955  // Error if volumetric locking correction is on for higher-order elements
956  if (_problem->mesh().hasSecondOrderElements() && _lk_locking)
957  mooseError("Volumetric locking correction should not be used for "
958  "higher-order elements.");
959 
960  params.set<bool>("stabilize_strain") = _lk_locking;
961 
962  if (_lk_homogenization)
963  {
964  params.set<std::vector<MaterialPropertyName>>("homogenization_gradient_names") = {
966  }
967 
968  _problem->addMaterial(type, name() + "_strain", params);
969 
970  // Add the homogenization strain calculator
971  if (_lk_homogenization)
972  {
973  std::string type = "ComputeHomogenizedLagrangianStrain";
974  auto params = _factory.getValidParams(type);
975 
976  params.set<MaterialPropertyName>("homogenization_gradient_name") = _homogenization_strain_name;
977  params.set<std::vector<VariableName>>("macro_gradient") = {_hname};
978  params.set<MultiMooseEnum>("constraint_types") = _constraint_types;
979  params.set<std::vector<FunctionName>>("targets") = _targets;
980 
981  _problem->addMaterial(type, name() + "_compute_" + _homogenization_strain_name, params);
982  }
983 }
const bool _lk_large_kinematics
Simplified flag for small/large deformations, Lagrangian kernel system.
Factory & _factory
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
COORD_RSPHERICAL
std::vector< SubdomainName > _subdomain_names
if this vector is not empty the variables, kernels and materials are restricted to these subdomains ...
const std::string & name() const
std::vector< VariableName > _coupled_displacements
Coupled displacement variables.
const std::string & type() const
bool _lk_locking
Simplified volumetric locking correction flag for new kernels.
std::vector< MaterialPropertyName > _eigenstrain_names
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem
bool isParamValid(const std::string &name) const
bool _lk_homogenization
Flag indicating if the homogenization system is present for new kernels.

◆ actOutputGeneration()

void QuasiStaticSolidMechanicsPhysics::actOutputGeneration ( )
protectedinherited

Definition at line 551 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

552 {
553  if (_current_task == "add_material")
555 
556  // Add variables (optional)
557  if (_current_task == "add_aux_variable")
558  {
559  unsigned int index = 0;
560  for (auto out : _generate_output)
561  {
562  const auto & order = _material_output_order[index];
563  const auto & family = _material_output_family[index];
564 
565  std::string type = (order == "CONSTANT" && family == "MONOMIAL")
566  ? "MooseVariableConstMonomial"
567  : "MooseVariable";
568 
569  // Create output helper aux variables
570  auto params = _factory.getValidParams(type);
571  params.set<MooseEnum>("order") = order;
572  params.set<MooseEnum>("family") = family;
573 
574  if (family == "MONOMIAL")
575  _problem->addAuxVariable(type, _base_name + out, params);
576  else
577  _problem->addVariable(type, _base_name + out, params);
578 
579  index++;
580  }
581  }
582 
583  // Add output AuxKernels
584  else if (_current_task == "add_aux_kernel")
585  {
586  std::string ad_prepend = _use_ad ? "AD" : "";
587  // Loop through output aux variables
588  unsigned int index = 0;
589  for (auto out : _generate_output)
590  {
591  if (_material_output_family[index] == "MONOMIAL")
592  {
594 
595  params = _factory.getValidParams("MaterialRealAux");
596  params.applyParameters(parameters());
597  params.set<MaterialPropertyName>("property") = _base_name + out;
598  params.set<AuxVariableName>("variable") = _base_name + out;
599  params.set<ExecFlagEnum>("execute_on") = EXEC_TIMESTEP_END;
600 
601  _problem->addAuxKernel(
602  ad_prepend + "MaterialRealAux", _base_name + out + '_' + name(), params);
603  }
604  index++;
605  }
606  }
607  else if (_current_task == "add_kernel")
608  {
609  std::string ad_prepend = _use_ad ? "AD" : "";
610  // Loop through output aux variables
611  unsigned int index = 0;
612  for (auto out : _generate_output)
613  {
614  if (_material_output_family[index] != "MONOMIAL")
615  {
617 
618  params = _factory.getValidParams("MaterialPropertyValue");
619  params.applyParameters(parameters());
620  params.set<MaterialPropertyName>("prop_name") = _base_name + out;
621  params.set<NonlinearVariableName>("variable") = _base_name + out;
622 
623  _problem->addKernel(
624  ad_prepend + "MaterialPropertyValue", _base_name + out + '_' + name(), params);
625  }
626  index++;
627  }
628  }
629 }
Factory & _factory
const InputParameters & parameters() const
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
std::vector< std::string > _generate_output
output materials to generate scalar stress/strain tensor quantities
InputParameters emptyInputParameters()
const std::string & name() const
const std::string & type() const
const std::string & _current_task
std::shared_ptr< FEProblemBase > & _problem
const std::string _base_name
base name for the current master action block

◆ actOutputMatProp()

void QuasiStaticSolidMechanicsPhysics::actOutputMatProp ( )
protectedinherited

Definition at line 799 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputGeneration().

800 {
801  std::string ad_prepend = _use_ad ? "AD" : "";
802 
803  if (_current_task == "add_material")
804  {
805  // Add output Materials
806  for (auto out : _generate_output)
807  {
809 
810  // RankTwoCartesianComponent
811  if (
812  [&]()
813  {
814  for (const auto & r2q : _rank_two_cartesian_component_table)
815  for (unsigned int a = 0; a < 3; ++a)
816  for (unsigned int b = 0; b < 3; ++b)
817  if (r2q.first + '_' + _component_table[a] + _component_table[b] == out)
818  {
819  auto type = ad_prepend + "RankTwoCartesianComponent";
820  params = _factory.getValidParams(type);
821  params.set<MaterialPropertyName>("rank_two_tensor") = _base_name + r2q.second;
822  params.set<unsigned int>("index_i") = a;
823  params.set<unsigned int>("index_j") = b;
824 
825  params.applyParameters(parameters());
826  params.set<MaterialPropertyName>("property_name") = _base_name + out;
827  _problem->addMaterial(type, _base_name + out + '_' + name(), params);
828  return true;
829  }
830  return false;
831  }())
832  continue;
833 
834  // RankTwoDirectionalComponent
835  if (setupOutput(out,
837  [&](std::string prop_name, std::string invariant)
838  {
839  auto type = ad_prepend + "RankTwoDirectionalComponent";
840  params = _factory.getValidParams(type);
841  params.set<MaterialPropertyName>("rank_two_tensor") =
842  _base_name + prop_name;
843  params.set<MooseEnum>("invariant") = invariant;
844  params.applyParameters(parameters());
845  params.set<MaterialPropertyName>("property_name") = _base_name + out;
846  _problem->addMaterial(type, _base_name + out + '_' + name(), params);
847  }))
848  continue;
849 
850  // RankTwoInvariant
851  if (setupOutput(out,
853  [&](std::string prop_name, std::string invariant)
854  {
855  auto type = ad_prepend + "RankTwoInvariant";
856  params = _factory.getValidParams(type);
857  params.set<MaterialPropertyName>("rank_two_tensor") =
858  _base_name + prop_name;
859  params.set<MooseEnum>("invariant") = invariant;
860  params.applyParameters(parameters());
861  params.set<MaterialPropertyName>("property_name") = _base_name + out;
862  _problem->addMaterial(type, _base_name + out + '_' + name(), params);
863  }))
864  continue;
865 
866  // RankTwoCylindricalComponent
867  if (setupOutput(
868  out,
870  [&](std::string prop_name, std::string component)
871  {
873  mooseError(
874  "Cannot use cylindrical component output in a spherical coordinate system.");
875  auto type = ad_prepend + "RankTwoCylindricalComponent";
876  params = _factory.getValidParams(type);
877  params.set<MaterialPropertyName>("rank_two_tensor") = _base_name + prop_name;
878  params.set<MooseEnum>("cylindrical_component") = component;
879  params.applyParameters(parameters());
880  params.set<MaterialPropertyName>("property_name") = _base_name + out;
881  _problem->addMaterial(type, _base_name + out + '_' + name(), params);
882  }))
883  continue;
884 
885  // RankTwoSphericalComponent
886  if (setupOutput(out,
888  [&](std::string prop_name, std::string component)
889  {
890  auto type = ad_prepend + "RankTwoSphericalComponent";
891  params = _factory.getValidParams(type);
892  params.set<MaterialPropertyName>("rank_two_tensor") =
893  _base_name + prop_name;
894  params.set<MooseEnum>("spherical_component") = component;
895  params.applyParameters(parameters());
896  params.set<MaterialPropertyName>("property_name") = _base_name + out;
897  _problem->addMaterial(type, _base_name + out + '_' + name(), params);
898  }))
899  continue;
900 
901  paramError("generate_output", "Unable to add output Material for '", out, "'");
902  }
903  }
904 }
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 ...
void paramError(const std::string &param, Args... args) const
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_invariant_table
Factory & _factory
static const std::string component
Definition: NS.h:153
const InputParameters & parameters() const
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_cylindrical_component_table
T & set(const std::string &name, bool quiet_mode=false)
InputParameters getValidParams(const std::string &name) const
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
COORD_RSPHERICAL
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
InputParameters emptyInputParameters()
const std::string & name() const
const std::string & type() const
const std::string & _current_task
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
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem
const std::string _base_name
base name for the current master action block
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_spherical_component_table

◆ actStressDivergenceTensorsStrain()

void QuasiStaticSolidMechanicsPhysics::actStressDivergenceTensorsStrain ( )
protectedinherited

Definition at line 986 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

987 {
988  std::string ad_prepend = _use_ad ? "AD" : "";
989 
990  std::string type;
991 
992  // no plane strain
994  {
995  std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
996  {{Moose::COORD_XYZ, StrainAndIncrement::SmallTotal}, "ComputeSmallStrain"},
997  {{Moose::COORD_XYZ, StrainAndIncrement::SmallIncremental}, "ComputeIncrementalStrain"},
998  {{Moose::COORD_XYZ, StrainAndIncrement::FiniteIncremental}, "ComputeFiniteStrain"},
999  {{Moose::COORD_RZ, StrainAndIncrement::SmallTotal}, "ComputeAxisymmetricRZSmallStrain"},
1001  "ComputeAxisymmetricRZIncrementalStrain"},
1003  "ComputeAxisymmetricRZFiniteStrain"},
1004  {{Moose::COORD_RSPHERICAL, StrainAndIncrement::SmallTotal}, "ComputeRSphericalSmallStrain"},
1006  "ComputeRSphericalIncrementalStrain"},
1008  "ComputeRSphericalFiniteStrain"}};
1009 
1010  auto type_it = type_map.find(std::make_pair(_coord_system, _strain_and_increment));
1011  if (type_it != type_map.end())
1012  type = type_it->second;
1013  else
1014  mooseError("Unsupported strain formulation");
1015  }
1019  {
1022  paramError("use_automatic_differentiation",
1023  "AD not setup for use with PlaneStrain or GeneralizedPlaneStrain");
1024 
1025  std::map<std::pair<Moose::CoordinateSystemType, StrainAndIncrement>, std::string> type_map = {
1026  {{Moose::COORD_XYZ, StrainAndIncrement::SmallTotal}, "ComputePlaneSmallStrain"},
1027  {{Moose::COORD_XYZ, StrainAndIncrement::SmallIncremental}, "ComputePlaneIncrementalStrain"},
1028  {{Moose::COORD_XYZ, StrainAndIncrement::FiniteIncremental}, "ComputePlaneFiniteStrain"},
1029  {{Moose::COORD_RZ, StrainAndIncrement::SmallTotal}, "ComputeAxisymmetric1DSmallStrain"},
1031  "ComputeAxisymmetric1DIncrementalStrain"},
1033  "ComputeAxisymmetric1DFiniteStrain"}};
1034 
1035  // choose kernel type based on coordinate system
1036  auto type_it = type_map.find(std::make_pair(_coord_system, _strain_and_increment));
1037  if (type_it != type_map.end())
1038  type = type_it->second;
1039  else
1040  mooseError("Unsupported coordinate system for plane strain.");
1041  }
1042  else
1043  mooseError("Unsupported planar formulation");
1044 
1045  // set material parameters
1046  auto params = _factory.getValidParams(ad_prepend + type);
1047  params.applyParameters(
1048  parameters(),
1049  {"displacements", "use_displaced_mesh", "out_of_plane_strain", "scalar_out_of_plane_strain"});
1050 
1051  if (isParamValid("strain_base_name"))
1052  params.set<std::string>("base_name") = getParam<std::string>("strain_base_name");
1053 
1054  params.set<std::vector<VariableName>>("displacements") = _coupled_displacements;
1055  params.set<bool>("use_displaced_mesh") = false;
1056 
1057  if (isParamValid("scalar_out_of_plane_strain"))
1058  params.set<std::vector<VariableName>>("scalar_out_of_plane_strain") = {
1059  getParam<VariableName>("scalar_out_of_plane_strain")};
1060 
1061  if (isParamValid("out_of_plane_strain"))
1062  params.set<std::vector<VariableName>>("out_of_plane_strain") = {
1063  getParam<VariableName>("out_of_plane_strain")};
1064 
1065  params.set<std::vector<MaterialPropertyName>>("eigenstrain_names") = _eigenstrain_names;
1066 
1067  _problem->addMaterial(ad_prepend + type, name() + "_strain", params);
1068 }
enum QuasiStaticSolidMechanicsPhysics::StrainAndIncrement _strain_and_increment
void paramError(const std::string &param, Args... args) const
Factory & _factory
const InputParameters & parameters() const
InputParameters getValidParams(const std::string &name) const
void applyParameters(const InputParameters &common, const std::vector< std::string > &exclude={}, const bool allow_private=false)
COORD_RSPHERICAL
enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation _planar_formulation
const std::string & name() const
std::vector< VariableName > _coupled_displacements
Coupled displacement variables.
const std::string & type() const
std::vector< MaterialPropertyName > _eigenstrain_names
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem
bool isParamValid(const std::string &name) const

◆ actSubdomainChecks()

void QuasiStaticSolidMechanicsPhysics::actSubdomainChecks ( )
protectedinherited

Definition at line 502 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::act().

503 {
504  // Do the coordinate system check only once the problem is created
505  if (_current_task == "setup_mesh_complete")
506  {
507  // get subdomain IDs
508  for (auto & name : _subdomain_names)
509  {
510  auto id = _mesh->getSubdomainID(name);
511  if (id == Moose::INVALID_BLOCK_ID)
512  paramError("block", "Subdomain \"" + name + "\" not found in mesh.");
513  else
514  _subdomain_ids.insert(id);
515  }
516  }
517 
518  if (_current_task == "validate_coordinate_systems")
519  {
520  // use either block restriction list or list of all subdomains in the mesh
521  const auto & check_subdomains =
522  _subdomain_ids.empty() ? _problem->mesh().meshSubdomains() : _subdomain_ids;
523  if (check_subdomains.empty())
524  mooseError("No subdomains found");
525 
526  // make sure all subdomains are using the same coordinate system
527  _coord_system = _problem->getCoordSystem(*check_subdomains.begin());
528  for (auto subdomain : check_subdomains)
529  if (_problem->getCoordSystem(subdomain) != _coord_system)
530  mooseError("The SolidMechanics action requires all subdomains to have the same coordinate "
531  "system.");
532 
534  {
536  mooseError("'out_of_plane_direction' must be 'z' for axisymmetric simulations");
537  }
539  {
541  mooseError(
542  "Must specify two displacements for plane strain when the out of plane direction is z");
544  mooseError("Must specify three displacements for plane strain when the out of plane "
545  "direction is x or y");
546  }
547  }
548 }
void paramError(const std::string &param, Args... args) const
std::set< SubdomainID > _subdomain_ids
set generated from the passed in vector of subdomain names
unsigned int _ndisp
Number of displacement variables.
enum QuasiStaticSolidMechanicsPhysics::PlanarFormulation _planar_formulation
const SubdomainID INVALID_BLOCK_ID
std::vector< SubdomainName > _subdomain_names
if this vector is not empty the variables, kernels and materials are restricted to these subdomains ...
const std::string & name() const
const std::string & _current_task
std::shared_ptr< MooseMesh > & _mesh
void mooseError(Args &&... args) const
std::shared_ptr< FEProblemBase > & _problem

◆ addCartesianComponentOutput()

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

Definition at line 334 of file QuasiStaticSolidMechanicsPhysicsBase.C.

336 {
337  if (prop_name.empty())
338  // the enum name is the actual tensor material property name
339  _rank_two_cartesian_component_table.emplace(enum_name, enum_name);
340  else
341  // supply a different name for the enum options (this is done for
342  // 'strain' -> 'mechanical_strain' in the TMA)
343  _rank_two_cartesian_component_table.emplace(enum_name, prop_name);
344 }
static std::map< std::string, std::string > _rank_two_cartesian_component_table

◆ getKernelParameters()

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

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)
T & set(const std::string &name, bool quiet_mode=false)
const std::string & type() const

◆ getKernelType()

std::string DynamicSolidMechanicsPhysics::getKernelType ( )
overrideprotectedvirtual

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 }
void mooseError(Args &&... args) const

◆ materialOutputFamilies()

MultiMooseEnum QuasiStaticSolidMechanicsPhysicsBase::materialOutputFamilies ( )
staticinherited

◆ materialOutputOrders()

MultiMooseEnum QuasiStaticSolidMechanicsPhysicsBase::materialOutputOrders ( )
staticinherited

Definition at line 291 of file QuasiStaticSolidMechanicsPhysicsBase.C.

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

292 {
294 
295  return MultiMooseEnum(orders);
296 }
std::string getRawNames() const
static MooseEnum getAuxVariableOrders()

◆ outputPropertiesType()

MultiMooseEnum QuasiStaticSolidMechanicsPhysicsBase::outputPropertiesType ( )
staticinherited

Definition at line 305 of file QuasiStaticSolidMechanicsPhysicsBase.C.

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

306 {
307  std::string options = "";
308  for (auto & r2tc : _rank_two_cartesian_component_table)
309  for (unsigned int a = 0; a < 3; ++a)
310  for (unsigned int b = 0; b < 3; ++b)
311  options += (options == "" ? "" : " ") + r2tc.first + '_' + _component_table[a] +
313 
314  for (auto & r2i : _rank_two_invariant_table)
315  for (auto & t : r2i.second.second)
316  options += " " + r2i.first + "_" + t;
317 
318  for (auto & r2sdc : _rank_two_directional_component_table)
319  for (auto & r : r2sdc.second.second)
320  options += " " + r2sdc.first + "_" + r;
321 
322  for (auto & r2cc : _rank_two_cylindrical_component_table)
323  for (auto & r : r2cc.second.second)
324  options += " " + r2cc.first + "_" + r;
325 
326  for (auto & r2sc : _rank_two_spherical_component_table)
327  for (auto & r : r2sc.second.second)
328  options += " " + r2sc.first + "_" + r;
329 
330  return MultiMooseEnum(options, "", true);
331 }
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_cylindrical_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_directional_component_table
static std::map< std::string, std::string > _rank_two_cartesian_component_table
static const std::map< std::string, std::pair< std::string, std::vector< std::string > > > _rank_two_spherical_component_table

◆ setupOutput()

template<typename T , typename T2 >
bool QuasiStaticSolidMechanicsPhysics::setupOutput ( std::string  out,
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 173 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::actOutputMatProp().

174 {
175  for (const auto & t1 : table)
176  {
177  // find the officially supported properties
178  for (const auto & t2 : t1.second.second)
179  if (t1.first + '_' + t2 == out)
180  {
181  const auto it = _rank_two_cartesian_component_table.find(t2);
182  if (it != _rank_two_cartesian_component_table.end())
183  {
184  setup(it->second, t1.second.first);
185  return true;
186  }
187  else
188  mooseError("Internal error. The permitted tensor shortcuts must be keys in the "
189  "'_rank_two_cartesian_component_table'.");
190  }
191 
192  // check for custom properties
193  auto prefix = t1.first + '_';
194  if (out.substr(0, prefix.length()) == prefix)
195  {
196  setup(out.substr(prefix.length()), t1.second.first);
197  return true;
198  }
199  }
200 
201  return false;
202 }
static std::map< std::string, std::string > _rank_two_cartesian_component_table
OStreamProxy out
void setup(EquationSystems &systems, Mesh &mesh, GetPot &args)
void mooseError(Args &&... args) const

◆ validParams()

InputParameters DynamicSolidMechanicsPhysics::validParams ( )
static

Definition at line 38 of file DynamicSolidMechanicsPhysics.C.

Referenced by LegacyDynamicTensorMechanicsAction::validParams().

39 {
41  params.addClassDescription("Set up dynamic stress divergence kernels");
42  params.addParam<bool>("static_initialization",
43  false,
44  "Set to true get the system to "
45  "equilibrium under gravity by running a "
46  "quasi-static analysis (by solving Ku = F) "
47  "in the first time step.");
48 
49  params.addParam<std::vector<AuxVariableName>>(
50  "velocities",
51  std::vector<AuxVariableName>({"vel_x", "vel_y", "vel_z"}),
52  "Names of the velocity variables");
53  params.addParam<std::vector<AuxVariableName>>(
54  "accelerations",
55  std::vector<AuxVariableName>({"accel_x", "accel_y", "accel_z"}),
56  "Names of the acceleration variables");
57  params.addParamNamesToGroup("velocities accelerations", "Variables");
58 
59  params.addParam<Real>("hht_alpha",
60  0,
61  "alpha parameter for mass dependent numerical damping induced "
62  "by HHT time integration scheme");
63  params.addParam<Real>("newmark_beta", 0.25, "beta parameter for Newmark Time integration");
64  params.addParam<Real>("newmark_gamma", 0.5, "gamma parameter for Newmark Time integration");
65  params.addParam<MaterialPropertyName>("mass_damping_coefficient",
66  0.0,
67  "Name of material property or a constant real "
68  "number defining mass Rayleigh parameter (eta).");
69  params.addParam<MaterialPropertyName>("stiffness_damping_coefficient",
70  0.0,
71  "Name of material property or a constant real "
72  "number defining stiffness Rayleigh parameter (zeta).");
73  params.addParam<MaterialPropertyName>(
74  "density", "density", "Name of Material Property that provides the density");
75  params.addParamNamesToGroup("hht_alpha newmark_beta newmark_gamma",
76  "Time integration parameters");
77 
78  return params;
79 }
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
void addClassDescription(const std::string &doc_string)

◆ verifyOrderAndFamilyOutputs()

void QuasiStaticSolidMechanicsPhysics::verifyOrderAndFamilyOutputs ( )
protectedinherited

Definition at line 749 of file QuasiStaticSolidMechanicsPhysics.C.

Referenced by QuasiStaticSolidMechanicsPhysics::QuasiStaticSolidMechanicsPhysics().

750 {
751  // Ensure material output order and family vectors are same size as generate output
752 
753  // check number of supplied orders and families
755  paramError("material_output_order",
756  "The number of orders assigned to material outputs must be: 0 to be assigned "
757  "CONSTANT; 1 to assign all outputs the same value, or the same size as the number "
758  "of generate outputs listed.");
759 
760  if (_material_output_family.size() > 1 &&
762  paramError("material_output_family",
763  "The number of families assigned to material outputs must be: 0 to be assigned "
764  "MONOMIAL; 1 to assign all outputs the same value, or the same size as the number "
765  "of generate outputs listed.");
766 
767  // if no value was provided, chose the default CONSTANT
768  if (_material_output_order.size() == 0)
770 
771  // For only one order, make all orders the same magnitude
772  if (_material_output_order.size() == 1)
774  std::vector<std::string>(_generate_output.size(), _material_output_order[0]);
775 
776  if (_verbose)
777  Moose::out << COLOR_CYAN << "*** Automatic applied material output orders ***"
778  << "\n"
779  << _name << ": " << Moose::stringify(_material_output_order) << "\n"
780  << COLOR_DEFAULT << std::flush;
781 
782  // if no value was provided, chose the default MONOMIAL
783  if (_material_output_family.size() == 0)
785 
786  // For only one family, make all families that value
787  if (_material_output_family.size() == 1)
789  std::vector<std::string>(_generate_output.size(), _material_output_family[0]);
790 
791  if (_verbose)
792  Moose::out << COLOR_CYAN << "*** Automatic applied material output families ***"
793  << "\n"
794  << _name << ": " << Moose::stringify(_material_output_family) << "\n"
795  << COLOR_DEFAULT << std::flush;
796 }
const std::string & _name
void paramError(const std::string &param, Args... args) const
void setAdditionalValue(const std::string &names)
unsigned int size() const
std::vector< std::string > _generate_output
output materials to generate scalar stress/strain tensor quantities
std::string stringify(const T &t)

Member Data Documentation

◆ _accelerations

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

Definition at line 28 of file DynamicSolidMechanicsPhysics.h.

Referenced by act().

◆ _auto_eigenstrain

const bool QuasiStaticSolidMechanicsPhysics::_auto_eigenstrain
protectedinherited

automatically gather names of eigenstrain tensors provided by simulation objects

Definition at line 134 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 106 of file QuasiStaticSolidMechanicsPhysics.h.

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

◆ _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 123 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 117 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 163 of file QuasiStaticSolidMechanicsPhysics.h.

◆ _lagrangian_kernels

const bool QuasiStaticSolidMechanicsPhysics::_lagrangian_kernels
protectedinherited

◆ _lk_formulation

const LKFormulation QuasiStaticSolidMechanicsPhysics::_lk_formulation
protectedinherited

◆ _lk_homogenization

bool QuasiStaticSolidMechanicsPhysics::_lk_homogenization
protectedinherited

◆ _lk_large_kinematics

const bool QuasiStaticSolidMechanicsPhysics::_lk_large_kinematics
protectedinherited

◆ _lk_locking

bool QuasiStaticSolidMechanicsPhysics::_lk_locking
protectedinherited

Simplified volumetric locking correction flag for new kernels.

Definition at line 153 of file QuasiStaticSolidMechanicsPhysics.h.

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

◆ _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 159 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 42 of file QuasiStaticSolidMechanicsPhysicsBase.h.

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 33 of file QuasiStaticSolidMechanicsPhysicsBase.h.

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 31 of file QuasiStaticSolidMechanicsPhysicsBase.h.

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 35 of file QuasiStaticSolidMechanicsPhysicsBase.h.

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 131 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 128 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 69 of file QuasiStaticSolidMechanicsPhysics.h.

Referenced by QuasiStaticSolidMechanicsPhysics::actGatherActionParameters().

◆ _subdomain_ids

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

set generated from the passed in vector of subdomain names

Definition at line 66 of file QuasiStaticSolidMechanicsPhysics.h.

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

◆ _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 63 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
protected

Definition at line 27 of file DynamicSolidMechanicsPhysics.h.

Referenced by act().

◆ _verbose

bool QuasiStaticSolidMechanicsPhysics::_verbose
protectedinherited

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