www.mooseframework.org
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
ComputeFiniteStrainElasticStressBirchMurnaghan Class Reference

ComputeFiniteStrainElasticStressBirchMurnaghan computes the stress following elasticity theory for finite strains, add bulk viscosity damping and substitute the volumetric part of the stress with a Murnaghan equation of state. More...

#include <ComputeFiniteStrainElasticStressBirchMurnaghan.h>

Inheritance diagram for ComputeFiniteStrainElasticStressBirchMurnaghan:
[legend]

Public Member Functions

 ComputeFiniteStrainElasticStressBirchMurnaghan (const InputParameters &parameters)
 
void initialSetup () override
 

Protected Member Functions

virtual void initQpStatefulProperties () override
 
virtual void computeQpStress () override
 
virtual void computeQpProperties ()
 
void addQpInitialStress ()
 InitialStress Deprecation: remove this method. More...
 
bool hasGuaranteedMaterialProperty (const MaterialPropertyName &prop, Guarantee guarantee)
 

Protected Attributes

const MaterialProperty< RankTwoTensor > & _strain_increment
 
const MaterialProperty< RankTwoTensor > & _rotation_increment
 
const MaterialProperty< RankTwoTensor > & _stress_old
 
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
 The old elastic strain is used to calculate the old stress in the case of variable elasticity tensors. More...
 
const Real _n_Murnaghan
 
const Real _Bulk_Modulus_Ref
 
const Real _C0
 
const Real _C1
 
const MaterialProperty< RankTwoTensor > & _deformation_gradient
 
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
 
const std::string _base_name
 
const std::string _elasticity_tensor_name
 
const MaterialProperty< RankTwoTensor > & _mechanical_strain
 
MaterialProperty< RankTwoTensor > & _stress
 
MaterialProperty< RankTwoTensor > & _elastic_strain
 
const MaterialProperty< RankFourTensor > & _elasticity_tensor
 
const MaterialProperty< RankTwoTensor > & _extra_stress
 Extra stress tensor. More...
 
std::vector< Function * > _initial_stress_fcn
 initial stress components More...
 
MaterialProperty< RankFourTensor > & _Jacobian_mult
 derivative of stress w.r.t. strain (_dstress_dstrain) More...
 
const bool _store_stress_old
 Parameter which decides whether to store old stress. This is required for HHT time integration and Rayleigh damping. More...
 
const bool _initial_stress_provided
 Whether initial stress was provided. InitialStress Deprecation: remove this. More...
 
MaterialProperty< RankTwoTensor > * _initial_stress
 Initial stress, if provided. InitialStress Deprecation: remove this. More...
 
const MaterialProperty< RankTwoTensor > * _initial_stress_old
 Old value of initial stress, which is needed to correctly implement finite-strain rotations. InitialStress Deprecation: remove this. More...
 

Detailed Description

ComputeFiniteStrainElasticStressBirchMurnaghan computes the stress following elasticity theory for finite strains, add bulk viscosity damping and substitute the volumetric part of the stress with a Murnaghan equation of state.

Definition at line 20 of file ComputeFiniteStrainElasticStressBirchMurnaghan.h.

Constructor & Destructor Documentation

ComputeFiniteStrainElasticStressBirchMurnaghan::ComputeFiniteStrainElasticStressBirchMurnaghan ( const InputParameters &  parameters)

Definition at line 21 of file ComputeFiniteStrainElasticStressBirchMurnaghan.C.

24  GuaranteeConsumer(this),
25  _strain_increment(getMaterialPropertyByName<RankTwoTensor>(_base_name + "strain_increment")),
27  getMaterialPropertyByName<RankTwoTensor>(_base_name + "rotation_increment")),
28  _stress_old(getMaterialPropertyOld<RankTwoTensor>(_base_name + "stress")),
29  _elastic_strain_old(getMaterialPropertyOldByName<RankTwoTensor>(_base_name + "elastic_strain"))
30 {
31 }
GuaranteeConsumer(MooseObject *moose_object)
const std::string _base_name
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
The old elastic strain is used to calculate the old stress in the case of variable elasticity tensors...
ComputeBirchMurnaghanEquationOfStress(const InputParameters &parameters)

