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
ComputePlaneFiniteStrain Class Reference

ComputePlaneFiniteStrain defines strain increment and rotation increment for finite strain under 2D planar assumptions. More...

#include <ComputePlaneFiniteStrain.h>

Inheritance diagram for ComputePlaneFiniteStrain:
[legend]

Public Types

typedef DerivativeMaterialPropertyNameInterface::SymbolName SymbolName
 

Public Member Functions

 ComputePlaneFiniteStrain (const InputParameters &parameters)
 
void initialSetup () override
 
virtual void computeProperties () override
 
 CreateMooseEnumClass (DecompMethod, TaylorExpansion, EigenSolution, HughesWinget)
 
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 ()
 
static MooseEnum decompositionType ()
 

Protected Member Functions

virtual Real computeOutOfPlaneGradDisp () override
 Computes the current out-of-plane component of the displacement gradient; as a virtual function, this function is overwritten for the specific geometries defined by inheriting classes.
 
virtual Real computeOutOfPlaneGradDispOld () override
 Computes the old out-of-plane component of the displacement gradient; as a virtual function, this function is overwritten for the specific geometries defined by inheriting classes.
 
unsigned int getCurrentSubblockIndex () const
 gets its subblock index for current element
 
virtual void displacementIntegrityCheck () override
 
virtual void computeQpStrain ()
 
virtual void computeQpIncrements (RankTwoTensor &e, RankTwoTensor &r)
 
virtual void initQpStatefulProperties () override
 
void subtractEigenstrainIncrementFromStrain (RankTwoTensor &strain)
 

Protected Attributes

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 unsigned int _out_of_plane_direction
 
std::vector< RankTwoTensor_Fhat
 Incremental deformation gradient.
 
const DecompMethod _decomposition_method
 Method for determining rotation and strain increments.
 
const bool _use_hw
 Flag if using HughesWinget method.
 
MaterialProperty< RankTwoTensor > * _def_grad_mid
 For HughesWinget kinematics.
 
MaterialProperty< RankTwoTensor > * _f_bar
 
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.
 
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
 
std::vector< const VariableValue * > _scalar_out_of_plane_strain
 Current and old values of the out-of-plane strain scalar variable.
 
std::vector< const VariableValue * > _scalar_out_of_plane_strain_old
 
const VariableValue_out_of_plane_strain
 Current and old values of the out-of-plane strain variable.
 
const VariableValue_out_of_plane_strain_old
 

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

FEProblemBase_dmi_fe_problem
 

Detailed Description

ComputePlaneFiniteStrain defines strain increment and rotation increment for finite strain under 2D planar assumptions.

Definition at line 19 of file ComputePlaneFiniteStrain.h.

Constructor & Destructor Documentation

◆ ComputePlaneFiniteStrain()

ComputePlaneFiniteStrain::ComputePlaneFiniteStrain ( const InputParameters parameters)

Definition at line 30 of file ComputePlaneFiniteStrain.C.

31 : Compute2DFiniteStrain(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")
38 : _zero),
39 _out_of_plane_strain_old(_out_of_plane_strain_coupled ? coupledValueOld("out_of_plane_strain")
40 : _zero)
41{
43 mooseError("Must define only one of out_of_plane_strain or scalar_out_of_plane_strain");
44
46 {
47 const auto nscalar_strains = coupledScalarComponents("scalar_out_of_plane_strain");
48 _scalar_out_of_plane_strain.resize(nscalar_strains);
49 _scalar_out_of_plane_strain_old.resize(nscalar_strains);
50 for (unsigned int i = 0; i < nscalar_strains; ++i)
51 {
52 _scalar_out_of_plane_strain[i] = &coupledScalarValue("scalar_out_of_plane_strain", i);
53 _scalar_out_of_plane_strain_old[i] = &coupledScalarValueOld("scalar_out_of_plane_strain", i);
54 }
55 }
56}
void mooseError(Args &&... args)
Compute2DFiniteStrain defines a strain increment and a rotation increment for finite strains in 2D ge...
std::vector< const VariableValue * > _scalar_out_of_plane_strain_old
const VariableValue & _out_of_plane_strain_old
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 SubblockIndexProvider *const _subblock_id_provider
A Userobject that carries the subblock ID for all elements.
const VariableValue & _out_of_plane_strain
Current and old values of the out-of-plane strain variable.
std::vector< const VariableValue * > _scalar_out_of_plane_strain
Current and old values of the out-of-plane strain scalar variable.

