Line data Source code
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 : 10 : #include "ADComputeRSphericalFiniteStrain.h" 11 : #include "Assembly.h" 12 : #include "FEProblem.h" 13 : #include "MooseMesh.h" 14 : 15 : #include "libmesh/quadrature.h" 16 : 17 : registerMooseObject("TensorMechanicsApp", ADComputeRSphericalFiniteStrain); 18 : 19 : InputParameters 20 48 : ADComputeRSphericalFiniteStrain::validParams() 21 : { 22 48 : InputParameters params = ADComputeFiniteStrain::validParams(); 23 48 : params.addClassDescription("Compute a strain increment and rotation increment for finite strains " 24 : "in 1D spherical symmetry problems."); 25 48 : return params; 26 0 : } 27 : 28 36 : ADComputeRSphericalFiniteStrain::ADComputeRSphericalFiniteStrain(const InputParameters & parameters) 29 36 : : ADComputeFiniteStrain(parameters), _disp_old_0(coupledValueOld("displacements", 0)) 30 : { 31 36 : } 32 : 33 : void 34 36 : ADComputeRSphericalFiniteStrain::initialSetup() 35 : { 36 36 : ADComputeIncrementalStrainBase::initialSetup(); 37 : 38 36 : const auto & subdomainIDs = _mesh.meshSubdomains(); 39 72 : for (auto subdomainID : subdomainIDs) 40 36 : if (_fe_problem.getCoordSystem(subdomainID) != Moose::COORD_RSPHERICAL) 41 0 : mooseError("The coordinate system must be set to RSPHERICAL for 1D R spherical simulations."); 42 36 : } 43 : 44 : void 45 1148 : ADComputeRSphericalFiniteStrain::computeProperties() 46 : { 47 3366 : for (_qp = 0; _qp < _qrule->n_points(); ++_qp) 48 : { 49 : // Deformation gradient calculation in cylindrical coordinates 50 2218 : ADRankTwoTensor A; // Deformation gradient 51 2218 : 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 2218 : A(0, 0) = (*_grad_disp[0])[_qp](0); 57 2218 : Fbar(0, 0) = (*_grad_disp_old[0])[_qp](0); 58 : 59 : // The polar and azimuthal strains are functions of radial displacement 60 2218 : if (!MooseUtils::relativeFuzzyEqual(_q_point[_qp](0), 0.0)) 61 : { 62 4436 : A(1, 1) = (*_disp[0])[_qp] / _q_point[_qp](0); 63 2218 : 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 2218 : A(2, 2) = A(1, 1); 68 2218 : Fbar(2, 2) = Fbar(1, 1); 69 : 70 : // very nearly A = gradU - gradUold, adapted to cylindrical coords 71 2218 : A -= Fbar; 72 : 73 : // Fbar = ( I + gradUold) 74 2218 : Fbar.addIa(1.0); 75 : 76 : // Incremental deformation gradient _Fhat = I + A Fbar^-1 77 2218 : _Fhat[_qp] = A * Fbar.inverse(); 78 2218 : _Fhat[_qp].addIa(1.0); 79 : 80 2218 : computeQpStrain(); 81 : } 82 1148 : }