www.mooseframework.org
ADComputeIncrementalSmallStrain.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 "libmesh/quadrature.h"
12 
14 
16 
17 template <ComputeStage compute_stage>
18 InputParameters
20 {
22  params.addClassDescription(
23  "Compute a strain increment and rotation increment for small strains.");
24  return params;
25 }
26 
27 template <ComputeStage compute_stage>
29  const InputParameters & parameters)
30  : ADComputeIncrementalStrainBase<compute_stage>(parameters)
31 {
32 }
33 
34 template <ComputeStage compute_stage>
35 void
37 {
38  ADReal volumetric_strain = 0.0;
39  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
40  {
41  ADRankTwoTensor total_strain_increment;
42  computeTotalStrainIncrement(total_strain_increment);
43 
44  _strain_increment[_qp] = total_strain_increment;
45 
46  if (_volumetric_locking_correction)
47  volumetric_strain += total_strain_increment.trace() * _JxW[_qp] * _coord[_qp];
48  }
49 
50  if (_volumetric_locking_correction)
51  volumetric_strain /= _current_elem_volume;
52 
53  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
54  {
55  if (_volumetric_locking_correction)
56  {
57  const auto correction = (volumetric_strain - _strain_increment[_qp].trace()) / 3.0;
58  _strain_increment[_qp](0, 0) += correction;
59  _strain_increment[_qp](1, 1) += correction;
60  _strain_increment[_qp](2, 2) += correction;
61  }
62 
63  _total_strain[_qp] = _strain_increment[_qp] + _total_strain_old[_qp];
64 
65  // Remove the Eigen strain increment
66  subtractEigenstrainIncrementFromStrain(_strain_increment[_qp]);
67 
68  // strain rate
69  if (_dt > 0)
70  _strain_rate[_qp] = _strain_increment[_qp] / _dt;
71  else
72  _strain_rate[_qp].zero();
73 
74  // Update strain in intermediate configuration: rotations are not needed
75  _mechanical_strain[_qp] = _strain_increment[_qp] + _mechanical_strain_old[_qp];
76 
77  // incremental small strain does not include rotation
78  _rotation_increment[_qp].setToIdentity();
79  }
80 
81  copyDualNumbersToValues();
82 }
83 
84 template <ComputeStage compute_stage>
85 void
87  ADRankTwoTensor & total_strain_increment)
88 {
89  // Deformation gradient
90  ADRankTwoTensor A(
91  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); // Deformation gradient
92  RankTwoTensor Fbar((*_grad_disp_old[0])[_qp],
93  (*_grad_disp_old[1])[_qp],
94  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
95 
96  A -= Fbar; // A = grad_disp - grad_disp_old
97 
98  total_strain_increment = 0.5 * (A + A.transpose());
99 }
100 
101 // explicit instantiation is required for AD base classes
ADComputeIncrementalSmallStrain::computeTotalStrainIncrement
virtual void computeTotalStrainIncrement(ADRankTwoTensor &total_strain_increment)
Computes the current and old deformation gradients and passes back the total strain increment tensor.
Definition: ADComputeIncrementalSmallStrain.C:86
defineADLegacyParams
defineADLegacyParams(ADComputeIncrementalSmallStrain)
registerADMooseObject
registerADMooseObject("TensorMechanicsApp", ADComputeIncrementalSmallStrain)
ADComputeIncrementalSmallStrain.h
ADComputeIncrementalSmallStrain::validParams
static InputParameters validParams()
Definition: ADComputeIncrementalSmallStrain.C:19
ADComputeIncrementalStrainBase::validParams
static InputParameters validParams()
Definition: ADComputeIncrementalStrainBase.C:17
ADComputeIncrementalSmallStrain::computeProperties
virtual void computeProperties() override
Definition: ADComputeIncrementalSmallStrain.C:36
adBaseClass
adBaseClass(ADComputeIncrementalSmallStrain)
ADComputeIncrementalSmallStrain::ADComputeIncrementalSmallStrain
ADComputeIncrementalSmallStrain(const InputParameters &parameters)
Definition: ADComputeIncrementalSmallStrain.C:28
ADComputeIncrementalSmallStrain
ADComputeIncrementalSmallStrain defines a strain increment and rotation increment (=1),...
Definition: ADComputeIncrementalSmallStrain.h:19
ADComputeIncrementalStrainBase
ADComputeIncrementalStrainBase is the base class for strain tensors using incremental formulations.
Definition: ADComputeIncrementalStrainBase.h:26
RankTwoTensorTempl< Real >