www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeAxisymmetric1DIncrementalStrain Class Reference

ComputeAxisymmetric1DIncrementalStrain defines a strain increment only for incremental small strains in an Axisymmetric 1D problem. More...

#include <ComputeAxisymmetric1DIncrementalStrain.h>

Inheritance diagram for ComputeAxisymmetric1DIncrementalStrain:
[legend]

Public Member Functions

 ComputeAxisymmetric1DIncrementalStrain (const InputParameters &parameters)
 

Protected Member Functions

void initialSetup () override
 
Real computeGradDispYY () override
 Computes the current dUy/dy for axisymmetric problems. More...
 
Real computeGradDispYYOld () override
 Computes the old dUy/dy for axisymmetric problems. More...
 
Real computeGradDispZZ () override
 Computes the current dUz/dz for axisymmetric problems, where \( \epsilon_{\theta} = \frac{u_r}{r} \). More...
 
Real computeGradDispZZOld () override
 Computes the old dUz/dz for axisymmetric problems, where \( \epsilon_{\theta-old} = \frac{u_{r-old}}{r_{old}} \). More...
 
unsigned int getCurrentSubblockIndex () const
 gets its subblock index for current element More...
 
void computeTotalStrainIncrement (RankTwoTensor &total_strain_increment) override
 Computes the current and old deformation gradients with the assumptions for axisymmetric 1D problems, and returns the total strain increment tensor. More...
 
virtual void computeProperties () override
 
virtual void initQpStatefulProperties () override
 
void subtractEigenstrainIncrementFromStrain (RankTwoTensor &strain)
 

Protected Attributes

const VariableValue & _disp_old_0
 the old value of the first component of the displacements vector More...
 
const SubblockIndexProvider_subblock_id_provider
 
bool _has_out_of_plane_strain
 
const VariableValue & _out_of_plane_strain
 
const VariableValue & _out_of_plane_strain_old
 
bool _has_scalar_out_of_plane_strain
 
unsigned int _nscalar_strains
 
std::vector< const VariableValue * > _scalar_out_of_plane_strain
 
std::vector< const VariableValue * > _scalar_out_of_plane_strain_old
 
std::vector< const VariableGradient * > _grad_disp_old
 
MaterialProperty< RankTwoTensor > & _strain_rate
 
MaterialProperty< RankTwoTensor > & _strain_increment
 
MaterialProperty< RankTwoTensor > & _rotation_increment
 
MaterialProperty< RankTwoTensor > & _deformation_gradient
 
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
 
const MaterialProperty< RankTwoTensor > & _total_strain_old
 
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains_old
 
unsigned int _ndisp
 Coupled displacement variables. More...
 
std::vector< const VariableValue * > _disp
 
std::vector< const VariableGradient * > _grad_disp
 
std::string _base_name
 
MaterialProperty< RankTwoTensor > & _mechanical_strain
 
MaterialProperty< RankTwoTensor > & _total_strain
 
std::vector< MaterialPropertyName > _eigenstrain_names
 
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
 
bool _volumetric_locking_correction
 
const Real & _current_elem_volume
 

Detailed Description

ComputeAxisymmetric1DIncrementalStrain defines a strain increment only for incremental small strains in an Axisymmetric 1D problem.

The COORD_TYPE in the Problem block must be set to RZ.

Definition at line 18 of file ComputeAxisymmetric1DIncrementalStrain.h.

Constructor & Destructor Documentation

ComputeAxisymmetric1DIncrementalStrain::ComputeAxisymmetric1DIncrementalStrain ( const InputParameters &  parameters)

Definition at line 25 of file ComputeAxisymmetric1DIncrementalStrain.C.

