https://mooseframework.inl.gov
ComputeIncrementalStrain.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
11 #include "Assembly.h"
12 #include "libmesh/quadrature.h"
13 
14 registerMooseObject("SolidMechanicsApp", ComputeIncrementalStrain);
15 registerMooseObjectRenamed("SolidMechanicsApp",
16  ComputeIncrementalSmallStrain,
17  "04/01/2025 00:00",
19 
22 {
24  params.addClassDescription(
25  "Compute a strain increment and rotation increment for small strains.");
26  return params;
27 }
28 
30  : ComputeIncrementalStrainBase(parameters)
31 {
32 }
33 
34 void
36 {
37  Real volumetric_strain = 0.0;
38  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
39  {
40  RankTwoTensor total_strain_increment;
41  computeTotalStrainIncrement(total_strain_increment);
42 
43  _strain_increment[_qp] = total_strain_increment;
44 
46  volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
47  }
49  volumetric_strain /= _current_elem_volume;
50 
51  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
52  {
53  Real trace = _strain_increment[_qp].trace();
55  {
56  _strain_increment[_qp](0, 0) += (volumetric_strain - trace) / 3.0;
57  _strain_increment[_qp](1, 1) += (volumetric_strain - trace) / 3.0;
58  _strain_increment[_qp](2, 2) += (volumetric_strain - trace) / 3.0;
59  }
60 
62 
63  // Remove the Eigen strain increment
65 
66  // strain rate
67  if (_dt > 0)
69  else
70  _strain_rate[_qp].zero();
71 
72  // Update strain in intermediate configuration: rotations are not needed
74 
75  // incremental small strain does not include rotation
76  _rotation_increment[_qp].setToIdentity();
77  }
78 }
79 
80 void
82 {
83  // Deformation gradient
85  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
86 
87  // Old Deformation gradient
89  (*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]);
90 
92  _deformation_gradient[_qp].addIa(1.0);
93 
94  A -= Fbar; // A = grad_disp - grad_disp_old
95 
96  total_strain_increment = 0.5 * (A + A.transpose());
97 }
const Real & _current_elem_volume
const MaterialProperty< RankTwoTensor > & _total_strain_old
MaterialProperty< RankTwoTensor > & _deformation_gradient
ComputeIncrementalStrain(const InputParameters &parameters)
const MooseArray< Real > & _JxW
MaterialProperty< RankTwoTensor > & _strain_increment
static RankTwoTensorTempl initializeFromRows(const libMesh::TypeVector< Real > &row0, const libMesh::TypeVector< Real > &row1, const libMesh::TypeVector< Real > &row2)
MaterialProperty< RankTwoTensor > & _mechanical_strain
static InputParameters validParams()
ComputeIncrementalStrain defines a strain increment and rotation increment (=1), for small strains...
registerMooseObjectRenamed("SolidMechanicsApp", ComputeIncrementalSmallStrain, "04/01/2025 00:00", ComputeIncrementalStrain)
MaterialProperty< RankTwoTensor > & _strain_rate
void subtractEigenstrainIncrementFromStrain(RankTwoTensor &strain)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual void computeTotalStrainIncrement(RankTwoTensor &total_strain_increment)
Computes the current and old deformation gradients and passes back the total strain increment tensor...
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
std::vector< const VariableGradient * > _grad_disp_old
registerMooseObject("SolidMechanicsApp", ComputeIncrementalStrain)
void addClassDescription(const std::string &doc_string)
ComputeIncrementalStrainBase is the base class for strain tensors using incremental formulations...
const bool _volumetric_locking_correction
MaterialProperty< RankTwoTensor > & _rotation_increment
const MooseArray< Real > & _coord
virtual void computeProperties() override
MaterialProperty< RankTwoTensor > & _total_strain
std::vector< const VariableGradient * > _grad_disp
Gradient of displacements.