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

Phase-field fracture This class computes the energy contribution to damage growth Small strain Isotropic Elastic formulation Stiffness matrix scaled for heterogeneous elasticity property. More...

#include <LinearIsoElasticPFDamage.h>

Inheritance diagram for LinearIsoElasticPFDamage:
[legend]

Public Member Functions

 LinearIsoElasticPFDamage (const InputParameters &parameters)
 

Protected Member Functions

virtual void computeQpStress ()
 
virtual void updateVar ()
 
virtual void updateJacobian ()
 
virtual void initQpStatefulProperties () override
 
virtual void computeQpProperties () override
 
void addQpInitialStress ()
 InitialStress Deprecation: remove this method. More...
 

Protected Attributes

const VariableValue & _c
 
Real _kdamage
 Small number to avoid non-positive definiteness at or near complete damage. More...
 
MaterialProperty< Real > & _G0_pos
 
MaterialProperty< RankTwoTensor > & _dstress_dc
 
MaterialProperty< RankTwoTensor > & _dG0_pos_dstrain
 
std::vector< RankTwoTensor > _etens
 
std::vector< Real > _epos
 
std::vector< Real > _eigval
 
RankTwoTensor _eigvec
 
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

Phase-field fracture This class computes the energy contribution to damage growth Small strain Isotropic Elastic formulation Stiffness matrix scaled for heterogeneous elasticity property.

Definition at line 19 of file LinearIsoElasticPFDamage.h.

Constructor & Destructor Documentation

LinearIsoElasticPFDamage::LinearIsoElasticPFDamage ( const InputParameters &  parameters)

Definition at line 26 of file LinearIsoElasticPFDamage.C.

27  : ComputeStressBase(parameters),
28  _c(coupledValue("c")),
29  _kdamage(getParam<Real>("kdamage")),
30  _G0_pos(declareProperty<Real>("G0_pos")),
32  declarePropertyDerivative<RankTwoTensor>(_base_name + "stress", getVar("c", 0)->name())),
33  _dG0_pos_dstrain(declareProperty<RankTwoTensor>("dG0_pos_dstrain")),
34  _etens(LIBMESH_DIM),
35  _epos(LIBMESH_DIM),
36  _eigval(LIBMESH_DIM)
37 {
38 }
MaterialProperty< Real > & _G0_pos
MaterialProperty< RankTwoTensor > & _dstress_dc
std::vector< RankTwoTensor > _etens
MaterialProperty< RankTwoTensor > & _dG0_pos_dstrain
const std::string _base_name
ComputeStressBase(const InputParameters &parameters)
Real _kdamage
Small number to avoid non-positive definiteness at or near complete damage.

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 ComputeStressBase::computeQpProperties ( )
overrideprotectedvirtualinherited

Reimplemented in ComputeBirchMurnaghanEquationOfStress, and ComputeStressEosBase.

Definition at line 99 of file ComputeStressBase.C.

100 {
101  // InitialStress Deprecation: remove the following 2 lines
103  (*_initial_stress)[_qp] = (*_initial_stress_old)[_qp];
104 
105  computeQpStress();
106 
107  // Add in extra stress
108  _stress[_qp] += _extra_stress[_qp];
109 }
virtual void computeQpStress()=0
MaterialProperty< RankTwoTensor > & _stress
const bool _initial_stress_provided
Whether initial stress was provided. InitialStress Deprecation: remove this.
const MaterialProperty< RankTwoTensor > & _extra_stress
Extra stress tensor.
void LinearIsoElasticPFDamage::computeQpStress ( )
protectedvirtual

Implements ComputeStressBase.

Definition at line 41 of file LinearIsoElasticPFDamage.C.

42 {
43  updateVar();
45 }
void ComputeStressBase::initQpStatefulProperties ( )
overrideprotectedvirtualinherited

Reimplemented in FiniteStrainHyperElasticViscoPlastic, FiniteStrainUObasedCP, FiniteStrainCrystalPlasticity, ComputeMultipleInelasticCosseratStress, ComputeMultipleInelasticStress, ComputeMultiPlasticityStress, ComputeLinearViscoelasticStress, ComputeSmearedCrackingStress, FiniteStrainPlasticMaterial, ComputeFiniteStrainElasticStressBirchMurnaghan, ComputeFiniteStrainElasticStress, ComputeIsotropicLinearElasticPFFractureStress, and ComputeCosseratStressBase.

Definition at line 83 of file ComputeStressBase.C.

Referenced by ComputeCosseratStressBase::initQpStatefulProperties(), ComputeFiniteStrainElasticStress::initQpStatefulProperties(), ComputeFiniteStrainElasticStressBirchMurnaghan::initQpStatefulProperties(), FiniteStrainPlasticMaterial::initQpStatefulProperties(), ComputeMultiPlasticityStress::initQpStatefulProperties(), and ComputeMultipleInelasticStress::initQpStatefulProperties().

84 {
85  _elastic_strain[_qp].zero();
86  _stress[_qp].zero();
87  // InitialStress Deprecation: remove the following
89  {
90  for (unsigned i = 0; i < LIBMESH_DIM; ++i)
91  for (unsigned j = 0; j < LIBMESH_DIM; ++j)
92  (*_initial_stress)[_qp](i, j) =
93  _initial_stress_fcn[i * LIBMESH_DIM + j]->value(_t, _q_point[_qp]);
94  }
96 }
std::vector< Function * > _initial_stress_fcn
initial stress components
MaterialProperty< RankTwoTensor > & _stress
void addQpInitialStress()
InitialStress Deprecation: remove this method.
const bool _initial_stress_provided
Whether initial stress was provided. InitialStress Deprecation: remove this.
MaterialProperty< RankTwoTensor > & _elastic_strain
MaterialProperty< RankTwoTensor > * _initial_stress
Initial stress, if provided. InitialStress Deprecation: remove this.
void LinearIsoElasticPFDamage::updateJacobian ( )
protectedvirtual