27  : Compute1DIncrementalStrain(parameters),
28  _disp_old_0(coupledValueOld("displacements", 0)),
29  _subblock_id_provider(isParamValid("subblock_index_provider")
30  ? &getUserObject<SubblockIndexProvider>("subblock_index_provider")
31  : nullptr),
32  _has_out_of_plane_strain(isParamValid("out_of_plane_strain")),
33  _out_of_plane_strain(_has_out_of_plane_strain ? coupledValue("out_of_plane_strain") : _zero),
34  _out_of_plane_strain_old(_has_out_of_plane_strain ? coupledValueOld("out_of_plane_strain")
35  : _zero),
36  _has_scalar_out_of_plane_strain(isParamValid("scalar_out_of_plane_strain")),
38  _has_scalar_out_of_plane_strain ? coupledScalarComponents("scalar_out_of_plane_strain") : 0)
39 {
41  mooseError("Must define only one of out_of_plane_strain or scalar_out_of_plane_strain");
42 
44  mooseError("Must define either out_of_plane_strain or scalar_out_of_plane_strain");
45 
46  // in case when the provided scalar_out_of_plane_strain is not a coupled
47  // scalar variable, still set _nscalar_strains = 1 but return its default value 0
48  if (coupledScalarComponents("scalar_out_of_plane_strain") == 0)
49  _nscalar_strains = 1;
50 
52  {
55  for (unsigned int i = 0; i < _nscalar_strains; ++i)
56  {
57  _scalar_out_of_plane_strain[i] = &coupledScalarValue("scalar_out_of_plane_strain", i);
58  _scalar_out_of_plane_strain_old[i] = &coupledScalarValueOld("scalar_out_of_plane_strain", i);
59  }
60  }
61 }
std::vector< const VariableValue * > _scalar_out_of_plane_strain_old
Compute1DIncrementalStrain(const InputParameters &parameters)
const VariableValue & _disp_old_0
the old value of the first component of the displacements vector
std::vector< const VariableValue * > _scalar_out_of_plane_strain

Member Function Documentation

Real ComputeAxisymmetric1DIncrementalStrain::computeGradDispYY ( )
overrideprotectedvirtual

Computes the current dUy/dy for axisymmetric problems.

Implements Compute1DIncrementalStrain.

Definition at line 71 of file ComputeAxisymmetric1DIncrementalStrain.C.

72 {
75  else
76  return _out_of_plane_strain[_qp];
77 }
unsigned int getCurrentSubblockIndex() const
gets its subblock index for current element
std::vector< const VariableValue * > _scalar_out_of_plane_strain
Real ComputeAxisymmetric1DIncrementalStrain::computeGradDispYYOld ( )
overrideprotectedvirtual

Computes the old dUy/dy for axisymmetric problems.

Implements Compute1DIncrementalStrain.

Definition at line 80 of file ComputeAxisymmetric1DIncrementalStrain.C.

81 {
84  else
85  return _out_of_plane_strain_old[_qp];
86 }
std::vector< const VariableValue * > _scalar_out_of_plane_strain_old
unsigned int getCurrentSubblockIndex() const
gets its subblock index for current element
Real ComputeAxisymmetric1DIncrementalStrain::computeGradDispZZ ( )
overrideprotectedvirtual

Computes the current dUz/dz for axisymmetric problems, where \( \epsilon_{\theta} = \frac{u_r}{r} \).

Implements Compute1DIncrementalStrain.

Definition at line 89 of file ComputeAxisymmetric1DIncrementalStrain.C.

90 {
91  if (!MooseUtils::absoluteFuzzyEqual(_q_point[_qp](0), 0.0))
92  return (*_disp[0])[_qp] / _q_point[_qp](0);
93  else
94  return 0.0;
95 }
std::vector< const VariableValue * > _disp
Real ComputeAxisymmetric1DIncrementalStrain::computeGradDispZZOld ( )
overrideprotectedvirtual

Computes the old dUz/dz for axisymmetric problems, where \( \epsilon_{\theta-old} = \frac{u_{r-old}}{r_{old}} \).

Implements Compute1DIncrementalStrain.

Definition at line 98 of file ComputeAxisymmetric1DIncrementalStrain.C.

99 {
100  if (!MooseUtils::absoluteFuzzyEqual(_q_point[_qp](0), 0.0))
101  return _disp_old_0[_qp] / _q_point[_qp](0);
102  else
103  return 0.0;
104 }
const VariableValue & _disp_old_0
the old value of the first component of the displacements vector
void ComputeIncrementalSmallStrain::computeProperties ( )
overrideprotectedvirtualinherited

Definition at line 27 of file ComputeIncrementalSmallStrain.C.

