www.mooseframework.org
StressDivergenceRSphericalTensors.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 "ElasticityTensorTools.h"
12 #include "FEProblem.h"
13 #include "MooseMesh.h"
14 
16 
18 
19 InputParameters
21 {
22  InputParameters params = StressDivergenceTensors::validParams();
23  params.addClassDescription(
24  "Calculate stress divergence for a spherically symmetric 1D problem in polar coordinates.");
25  params.set<unsigned int>("component") = 0;
26  params.set<bool>("use_displaced_mesh") = true;
27  return params;
28 }
29 
31  const InputParameters & parameters)
32  : StressDivergenceTensors(parameters)
33 {
34  if (_component != 0)
35  mooseError("Invalid component for this 1D RSpherical problem.");
36 }
37 
38 void
40 {
41  if (getBlockCoordSystem() != Moose::COORD_RSPHERICAL)
42  mooseError("The coordinate system in the Problem block must be set to RSPHERICAL for 1D "
43  "spherically symmetric geometries.");
44 }
45 
46 Real
48 {
49  return _grad_test[_i][_qp](0) * _stress[_qp](0, 0) + // stress_{rr} part 1
50  +(_test[_i][_qp] / _q_point[_qp](0)) * _stress[_qp](1, 1) + // stress_{\theta \theta}
51  +(_test[_i][_qp] / _q_point[_qp](0)) * _stress[_qp](2, 2); // stress_{\phi \phi}
52 }
53 
54 Real
56 {
58 }
59 
60 Real
62 {
63  for (unsigned int i = 0; i < _ndisp; ++i)
64  if (jvar == _disp_var[i])
65  return calculateJacobian(_component, i);
66 
67  if (_temp_coupled && jvar == _temp_var)
68  return 0.0;
69 
70  return 0.0;
71 }
72 
73 Real
74 StressDivergenceRSphericalTensors::calculateJacobian(unsigned int ivar, unsigned int jvar)
75 {
76  RealGradient test_r, phi_r;
77 
78  mooseAssert(ivar == 0 && jvar == 0,
79  "Invalid component in Jacobian Calculation"); // Only nonzero case for a 1D simulation
80 
81  if (ivar == 0) // Case grad_test for r, requires contributions from stress_{rr}, stress_{\theta
82  // \theta}, and stress_{\phi \phi}
83  {
84  test_r(0) = _grad_test[_i][_qp](0);
85  test_r(1) = _test[_i][_qp] / _q_point[_qp](0);
86  test_r(2) = _test[_i][_qp] / _q_point[_qp](0);
87  }
88 
89  if (jvar == 0)
90  {
91  phi_r(0) = _grad_phi[_j][_qp](0);
92  phi_r(1) = _phi[_j][_qp] / _q_point[_qp](0);
93  phi_r(2) = _phi[_j][_qp] / _q_point[_qp](0);
94  }
95 
96  return ElasticityTensorTools::elasticJacobian(_Jacobian_mult[_qp], ivar, jvar, test_r, phi_r);
97 }
ElasticityTensorTools::elasticJacobian
Real elasticJacobian(const RankFourTensor &r4t, unsigned int i, unsigned int k, const RealGradient &grad_test, const RealGradient &grad_phi)
This is used for the standard kernel stress_ij*d(test)/dx_j, when varied wrt u_k Jacobian entry: d(st...
Definition: ElasticityTensorTools.C:21
StressDivergenceTensors
StressDivergenceTensors mostly copies from StressDivergence.
Definition: StressDivergenceTensors.h:27
StressDivergenceTensors::_component
const unsigned int _component
Definition: StressDivergenceTensors.h:62
libMesh::RealGradient
VectorValue< Real > RealGradient
Definition: GrainForceAndTorqueInterface.h:17
StressDivergenceTensors::_disp_var
std::vector< unsigned int > _disp_var
Definition: StressDivergenceTensors.h:66
StressDivergenceTensors::_temp_coupled
const bool _temp_coupled
Definition: StressDivergenceTensors.h:68
StressDivergenceRSphericalTensors
StressDivergenceRSphericalTensors is a modification of StressDivergenceTensors for 1D spherically sym...
Definition: StressDivergenceRSphericalTensors.h:34
StressDivergenceRSphericalTensors::validParams
static InputParameters validParams()
Definition: StressDivergenceRSphericalTensors.C:20
StressDivergenceRSphericalTensors::computeQpOffDiagJacobian
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
Definition: StressDivergenceRSphericalTensors.C:61
registerMooseObject
registerMooseObject("TensorMechanicsApp", StressDivergenceRSphericalTensors)
ElasticityTensorTools.h
StressDivergenceTensors::validParams
static InputParameters validParams()
Definition: StressDivergenceTensors.C:26
defineLegacyParams
defineLegacyParams(StressDivergenceRSphericalTensors)
StressDivergenceTensors::_Jacobian_mult
const MaterialProperty< RankFourTensor > & _Jacobian_mult
Definition: StressDivergenceTensors.h:54
StressDivergenceRSphericalTensors.h
StressDivergenceTensors::_stress
const MaterialProperty< RankTwoTensor > & _stress
Definition: StressDivergenceTensors.h:53
StressDivergenceRSphericalTensors::calculateJacobian
Real calculateJacobian(unsigned int ivar, unsigned int jvar)
Definition: StressDivergenceRSphericalTensors.C:74
StressDivergenceRSphericalTensors::initialSetup
virtual void initialSetup() override
Definition: StressDivergenceRSphericalTensors.C:39
StressDivergenceTensors::_ndisp
unsigned int _ndisp
Coupled displacement variables.
Definition: StressDivergenceTensors.h:65
StressDivergenceRSphericalTensors::computeQpResidual
virtual Real computeQpResidual() override
Definition: StressDivergenceRSphericalTensors.C:47
StressDivergenceTensors::_temp_var
const unsigned int _temp_var
Definition: StressDivergenceTensors.h:69
StressDivergenceRSphericalTensors::computeQpJacobian
virtual Real computeQpJacobian() override
Definition: StressDivergenceRSphericalTensors.C:55
StressDivergenceRSphericalTensors::StressDivergenceRSphericalTensors
StressDivergenceRSphericalTensors(const InputParameters &parameters)
Definition: StressDivergenceRSphericalTensors.C:30