Member Function Documentation

◆ computeOutOfPlaneGradDisp()

Real ComputePlaneFiniteStrain::computeOutOfPlaneGradDisp ( )
overrideprotectedvirtual

Computes the current out-of-plane component of the displacement gradient; as a virtual function, this function is overwritten for the specific geometries defined by inheriting classes.

This is consistent with the approximation of stretch rate tensor D = log(sqrt(Fhat^T * Fhat)) / dt

Implements Compute2DFiniteStrain.

Definition at line 59 of file ComputePlaneFiniteStrain.C.

60{
66 return std::exp((*_scalar_out_of_plane_strain[getCurrentSubblockIndex()])[0]) - 1.0;
67 else
68 return std::exp(_out_of_plane_strain[_qp]) - 1.0;
69}
unsigned int getCurrentSubblockIndex() const
gets its subblock index for current element

◆ computeOutOfPlaneGradDispOld()

Real ComputePlaneFiniteStrain::computeOutOfPlaneGradDispOld ( )
overrideprotectedvirtual

Computes the old out-of-plane component of the displacement gradient; as a virtual function, this function is overwritten for the specific geometries defined by inheriting classes.

Implements Compute2DFiniteStrain.

Definition at line 72 of file ComputePlaneFiniteStrain.C.

73{
75 return std::exp((*_scalar_out_of_plane_strain_old[getCurrentSubblockIndex()])[0]) - 1.0;
76 else
77 return std::exp(_out_of_plane_strain_old[_qp]) - 1.0;
78}

◆ computeProperties()

void Compute2DFiniteStrain::computeProperties ( )
overridevirtualinherited

Definition at line 57 of file Compute2DFiniteStrain.C.

58{
59 RankTwoTensor ave_Fhat;
60 Real ave_dfgrd_det = 0.0;
61
62 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
63 {
64 // Deformation gradient calculation for 2D problems
66 (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
67
68 // Old Deformation gradient
70 (*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]);
71
72 // Compute the displacement gradient for the out of plane direction for plane strain,
73 // generalized plane strain, or axisymmetric problems
74
77
78 // Gauss point deformation gradient
80 _deformation_gradient[_qp].addIa(1.0);
81
82 // deformation gradient midpoint
83 if (_use_hw)
84 {
85 (*_def_grad_mid)[_qp].setToIdentity();
86 (*_def_grad_mid)[_qp] += 0.5 * (A + Fbar);
87 }
88
89 A -= Fbar; // very nearly A = gradU - gradUold
90
91 // _f_bar = dDU/dX_o
92 if (_use_hw)
93 (*_f_bar)[_qp] = A;
94
95 Fbar.addIa(1.0); // Fbar = ( I + gradUold)
96
97 // Incremental deformation gradient _Fhat = I + A Fbar^-1
98 _Fhat[_qp] = A * Fbar.inverse();
99 _Fhat[_qp].addIa(1.0);
100
102 {
103 // Calculate average _Fhat for volumetric locking correction
104 ave_Fhat += _Fhat[_qp] * _JxW[_qp] * _coord[_qp];
105
106 // Average deformation gradient
107 ave_dfgrd_det += _deformation_gradient[_qp].det() * _JxW[_qp] * _coord[_qp];
108 }
109 }
111 {
112 // needed for volumetric locking correction
113 ave_Fhat /= _current_elem_volume;
114 // average deformation gradient
115 ave_dfgrd_det /= _current_elem_volume;
116 }
117 for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
118 {
120 {
121 // Finalize volumetric locking correction
122 _Fhat[_qp] *= std::cbrt(ave_Fhat.det() / _Fhat[_qp].det());
123 // Volumetric locking correction
124 _deformation_gradient[_qp] *= std::cbrt(ave_dfgrd_det / _deformation_gradient[_qp].det());
125 }
126
128 }
129}
const unsigned int _out_of_plane_direction
virtual Real computeOutOfPlaneGradDispOld()=0
Computes the old out-of-plane component of the displacement gradient; as a virtual function,...
virtual Real computeOutOfPlaneGradDisp()=0
Computes the current out-of-plane component of the displacement gradient; as a virtual function,...
const bool _use_hw
Flag if using HughesWinget method.
virtual void computeQpStrain()
std::vector< RankTwoTensor > _Fhat
Incremental deformation gradient.
std::vector< const VariableGradient * > _grad_disp_old
MaterialProperty< RankTwoTensor > & _deformation_gradient
std::vector< const VariableGradient * > _grad_disp
Gradient of displacements.
const Real & _current_elem_volume
const bool _volumetric_locking_correction
static RankTwoTensorTempl initializeFromRows(const libMesh::TypeVector< T > &row0, const libMesh::TypeVector< T > &row1, const libMesh::TypeVector< T > &row2)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real