28 {
29  Real volumetric_strain = 0.0;
30  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
31  {
32  RankTwoTensor total_strain_increment;
33  computeTotalStrainIncrement(total_strain_increment);
34 
35  _strain_increment[_qp] = total_strain_increment;
36 
38  volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
39  }
41  volumetric_strain /= _current_elem_volume;
42 
43  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
44  {
45  Real trace = _strain_increment[_qp].trace();
47  {
48  _strain_increment[_qp](0, 0) += (volumetric_strain - trace) / 3.0;
49  _strain_increment[_qp](1, 1) += (volumetric_strain - trace) / 3.0;
50  _strain_increment[_qp](2, 2) += (volumetric_strain - trace) / 3.0;
51  }
52 
54 
55  // Remove the Eigen strain increment
56  subtractEigenstrainIncrementFromStrain(_strain_increment[_qp]);
57 
58  // strain rate
59  if (_dt > 0)
60  _strain_rate[_qp] = _strain_increment[_qp] / _dt;
61  else
62  _strain_rate[_qp].zero();
63 
64  // Update strain in intermediate configuration: rotations are not needed
65  _mechanical_strain[_qp] = _mechanical_strain_old[_qp] + _strain_increment[_qp];
66  }
67 }
const Real & _current_elem_volume
const MaterialProperty< RankTwoTensor > & _total_strain_old
MaterialProperty< RankTwoTensor > & _strain_increment
MaterialProperty< RankTwoTensor > & _mechanical_strain
virtual void computeTotalStrainIncrement(RankTwoTensor &total_strain_increment)
Computes the current and old deformation gradients and passes back the total strain increment tensor...
MaterialProperty< RankTwoTensor > & _strain_rate
void subtractEigenstrainIncrementFromStrain(RankTwoTensor &strain)
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
MaterialProperty< RankTwoTensor > & _total_strain
void Compute1DIncrementalStrain::computeTotalStrainIncrement ( RankTwoTensor &  total_strain_increment)
overrideprotectedvirtualinherited

Computes the current and old deformation gradients with the assumptions for axisymmetric 1D problems, and returns the total strain increment tensor.

Reimplemented from ComputeIncrementalSmallStrain.

Definition at line 28 of file Compute1DIncrementalStrain.C.

