www.mooseframework.org
ADCompute2DIncrementalStrain.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 template <ComputeStage compute_stage>
17 InputParameters
19 {
21  params.addClassDescription("Compute strain increment for incremental strains in 2D geometries.");
22 
23  MooseEnum outOfPlaneDirection("x y z", "z");
24  params.addParam<MooseEnum>(
25  "out_of_plane_direction", outOfPlaneDirection, "The direction of the out-of-plane strain.");
26  return params;
27 }
28 
29 template <ComputeStage compute_stage>
31  const InputParameters & parameters)
32  : ADComputeIncrementalSmallStrain<compute_stage>(parameters),
33  _out_of_plane_direction(getParam<MooseEnum>("out_of_plane_direction"))
34 {
35 }
36 
37 template <ComputeStage compute_stage>
38 void
40 {
41  for (unsigned int i = 0; i < 3; ++i)
42  {
43  if (_out_of_plane_direction == i)
44  {
45  _disp[i] = &adZeroValue();
46  _grad_disp[i] = &adZeroGradient();
47  }
48  else
49  {
50  _disp[i] = &adCoupledValue("displacements", i);
51  _grad_disp[i] = &adCoupledGradient("displacements", i);
52  }
53 
54  if (_fe_problem.isTransient() && i != _out_of_plane_direction)
55  _grad_disp_old[i] = &coupledGradientOld("displacements", i);
56  else
57  _grad_disp_old[i] = &_grad_zero;
58  }
59 }
60 
61 template <ComputeStage compute_stage>
62 void
64  ADRankTwoTensor & total_strain_increment)
65 {
66  // Deformation gradient calculation for 2D problems
67  ADRankTwoTensor A(
68  (*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); // Deformation gradient
69  RankTwoTensor Fbar((*_grad_disp_old[0])[_qp],
70  (*_grad_disp_old[1])[_qp],
71  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
72 
73  // Compute the displacement gradient of the out of plane direction for plane strain,
74  // generalized plane strain, or axisymmetric problems
75  A(_out_of_plane_direction, _out_of_plane_direction) = computeOutOfPlaneGradDisp();
76  Fbar(_out_of_plane_direction, _out_of_plane_direction) = computeOutOfPlaneGradDispOld();
77 
78  A -= Fbar; // very nearly A = gradU - gradUold
79 
80  total_strain_increment = 0.5 * (A + A.transpose());
81 }
82 
83 template <ComputeStage compute_stage>
84 void
86 {
87  if (_out_of_plane_direction != 2 && _ndisp != 3)
88  mooseError("For 2D simulations where the out-of-plane direction is x or y the number of "
89  "supplied displacements must be three.");
90  else if (_out_of_plane_direction == 2 && _ndisp != 2)
91  mooseError("For 2D simulations where the out-of-plane direction is z the number of supplied "
92  "displacements must be two.");
93 }
94 
95 // explicit instantiation is required for AD base classes
ADCompute2DIncrementalStrain
ADCompute2DIncrementalStrain defines a strain increment only for incremental strains in 2D geometries...
Definition: ADCompute2DIncrementalStrain.h:21
ADCompute2DIncrementalStrain.h
ADCompute2DIncrementalStrain::computeTotalStrainIncrement
virtual void computeTotalStrainIncrement(ADRankTwoTensor &total_strain_increment) override
Computes the current and old deformation gradients with the assumptions for 2D geometries,...
Definition: ADCompute2DIncrementalStrain.C:63
ADComputeIncrementalSmallStrain::validParams
static InputParameters validParams()
Definition: ADComputeIncrementalSmallStrain.C:19
ADCompute2DIncrementalStrain::ADCompute2DIncrementalStrain
ADCompute2DIncrementalStrain(const InputParameters &parameters)
Definition: ADCompute2DIncrementalStrain.C:30
ADCompute2DIncrementalStrain::validParams
static InputParameters validParams()
Definition: ADCompute2DIncrementalStrain.C:18
ADCompute2DIncrementalStrain::initialSetup
void initialSetup() override
Definition: ADCompute2DIncrementalStrain.C:39
adBaseClass
adBaseClass(ADCompute2DIncrementalStrain)
ADComputeIncrementalSmallStrain
ADComputeIncrementalSmallStrain defines a strain increment and rotation increment (=1),...
Definition: ADComputeIncrementalSmallStrain.h:19
defineADLegacyParams
defineADLegacyParams(ADCompute2DIncrementalStrain)
RankTwoTensorTempl< Real >
ADCompute2DIncrementalStrain::displacementIntegrityCheck
virtual void displacementIntegrityCheck() override
Definition: ADCompute2DIncrementalStrain.C:85