www.mooseframework.org
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | 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 Member Functions

 ComputePlaneSmallStrain (const InputParameters &parameters)
 
void initialSetup () override
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Member Functions

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

Protected Attributes

const SubblockIndexProvider_subblock_id_provider
 
const unsigned int _out_of_plane_direction
 
unsigned int _ndisp
 Coupled displacement variables. More...
 
std::vector< const VariableValue * > _disp
 
std::vector< const VariableGradient * > _grad_disp
 
const std::string _base_name
 
MaterialProperty< RankTwoTensor > & _mechanical_strain
 
MaterialProperty< RankTwoTensor > & _total_strain
 
std::vector< MaterialPropertyName > _eigenstrain_names
 
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
 
const MaterialProperty< RankTwoTensor > * _global_strain
 
const bool _volumetric_locking_correction
 
const Real & _current_elem_volume
 

Private Attributes

const bool _scalar_out_of_plane_strain_coupled
 
const bool _out_of_plane_strain_coupled
 
const VariableValue & _out_of_plane_strain
 
unsigned int _nscalar_strains
 
std::vector< const VariableValue * > _scalar_out_of_plane_strain
 

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 25 of file ComputePlaneSmallStrain.h.

Constructor & Destructor Documentation

◆ ComputePlaneSmallStrain()

ComputePlaneSmallStrain::ComputePlaneSmallStrain ( const InputParameters &  parameters)

Definition at line 31 of file ComputePlaneSmallStrain.C.

32  : Compute2DSmallStrain(parameters),
33  _subblock_id_provider(isParamValid("subblock_index_provider")
34  ? &getUserObject<SubblockIndexProvider>("subblock_index_provider")
35  : nullptr),
36  _scalar_out_of_plane_strain_coupled(isParamValid("scalar_out_of_plane_strain")),
37  _out_of_plane_strain_coupled(isCoupled("out_of_plane_strain")),
38  _out_of_plane_strain(_out_of_plane_strain_coupled ? coupledValue("out_of_plane_strain")
39  : _zero),
40  _nscalar_strains(coupledScalarComponents("scalar_out_of_plane_strain"))
41 {
43  mooseError("Must define only one of out_of_plane_strain or scalar_out_of_plane_strain");
44 
46  {
48  for (unsigned int i = 0; i < _nscalar_strains; ++i)
49  _scalar_out_of_plane_strain[i] = &coupledScalarValue("scalar_out_of_plane_strain", i);
50  }
51 }

Member Function Documentation

◆ computeOutOfPlaneStrain()

Real ComputePlaneSmallStrain::computeOutOfPlaneStrain ( )
protectedvirtual

Implements Compute2DSmallStrain.

Definition at line 54 of file ComputePlaneSmallStrain.C.

55 {
58  else
59  return _out_of_plane_strain[_qp];
60 }

◆ computeProperties()

void Compute2DSmallStrain::computeProperties ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeSmallStrain.

Definition at line 54 of file Compute2DSmallStrain.C.

55 {
56  const auto o0 = _out_of_plane_direction;
57  const auto o1 = (_out_of_plane_direction + 1) % 3;
58  const auto o2 = (_out_of_plane_direction + 2) % 3;
59 
60  Real volumetric_strain = 0.0;
61  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
62  {
63  _total_strain[_qp](o0, o0) = computeOutOfPlaneStrain();
64  _total_strain[_qp](o1, o1) = (*_grad_disp[o1])[_qp](o1);
65  _total_strain[_qp](o2, o2) = (*_grad_disp[o2])[_qp](o2);
66  _total_strain[_qp](o1, o2) = ((*_grad_disp[o1])[_qp](o2) + (*_grad_disp[o2])[_qp](o1)) / 2.0;
67  _total_strain[_qp](o2, o1) = _total_strain[_qp](o1, o2); // force the symmetrical strain tensor
68 
70  volumetric_strain += _total_strain[_qp].trace() * _JxW[_qp] * _coord[_qp];
71  }
72 
74  volumetric_strain /= _current_elem_volume;
75 
76  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
77  {
79  {
80  const Real correction = (volumetric_strain - _total_strain[_qp].trace()) / 3.0;
81  _total_strain[_qp](0, 0) += correction;
82  _total_strain[_qp](1, 1) += correction;
83  _total_strain[_qp](2, 2) += correction;
84  }
85 
87 
88  // Remove the eigenstrains
89  for (const auto es : _eigenstrains)
90  _mechanical_strain[_qp] -= (*es)[_qp];
91  }
92 }

◆ displacementIntegrityCheck()

void Compute2DSmallStrain::displacementIntegrityCheck ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeStrainBase.

Definition at line 95 of file Compute2DSmallStrain.C.

96 {
97  if (_out_of_plane_direction != 2 && _ndisp != 3)
98  mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
99  "supplied displacements must be three.");
100  else if (_out_of_plane_direction == 2 && _ndisp != 2)
101  mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
102  "displacements must be two.");
103 }

Referenced by Compute2DSmallStrain::initialSetup().

◆ getCurrentSubblockIndex()

unsigned int ComputePlaneSmallStrain::getCurrentSubblockIndex ( ) const
inlineprotected

gets its subblock index for current element

Definition at line 36 of file ComputePlaneSmallStrain.h.

37  {
38  return _subblock_id_provider ? _subblock_id_provider->getSubblockIndex(*_current_elem) : 0;
39  };

Referenced by computeOutOfPlaneStrain().