◆ computeQpIncrements()

void ComputeFiniteStrain::computeQpIncrements ( RankTwoTensor e,
RankTwoTensor r 
)
protectedvirtualinherited

Reimplemented in ComputeRSphericalFiniteStrain.

Definition at line 165 of file ComputeFiniteStrain.C.

167{
168 switch (_decomposition_method)
169 {
170 case DecompMethod::TaylorExpansion:
171 {
172 // inverse of _Fhat
173 const RankTwoTensor invFhat = _Fhat[_qp].inverse();
174
175 // A = I - _Fhat^-1
177 A -= invFhat;
178
179 // Cinv - I = A A^T - A - A^T;
180 RankTwoTensor Cinv_I = A * A.transpose() - A - A.transpose();
181
182 // strain rate D from Taylor expansion, Chat = (-1/2(Chat^-1 - I) + 1/4*(Chat^-1 - I)^2 + ...
183 total_strain_increment = -Cinv_I * 0.5 + Cinv_I * Cinv_I * 0.25;
184
185 const Real a[3] = {invFhat(1, 2) - invFhat(2, 1),
186 invFhat(2, 0) - invFhat(0, 2),
187 invFhat(0, 1) - invFhat(1, 0)};
188
189 Real q = (a[0] * a[0] + a[1] * a[1] + a[2] * a[2]) / 4.0;
190 Real trFhatinv_1 = invFhat.trace() - 1.0;
191 const Real p = trFhatinv_1 * trFhatinv_1 / 4.0;
192
193 // cos theta_a
194 const Real C1_squared = p +
195 3.0 * Utility::pow<2>(p) * (1.0 - (p + q)) / Utility::pow<2>(p + q) -
196 2.0 * Utility::pow<3>(p) * (1.0 - (p + q)) / Utility::pow<3>(p + q);
197 if (C1_squared <= 0.0)
198 mooseException(
199 "Cannot take square root of a number less than or equal to zero in the calculation of "
200 "C1 for the Rashid approximation for the rotation tensor. This zero or negative number "
201 "may occur when elements become heavily distorted.");
202
203 const Real C1 = std::sqrt(C1_squared);
204
205 Real C2;
206 if (q > 0.01)
207 // (1-cos theta_a)/4q
208 C2 = (1.0 - C1) / (4.0 * q);
209 else
210 // alternate form for small q
211 C2 = 0.125 + q * 0.03125 * (Utility::pow<2>(p) - 12.0 * (p - 1.0)) / Utility::pow<2>(p) +
212 Utility::pow<2>(q) * (p - 2.0) * (Utility::pow<2>(p) - 10.0 * p + 32.0) /
213 Utility::pow<3>(p) +
214 Utility::pow<3>(q) *
215 (1104.0 - 992.0 * p + 376.0 * Utility::pow<2>(p) - 72.0 * Utility::pow<3>(p) +
216 5.0 * Utility::pow<4>(p)) /
217 (512.0 * Utility::pow<4>(p));
218
219 const Real C3_test =
220 (p * q * (3.0 - q) + Utility::pow<3>(p) + Utility::pow<2>(q)) / Utility::pow<3>(p + q);
221
222 if (C3_test <= 0.0)
223 mooseException(
224 "Cannot take square root of a number less than or equal to zero in the calculation of "
225 "C3_test for the Rashid approximation for the rotation tensor. This zero or negative "
226 "number may occur when elements become heavily distorted.");
227
228 const Real C3 = 0.5 * std::sqrt(C3_test); // sin theta_a/(2 sqrt(q))
229
230 // Calculate incremental rotation. Note that this value is the transpose of that from Rashid,
231 // 93, so we transpose it before storing
232 RankTwoTensor R_incr;
233 R_incr.addIa(C1);
234 for (unsigned int i = 0; i < 3; ++i)
235 for (unsigned int j = 0; j < 3; ++j)
236 R_incr(i, j) += C2 * a[i] * a[j];
237
238 R_incr(0, 1) += C3 * a[2];
239 R_incr(0, 2) -= C3 * a[1];
240 R_incr(1, 0) -= C3 * a[2];
241 R_incr(1, 2) += C3 * a[0];
242 R_incr(2, 0) += C3 * a[1];
243 R_incr(2, 1) -= C3 * a[0];
244
245 rotation_increment = R_incr.transpose();
246 break;
247 }
248
249 case DecompMethod::EigenSolution:
250 {
252 FactorizedRankTwoTensor Uhat = MathUtils::sqrt(Chat);
253 rotation_increment = _Fhat[_qp] * Uhat.inverse().get();
254 total_strain_increment = MathUtils::log(Uhat).get();
255 break;
256 }
257
258 case DecompMethod::HughesWinget:
259 {
260 const RankTwoTensor G = (*_f_bar)[_qp] * (*_def_grad_mid)[_qp].inverse();
261
262 total_strain_increment = 0.5 * (G + G.transpose());
263 const RankTwoTensor W = 0.5 * (G - G.transpose());
264
267
268 Q_1 -= 0.5 * W;
269 Q_2 += 0.5 * W;
270
271 rotation_increment = Q_1.inverse() * Q_2;
272
273 break;
274 }
275
276 default:
277 mooseError("ComputeFiniteStrain Error: Pass valid decomposition type: TaylorExpansion, "
278 "EigenSolution, or HughesWinget.");
279 }
280}
const Real p
const DecompMethod _decomposition_method
Method for determining rotation and strain increments.
FactorizedRankTwoTensorTempl< T > inverse() const
void addIa(const T &a)
RankTwoTensorTempl< T > inverse() const
RankTwoTensorTempl< T > transpose() const
static RankTwoTensorTempl< T > transposeTimes(const RankTwoTensorTempl< T > &)

