https://mooseframework.inl.gov
ComputeRSphericalFiniteStrain.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 #include "Assembly.h"
12 #include "FEProblem.h"
13 #include "MooseMesh.h"
14 
15 #include "libmesh/quadrature.h"
16 
18 
21 {
23  params.addClassDescription("Compute a strain increment and rotation increment for finite strains "
24  "in 1D spherical symmetry problems.");
25  return params;
26 }
27 
29  : ComputeFiniteStrain(parameters), _disp_old_0(coupledValueOld("displacements", 0))
30 {
31 }
32 
33 void
35 {
37 
38  const auto & subdomainIDs = _mesh.meshSubdomains();
39  for (auto subdomainID : subdomainIDs)
41  mooseError("The coordinate system must be set to RSPHERICAL for 1D R spherical simulations.");
42 }
43 
44 void
46 {
47  // Method from Rashid, 1993
48 
49  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
50  {
51  // Deformation gradient calculation in spherical coordinates
52  RankTwoTensor A; // Deformation gradient
53  RankTwoTensor Fbar; // Old Deformation gradient
54 
55  // Step through calculating the current and old deformation gradients
56  // Only diagonal components are nonzero because this is a 1D material
57  // Note: x_disp is the radial displacement
58  A(0, 0) = (*_grad_disp[0])[_qp](0);
59  Fbar(0, 0) = (*_grad_disp_old[0])[_qp](0);
60 
61  // The polar and azimuthal strains are functions of radial displacement
63  {
64  A(1, 1) = (*_disp[0])[_qp] / _q_point[_qp](0);
65  Fbar(1, 1) = _disp_old_0[_qp] / _q_point[_qp](0);
66  }
67 
68  // The polar and azimuthal strains are equivalent in this 1D problem
69  A(2, 2) = A(1, 1);
70  Fbar(2, 2) = Fbar(1, 1);
71 
72  // Gauss point deformation gradient
74  _deformation_gradient[_qp].addIa(1.0);
75 
76  // very nearly A = gradU - gradUold, adapted to spherical coords
77  A -= Fbar;
78 
79  // Fbar = ( I + gradUold)
80  Fbar.addIa(1.0);
81 
82  // Incremental deformation gradient _Fhat = I + A Fbar^-1
83  _Fhat[_qp] = A * Fbar.inverse();
84  _Fhat[_qp].addIa(1.0);
85 
87  }
88 }
89 
90 void
92  RankTwoTensor & rotation_increment)
93 {
94  for (unsigned int i = 0; i < 3; ++i)
95  total_strain_increment(i, i) = std::log(_Fhat[_qp](i, i));
96 
97  rotation_increment.setToIdentity();
98 }
const MooseArray< Point > & _q_point
static InputParameters validParams()
RankTwoTensorTempl< Real > inverse() const
MaterialProperty< RankTwoTensor > & _deformation_gradient
registerMooseObject("SolidMechanicsApp", ComputeRSphericalFiniteStrain)
virtual void computeQpIncrements(RankTwoTensor &e, RankTwoTensor &r) override
COORD_RSPHERICAL
std::vector< const VariableValue * > _disp
Displacement variables.
virtual void computeQpStrain()
void addIa(const Real &a)
ComputeRSphericalFiniteStrain(const InputParameters &parameters)
const VariableValue & _disp_old_0
the old value of the first component of the displacements vector
ComputeFiniteStrain defines a strain increment and rotation increment, for finite strains...
bool relativeFuzzyEqual(const T &var1, const T2 &var2, const T3 &tol=libMesh::TOLERANCE *libMesh::TOLERANCE)
std::vector< const VariableGradient * > _grad_disp_old
void mooseError(Args &&... args) const
void addClassDescription(const std::string &doc_string)
Moose::CoordinateSystemType getCoordSystem(SubdomainID sid) const
ComputeRSphericalFiniteStrain defines a strain increment and a rotation increment for finite strains ...
std::vector< RankTwoTensor > _Fhat
Incremental deformation gradient.
virtual void computeProperties() override
Computes the current and old deformation gradients with the assumptions for 1D spherical symmetry geo...
const std::set< SubdomainID > & meshSubdomains() const
std::vector< const VariableGradient * > _grad_disp
Gradient of displacements.