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

ComputePlaneSmallStrain defines small strains under generalized plane strain and plane stress assumptions, where the out of plane strain can be uniformly or non-uniformly zero or nonzero. More...

#include <ComputePlaneSmallStrain.h>

Inheritance diagram for ComputePlaneSmallStrain:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 ComputePlaneSmallStrain (const InputParameters &parameters)
 
void initialSetup () override
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialProperty (const std::string &name)
 
const GenericMaterialProperty< U, is_ad > & getDefaultMaterialPropertyByName (const std::string &name)
 
void validateDerivativeMaterialPropertyBase (const std::string &base)
 
const MaterialPropertyName derivativePropertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName derivativePropertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName derivativePropertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName derivativePropertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
GenericMaterialProperty< U, is_ad > & declarePropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, const SymbolName &c1, unsigned int v2, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivative (const std::string &base, unsigned int v1, unsigned int v2=libMesh::invalid_uint, unsigned int v3=libMesh::invalid_uint)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< VariableName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const std::vector< SymbolName > &c)
 
const GenericMaterialProperty< U, is_ad > & getMaterialPropertyDerivativeByName (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2="", const SymbolName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateCoupling (const MaterialPropertyName &base, const std::vector< VariableName > &c, bool validate_aux=true)
 
void validateCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
void validateNonlinearCoupling (const MaterialPropertyName &base, const VariableName &c1="", const VariableName &c2="", const VariableName &c3="")
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyName (const MaterialPropertyName &base, const std::vector< SymbolName > &c) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameFirst (const MaterialPropertyName &base, const SymbolName &c1) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameSecond (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 
const MaterialPropertyName propertyNameThird (const MaterialPropertyName &base, const SymbolName &c1, const SymbolName &c2, const SymbolName &c3) const
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

virtual Real computeOutOfPlaneStrain ()
 
unsigned int getCurrentSubblockIndex () const
 gets its subblock index for current element
 
virtual void computeProperties () override
 
virtual void displacementIntegrityCheck () override
 
virtual void initQpStatefulProperties () override
 

Protected Attributes

const SubblockIndexProvider *const _subblock_id_provider
 A Userobject that carries the subblock ID for all elements.
 
const unsigned int _out_of_plane_direction
 
unsigned int _ndisp
 Coupled displacement variables.
 
std::vector< const VariableValue * > _disp
 Displacement variables.
 
std::vector< const VariableGradient * > _grad_disp
 Gradient of displacements.
 
const std::string _base_name
 Base name of the material system.
 
MaterialProperty< RankTwoTensor > & _mechanical_strain
 
MaterialProperty< RankTwoTensor > & _total_strain
 
std::vector< MaterialPropertyName > _eigenstrain_names
 
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
 
const MaterialProperty< RankTwoTensor > *const _global_strain
 
const bool _volumetric_locking_correction
 
const Real & _current_elem_volume
 

Private Member Functions

bool haveMaterialProperty (const std::string &prop_name)
 
std::vector< VariableName > buildVariableVector (const VariableName &c1, const VariableName &c2, const VariableName &c3)
 
void validateCouplingHelper (const MaterialPropertyName &base, const std::vector< VariableName > &c, const System &system, std::vector< VariableName > &missing)
 
bool isNotObjectVariable (const VariableName &name)
 

Private Attributes

const bool _scalar_out_of_plane_strain_coupled
 Whether out-of-plane strain scalar variables are coupled.
 
const bool _out_of_plane_strain_coupled
 Whether an out-of-plane strain variable is coupled.
 
const VariableValue_out_of_plane_strain
 The out-of-plane strain variable.
 
std::vector< const VariableValue * > _scalar_out_of_plane_strain
 The out-of-plane strain scalar variables.
 
FEProblemBase_dmi_fe_problem
 

Detailed Description

ComputePlaneSmallStrain defines small strains under generalized plane strain and plane stress assumptions, where the out of plane strain can be uniformly or non-uniformly zero or nonzero.

Definition at line 20 of file ComputePlaneSmallStrain.h.

Constructor & Destructor Documentation

◆ ComputePlaneSmallStrain()

ComputePlaneSmallStrain::ComputePlaneSmallStrain ( const InputParameters parameters)

Definition at line 30 of file ComputePlaneSmallStrain.C.

31 : Compute2DSmallStrain(parameters),
32 _subblock_id_provider(isParamValid("subblock_index_provider")
33 ? &getUserObject<SubblockIndexProvider>("subblock_index_provider")
34 : nullptr),
35 _scalar_out_of_plane_strain_coupled(isCoupledScalar("scalar_out_of_plane_strain")),
36 _out_of_plane_strain_coupled(isCoupled("out_of_plane_strain")),
37 _out_of_plane_strain(_out_of_plane_strain_coupled ? coupledValue("out_of_plane_strain") : _zero)
38{
40 paramError("_out_of_plane_strain_coupled",
41 "Must define only one of out_of_plane_strain or scalar_out_of_plane_strain");
42
44 {
45 const auto nscalar_strains = coupledScalarComponents("scalar_out_of_plane_strain");
46 _scalar_out_of_plane_strain.resize(nscalar_strains);
47 for (unsigned int i = 0; i < nscalar_strains; ++i)
48 _scalar_out_of_plane_strain[i] = &coupledScalarValue("scalar_out_of_plane_strain", i);
49 }
50}
Compute2DSmallStrain defines a strain tensor, assuming small strains, in 2D geometries / simulations.
const SubblockIndexProvider *const _subblock_id_provider
A Userobject that carries the subblock ID for all elements.
const bool _scalar_out_of_plane_strain_coupled
Whether out-of-plane strain scalar variables are coupled.
const bool _out_of_plane_strain_coupled
Whether an out-of-plane strain variable is coupled.
const VariableValue & _out_of_plane_strain
The out-of-plane strain variable.
std::vector< const VariableValue * > _scalar_out_of_plane_strain
The out-of-plane strain scalar variables.

Member Function Documentation

◆ computeOutOfPlaneStrain()

Real ComputePlaneSmallStrain::computeOutOfPlaneStrain ( )
protectedvirtual

Implements Compute2DSmallStrain.

Definition at line 53 of file ComputePlaneSmallStrain.C.

54{
57 else
58 return _out_of_plane_strain[_qp];
59}
unsigned int getCurrentSubblockIndex() const
gets its subblock index for current element

◆ computeProperties()

void Compute2DSmallStrain::computeProperties ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeSmallStrain.

Definition at line 52 of file Compute2DSmallStrain.C.

53{
54 const auto o0 = _out_of_plane_direction;
55 const auto o1 = (_out_of_plane_direction + 1) % 3;
56 const auto o2 = (_out_of_plane_direction + 2) % 3;
57
58 Real volumetric_strain = 0.0;
59 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
60 {
62 _total_strain[_qp](o1, o1) = (*_grad_disp[o1])[_qp](o1);
63 _total_strain[_qp](o2, o2) = (*_grad_disp[o2])[_qp](o2);
64 _total_strain[_qp](o1, o2) = ((*_grad_disp[o1])[_qp](o2) + (*_grad_disp[o2])[_qp](o1)) / 2.0;
65 _total_strain[_qp](o2, o1) = _total_strain[_qp](o1, o2); // force the symmetrical strain tensor
66
68 volumetric_strain += _total_strain[_qp].trace() * _JxW[_qp] * _coord[_qp];
69 }
70
72 volumetric_strain /= _current_elem_volume;
73
74 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
75 {
77 {
78 const Real correction = (volumetric_strain - _total_strain[_qp].trace()) / 3.0;
79 _total_strain[_qp](0, 0) += correction;
80 _total_strain[_qp](1, 1) += correction;
81 _total_strain[_qp](2, 2) += correction;
82 }
83
85
86 // Remove the eigenstrains
87 for (const auto es : _eigenstrains)
88 _mechanical_strain[_qp] -= (*es)[_qp];
89 }
90}
const unsigned int _out_of_plane_direction
virtual Real computeOutOfPlaneStrain()=0
std::vector< const VariableGradient * > _grad_disp
Gradient of displacements.
MaterialProperty< RankTwoTensor > & _mechanical_strain
const Real & _current_elem_volume
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
MaterialProperty< RankTwoTensor > & _total_strain
const bool _volumetric_locking_correction
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ displacementIntegrityCheck()

void Compute2DSmallStrain::displacementIntegrityCheck ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeStrainBase.

Definition at line 93 of file Compute2DSmallStrain.C.

94{
95 if (_out_of_plane_direction != 2 && _ndisp != 3)
96 mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
97 "supplied displacements must be three.");
98 else if (_out_of_plane_direction == 2 && _ndisp != 2)
99 mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
100 "displacements must be two.");
101}
void mooseError(Args &&... args)
unsigned int _ndisp
Coupled displacement variables.