Member Function Documentation

void ComputeStressBase::addQpInitialStress ( )
protectedinherited

InitialStress Deprecation: remove this method.

Adds initial stress, if it is provided, to _stress[_qp]. This function should NOT be used if you calculate stress using

stress = stress_old + elasticity * strain_increment

because stress_old will already include initial stress. However this function SHOULD be used if your code uses

stress = elasticity * (elastic_strain_old + strain_increment) or stress = elasticity * elastic_strain

since in these cases the elastic_strain and elastic_strain_old will not include any contribution from initial stress.

Definition at line 112 of file ComputeStressBase.C.

Referenced by ComputeLinearElasticStress::computeQpStress(), ComputeCosseratLinearElasticStress::computeQpStress(), ComputeFiniteStrainElasticStress::computeQpStress(), ComputeSmearedCrackingStress::computeQpStress(), ComputeMultipleInelasticStress::computeQpStressIntermediateConfiguration(), ComputeStressBase::initQpStatefulProperties(), ComputeMultipleInelasticStress::updateQpState(), and ComputeMultipleInelasticStress::updateQpStateSingleModel().

113 {
115  _stress[_qp] += (*_initial_stress)[_qp];
116 }
MaterialProperty< RankTwoTensor > & _stress
const bool _initial_stress_provided
Whether initial stress was provided. InitialStress Deprecation: remove this.
void ComputeBirchMurnaghanEquationOfStress::computeQpProperties ( )
protectedvirtualinherited

Reimplemented from ComputeStressBase.

Definition at line 41 of file ComputeBirchMurnaghanEquationOfStress.C.

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
50  volumetric_stress.addIa(_stress[_qp].trace() / 3.0);
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)
59  EOS_stress.addIa((_Bulk_Modulus_Ref / _n_Murnaghan) *
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 =
64  (_deformation_gradient[_qp].det() - _deformation_gradient_old[_qp].det()) / _dt;
65  // Divide by the specific volume
66  // dspecific_volume_dt = dot(J) / J
67  dspecific_volume_dt /= _deformation_gradient_old[_qp].det();
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));
76  bulk_viscosity_stress.addIa(_C1 * 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 }
virtual void computeQpStress()=0
MaterialProperty< RankTwoTensor > & _stress
const MaterialProperty< RankTwoTensor > & _deformation_gradient
ExpressionBuilder::EBTerm pow(const ExpressionBuilder::EBTerm &left, T exponent)
const MaterialProperty< RankTwoTensor > & _deformation_gradient_old
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.
void ComputeFiniteStrainElasticStressBirchMurnaghan::computeQpStress ( )
overrideprotectedvirtual

Implements ComputeStressBase.

Definition at line 49 of file ComputeFiniteStrainElasticStressBirchMurnaghan.C.

50 {
51  // Calculate the stress in the intermediate configuration
52  RankTwoTensor intermediate_stress;
53 
54  // Check if the elasticity tensor has changed values
55  intermediate_stress =
57 
58  // Rotate the stress state to the current configuration
59  _stress[_qp] =
60  _rotation_increment[_qp] * intermediate_stress * _rotation_increment[_qp].transpose();
61 
62  // Assign value for elastic strain, which is equal to the mechanical strain
64 
65  // Compute dstress_dstrain
66  _Jacobian_mult[_qp] = _elasticity_tensor[_qp]; // This is NOT the exact jacobian
67 }
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
MaterialProperty< RankTwoTensor > & _stress
const MaterialProperty< RankTwoTensor > & _mechanical_strain
const MaterialProperty< RankTwoTensor > & _elastic_strain_old
The old elastic strain is used to calculate the old stress in the case of variable elasticity tensors...
const MaterialProperty< RankFourTensor > & _elasticity_tensor
MaterialProperty< RankTwoTensor > & _elastic_strain
bool GuaranteeConsumer::hasGuaranteedMaterialProperty ( const MaterialPropertyName &  prop,
Guarantee  guarantee 
)
protectedinherited

