https://mooseframework.inl.gov
Loading...
Searching...
No Matches
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
33void
35{
37
38 const auto & subdomainIDs = _mesh.meshSubdomains();
39 for (auto subdomainID : subdomainIDs)
40 if (_fe_problem.getCoordSystem(subdomainID) != Moose::COORD_RSPHERICAL)
41 mooseError("The coordinate system must be set to RSPHERICAL for 1D R spherical simulations.");
42}
43
44void
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
62 if (!MooseUtils::relativeFuzzyEqual(_q_point[_qp](0), 0.0))
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
90void
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}
registerMooseObject("SolidMechanicsApp", ComputeRSphericalFiniteStrain)
void mooseError(Args &&... args)
ComputeFiniteStrain defines a strain increment and rotation increment, for finite strains.
static InputParameters validParams()
virtual void computeQpStrain()
std::vector< RankTwoTensor > _Fhat
Incremental deformation gradient.
std::vector< const VariableGradient * > _grad_disp_old
MaterialProperty< RankTwoTensor > & _deformation_gradient
ComputeRSphericalFiniteStrain defines a strain increment and a rotation increment for finite strains ...
ComputeRSphericalFiniteStrain(const InputParameters &parameters)
virtual void computeProperties() override
Computes the current and old deformation gradients with the assumptions for 1D spherical symmetry geo...
const VariableValue & _disp_old_0
the old value of the first component of the displacements vector
virtual void computeQpIncrements(RankTwoTensor &e, RankTwoTensor &r) override
std::vector< const VariableGradient * > _grad_disp
Gradient of displacements.
std::vector< const VariableValue * > _disp
Displacement variables.
void addClassDescription(const std::string &doc_string)
void addIa(const T &a)
RankTwoTensorTempl< T > inverse() const
COORD_RSPHERICAL