Referenced by ComputeFiniteStrain::computeQpStrain().

◆ computeQpStrain()

void ComputeFiniteStrain::computeQpStrain ( )
protectedvirtualinherited

Definition at line 118 of file ComputeFiniteStrain.C.

119{
120 RankTwoTensor total_strain_increment;
121
122 // three ways to calculate these increments: TaylorExpansion(default), EigenSolution, or
123 // HughesWinget
124 computeQpIncrements(total_strain_increment, _rotation_increment[_qp]);
125
126 _strain_increment[_qp] = total_strain_increment;
127
128 // Remove the eigenstrain increment
130
131 if (_dt > 0)
132 _strain_rate[_qp] = _strain_increment[_qp] / _dt;
133 else
134 _strain_rate[_qp].zero();
135
136 // if HughesWinget, rotate old strains here
137 RankTwoTensor mechanical_strain_old = _mechanical_strain_old[_qp];
138 RankTwoTensor total_strain_old = _total_strain_old[_qp];
139 if (_use_hw)
140 {
141 mechanical_strain_old = _rotation_increment[_qp] * _mechanical_strain_old[_qp] *
143 total_strain_old =
145 }
146
147 // Update strain in intermediate configuration
148 _mechanical_strain[_qp] = mechanical_strain_old + _strain_increment[_qp];
149 _total_strain[_qp] = total_strain_old + total_strain_increment;
150
151 // Rotate strain to current configuration, unless HughesWinget
152 if (!_use_hw)
153 {
154 _mechanical_strain[_qp] =
156 _total_strain[_qp] =
157 _rotation_increment[_qp] * _total_strain[_qp] * _rotation_increment[_qp].transpose();
158 }
159
160 if (_global_strain)
161 _total_strain[_qp] += (*_global_strain)[_qp];
162}
virtual void computeQpIncrements(RankTwoTensor &e, RankTwoTensor &r)
MaterialProperty< RankTwoTensor > & _strain_rate
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
void subtractEigenstrainIncrementFromStrain(RankTwoTensor &strain)
MaterialProperty< RankTwoTensor > & _rotation_increment
MaterialProperty< RankTwoTensor > & _strain_increment
const MaterialProperty< RankTwoTensor > & _total_strain_old
MaterialProperty< RankTwoTensor > & _mechanical_strain
const MaterialProperty< RankTwoTensor > *const _global_strain
MaterialProperty< RankTwoTensor > & _total_strain

