www.mooseframework.org
ComputeStressEosBase.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 
8 #include "ComputeStressEosBase.h"
9 
10 template <>
11 InputParameters
13 {
14  InputParameters params = validParams<ComputeStressBase>();
15  params.addClassDescription("Adds a volumetric extra stress including a Birch-Murnaghan EOS"
16  "and bulk viscosity damping for shock propagation"
17  "that is substituted to the volumetric stress "
18  "calculated by the constitutive model");
19  params.addRequiredParam<Real>("n_Murnaghan", "exponent in Birch-Murnaghan EOS");
20  params.addRequiredParam<Real>("bulk_modulus_ref",
21  "reference bulk modulus in Birch-Murnaghan EOS");
22  params.addRequiredParam<Real>("C0", "Von Neumann damping coefficient");
23  params.addRequiredParam<Real>("C1", "Landshoff damping coefficient");
24  return params;
25 }
26 
27 ComputeStressEosBase::ComputeStressEosBase(const InputParameters & parameters)
28  : ComputeStressBase(parameters),
29  _n_Murnaghan(getParam<Real>("n_Murnaghan")),
30  _Bulk_Modulus_Ref(getParam<Real>("bulk_modulus_ref")),
31  _C0(getParam<Real>("C0")),
32  _C1(getParam<Real>("C1")),
33  _deformation_gradient(getMaterialProperty<RankTwoTensor>("deformation_gradient")),
34  _deformation_gradient_old(getMaterialPropertyOld<RankTwoTensor>("deformation_gradient"))
35 {
36 }
37 
38 void
40 {
41  RankTwoTensor volumetric_stress, EOS_stress, bulk_viscosity_stress;
42  Real dspecific_volume_dt;
43 
45 
46  volumetric_stress.zero();
47  // Calculate volumetric stress
48  volumetric_stress.addIa(_stress[_qp].trace() / 3.0);
49 
50  EOS_stress.zero();
51  // Birch-Murnaghan EOS
52  EOS_stress.addIa((_Bulk_Modulus_Ref / _n_Murnaghan) *
53  (1.0 - std::pow(1.0 / _deformation_gradient[_qp].det(), _n_Murnaghan)));
54 
55  // Calculate rate of change of the specific volume
56  dspecific_volume_dt =
57  (_deformation_gradient[_qp].det() - _deformation_gradient_old[_qp].det()) / _dt;
58  dspecific_volume_dt /= _deformation_gradient_old[_qp].det();
59 
60  bulk_viscosity_stress.zero();
61  // Calculate bulk viscosity damping
62  bulk_viscosity_stress.addIa(_C0 * dspecific_volume_dt * abs(dspecific_volume_dt));
63  bulk_viscosity_stress.addIa(_C1 * dspecific_volume_dt);
64 
65  // Subtract the original volumetric stress, add the one given by the EOS and bulk viscosity
66  _stress[_qp] = _stress[_qp] + EOS_stress + bulk_viscosity_stress - volumetric_stress;
67 
68  // Add in extra stress
69  _stress[_qp] += _extra_stress[_qp];
70 }
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
ComputeStressBase is the base class for stress tensors.
virtual void computeQpStress()=0
const MaterialProperty< RankTwoTensor > & _deformation_gradient
MaterialProperty< RankTwoTensor > & _stress
virtual void computeQpProperties()
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
InputParameters validParams< ComputeStressBase >()
ComputeStressEosBase(const InputParameters &parameters)
InputParameters validParams< ComputeStressEosBase >()
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.