www.mooseframework.org
Compute1DFiniteStrain.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 
9 
10 #include "libmesh/quadrature.h"
11 
12 template <>
13 InputParameters
15 {
16  InputParameters params = validParams<ComputeFiniteStrain>();
17  params.addClassDescription("Compute strain increment for finite strain in 1D problem");
18 
19  return params;
20 }
21 
22 Compute1DFiniteStrain::Compute1DFiniteStrain(const InputParameters & parameters)
23  : ComputeFiniteStrain(parameters)
24 {
25 }
26 
27 void
29 {
30  // RankTwoTensor ave_Fhat;
31  // Real ave_dfgrd_det = 0.0;
32 
33  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
34  {
35  RankTwoTensor A((*_grad_disp[0])[_qp],
36  (*_grad_disp[1])[_qp],
37  (*_grad_disp[2])[_qp]); // Deformation gradient
38  RankTwoTensor Fbar((*_grad_disp_old[0])[_qp],
39  (*_grad_disp_old[1])[_qp],
40  (*_grad_disp_old[2])[_qp]); // Old Deformation gradient
41 
42  // Compute the displacement gradient dUy/dy and dUz/dz value for 1D problems
43  A(1, 1) = computeGradDispYY();
44  A(2, 2) = computeGradDispZZ();
45 
46  Fbar(1, 1) = computeGradDispYYOld();
47  Fbar(2, 2) = computeGradDispZZOld();
48 
49  // Gauss point deformation gradient
50  _deformation_gradient[_qp] = A;
51  _deformation_gradient[_qp].addIa(1.0);
52 
53  A -= Fbar; // very nearly A = gradU - gradUold, adapted to cylindrical coords
54 
55  Fbar.addIa(1.0); // Fbar = ( I + gradUold)
56 
57  // Incremental deformation gradient _Fhat = I + A Fbar^-1
58  _Fhat[_qp] = A * Fbar.inverse();
59  _Fhat[_qp].addIa(1.0);
60 
61  // // Calculate average _Fhat for volumetric locking correction
62  // ave_Fhat += _Fhat[_qp] * _JxW[_qp] * _coord[_qp];
63 
64  // // Average deformation gradient
65  // ave_dfgrd_det += _deformation_gradient[_qp].det() * _JxW[_qp] * _coord[_qp];
66  }
67 
68  // // needed for volumetric locking correction
69  // ave_Fhat /= _current_elem_volume;
70  // // average deformation gradient
71  // ave_dfgrd_det /=_current_elem_volume;
72 
73  for (_qp = 0; _qp < _qrule->n_points(); ++_qp)
74  {
75  // // Finalize volumetric locking correction
76  // _Fhat[_qp] *= std::cbrt(ave_Fhat.det() / _Fhat[_qp].det());
77 
79 
80  // // Volumetric locking correction
81  // _deformation_gradient[_qp] *= std::cbrt(ave_dfgrd_det / _deformation_gradient[_qp].det());
82  }
83 }
void computeProperties() override
MaterialProperty< RankTwoTensor > & _deformation_gradient
virtual Real computeGradDispZZOld()=0
Computes the old dUz/dz; as a virtual function, this function is overwritten for the specific geometr...
InputParameters validParams< ComputeFiniteStrain >()
virtual Real computeGradDispZZ()=0
Computes the current dUz/dz; as a virtual function, this function is overwritten for the specific geo...
virtual void computeQpStrain()
InputParameters validParams< Compute1DFiniteStrain >()
ComputeFiniteStrain defines a strain increment and rotation increment, for finite strains...
virtual Real computeGradDispYYOld()=0
Computes the old dUy/dY; as a virtual function, this function is overwritten for the specific geometr...
Compute1DFiniteStrain(const InputParameters &parameters)
std::vector< const VariableGradient * > _grad_disp_old
virtual Real computeGradDispYY()=0
Computes the current dUy/dY; as a virtual function, this function is overwritten for the specific geo...
std::vector< RankTwoTensor > _Fhat
std::vector< const VariableGradient * > _grad_disp