Definition at line 107 of file LinearIsoElasticPFDamage.C.

Referenced by computeQpStress().

108 {
110 }
MaterialProperty< RankFourTensor > & _Jacobian_mult
derivative of stress w.r.t. strain (_dstress_dstrain)
const MaterialProperty< RankFourTensor > & _elasticity_tensor
void LinearIsoElasticPFDamage::updateVar ( )
protectedvirtual

Definition at line 48 of file LinearIsoElasticPFDamage.C.

Referenced by computeQpStress().

49 {
50  // Isotropic elasticity is assumed
51  Real lambda = _elasticity_tensor[_qp](0, 0, 1, 1);
52  Real mu = _elasticity_tensor[_qp](0, 1, 0, 1);
53  Real c = _c[_qp];
54  Real xfac = _kdamage;
55  if (c < 1.0)
56  xfac += Utility::pow<2>(1.0 - c);
57 
58  _mechanical_strain[_qp].symmetricEigenvaluesEigenvectors(_eigval, _eigvec);
59 
60  // Tensors of outerproduct of eigen vectors
61  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
62  for (unsigned int j = 0; j < LIBMESH_DIM; ++j)
63  for (unsigned int k = 0; k < LIBMESH_DIM; ++k)
64  _etens[i](j, k) = _eigvec(j, i) * _eigvec(k, i);
65 
66  Real etr = 0.0;
67  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
68  etr += _eigval[i];
69 
70  Real etrpos = (std::abs(etr) + etr) / 2.0;
71  Real etrneg = (std::abs(etr) - etr) / 2.0;
72 
73  RankTwoTensor stress0pos, stress0neg;
74  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
75  {
76  stress0pos +=
77  _etens[i] * (lambda * etrpos + 2.0 * mu * (std::abs(_eigval[i]) + _eigval[i]) / 2.0);
78  stress0neg +=
79  _etens[i] * (lambda * etrneg + 2.0 * mu * (std::abs(_eigval[i]) - _eigval[i]) / 2.0);
80  }
81 
82  // Damage associated with positive component of stress
83  _stress[_qp] = stress0pos * xfac - stress0neg;
84 
85  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
86  _epos[i] = (std::abs(_eigval[i]) + _eigval[i]) / 2.0;
87 
88  Real val = 0.0;
89  for (unsigned int i = 0; i < LIBMESH_DIM; ++i)
90  val += Utility::pow<2>(_epos[i]);
91  val *= mu;
92 
93  // Energy with positive principal strains
94  _G0_pos[_qp] = lambda * Utility::pow<2>(etrpos) / 2.0 + val;
95 
96  // Used in PFFracBulkRate Jacobian
97  _dG0_pos_dstrain[_qp] = stress0pos;
98 
99  // Used in StressDivergencePFFracTensors Jacobian
100  if (c < 1.0)
101  _dstress_dc[_qp] = -stress0pos * (2.0 * (1.0 - c));
102  else
103  _dstress_dc[_qp].zero();
104 }
MaterialProperty< Real > & _G0_pos
MaterialProperty< RankTwoTensor > & _dstress_dc
MaterialProperty< RankTwoTensor > & _stress
std::vector< RankTwoTensor > _etens
const MaterialProperty< RankTwoTensor > & _mechanical_strain
MaterialProperty< RankTwoTensor > & _dG0_pos_dstrain
const MaterialProperty< RankFourTensor > & _elasticity_tensor
Real _kdamage
Small number to avoid non-positive definiteness at or near complete damage.

Member Data Documentation

const std::string ComputeStressBase::_base_name
protectedinherited
const VariableValue& LinearIsoElasticPFDamage::_c
protected

Definition at line 29 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

MaterialProperty<RankTwoTensor>& LinearIsoElasticPFDamage::_dG0_pos_dstrain
protected

Definition at line 35 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

MaterialProperty<RankTwoTensor>& LinearIsoElasticPFDamage::_dstress_dc
protected

Definition at line 34 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

std::vector<Real> LinearIsoElasticPFDamage::_eigval
protected

Definition at line 39 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

RankTwoTensor LinearIsoElasticPFDamage::_eigvec
protected

Definition at line 40 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

MaterialProperty<RankTwoTensor>& ComputeStressBase::_elastic_strain
protectedinherited
const MaterialProperty<RankFourTensor>& ComputeStressBase::_elasticity_tensor
protectedinherited
const std::string ComputeStressBase::_elasticity_tensor_name
protectedinherited
std::vector<Real> LinearIsoElasticPFDamage::_epos
protected

Definition at line 38 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

std::vector<RankTwoTensor> LinearIsoElasticPFDamage::_etens
protected

Definition at line 37 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

const MaterialProperty<RankTwoTensor>& ComputeStressBase::_extra_stress
protectedinherited
MaterialProperty<Real>& LinearIsoElasticPFDamage::_G0_pos
protected

Definition at line 33 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

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
Real LinearIsoElasticPFDamage::_kdamage
protected

Small number to avoid non-positive definiteness at or near complete damage.

Definition at line 31 of file LinearIsoElasticPFDamage.h.

Referenced by updateVar().

const MaterialProperty<RankTwoTensor>& ComputeStressBase::_mechanical_strain
protectedinherited
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.

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(), ComputeFiniteStrainElasticStressBirchMurnaghan::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 updateVar().


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