Definition at line 26 of file GuaranteeConsumer.C.

Referenced by ComputeFiniteStrainElasticStress::initialSetup(), initialSetup(), ComputeSmearedCrackingStress::initialSetup(), and ComputeMultipleInelasticStress::initialSetup().

28 {
29  if (!_gc_feproblem->startedInitialSetup())
30  mooseError("hasGuaranteedMaterialProperty() needs to be called in initialSetup()");
31 
32  // Reference to MaterialWarehouse for testing and retrieving block ids
33  const auto & warehouse = _gc_feproblem->getMaterialWarehouse();
34 
35  // Complete set of ids that this object is active
36  const auto & ids = (_gc_block_restrict && _gc_block_restrict->blockRestricted())
37  ? _gc_block_restrict->blockIDs()
38  : _gc_feproblem->mesh().meshSubdomains();
39 
40  // Loop over each id for this object
41  for (const auto & id : ids)
42  {
43  // If block materials exist, look if any issue the required guarantee
44  if (warehouse.hasActiveBlockObjects(id))
45  {
46  const std::vector<std::shared_ptr<Material>> & mats = warehouse.getActiveBlockObjects(id);
47  for (const auto & mat : mats)
48  {
49  const auto & mat_props = mat->getSuppliedItems();
50  if (mat_props.count(prop_name))
51  {
52  auto guarantee_mat = dynamic_cast<GuaranteeProvider *>(mat.get());
53  if (guarantee_mat && !guarantee_mat->hasGuarantee(prop_name, guarantee))
54  {
55  // we found at least one material on the set of block we operate on
56  // that does _not_ provide the requested guarantee
57  return false;
58  }
59  }
60  }
61  }
62  }
63 
64  return true;
65 }
Add-on class that provides the functionality to issue guarantees for declared material properties...
BlockRestrictable *const _gc_block_restrict
Access block restrictions of the object with this interface.
FEProblemBase *const _gc_feproblem
Reference to the FEProblemBase class.
void ComputeFiniteStrainElasticStressBirchMurnaghan::initialSetup ( )
override

Definition at line 34 of file ComputeFiniteStrainElasticStressBirchMurnaghan.C.

35 {
37  mooseError("ComputeFiniteStrainElasticStressBirchMurnaghan can only be used with elasticity "
38  "tensor materials "
39  "that guarantee isotropic tensors.");
40 }
const std::string _elasticity_tensor_name
bool hasGuaranteedMaterialProperty(const MaterialPropertyName &prop, Guarantee guarantee)
void ComputeFiniteStrainElasticStressBirchMurnaghan::initQpStatefulProperties ( )
overrideprotectedvirtual

Reimplemented from ComputeStressBase.

Definition at line 43 of file ComputeFiniteStrainElasticStressBirchMurnaghan.C.

Member Data Documentation

const std::string ComputeStressBase::_base_name
protectedinherited
const Real ComputeBirchMurnaghanEquationOfStress::_Bulk_Modulus_Ref
protectedinherited
const Real ComputeBirchMurnaghanEquationOfStress::_C0
protectedinherited
const Real ComputeBirchMurnaghanEquationOfStress::_C1
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeBirchMurnaghanEquationOfStress::_deformation_gradient
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeBirchMurnaghanEquationOfStress::_deformation_gradient_old
protectedinherited
MaterialProperty<RankTwoTensor>& ComputeStressBase::_elastic_strain
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStressBirchMurnaghan::_elastic_strain_old
protected

The old elastic strain is used to calculate the old stress in the case of variable elasticity tensors.

Definition at line 40 of file ComputeFiniteStrainElasticStressBirchMurnaghan.h.

Referenced by computeQpStress().

const MaterialProperty<RankFourTensor>& ComputeStressBase::_elasticity_tensor
protectedinherited
const std::string ComputeStressBase::_elasticity_tensor_name
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeStressBase::_extra_stress
protectedinherited
MaterialProperty<RankTwoTensor>* ComputeStressBase::_initial_stress
protectedinherited

