www.mooseframework.org
Compute2DIncrementalStrain.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 
12 #include "libmesh/quadrature.h"
13 
15 
16 InputParameters
18 {
19  InputParameters params = ComputeIncrementalSmallStrain::validParams();
20  params.addClassDescription("Compute strain increment for incremental strains in 2D geometries.");
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 Compute2DIncrementalStrain::Compute2DIncrementalStrain(const InputParameters & parameters)
29  : ComputeIncrementalSmallStrain(parameters),
30  _out_of_plane_direction(getParam<MooseEnum>("out_of_plane_direction"))
31 {
32 }
33 
34 void
36 {
37  for (unsigned int i = 0; i < 3; ++i)
38  {
39  if (_out_of_plane_direction == i)
40  {
41  _disp[i] = &_zero;
42  _grad_disp[i] = &_grad_zero;
43  }
44  else
45  {
46  _disp[i] = &coupledValue("displacements", i);
47  _grad_disp[i] = &coupledGradient("displacements", i);
48  }
49 
50  if (_fe_problem.isTransient() && i != _out_of_plane_direction)
51  _grad_disp_old[i] = &coupledGradientOld("displacements", i);
52  else
53  _grad_disp_old[i] = &_grad_zero;
54  }
55 }
56 
57 void
59 {
60  // Deformation gradient calculation for 2D problems
61  RankTwoTensor A(
62  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); // Deformation gradient
63  RankTwoTensor Fbar((*_grad_disp_old[0])[_qp],
64  (*_grad_disp_old[1])[_qp],
65  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
66 
67  // Compute the displacement gradient of the out of plane direction for plane strain,
68  // generalized plane strain, or axisymmetric problems
71 
72  _deformation_gradient[_qp] = A;
73  _deformation_gradient[_qp].addIa(1.0);
74 
75  A -= Fbar; // very nearly A = gradU - gradUold
76 
77  total_strain_increment = 0.5 * (A + A.transpose());
78 }
79 
80 void
82 {
83  if (_out_of_plane_direction != 2 && _ndisp != 3)
84  mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
85  "supplied displacements must be three.");
86  else if (_out_of_plane_direction == 2 && _ndisp != 2)
87  mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
88  "displacements must be two.");
89 }
defineLegacyParams
defineLegacyParams(Compute2DIncrementalStrain)
ComputeIncrementalSmallStrain
ComputeIncrementalSmallStrain defines a strain increment and rotation increment (=1),...
Definition: ComputeIncrementalSmallStrain.h:23
Compute2DIncrementalStrain::computeOutOfPlaneGradDispOld
virtual Real computeOutOfPlaneGradDispOld()=0
Computes the old out-of-plane component of the displacement gradient; as a virtual function,...
Compute2DIncrementalStrain::computeTotalStrainIncrement
virtual void computeTotalStrainIncrement(RankTwoTensor &total_strain_increment) override
Computes the current and old deformation gradients with the assumptions for 2D geometries,...
Definition: Compute2DIncrementalStrain.C:58
ComputeStrainBase::_disp
std::vector< const VariableValue * > _disp
Definition: ComputeStrainBase.h:41
ComputeIncrementalStrainBase::_grad_disp_old
std::vector< const VariableGradient * > _grad_disp_old
Definition: ComputeIncrementalStrainBase.h:36
ComputeStrainBase::_ndisp
unsigned int _ndisp
Coupled displacement variables.
Definition: ComputeStrainBase.h:40
Compute2DIncrementalStrain::Compute2DIncrementalStrain
Compute2DIncrementalStrain(const InputParameters &parameters)
Definition: Compute2DIncrementalStrain.C:28
Compute2DIncrementalStrain::displacementIntegrityCheck
virtual void displacementIntegrityCheck() override
Definition: Compute2DIncrementalStrain.C:81
ComputeIncrementalStrainBase::_deformation_gradient
MaterialProperty< RankTwoTensor > & _deformation_gradient
Definition: ComputeIncrementalStrainBase.h:42
Compute2DIncrementalStrain::_out_of_plane_direction
const unsigned int _out_of_plane_direction
Definition: Compute2DIncrementalStrain.h:57
Compute2DIncrementalStrain.h
Compute2DIncrementalStrain::computeOutOfPlaneGradDisp
virtual Real computeOutOfPlaneGradDisp()=0
Computes the current out-of-plane component of the displacement gradient; as a virtual function,...
RankTwoTensorTempl< Real >
Compute2DIncrementalStrain::validParams
static InputParameters validParams()
Definition: Compute2DIncrementalStrain.C:17
ComputeIncrementalSmallStrain::validParams
static InputParameters validParams()
Definition: ComputeIncrementalSmallStrain.C:19
ComputeStrainBase::_grad_disp
std::vector< const VariableGradient * > _grad_disp
Definition: ComputeStrainBase.h:42
Compute2DIncrementalStrain::initialSetup
void initialSetup() override
Definition: Compute2DIncrementalStrain.C:35
Compute2DIncrementalStrain
Compute2DIncrementalStrain defines a strain increment only for incremental strains in 2D geometries,...
Definition: Compute2DIncrementalStrain.h:26