ComputeBirchMurnaghanEquationOfStress.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 template <>
11 InputParameters
13 {
14  InputParameters params = validParams<ComputeStressBase>();
16  "Birch-Murnaghan equation of state"
17  "and bulk viscosity damping for shock propagation"
18  "that is substituted to the volumetric stress"
19  "calculated by the constitutive model");
20  params.addRequiredParam<Real>("n_Murnaghan", "exponent in Birch-Murnaghan equation of state");
22  "reference bulk modulus in Birch-Murnaghan equation of state");
23  params.addRequiredParam<Real>("C0", "Von Neumann damping coefficient");
25  return params;
26 }
27
29  const InputParameters & parameters)
30  : ComputeStressBase(parameters),
31  _n_Murnaghan(getParam<Real>("n_Murnaghan")),
32  _Bulk_Modulus_Ref(getParam<Real>("bulk_modulus_ref")),
33  _C0(getParam<Real>("C0")),
34  _C1(getParam<Real>("C1")),
37 {
38 }
39
40 void
42 {
43  RankTwoTensor volumetric_stress, EOS_stress, bulk_viscosity_stress;
44  Real dspecific_volume_dt;
45
47
48  volumetric_stress.zero();
49  // Calculate volumetric stress
51
52  // Calculate volumetric stress from equation of state
53  EOS_stress.zero();
54  // Birch-Murnaghan equation of state
55  // P = (K0 / n) * ( 1.0 - J^{-n} )
56  // J is the Jacobian: J = detF = v / v0, F = deformation gradient
57  // v and v0 are the specific volumes: deformed and reference
58  // Austin et al. JOURNAL OF APPLIED PHYSICS 117, 185902 (2015)
60  (1.0 - std::pow(1.0 / _deformation_gradient[_qp].det(), _n_Murnaghan)));
61
62  // Calculate rate of change of the specific volume
63  dspecific_volume_dt =
65  // Divide by the specific volume
66  // dspecific_volume_dt = dot(J) / J
68
69  bulk_viscosity_stress.zero();
70  // Calculate bulk viscosity damping
71  // C0 * dot(J) / J * |dot(J) / J| + C1 * dot(J) / J
72  // C0 should be chosen of the order of rho * Le^2, rho = density, Le = element size
73  // C1 should be chosen of the order of rho * Le * cs, cs = sound speed
74  // Maheo et al. Mechanics Research Communications 38 (2011) 81 88
75  bulk_viscosity_stress.addIa(_C0 * dspecific_volume_dt * std::abs(dspecific_volume_dt));
77
78  // Subtract the original volumetric stress,
79  // add the one given by the equation of state
80  // and the bulk viscosity
81  _stress[_qp] += EOS_stress + bulk_viscosity_stress - volumetric_stress;
82
83  // Add in extra stress
84  _stress[_qp] += _extra_stress[_qp];
85 }
ComputeStressBase is the base class for stress tensors.
virtual void computeQpStress()=0
MaterialProperty< RankTwoTensor > & _stress
const MaterialProperty< RankTwoTensor > & _deformation_gradient
InputParameters validParams< ComputeBirchMurnaghanEquationOfStress >()
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
InputParameters validParams< ComputeStressBase >()
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
ComputeBirchMurnaghanEquationOfStress(const InputParameters &parameters)
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.