www.mooseframework.org
ComputeIncrementalSmallStrain.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
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 
15 
17 
18 InputParameters
20 {
21  InputParameters params = ComputeIncrementalStrainBase::validParams();
22  params.addClassDescription(
23  "Compute a strain increment and rotation increment for small strains.");
24  return params;
25 }
26 
28  : ComputeIncrementalStrainBase(parameters)
29 {
30 }
31 
32 void
34 {
35  Real volumetric_strain = 0.0;
36  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
37  {
38  RankTwoTensor total_strain_increment;
39  computeTotalStrainIncrement(total_strain_increment);
40 
41  _strain_increment[_qp] = total_strain_increment;
42 
44  volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
45  }
47  volumetric_strain /= _current_elem_volume;
48 
49  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
50  {
51  Real trace = _strain_increment[_qp].trace();
53  {
54  _strain_increment[_qp](0, 0) += (volumetric_strain - trace) / 3.0;
55  _strain_increment[_qp](1, 1) += (volumetric_strain - trace) / 3.0;
56  _strain_increment[_qp](2, 2) += (volumetric_strain - trace) / 3.0;
57  }
58 
60 
61  // Remove the Eigen strain increment
63 
64  // strain rate
65  if (_dt > 0)
66  _strain_rate[_qp] = _strain_increment[_qp] / _dt;
67  else
68  _strain_rate[_qp].zero();
69 
70  // Update strain in intermediate configuration: rotations are not needed
72 
73  // incremental small strain does not include rotation
74  _rotation_increment[_qp].setToIdentity();
75  }
76 }
77 
78 void
80 {
81  // Deformation gradient
82  RankTwoTensor A(
83  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); // Deformation gradient
84  RankTwoTensor Fbar((*_grad_disp_old[0])[_qp],
85  (*_grad_disp_old[1])[_qp],
86  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
87 
88  _deformation_gradient[_qp] = A;
89  _deformation_gradient[_qp].addIa(1.0);
90 
91  A -= Fbar; // A = grad_disp - grad_disp_old
92 
93  total_strain_increment = 0.5 * (A + A.transpose());
94 }
ComputeIncrementalSmallStrain::computeProperties
virtual void computeProperties() override
Definition: ComputeIncrementalSmallStrain.C:33
ComputeIncrementalSmallStrain
ComputeIncrementalSmallStrain defines a strain increment and rotation increment (=1),...
Definition: ComputeIncrementalSmallStrain.h:23
ComputeIncrementalStrainBase::_strain_rate
MaterialProperty< RankTwoTensor > & _strain_rate
Definition: ComputeIncrementalStrainBase.h:38
ComputeStrainBase::_current_elem_volume
const Real & _current_elem_volume
Definition: ComputeStrainBase.h:56
ComputeIncrementalSmallStrain.h
ComputeIncrementalSmallStrain::ComputeIncrementalSmallStrain
ComputeIncrementalSmallStrain(const InputParameters &parameters)
Definition: ComputeIncrementalSmallStrain.C:27
registerMooseObject
registerMooseObject("TensorMechanicsApp", ComputeIncrementalSmallStrain)
ComputeIncrementalStrainBase::subtractEigenstrainIncrementFromStrain
void subtractEigenstrainIncrementFromStrain(RankTwoTensor &strain)
Definition: ComputeIncrementalStrainBase.C:59
ComputeIncrementalStrainBase::_mechanical_strain_old
const MaterialProperty< RankTwoTensor > & _mechanical_strain_old
Definition: ComputeIncrementalStrainBase.h:44
ComputeIncrementalStrainBase::_grad_disp_old
std::vector< const VariableGradient * > _grad_disp_old
Definition: ComputeIncrementalStrainBase.h:36
ComputeIncrementalStrainBase::_rotation_increment
MaterialProperty< RankTwoTensor > & _rotation_increment
Definition: ComputeIncrementalStrainBase.h:40
ComputeIncrementalSmallStrain::computeTotalStrainIncrement
virtual void computeTotalStrainIncrement(RankTwoTensor &total_strain_increment)
Computes the current and old deformation gradients and passes back the total strain increment tensor.
Definition: ComputeIncrementalSmallStrain.C:79
ComputeStrainBase::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBase.h:46
ComputeIncrementalStrainBase::_total_strain_old
const MaterialProperty< RankTwoTensor > & _total_strain_old
Definition: ComputeIncrementalStrainBase.h:45
ComputeIncrementalStrainBase::_deformation_gradient
MaterialProperty< RankTwoTensor > & _deformation_gradient
Definition: ComputeIncrementalStrainBase.h:42
ComputeIncrementalStrainBase
ComputeIncrementalStrainBase is the base class for strain tensors using incremental formulations.
Definition: ComputeIncrementalStrainBase.h:22
RankTwoTensorTempl< Real >
ComputeStrainBase::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBase.h:48
defineLegacyParams
defineLegacyParams(ComputeIncrementalSmallStrain)
ComputeIncrementalSmallStrain::validParams
static InputParameters validParams()
Definition: ComputeIncrementalSmallStrain.C:19
ComputeStrainBase::_volumetric_locking_correction
const bool _volumetric_locking_correction
Definition: ComputeStrainBase.h:55
ComputeIncrementalStrainBase::validParams
static InputParameters validParams()
Definition: ComputeIncrementalStrainBase.C:16
ComputeIncrementalStrainBase::_strain_increment
MaterialProperty< RankTwoTensor > & _strain_increment
Definition: ComputeIncrementalStrainBase.h:39
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42