www.mooseframework.org
ADComputeSmallStrain.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 
10 #include "ADComputeSmallStrain.h"
11 #include "libmesh/quadrature.h"
12 
13 registerADMooseObject("TensorMechanicsApp", ADComputeSmallStrain);
14 
16 
17 template <ComputeStage compute_stage>
18 InputParameters
20 {
21  InputParameters params = ADComputeStrainBase<compute_stage>::validParams();
22  params.addClassDescription("Compute a small strain.");
23  return params;
24 }
25 
26 template <ComputeStage compute_stage>
28  : ADComputeStrainBase<compute_stage>(parameters)
29 {
30 }
31 
32 template <ComputeStage compute_stage>
33 void
35 {
36  ADReal volumetric_strain = 0.0;
37 
38  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
39  {
40  // strain = (grad_disp + grad_disp^T)/2
41  ADRankTwoTensor grad_tensor(
42  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]);
43 
44  _total_strain[_qp] = (grad_tensor + grad_tensor.transpose()) / 2.0;
45 
46  if (_volumetric_locking_correction)
47  volumetric_strain += _total_strain[_qp].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  ADReal correction = (volumetric_strain - _total_strain[_qp].trace()) / 3.0;
58  _total_strain[_qp](0, 0) += correction;
59  _total_strain[_qp](1, 1) += correction;
60  _total_strain[_qp](2, 2) += correction;
61  }
62 
63  if (_global_strain)
64  _total_strain[_qp] += (*_global_strain)[_qp];
65 
66  _mechanical_strain[_qp] = _total_strain[_qp];
67 
68  // Remove the Eigen strain
69  for (auto es : _eigenstrains)
70  _mechanical_strain[_qp] -= (*es)[_qp];
71  }
72 
73  copyDualNumbersToValues();
74 }
75 
76 // explicit instantiation is required for AD base classes
defineADLegacyParams
defineADLegacyParams(ADComputeSmallStrain)
registerADMooseObject
registerADMooseObject("TensorMechanicsApp", ADComputeSmallStrain)
ADComputeSmallStrain
ADComputeSmallStrain defines a strain tensor, assuming small strains.
Definition: ADComputeSmallStrain.h:17
ADComputeSmallStrain.h
adBaseClass
adBaseClass(ADComputeSmallStrain)
ADComputeSmallStrain::computeProperties
virtual void computeProperties() override
Definition: ADComputeSmallStrain.C:34
ADComputeSmallStrain::validParams
static InputParameters validParams()
Definition: ADComputeSmallStrain.C:19
ADComputeStrainBase
ADADComputeStrainBase is the base class for strain tensors.
Definition: ADComputeStrainBase.h:30
ADComputeSmallStrain::ADComputeSmallStrain
ADComputeSmallStrain(const InputParameters &parameters)
Definition: ADComputeSmallStrain.C:27
ADComputeStrainBase::validParams
static InputParameters validParams()
Definition: ADComputeStrainBase.C:19