www.mooseframework.org
Compute2DSmallStrain.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 "Compute2DSmallStrain.h"
11 
12 #include "libmesh/quadrature.h"
13 
15 
16 InputParameters
18 {
19  InputParameters params = ComputeSmallStrain::validParams();
20  params.addClassDescription("Compute a small strain in a plane strain configuration.");
21 
22  MooseEnum outOfPlaneDirection("x y z", "z");
23  params.addParam<MooseEnum>(
24  "out_of_plane_direction", outOfPlaneDirection, "The direction of the out-of-plane strain.");
25  return params;
26 }
27 
28 Compute2DSmallStrain::Compute2DSmallStrain(const InputParameters & parameters)
29  : ComputeSmallStrain(parameters),
30  _out_of_plane_direction(getParam<MooseEnum>("out_of_plane_direction"))
31 {
32 }
33 
34 void
36 {
38  for (unsigned int i = 0; i < 3; ++i)
39  {
40  if (_out_of_plane_direction == i)
41  {
42  _disp[i] = &_zero;
43  _grad_disp[i] = &_grad_zero;
44  }
45  else
46  {
47  _disp[i] = &coupledValue("displacements", i);
48  _grad_disp[i] = &coupledGradient("displacements", i);
49  }
50  }
51 }
52 
53 void
55 {
56  const auto o0 = _out_of_plane_direction;
57  const auto o1 = (_out_of_plane_direction + 1) % 3;
58  const auto o2 = (_out_of_plane_direction + 2) % 3;
59 
60  Real volumetric_strain = 0.0;
61  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
62  {
63  _total_strain[_qp](o0, o0) = computeOutOfPlaneStrain();
64  _total_strain[_qp](o1, o1) = (*_grad_disp[o1])[_qp](o1);
65  _total_strain[_qp](o2, o2) = (*_grad_disp[o2])[_qp](o2);
66  _total_strain[_qp](o1, o2) = ((*_grad_disp[o1])[_qp](o2) + (*_grad_disp[o2])[_qp](o1)) / 2.0;
67  _total_strain[_qp](o2, o1) = _total_strain[_qp](o1, o2); // force the symmetrical strain tensor
68 
70  volumetric_strain += _total_strain[_qp].trace() * _JxW[_qp] * _coord[_qp];
71  }
72 
74  volumetric_strain /= _current_elem_volume;
75 
76  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
77  {
79  {
80  const Real correction = (volumetric_strain - _total_strain[_qp].trace()) / 3.0;
81  _total_strain[_qp](0, 0) += correction;
82  _total_strain[_qp](1, 1) += correction;
83  _total_strain[_qp](2, 2) += correction;
84  }
85 
87 
88  // Remove the eigenstrains
89  for (const auto es : _eigenstrains)
90  _mechanical_strain[_qp] -= (*es)[_qp];
91  }
92 }
93 
94 void
96 {
97  if (_out_of_plane_direction != 2 && _ndisp != 3)
98  mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
99  "supplied displacements must be three.");
100  else if (_out_of_plane_direction == 2 && _ndisp != 2)
101  mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
102  "displacements must be two.");
103 }
Compute2DSmallStrain
Compute2DSmallStrain defines a strain tensor, assuming small strains, in 2D geometries / simulations.
Definition: Compute2DSmallStrain.h:25
Compute2DSmallStrain::Compute2DSmallStrain
Compute2DSmallStrain(const InputParameters &parameters)
Definition: Compute2DSmallStrain.C:28
ComputeStrainBase::_current_elem_volume
const Real & _current_elem_volume
Definition: ComputeStrainBase.h:56
Compute2DSmallStrain::computeProperties
virtual void computeProperties() override
Definition: Compute2DSmallStrain.C:54
ComputeStrainBase::_disp
std::vector< const VariableValue * > _disp
Definition: ComputeStrainBase.h:41
Compute2DSmallStrain::computeOutOfPlaneStrain
virtual Real computeOutOfPlaneStrain()=0
Compute2DSmallStrain::displacementIntegrityCheck
virtual void displacementIntegrityCheck() override
Definition: Compute2DSmallStrain.C:95
Compute2DSmallStrain::_out_of_plane_direction
const unsigned int _out_of_plane_direction
Definition: Compute2DSmallStrain.h:39
ComputeSmallStrain
ComputeSmallStrain defines a strain tensor, assuming small strains.
Definition: ComputeSmallStrain.h:22
defineLegacyParams
defineLegacyParams(Compute2DSmallStrain)
ComputeStrainBase::_ndisp
unsigned int _ndisp
Coupled displacement variables.
Definition: ComputeStrainBase.h:40
Compute2DSmallStrain::validParams
static InputParameters validParams()
Definition: Compute2DSmallStrain.C:17
ComputeStrainBase::_mechanical_strain
MaterialProperty< RankTwoTensor > & _mechanical_strain
Definition: ComputeStrainBase.h:46
Compute2DSmallStrain::initialSetup
void initialSetup() override
Definition: Compute2DSmallStrain.C:35
ComputeStrainBase::_eigenstrains
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
Definition: ComputeStrainBase.h:51
ComputeStrainBase::_total_strain
MaterialProperty< RankTwoTensor > & _total_strain
Definition: ComputeStrainBase.h:48
ComputeStrainBase::_volumetric_locking_correction
const bool _volumetric_locking_correction
Definition: ComputeStrainBase.h:55
ComputeSmallStrain::validParams
static InputParameters validParams()
Definition: ComputeSmallStrain.C:19
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42
Compute2DSmallStrain.h