www.mooseframework.org
AxisymmetricRZ.C
Go to the documentation of this file.
1 /****************************************************************/
2 /* MOOSE - Multiphysics Object Oriented Simulation Environment */
3 /* */
4 /* All contents are licensed under LGPL V2.1 */
5 /* See LICENSE for full restrictions */
6 /****************************************************************/
7 #include "AxisymmetricRZ.h"
8 #include "SolidModel.h"
9 
10 #include "Problem.h"
11 #include "libmesh/quadrature.h"
12 
13 namespace SolidMechanics
14 {
15 
17  const std::string & name,
18  const InputParameters & parameters)
19  : Element(solid_model, name, parameters),
20  _disp_r(coupledValue("disp_r")),
21  _disp_z(coupledValue("disp_z")),
22  _large_strain(solid_model.getParam<bool>("large_strain")),
23  _grad_disp_r(coupledGradient("disp_r")),
24  _grad_disp_z(coupledGradient("disp_z")),
25  _volumetric_locking_correction(solid_model.getParam<bool>("volumetric_locking_correction"))
26 {
27 }
28 
30 
31 void
33  const SymmTensor & total_strain_old,
34  SymmTensor & total_strain_new,
35  SymmTensor & strain_increment)
36 {
37  strain_increment.xx() = _grad_disp_r[qp](0);
38  strain_increment.yy() = _grad_disp_z[qp](1);
39  strain_increment.zz() =
40  (_solid_model.q_point(qp)(0) != 0.0 ? _disp_r[qp] / _solid_model.q_point(qp)(0) : 0.0);
41  strain_increment.xy() = 0.5 * (_grad_disp_r[qp](1) + _grad_disp_z[qp](0));
42  strain_increment.yz() = 0;
43  strain_increment.zx() = 0;
44  if (_large_strain)
45  {
46  strain_increment.xx() += 0.5 * (_grad_disp_r[qp](0) * _grad_disp_r[qp](0) +
47  _grad_disp_z[qp](0) * _grad_disp_z[qp](0));
48  strain_increment.yy() += 0.5 * (_grad_disp_r[qp](1) * _grad_disp_r[qp](1) +
49  _grad_disp_z[qp](1) * _grad_disp_z[qp](1));
50  strain_increment.zz() += 0.5 * (strain_increment.zz() * strain_increment.zz());
51  strain_increment.xy() += 0.5 * (_grad_disp_r[qp](0) * _grad_disp_r[qp](1) +
52  _grad_disp_z[qp](0) * _grad_disp_z[qp](1));
53  }
54 
56  {
57  // volumetric locking correction
58  Real volumetric_strain = 0.0;
59  Real volume = 0.0;
60  Real dim = 3.0;
61  for (unsigned int qp_loop = 0; qp_loop < _solid_model.qrule()->n_points(); ++qp_loop)
62  {
63  if (_solid_model.q_point(qp)(0) != 0.0)
64  volumetric_strain += (_grad_disp_r[qp_loop](0) + _grad_disp_z[qp_loop](1) +
65  _disp_r[qp_loop] / _solid_model.q_point(qp_loop)(0)) /
66  dim * _solid_model.JxW(qp_loop) * _solid_model.q_point(qp_loop)(0);
67  else
68  volumetric_strain += (_grad_disp_r[qp_loop](0) + _grad_disp_z[qp_loop](1)) / dim *
69  _solid_model.JxW(qp_loop) * _solid_model.q_point(qp_loop)(0);
70 
71  volume += _solid_model.JxW(qp_loop) * _solid_model.q_point(qp_loop)(0);
72 
73  if (_large_strain)
74  {
75  volumetric_strain += 0.5 * (_grad_disp_r[qp_loop](0) * _grad_disp_r[qp_loop](0) +
76  _grad_disp_z[qp_loop](0) * _grad_disp_z[qp_loop](0)) /
77  dim * _solid_model.JxW(qp_loop) * _solid_model.q_point(qp_loop)(0);
78  volumetric_strain += 0.5 * (_grad_disp_r[qp_loop](1) * _grad_disp_r[qp_loop](1) +
79  _grad_disp_z[qp_loop](1) * _grad_disp_z[qp_loop](1)) /
80  dim * _solid_model.JxW(qp_loop) * _solid_model.q_point(qp_loop)(0);
81  }
82  }
83 
84  volumetric_strain /= volume; // average volumetric strain
85 
86  // strain increment at _qp
87  Real trace = strain_increment.trace();
88  strain_increment.xx() += volumetric_strain - trace / dim;
89  strain_increment.yy() += volumetric_strain - trace / dim;
90  strain_increment.zz() += volumetric_strain - trace / dim;
91  }
92 
93  total_strain_new = strain_increment;
94 
95  strain_increment -= total_strain_old;
96 }
97 }
const VariableGradient & _grad_disp_z
Real yy() const
Definition: SymmTensor.h:130
Element is the base class for all of this module&#39;s solid mechanics element formulations.
Definition: Element.h:23
const Point & q_point(unsigned i) const
Definition: SolidModel.h:54
AxisymmetricRZ(SolidModel &solid_model, const std::string &name, const InputParameters &parameters)
Real xx() const
Definition: SymmTensor.h:129
SolidModel is the base class for all this module&#39;s solid mechanics material models.
Definition: SolidModel.h:31
QBase * qrule()
Definition: SolidModel.h:53
Real zz() const
Definition: SymmTensor.h:131
virtual void computeStrain(const unsigned qp, const SymmTensor &total_strain_old, SymmTensor &total_strain_new, SymmTensor &strain_increment)
Real trace() const
Definition: SymmTensor.h:95
Real JxW(unsigned i) const
Definition: SolidModel.h:55
const VariableValue & _disp_r
Real xy() const
Definition: SymmTensor.h:132
SolidModel & _solid_model
Definition: Element.h:72
Real yz() const
Definition: SymmTensor.h:133
Real zx() const
Definition: SymmTensor.h:134
const VariableGradient & _grad_disp_r