www.mooseframework.org
ADComputeRSphericalIncrementalStrain.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 #include "Assembly.h"
12 #include "FEProblem.h"
13 #include "MooseMesh.h"
14 
15 #include "libmesh/quadrature.h"
16 
18 
21 {
23  params.addClassDescription(
24  "Compute a strain increment for incremental strains in 1D spherical symmetry problems.");
25  return params;
26 }
27 
29  const InputParameters & parameters)
30  : ADComputeIncrementalSmallStrain(parameters), _disp_old_0(coupledValueOld("displacements", 0))
31 {
32 }
33 
34 void
36 {
38 
39  const auto & subdomainIDs = _mesh.meshSubdomains();
40  for (auto subdomainID : subdomainIDs)
42  mooseError("The coordinate system must be set to RSPHERICAL for 1D R spherical simulations.");
43 }
44 
45 void
47  ADRankTwoTensor & total_strain_increment)
48 {
49  // Deformation gradient calculation in cylindrical coordinates
50  ADRankTwoTensor A; // Deformation gradient
51  RankTwoTensor Fbar; // Old Deformation gradient
52 
53  // Step through calculating the current and old deformation gradients
54  // Only diagonal components are nonzero because this is a 1D material
55  // Note: x_disp is the radial displacement
56  A(0, 0) = (*_grad_disp[0])[_qp](0);
57  Fbar(0, 0) = (*_grad_disp_old[0])[_qp](0);
58 
59  // The polar and azimuthal strains are functions of radial displacement
61  {
62  A(1, 1) = (*_disp[0])[_qp] / _q_point[_qp](0);
63  Fbar(1, 1) = _disp_old_0[_qp] / _q_point[_qp](0);
64  }
65 
66  // The polar and azimuthal strains are equivalent in this 1D problem
67  A(2, 2) = A(1, 1);
68  Fbar(2, 2) = Fbar(1, 1);
69 
70  // very nearly A = gradU - gradUold, adapted to cylindrical coords
71  A -= Fbar;
72 
73  total_strain_increment = 0.5 * (A + A.transpose());
74 }
const MooseArray< Point > & _q_point
FEProblemBase & _fe_problem
COORD_RSPHERICAL
ADComputeRSphericalIncrementalStrain(const InputParameters &parameters)
registerMooseObject("SolidMechanicsApp", ADComputeRSphericalIncrementalStrain)
unsigned int _qp
ADComputeIncrementalSmallStrainTempl defines a strain increment and rotation increment (=1)...
MooseMesh & _mesh
std::vector< const ADVariableGradient * > _grad_disp
Gradient of displacements.
ADComputeRSphericalIncrementalStrain defines a strain increment only for small strains in 1D spherica...
virtual void computeTotalStrainIncrement(ADRankTwoTensor &total_strain_increment) override
Computes the current and old deformation gradients with the assumptions for 1D spherical symmetry geo...
std::vector< const VariableGradient * > _grad_disp_old
bool relativeFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
const VariableValue & _disp_old_0
the old value of the first component of the displacements vector
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
std::vector< const ADVariableValue * > _disp
Displacement variables.
const std::set< SubdomainID > & meshSubdomains() const