29 {
30  // Deformation gradient calculation for 1D problems
31  RankTwoTensor A(
32  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); // Deformation gradient
33  RankTwoTensor Fbar((*_grad_disp_old[0])[_qp],
34  (*_grad_disp_old[1])[_qp],
35  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
36 
37  // Compute the displacement gradient dUy/dy and dUz/dz value for 1D problems
38  A(1, 1) = computeGradDispYY();
39  A(2, 2) = computeGradDispZZ();
40 
41  Fbar(1, 1) = computeGradDispYYOld();
42  Fbar(2, 2) = computeGradDispZZOld();
43 
44  // Gauss point deformation gradient
45  _deformation_gradient[_qp] = A;
46  _deformation_gradient[_qp].addIa(1.0);
47 
48  A -= Fbar; // very nearly A = gradU - gradUold, adapted to cylindrical coords
49 
50  total_strain_increment = 0.5 * (A + A.transpose());
51 }
MaterialProperty< RankTwoTensor > & _deformation_gradient
virtual Real computeGradDispYYOld()=0
Computes the old dUy/dY; as a virtual function, this function is overwritten for the specific geometr...
virtual Real computeGradDispZZOld()=0
Computes the old dUz/dZ; as a virtual function, this function is overwritten for the specific geometr...
virtual Real computeGradDispZZ()=0
Computes the current dUz/dZ; as a virtual function, this function is overwritten for the specific geo...
std::vector< const VariableGradient * > _grad_disp_old
virtual Real computeGradDispYY()=0
Computes the current dUy/dY; as a virtual function, this function is overwritten for the specific geo...
std::vector< const VariableGradient * > _grad_disp
unsigned int ComputeAxisymmetric1DIncrementalStrain::getCurrentSubblockIndex ( ) const
inlineprotected

gets its subblock index for current element

Definition at line 41 of file ComputeAxisymmetric1DIncrementalStrain.h.

Referenced by computeGradDispYY(), and computeGradDispYYOld().

42  {
43  return _subblock_id_provider ? _subblock_id_provider->getSubblockIndex(*_current_elem) : 0;
44  };
virtual unsigned int getSubblockIndex(const Elem &) const =0
The index of subblock this element is on.
void ComputeAxisymmetric1DIncrementalStrain::initialSetup ( )
overrideprotected

Definition at line 64 of file ComputeAxisymmetric1DIncrementalStrain.C.

65 {
66  if (getBlockCoordSystem() != Moose::COORD_RZ)
67  mooseError("The coordinate system must be set to RZ for Axisymmetric 1D simulations");
68 }
void ComputeIncrementalStrainBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeStrainBase.

Reimplemented in ComputeCosseratIncrementalSmallStrain.

Definition at line 44 of file ComputeIncrementalStrainBase.C.

Referenced by ComputeCosseratIncrementalSmallStrain::initQpStatefulProperties(), and ComputeIncrementalStrainBase::~ComputeIncrementalStrainBase().

45 {
46  _mechanical_strain[_qp].zero();
47  _total_strain[_qp].zero();
48  _deformation_gradient[_qp].zero();
49  _deformation_gradient[_qp].addIa(1.0);
50 
51  // Note that for some models (small strain), the rotation increment is
52  // never updated. Because we always have stateful properties, this method
53  // always gets called, so we can rely on this getting set here without
54  // setting it again when properties get computed.
55  _rotation_increment[_qp].zero();
56  _rotation_increment[_qp].addIa(1.0);
57 }
MaterialProperty< RankTwoTensor > & _deformation_gradient
MaterialProperty< RankTwoTensor > & _mechanical_strain
MaterialProperty< RankTwoTensor > & _rotation_increment
MaterialProperty< RankTwoTensor > & _total_strain
void ComputeIncrementalStrainBase::subtractEigenstrainIncrementFromStrain ( RankTwoTensor &  strain)
protectedinherited

Definition at line 60 of file ComputeIncrementalStrainBase.C.

Referenced by ComputeIncrementalSmallStrain::computeProperties(), ComputeCosseratIncrementalSmallStrain::computeQpProperties(), ComputeFiniteStrain::computeQpStrain(), and ComputeIncrementalStrainBase::~ComputeIncrementalStrainBase().

61 {
62  for (unsigned int i = 0; i < _eigenstrains.size(); ++i)
63  {
64  strain -= (*_eigenstrains[i])[_qp];
65  strain += (*_eigenstrains_old[i])[_qp];
66  }
67 }
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains_old
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains

Member Data Documentation

std::string ComputeStrainBase::_base_name
protectedinherited

Definition at line 33 of file ComputeStrainBase.h.

Referenced by ComputeStrainBase::ComputeStrainBase().

const Real& ComputeStrainBase::_current_elem_volume
protectedinherited
MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_deformation_gradient
protectedinherited
std::vector<const VariableValue *> ComputeStrainBase::_disp
protectedinherited
const VariableValue& ComputeAxisymmetric1DIncrementalStrain::_disp_old_0
protected

the old value of the first component of the displacements vector

Definition at line 44 of file ComputeAxisymmetric1DIncrementalStrain.h.

Referenced by computeGradDispZZOld().

std::vector<MaterialPropertyName> ComputeStrainBase::_eigenstrain_names
protectedinherited
std::vector<const MaterialProperty<RankTwoTensor> *> ComputeStrainBase::_eigenstrains
protectedinherited
std::vector<const MaterialProperty<RankTwoTensor> *> ComputeIncrementalStrainBase::_eigenstrains_old
protectedinherited
std::vector<const VariableGradient *> ComputeStrainBase::_grad_disp
protectedinherited
std::vector<const VariableGradient *> ComputeIncrementalStrainBase::_grad_disp_old
protectedinherited
bool ComputeAxisymmetric1DIncrementalStrain::_has_out_of_plane_strain
protected
bool ComputeAxisymmetric1DIncrementalStrain::_has_scalar_out_of_plane_strain
protected
MaterialProperty<RankTwoTensor>& ComputeStrainBase::_mechanical_strain
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_mechanical_strain_old
protectedinherited
unsigned int ComputeStrainBase::_ndisp
protectedinherited
unsigned int ComputeAxisymmetric1DIncrementalStrain::_nscalar_strains
protected
const VariableValue& ComputeAxisymmetric1DIncrementalStrain::_out_of_plane_strain
protected

Definition at line 52 of file ComputeAxisymmetric1DIncrementalStrain.h.

Referenced by computeGradDispYY().

const VariableValue& ComputeAxisymmetric1DIncrementalStrain::_out_of_plane_strain_old
protected

Definition at line 53 of file ComputeAxisymmetric1DIncrementalStrain.h.

Referenced by computeGradDispYYOld().

MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_rotation_increment
protectedinherited
std::vector<const VariableValue *> ComputeAxisymmetric1DIncrementalStrain::_scalar_out_of_plane_strain
protected
std::vector<const VariableValue *> ComputeAxisymmetric1DIncrementalStrain::_scalar_out_of_plane_strain_old
protected
MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_strain_increment
protectedinherited
MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_strain_rate
protectedinherited
const SubblockIndexProvider* ComputeAxisymmetric1DIncrementalStrain::_subblock_id_provider
protected

Definition at line 49 of file ComputeAxisymmetric1DIncrementalStrain.h.

Referenced by getCurrentSubblockIndex().

MaterialProperty<RankTwoTensor>& ComputeStrainBase::_total_strain
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_total_strain_old
protectedinherited
bool ComputeStrainBase::_volumetric_locking_correction
protectedinherited

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