Referenced by Compute2DSmallStrain::initialSetup().

◆ getCurrentSubblockIndex()

unsigned int ComputePlaneSmallStrain::getCurrentSubblockIndex ( ) const
inlineprotected

gets its subblock index for current element

Definition at line 31 of file ComputePlaneSmallStrain.h.

32 {
34 };
virtual unsigned int getSubblockIndex(const Elem &) const =0
The index of subblock this element is on.

Referenced by computeOutOfPlaneStrain().

◆ initialSetup()

void Compute2DSmallStrain::initialSetup ( )
overrideinherited

Definition at line 33 of file Compute2DSmallStrain.C.

34{
36 for (unsigned int i = 0; i < 3; ++i)
37 {
39 {
40 _disp[i] = &_zero;
41 _grad_disp[i] = &_grad_zero;
42 }
43 else
44 {
45 _disp[i] = &coupledValue("displacements", i);
46 _grad_disp[i] = &coupledGradient("displacements", i);
47 }
48 }
49}
virtual void displacementIntegrityCheck() override
std::vector< const VariableValue * > _disp
Displacement variables.

Referenced by ComputeAxisymmetricRZSmallStrain::initialSetup().

◆ initQpStatefulProperties()

void ComputeStrainBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Reimplemented in ComputeCosseratIncrementalSmallStrain, and ComputeIncrementalStrainBase.

