https://mooseframework.inl.gov
ADCompute2DIncrementalStrain.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://mooseframework.inl.gov
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 
16 {
18  params.addClassDescription("Compute strain increment for incremental strains in 2D geometries.");
19 
20  MooseEnum outOfPlaneDirection("x y z", "z");
21  params.addParam<MooseEnum>(
22  "out_of_plane_direction", outOfPlaneDirection, "The direction of the out-of-plane strain.");
23  return params;
24 }
25 
27  : ADComputeIncrementalStrain(parameters),
28  _out_of_plane_direction(getParam<MooseEnum>("out_of_plane_direction"))
29 {
30 }
31 
32 void
34 {
35  for (unsigned int i = 0; i < 3; ++i)
36  {
37  if (_out_of_plane_direction == i)
38  {
39  _disp[i] = &_ad_zero;
41  }
42  else
43  {
44  _disp[i] = &adCoupledValue("displacements", i);
45  _grad_disp[i] = &adCoupledGradient("displacements", i);
46  }
47 
49  _grad_disp_old[i] = &coupledGradientOld("displacements", i);
50  else
52  }
53 }
54 
55 void
57 {
58  // Deformation gradient calculation for 2D problems
60  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); // Deformation gradient
61  auto Fbar =
63  (*_grad_disp_old[1])[_qp],
64  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
65 
66  // Compute the displacement gradient of the out of plane direction for plane strain,
67  // generalized plane strain, or axisymmetric problems
70 
71  A -= Fbar; // very nearly A = gradU - gradUold
72 
73  total_strain_increment = 0.5 * (A + A.transpose());
74 }
75 
76 void
78 {
79  if (_out_of_plane_direction != 2 && _ndisp != 3)
80  mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
81  "supplied displacements must be three.");
82  else if (_out_of_plane_direction == 2 && _ndisp != 2)
83  mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
84  "displacements must be two.");
85 }
FEProblemBase & _fe_problem
const unsigned int _ndisp
Coupled displacement variables.
void addParam(const std::string &name, const std::initializer_list< typename T::value_type > &value, const std::string &doc_string)
const VariableGradient & _grad_zero
const MooseArray< ADRealVectorValue > & _ad_grad_zero
virtual void computeTotalStrainIncrement(ADRankTwoTensor &total_strain_increment) override
Computes the current and old deformation gradients with the assumptions for 2D geometries, including plane strain, generalized plane strain, and axisymmetric, and returns the total strain increment tensor.
const ADVariableGradient & adCoupledGradient(const std::string &var_name, unsigned int comp=0) const
virtual void displacementIntegrityCheck() override
ADComputeIncrementalStrainTempl defines a strain increment and rotation increment (=1)...
const ADVariableValue & adCoupledValue(const std::string &var_name, unsigned int comp=0) const
static RankTwoTensorTempl initializeFromRows(const libMesh::TypeVector< ADReal > &row0, const libMesh::TypeVector< ADReal > &row1, const libMesh::TypeVector< ADReal > &row2)
unsigned int _qp
virtual Real computeOutOfPlaneGradDispOld()=0
Computes the old out-of-plane component of the displacement gradient; as a virtual function...
virtual const VariableGradient & coupledGradientOld(const std::string &var_name, unsigned int comp=0) const
std::vector< const ADVariableGradient * > _grad_disp
Gradient of displacements.
std::vector< const VariableGradient * > _grad_disp_old
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
virtual ADReal computeOutOfPlaneGradDisp()=0
Computes the current out-of-plane component of the displacement gradient; as a virtual function...
const MooseArray< ADReal > & _ad_zero
ADCompute2DIncrementalStrain(const InputParameters &parameters)
std::vector< const ADVariableValue * > _disp
Displacement variables.
virtual bool isTransient() const override