Referenced by Compute1DFiniteStrain::computeProperties(), Compute2DFiniteStrain::computeProperties(), ComputeFiniteStrain::computeProperties(), and ComputeRSphericalFiniteStrain::computeProperties().

◆ CreateMooseEnumClass()

ComputeFiniteStrain::CreateMooseEnumClass ( DecompMethod  ,
TaylorExpansion  ,
EigenSolution  ,
HughesWinget   
)
inherited

◆ decompositionType()

MooseEnum ComputeFiniteStrain::decompositionType ( )
staticinherited

Definition at line 17 of file ComputeFiniteStrain.C.

18{
19 return MooseEnum(getDecompMethodOptions(), "TaylorExpansion");
20}

Referenced by AbaqusUMATStress::validParams(), ComputeFiniteStrain::validParams(), and QuasiStaticSolidMechanicsPhysicsBase::validParams().

◆ displacementIntegrityCheck()

void Compute2DFiniteStrain::displacementIntegrityCheck ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeStrainBase.

Definition at line 132 of file Compute2DFiniteStrain.C.

133{
134 if (_out_of_plane_direction != 2 && _ndisp != 3)
135 mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
136 "supplied displacements must be three.");
137 else if (_out_of_plane_direction == 2 && _ndisp != 2)
138 mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
139 "displacements must be two.");
140}
unsigned int _ndisp
Coupled displacement variables.

◆ getCurrentSubblockIndex()

unsigned int ComputePlaneFiniteStrain::getCurrentSubblockIndex ( ) const
inlineprotected

gets its subblock index for current element

Definition at line 31 of file ComputePlaneFiniteStrain.h.

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

Referenced by computeOutOfPlaneGradDisp(), and computeOutOfPlaneGradDispOld().

◆ initialSetup()

void Compute2DFiniteStrain::initialSetup ( )
overrideinherited

Definition at line 34 of file Compute2DFiniteStrain.C.

35{
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 if (_fe_problem.isTransient() && i != _out_of_plane_direction)
50 _grad_disp_old[i] = &coupledGradientOld("displacements", i);
51 else
52 _grad_disp_old[i] = &_grad_zero;
53 }
54}
std::vector< const VariableValue * > _disp
Displacement variables.

Referenced by ComputeAxisymmetricRZFiniteStrain::initialSetup().

◆ initQpStatefulProperties()

void ComputeIncrementalStrainBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Reimplemented from ComputeStrainBase.

Reimplemented in ComputeCosseratIncrementalSmallStrain.

Definition at line 49 of file ComputeIncrementalStrainBase.C.

50{
51 _mechanical_strain[_qp].zero();
52 _total_strain[_qp].zero();
53 _deformation_gradient[_qp].setToIdentity();
54 _rotation_increment[_qp].setToIdentity();
55}

Referenced by ComputeCosseratIncrementalSmallStrain::initQpStatefulProperties().

◆ subtractEigenstrainIncrementFromStrain()

void ComputeIncrementalStrainBase::subtractEigenstrainIncrementFromStrain ( RankTwoTensor strain)
protectedinherited

Definition at line 58 of file ComputeIncrementalStrainBase.C.

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

Referenced by ComputeIncrementalStrain::computeProperties(), ComputeCosseratIncrementalSmallStrain::computeQpProperties(), and ComputeFiniteStrain::computeQpStrain().

◆ validParams()

InputParameters ComputePlaneFiniteStrain::validParams ( )
static

Definition at line 16 of file ComputePlaneFiniteStrain.C.