Definition at line 93 of file ComputeStrainBase.C.

94{
95 _mechanical_strain[_qp].zero();
96 _total_strain[_qp].zero();
97}

◆ validParams()

InputParameters ComputePlaneSmallStrain::validParams ( )
static

Definition at line 16 of file ComputePlaneSmallStrain.C.

17{
19 params.addClassDescription("Compute a small strain under generalized plane strain assumptions "
20 "where the out of plane strain is generally nonzero.");
21 params.addParam<UserObjectName>("subblock_index_provider",
22 "SubblockIndexProvider user object name");
23 params.addCoupledVar("scalar_out_of_plane_strain",
24 "Scalar variable for generalized plane strain");
25 params.addCoupledVar("out_of_plane_strain", "Nonlinear variable for plane stress condition");
26
27 return params;
28}
static InputParameters validParams()
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
void addClassDescription(const std::string &doc_string)
void addCoupledVar(const std::string &name, const std::string &doc_string)

Member Data Documentation

◆ _base_name

const std::string ComputeStrainBase::_base_name
protectedinherited

Base name of the material system.

Definition at line 44 of file ComputeStrainBase.h.

Referenced by ComputeStrainBase::ComputeStrainBase().

◆ _current_elem_volume

const Real& ComputeStrainBase::_current_elem_volume
protectedinherited

◆ _disp

std::vector<const VariableValue *> ComputeStrainBase::_disp
protectedinherited

◆ _eigenstrain_names

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

◆ _eigenstrains

std::vector<const MaterialProperty<RankTwoTensor> *> ComputeStrainBase::_eigenstrains
protectedinherited

◆ _global_strain

const MaterialProperty<RankTwoTensor>* const ComputeStrainBase::_global_strain
protectedinherited

◆ _grad_disp

std::vector<const VariableGradient *> ComputeStrainBase::_grad_disp
protectedinherited

◆ _mechanical_strain

MaterialProperty<RankTwoTensor>& ComputeStrainBase::_mechanical_strain
protectedinherited

◆ _ndisp

unsigned int ComputeStrainBase::_ndisp
protectedinherited

◆ _out_of_plane_direction

const unsigned int Compute2DSmallStrain::_out_of_plane_direction
protectedinherited

◆ _out_of_plane_strain

const VariableValue& ComputePlaneSmallStrain::_out_of_plane_strain
private

The out-of-plane strain variable.

Definition at line 47 of file ComputePlaneSmallStrain.h.

Referenced by computeOutOfPlaneStrain().

◆ _out_of_plane_strain_coupled

const bool ComputePlaneSmallStrain::_out_of_plane_strain_coupled
private

Whether an out-of-plane strain variable is coupled.

Definition at line 44 of file ComputePlaneSmallStrain.h.

Referenced by ComputePlaneSmallStrain().

◆ _scalar_out_of_plane_strain

std::vector<const VariableValue *> ComputePlaneSmallStrain::_scalar_out_of_plane_strain
private

The out-of-plane strain scalar variables.

Definition at line 50 of file ComputePlaneSmallStrain.h.

Referenced by computeOutOfPlaneStrain(), and ComputePlaneSmallStrain().

◆ _scalar_out_of_plane_strain_coupled

const bool ComputePlaneSmallStrain::_scalar_out_of_plane_strain_coupled
private

Whether out-of-plane strain scalar variables are coupled.

Definition at line 41 of file ComputePlaneSmallStrain.h.

Referenced by computeOutOfPlaneStrain(), and ComputePlaneSmallStrain().

◆ _subblock_id_provider

const SubblockIndexProvider* const ComputePlaneSmallStrain::_subblock_id_provider
protected

A Userobject that carries the subblock ID for all elements.

Definition at line 37 of file ComputePlaneSmallStrain.h.

Referenced by getCurrentSubblockIndex().

◆ _total_strain

MaterialProperty<RankTwoTensor>& ComputeStrainBase::_total_strain
protectedinherited

◆ _volumetric_locking_correction

const bool ComputeStrainBase::_volumetric_locking_correction
protectedinherited

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