Initial stress, if provided. InitialStress Deprecation: remove this.

Definition at line 74 of file ComputeStressBase.h.

Referenced by ComputeStressBase::initQpStatefulProperties().

std::vector<Function *> ComputeStressBase::_initial_stress_fcn
protectedinherited

initial stress components

Definition at line 62 of file ComputeStressBase.h.

Referenced by ComputeStressBase::ComputeStressBase(), and ComputeStressBase::initQpStatefulProperties().

const MaterialProperty<RankTwoTensor>* ComputeStressBase::_initial_stress_old
protectedinherited

Old value of initial stress, which is needed to correctly implement finite-strain rotations. InitialStress Deprecation: remove this.

Definition at line 77 of file ComputeStressBase.h.

const bool ComputeStressBase::_initial_stress_provided
protectedinherited
MaterialProperty<RankFourTensor>& ComputeStressBase::_Jacobian_mult
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeStressBase::_mechanical_strain
protectedinherited
const Real ComputeBirchMurnaghanEquationOfStress::_n_Murnaghan
protectedinherited
const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStressBirchMurnaghan::_rotation_increment
protected

Definition at line 33 of file ComputeFiniteStrainElasticStressBirchMurnaghan.h.

Referenced by computeQpStress().

const bool ComputeStressBase::_store_stress_old
protectedinherited

Parameter which decides whether to store old stress. This is required for HHT time integration and Rayleigh damping.

Definition at line 68 of file ComputeStressBase.h.

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStressBirchMurnaghan::_strain_increment
protected

Definition at line 32 of file ComputeFiniteStrainElasticStressBirchMurnaghan.h.

Referenced by computeQpStress().

MaterialProperty<RankTwoTensor>& ComputeStressBase::_stress
protectedinherited

Definition at line 53 of file ComputeStressBase.h.

Referenced by ComputeStressBase::addQpInitialStress(), ComputeMultipleInelasticCosseratStress::computeAdmissibleState(), ComputeMultipleInelasticStress::computeAdmissibleState(), ComputeStressBase::computeQpProperties(), ComputeStressEosBase::computeQpProperties(), ComputeBirchMurnaghanEquationOfStress::computeQpProperties(), ComputeLinearElasticStress::computeQpStress(), ComputeStrainIncrementBasedStress::computeQpStress(), ComputeLinearElasticPFFractureStress::computeQpStress(), ComputeCosseratLinearElasticStress::computeQpStress(), ComputeFiniteStrainElasticStress::computeQpStress(), ComputeIsotropicLinearElasticPFFractureStress::computeQpStress(), computeQpStress(), FiniteStrainPlasticMaterial::computeQpStress(), ComputeMultiPlasticityStress::computeQpStress(), ComputeSmearedCrackingStress::computeQpStress(), ComputeLinearViscoelasticStress::computeQpStress(), ComputeMultipleInelasticStress::computeQpStressIntermediateConfiguration(), ComputeSmearedCrackingStress::crackingStressRotation(), ComputeMultipleInelasticStress::finiteStrainRotation(), ComputeStressBase::initQpStatefulProperties(), FiniteStrainCrystalPlasticity::initQpStatefulProperties(), FiniteStrainUObasedCP::initQpStatefulProperties(), FiniteStrainHyperElasticViscoPlastic::initQpStatefulProperties(), ComputeMultiPlasticityStress::postReturnMap(), FiniteStrainUObasedCP::postSolveQp(), FiniteStrainHyperElasticViscoPlastic::postSolveQp(), FiniteStrainCrystalPlasticity::postSolveQp(), ComputeMultipleInelasticStress::updateQpState(), ComputeMultipleInelasticStress::updateQpStateSingleModel(), and LinearIsoElasticPFDamage::updateVar().

const MaterialProperty<RankTwoTensor>& ComputeFiniteStrainElasticStressBirchMurnaghan::_stress_old
protected

The documentation for this class was generated from the following files: