https://mooseframework.inl.gov
Loading...
Searching...
No Matches
StressDivergenceRSphericalTensors.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
12#include "FEProblem.h"
13#include "MooseMesh.h"
14
16
19{
22 "Calculate stress divergence for a spherically symmetric 1D problem in polar coordinates.");
23 params.set<unsigned int>("component") = 0;
24 params.set<bool>("use_displaced_mesh") = true;
25 return params;
26}
27
29 const InputParameters & parameters)
30 : StressDivergenceTensors(parameters)
31{
32 if (_component != 0)
33 mooseError("Invalid component for this 1D RSpherical problem.");
34}
35
36void
38{
39 if (getBlockCoordSystem() != Moose::COORD_RSPHERICAL)
40 mooseError("The coordinate system in the Problem block must be set to RSPHERICAL for 1D "
41 "spherically symmetric geometries.");
42}
43
44Real
46{
47 return _grad_test[_i][_qp](0) * _stress[_qp](0, 0) + // stress_{rr} part 1
48 +(_test[_i][_qp] / _q_point[_qp](0)) * _stress[_qp](1, 1) + // stress_{\theta \theta}
49 +(_test[_i][_qp] / _q_point[_qp](0)) * _stress[_qp](2, 2); // stress_{\phi \phi}
50}
51
52Real
57
58Real
60{
61 for (unsigned int i = 0; i < _ndisp; ++i)
62 if (jvar == _disp_var[i])
64
65 return 0.0;
66}
67
68Real
70 unsigned int libmesh_dbg_var(jvar))
71{
72 mooseAssert(ivar == 0 && jvar == 0,
73 "Invalid component in Jacobian Calculation"); // Only nonzero case for a 1D simulation
74
75 const Real test = _grad_test[_i][_qp](0);
76 const Real test_r1 = _test[_i][_qp] / _q_point[_qp](0);
77 // const Real test_r2 = test_r1;
78
79 const Real phi = _grad_phi[_j][_qp](0);
80 const Real phi_r1 = _phi[_j][_qp] / _q_point[_qp](0);
81 const Real phi_r2 = phi_r1;
82
83 const Real term1 = test * _Jacobian_mult[_qp](0, 0, 0, 0) * phi;
84 const Real term2 = test * _Jacobian_mult[_qp](0, 0, 1, 1) * phi_r1; // same as term3
85 // const Real term3 = test * _Jacobian_mult[_qp](0, 0, 2, 2) * phi_r2;
86
87 const Real term4 = test_r1 * _Jacobian_mult[_qp](1, 1, 0, 0) * phi; // same as term7
88 const Real term5 = test_r1 * _Jacobian_mult[_qp](1, 1, 1, 1) * phi_r1; // same as term9
89 const Real term6 = test_r1 * _Jacobian_mult[_qp](1, 1, 2, 2) * phi_r2; // same as term8
90
91 // const Real term7 = test_r2 * _Jacobian_mult[_qp](2, 2, 0, 0) * phi;
92 // const Real term8 = test_r2 * _Jacobian_mult[_qp](2, 2, 1, 1) * phi_r1;
93 // const Real term9 = test_r2 * _Jacobian_mult[_qp](2, 2, 2, 2) * phi_r2;
94
95 return term1 + 2 * (term2 + term4 + term5 + term6);
96}
void mooseError(Args &&... args)
registerMooseObject("SolidMechanicsApp", StressDivergenceRSphericalTensors)
void addClassDescription(const std::string &doc_string)
T & set(const std::string &name, bool quiet_mode=false)
StressDivergenceRSphericalTensors is a modification of StressDivergenceTensors for 1D spherically sym...
Real calculateJacobian(unsigned int ivar, unsigned int jvar)
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
StressDivergenceRSphericalTensors(const InputParameters &parameters)
StressDivergenceTensors mostly copies from StressDivergence.
std::vector< unsigned int > _disp_var
Displacement variables IDs.
const unsigned int _component
An integer corresponding to the direction this kernel acts in.
const MaterialProperty< RankTwoTensor > & _stress
The stress tensor that the divergence operator operates on.
const MaterialProperty< RankFourTensor > & _Jacobian_mult
static InputParameters validParams()
unsigned int _ndisp
Coupled displacement variables.
COORD_RSPHERICAL