◆ initialSetup()

void Compute2DSmallStrain::initialSetup ( )
overrideinherited

Definition at line 35 of file Compute2DSmallStrain.C.

36 {
38  for (unsigned int i = 0; i < 3; ++i)
39  {
40  if (_out_of_plane_direction == i)
41  {
42  _disp[i] = &_zero;
43  _grad_disp[i] = &_grad_zero;
44  }
45  else
46  {
47  _disp[i] = &coupledValue("displacements", i);
48  _grad_disp[i] = &coupledGradient("displacements", i);
49  }
50  }
51 }

Referenced by ComputeAxisymmetricRZSmallStrain::initialSetup().

◆ initQpStatefulProperties()

void ComputeStrainBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Reimplemented in ComputeIncrementalStrainBase, and ComputeCosseratIncrementalSmallStrain.

Definition at line 104 of file ComputeStrainBase.C.

105 {
106  _mechanical_strain[_qp].zero();
107  _total_strain[_qp].zero();
108 }

◆ validParams()

InputParameters ComputePlaneSmallStrain::validParams ( )
static

Definition at line 17 of file ComputePlaneSmallStrain.C.

18 {
19  InputParameters params = Compute2DSmallStrain::validParams();
20  params.addClassDescription("Compute a small strain under generalized plane strain assumptions "
21  "where the out of plane strain is generally nonzero.");
22  params.addParam<UserObjectName>("subblock_index_provider",
23  "SubblockIndexProvider user object name");
24  params.addCoupledVar("scalar_out_of_plane_strain",
25  "Scalar variable for generalized plane strain");
26  params.addCoupledVar("out_of_plane_strain", "Nonlinear variable for plane stress condition");
27 
28  return params;
29 }

Member Data Documentation

◆ _base_name

const std::string ComputeStrainBase::_base_name
protectedinherited

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>* 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

◆ _nscalar_strains

unsigned int ComputePlaneSmallStrain::_nscalar_strains
private

Definition at line 48 of file ComputePlaneSmallStrain.h.

Referenced by ComputePlaneSmallStrain().

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

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

Definition at line 46 of file ComputePlaneSmallStrain.h.

Referenced by ComputePlaneSmallStrain().

◆ _scalar_out_of_plane_strain

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

Definition at line 49 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

Definition at line 44 of file ComputePlaneSmallStrain.h.

Referenced by computeOutOfPlaneStrain(), and ComputePlaneSmallStrain().

◆ _subblock_id_provider

const SubblockIndexProvider* ComputePlaneSmallStrain::_subblock_id_provider
protected

Definition at line 39 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:
ComputePlaneSmallStrain::_scalar_out_of_plane_strain_coupled
const bool _scalar_out_of_plane_strain_coupled
Definition: ComputePlaneSmallStrain.h:44
Compute2DSmallStrain::Compute2DSmallStrain
Compute2DSmallStrain(const InputParameters &parameters)
Definition: Compute2DSmallStrain.C:28
ComputeStrainBase::_current_elem_volume
const Real & _current_elem_volume
Definition: ComputeStrainBase.h:56
SubblockIndexProvider::getSubblockIndex
virtual unsigned int getSubblockIndex(const Elem &) const =0
The index of subblock this element is on.
ComputeStrainBase::_disp
std::vector< const VariableValue * > _disp
Definition: ComputeStrainBase.h:41
Compute2DSmallStrain::computeOutOfPlaneStrain
virtual Real computeOutOfPlaneStrain()=0
Compute2DSmallStrain::displacementIntegrityCheck
virtual void displacementIntegrityCheck() override
Definition: Compute2DSmallStrain.C:95
Compute2DSmallStrain::_out_of_plane_direction
const unsigned int _out_of_plane_direction
Definition: Compute2DSmallStrain.h:39
ComputePlaneSmallStrain::getCurrentSubblockIndex
unsigned int getCurrentSubblockIndex() const
gets its subblock index for current element
Definition: ComputePlaneSmallStrain.h:36
ComputePlaneSmallStrain::_nscalar_strains
unsigned int _nscalar_strains
Definition: ComputePlaneSmallStrain.h:48
ComputePlaneSmallStrain::_subblock_id_provider
const SubblockIndexProvider * _subblock_id_provider
Definition: ComputePlaneSmallStrain.h:39
ComputeStrainBase::_ndisp
unsigned int _ndisp
Coupled displacement variables.
Definition: ComputeStrainBase.h:40
Compute2DSmallStrain::validParams
static InputParameters validParams()
Definition: Compute2DSmallStrain.C:17
ComputeStrainBase::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBase.h:46
ComputePlaneSmallStrain::_scalar_out_of_plane_strain
std::vector< const VariableValue * > _scalar_out_of_plane_strain
Definition: ComputePlaneSmallStrain.h:49
ComputePlaneSmallStrain::_out_of_plane_strain_coupled
const bool _out_of_plane_strain_coupled
Definition: ComputePlaneSmallStrain.h:46
ComputeStrainBase::_eigenstrains
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
Definition: ComputeStrainBase.h:51
ComputePlaneSmallStrain::_out_of_plane_strain
const VariableValue & _out_of_plane_strain
Definition: ComputePlaneSmallStrain.h:47
ComputeStrainBase::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBase.h:48
ComputeStrainBase::_volumetric_locking_correction
const bool _volumetric_locking_correction
Definition: ComputeStrainBase.h:55
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42