17{
19 params.addClassDescription("Compute strain increment and rotation increment for finite strain "
20 "under 2D planar assumptions.");
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

◆ _decomposition_method

const DecompMethod ComputeFiniteStrain::_decomposition_method
protectedinherited

Method for determining rotation and strain increments.

Definition at line 38 of file ComputeFiniteStrain.h.

Referenced by ComputeFiniteStrain::computeQpIncrements().

◆ _def_grad_mid

MaterialProperty<RankTwoTensor>* ComputeFiniteStrain::_def_grad_mid
protectedinherited

For HughesWinget kinematics.

Definition at line 44 of file ComputeFiniteStrain.h.

◆ _deformation_gradient

MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_deformation_gradient
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

◆ _eigenstrains_old

std::vector<const MaterialProperty<RankTwoTensor> *> ComputeIncrementalStrainBase::_eigenstrains_old
protectedinherited

◆ _f_bar

MaterialProperty<RankTwoTensor>* ComputeFiniteStrain::_f_bar
protectedinherited

Definition at line 45 of file ComputeFiniteStrain.h.

◆ _Fhat

std::vector<RankTwoTensor> ComputeFiniteStrain::_Fhat
protectedinherited

◆ _global_strain

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

◆ _grad_disp

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

◆ _grad_disp_old

std::vector<const VariableGradient *> ComputeIncrementalStrainBase::_grad_disp_old
protectedinherited

◆ _mechanical_strain

MaterialProperty<RankTwoTensor>& ComputeStrainBase::_mechanical_strain
protectedinherited

◆ _mechanical_strain_old

const MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_mechanical_strain_old
protectedinherited

◆ _ndisp

unsigned int ComputeStrainBase::_ndisp
protectedinherited

◆ _out_of_plane_direction

const unsigned int Compute2DFiniteStrain::_out_of_plane_direction
protectedinherited

◆ _out_of_plane_strain

const VariableValue& ComputePlaneFiniteStrain::_out_of_plane_strain
protected

Current and old values of the out-of-plane strain variable.

Definition at line 51 of file ComputePlaneFiniteStrain.h.

Referenced by computeOutOfPlaneGradDisp().

◆ _out_of_plane_strain_coupled

const bool ComputePlaneFiniteStrain::_out_of_plane_strain_coupled
protected

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

Definition at line 48 of file ComputePlaneFiniteStrain.h.

Referenced by ComputePlaneFiniteStrain().

◆ _out_of_plane_strain_old

const VariableValue& ComputePlaneFiniteStrain::_out_of_plane_strain_old
protected

Definition at line 52 of file ComputePlaneFiniteStrain.h.

Referenced by computeOutOfPlaneGradDispOld().

◆ _rotation_increment

MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_rotation_increment
protectedinherited

◆ _scalar_out_of_plane_strain

std::vector<const VariableValue *> ComputePlaneFiniteStrain::_scalar_out_of_plane_strain
protected

Current and old values of the out-of-plane strain scalar variable.

Definition at line 43 of file ComputePlaneFiniteStrain.h.

Referenced by computeOutOfPlaneGradDisp(), and ComputePlaneFiniteStrain().

◆ _scalar_out_of_plane_strain_coupled

const bool ComputePlaneFiniteStrain::_scalar_out_of_plane_strain_coupled
protected

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

Definition at line 40 of file ComputePlaneFiniteStrain.h.

Referenced by computeOutOfPlaneGradDisp(), computeOutOfPlaneGradDispOld(), and ComputePlaneFiniteStrain().

◆ _scalar_out_of_plane_strain_old

std::vector<const VariableValue *> ComputePlaneFiniteStrain::_scalar_out_of_plane_strain_old
protected

◆ _strain_increment

MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_strain_increment
protectedinherited

◆ _strain_rate

MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_strain_rate
protectedinherited

◆ _subblock_id_provider

const SubblockIndexProvider* const ComputePlaneFiniteStrain::_subblock_id_provider
protected

A Userobject that carries the subblock ID for all elements.

Definition at line 37 of file ComputePlaneFiniteStrain.h.

Referenced by getCurrentSubblockIndex().

◆ _total_strain

MaterialProperty<RankTwoTensor>& ComputeStrainBase::_total_strain
protectedinherited

◆ _total_strain_old

const MaterialProperty<RankTwoTensor>& ComputeIncrementalStrainBase::_total_strain_old
protectedinherited

◆ _use_hw

const bool ComputeFiniteStrain::_use_hw
protectedinherited

◆ _volumetric_locking_correction

const bool ComputeStrainBase::_volumetric_locking_correction
protectedinherited

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