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

Scalar damage model computed as the combination of multiple damage models. More...

#include <CombinedScalarDamage.h>

Inheritance diagram for CombinedScalarDamage:
[legend]

Public Member Functions

 CombinedScalarDamage (const InputParameters &parameters)
 
void initialSetup () override
 
virtual void initQpStatefulProperties () override
 
virtual void updateDamage () override
 Update the internal variable(s) that evolve the damage. More...
 
virtual void updateStressForDamage (RankTwoTensor &stress_new) override
 Update the current stress tensor for effects of damage. More...
 
virtual void updateJacobianMultForDamage (RankFourTensor &jacobian_mult) override
 Update the material constitutive matrix. More...
 
virtual void computeUndamagedOldStress (RankTwoTensor &stress_old) override
 
virtual Real computeTimeStepLimit () override
 Compute the limiting value of the time step for this material. More...
 
const Real & getQpDamageIndex (unsigned int qp)
 
const std::string getDamageIndexName () const
 
virtual void finiteStrainRotation (const RankTwoTensor &rotation_increment)
 Perform any necessary rotation of internal variables for finite strain. More...
 
void setQp (unsigned int qp)
 Sets the value of the member variable _qp for use in inheriting classes. More...
 
void resetQpProperties () final
 Retained as empty methods to avoid a warning from Material.C in framework. These methods are unused in all inheriting classes and should not be overwritten. More...
 
void resetProperties () final
 

Static Public Member Functions

static InputParameters validParams ()
 

Protected Types

enum  CombinationType { CombinationType::Maximum, CombinationType::Product }
 

Protected Member Functions

virtual void updateQpDamageIndex () override
 Update the damage index at the current qpoint. More...
 

Protected Attributes

const CombinationType _combination_type
 Type of expansion. More...
 
std::vector< MaterialName > _damage_models_names
 
std::vector< ScalarDamageBase * > _damage_models
 
const std::string _damage_index_name
 Name of the material property where the damage index is stored. More...
 
const bool _use_old_damage
 If true, use the damage index from the old state (rather than the current state) More...
 
const Real & _residual_stiffness_fraction
 Residual fraction of stiffness used for material that is fully damaged. More...
 
const Real & _maximum_damage_increment
 Maximum damage increment allowed for the time step. More...
 
const std::string _base_name
 Base name optionally used as prefix to material tensor names. More...
 
MaterialProperty< Real > & _damage_index
 Material property that provides the damage index. More...
 
const MaterialProperty< Real > & _damage_index_old
 
const MaterialProperty< Real > & _damage_index_older
 

Detailed Description

Scalar damage model computed as the combination of multiple damage models.

Definition at line 23 of file CombinedScalarDamage.h.

Member Enumeration Documentation

◆ CombinationType

Enumerator
Maximum 
Product 

Definition at line 35 of file CombinedScalarDamage.h.

36  {
37  Maximum,
38  Product
39  };

Constructor & Destructor Documentation

◆ CombinedScalarDamage()

CombinedScalarDamage::CombinedScalarDamage ( const InputParameters &  parameters)

Definition at line 35 of file CombinedScalarDamage.C.

36  : ScalarDamageBase(parameters),
37  _combination_type(getParam<MooseEnum>("combination_type").getEnum<CombinationType>()),
38  _damage_models_names(getParam<std::vector<MaterialName>>("damage_models"))
39 {
40 }

Member Function Documentation

◆ computeTimeStepLimit()

Real ScalarDamageBase::computeTimeStepLimit ( )
overridevirtualinherited

Compute the limiting value of the time step for this material.

Returns
Limiting time step

Reimplemented from DamageBase.

Definition at line 100 of file ScalarDamageBase.C.

101 {
102  Real current_damage_increment = (_damage_index[_qp] - _damage_index_old[_qp]);
103  if (MooseUtils::absoluteFuzzyEqual(current_damage_increment, 0.0))
104  return std::numeric_limits<Real>::max();
105 
106  return _dt * _maximum_damage_increment / current_damage_increment;
107 }

◆ computeUndamagedOldStress()

void ScalarDamageBase::computeUndamagedOldStress ( RankTwoTensor stress_old)
overridevirtualinherited

Implements DamageBase.

Definition at line 83 of file ScalarDamageBase.C.

84 {
85  Real damage_index_old =
86  std::max((1.0 - (_use_old_damage ? _damage_index_older[_qp] : _damage_index_old[_qp])), 0.0);
87 
88  if (damage_index_old > 0.0)
89  stress_old /= damage_index_old;
90 }

◆ finiteStrainRotation()

void DamageBase::finiteStrainRotation ( const RankTwoTensor rotation_increment)
virtualinherited

Perform any necessary rotation of internal variables for finite strain.

Parameters
rotation_incrementThe finite-strain rotation increment

Definition at line 57 of file DamageBase.C.

58 {
59 }

Referenced by ComputeDamageStress::computeQpStress(), and ComputeMultipleInelasticStress::computeQpStress().

◆ getDamageIndexName()

const std::string ScalarDamageBase::getDamageIndexName ( ) const
inlineinherited

Definition at line 44 of file ScalarDamageBase.h.

44 { return _damage_index_name; }

◆ getQpDamageIndex()

const Real & ScalarDamageBase::getQpDamageIndex ( unsigned int  qp)
inherited

Definition at line 60 of file ScalarDamageBase.C.

61 {
62  setQp(qp);
64  return _damage_index[_qp];
65 }

Referenced by updateQpDamageIndex().

◆ initialSetup()

void CombinedScalarDamage::initialSetup ( )
override

Definition at line 43 of file CombinedScalarDamage.C.

44 {
45  for (unsigned int i = 0; i < _damage_models_names.size(); ++i)
46  {
47  ScalarDamageBase * model =
48  dynamic_cast<ScalarDamageBase *>(&getMaterialByName(_damage_models_names[i]));
49  if (model)
50  _damage_models.push_back(model);
51  else
52  paramError("damage_model",
53  "Damage Model " + _damage_models_names[i] +
54  " is not compatible with CombinedScalarDamage");
55  }
56 }

◆ initQpStatefulProperties()

void ScalarDamageBase::initQpStatefulProperties ( )
overridevirtualinherited

Definition at line 54 of file ScalarDamageBase.C.

55 {
56  _damage_index[_qp] = 0.0;
57 }

◆ resetProperties()

void DamageBase::resetProperties ( )
inlinefinalinherited

Definition at line 72 of file DamageBase.h.

72 {}

◆ resetQpProperties()

void DamageBase::resetQpProperties ( )
inlinefinalinherited

Retained as empty methods to avoid a warning from Material.C in framework. These methods are unused in all inheriting classes and should not be overwritten.

Definition at line 71 of file DamageBase.h.

71 {}

◆ setQp()

void DamageBase::setQp ( unsigned int  qp)
inherited

Sets the value of the member variable _qp for use in inheriting classes.

Definition at line 40 of file DamageBase.C.

41 {
42  _qp = qp;
43 }

Referenced by ComputeDamageStress::computeQpStress(), ComputeMultipleInelasticStress::computeQpStress(), and ScalarDamageBase::getQpDamageIndex().

◆ updateDamage()

void ScalarDamageBase::updateDamage ( )
overridevirtualinherited

Update the internal variable(s) that evolve the damage.

Reimplemented from DamageBase.

Definition at line 68 of file ScalarDamageBase.C.

69 {
71 }

◆ updateJacobianMultForDamage()

void ScalarDamageBase::updateJacobianMultForDamage ( RankFourTensor jacobian_mult)
overridevirtualinherited

Update the material constitutive matrix.

Parameters
jacobian_multMaterial constitutive matrix to be modified for effects of damage

Implements DamageBase.

Definition at line 93 of file ScalarDamageBase.C.

94 {
95  jacobian_mult *= std::max((1.0 - (_use_old_damage ? _damage_index_old[_qp] : _damage_index[_qp])),
97 }

◆ updateQpDamageIndex()

void CombinedScalarDamage::updateQpDamageIndex ( )
overrideprotectedvirtual

Update the damage index at the current qpoint.

Implements ScalarDamageBase.

Definition at line 59 of file CombinedScalarDamage.C.

60 {
61  switch (_combination_type)
62  {
64  _damage_index[_qp] = _damage_index_old[_qp];
65  for (unsigned int i = 0; i < _damage_models.size(); ++i)
66  _damage_index[_qp] = std::max(_damage_index[_qp], _damage_models[i]->getQpDamageIndex(_qp));
67  break;
69  _damage_index[_qp] = 1.0;
70  for (unsigned int i = 0; i < _damage_models.size(); ++i)
71  _damage_index[_qp] *= 1.0 - _damage_models[i]->getQpDamageIndex(_qp);
72  _damage_index[_qp] = 1.0 - _damage_index[_qp];
73  break;
74  }
75 
76  _damage_index[_qp] =
77  std::max(_damage_index_old[_qp], std::max(0.0, std::min(1.0, _damage_index[_qp])));
78 }

◆ updateStressForDamage()

void ScalarDamageBase::updateStressForDamage ( RankTwoTensor stress_new)
overridevirtualinherited

Update the current stress tensor for effects of damage.

Parameters
stress_newUndamaged stress to be modified by the damage model

Implements DamageBase.

Definition at line 74 of file ScalarDamageBase.C.

75 {
76  // Avoid multiplying by a small negative number, which could occur if damage_index
77  // is slightly greater than 1.0
78  stress_new *=
79  std::max((1.0 - (_use_old_damage ? _damage_index_old[_qp] : _damage_index[_qp])), 0.0);
80 }

◆ validParams()

InputParameters CombinedScalarDamage::validParams ( )
static

Definition at line 17 of file CombinedScalarDamage.C.

18 {
19  InputParameters params = ScalarDamageBase::validParams();
20 
21  params.addClassDescription(
22  "Scalar damage model which is computed as a function of multiple scalar damage models");
23 
24  params.addRequiredParam<std::vector<MaterialName>>("damage_models",
25  "Name of the damage models used to compute "
26  "the damage index");
27 
28  MooseEnum combination_type("Maximum Product", "Maximum");
29  params.addParam<MooseEnum>(
30  "combination_type", combination_type, "How the damage models are combined");
31 
32  return params;
33 }

Member Data Documentation

◆ _base_name

const std::string DamageBase::_base_name
protectedinherited

Base name optionally used as prefix to material tensor names.

Definition at line 77 of file DamageBase.h.

Referenced by ScalarMaterialDamage::updateQpDamageIndex().

◆ _combination_type

const CombinationType CombinedScalarDamage::_combination_type
protected

Type of expansion.

Definition at line 42 of file CombinedScalarDamage.h.

Referenced by updateQpDamageIndex().

◆ _damage_index

MaterialProperty<Real>& ScalarDamageBase::_damage_index
protectedinherited

◆ _damage_index_name

const std::string ScalarDamageBase::_damage_index_name
protectedinherited

Name of the material property where the damage index is stored.

Definition at line 48 of file ScalarDamageBase.h.

Referenced by ScalarDamageBase::getDamageIndexName().

◆ _damage_index_old

const MaterialProperty<Real>& ScalarDamageBase::_damage_index_old
protectedinherited

◆ _damage_index_older

const MaterialProperty<Real>& ScalarDamageBase::_damage_index_older
protectedinherited

Definition at line 56 of file ScalarDamageBase.h.

Referenced by ScalarDamageBase::computeUndamagedOldStress().

◆ _damage_models

std::vector<ScalarDamageBase *> CombinedScalarDamage::_damage_models
protected

Definition at line 46 of file CombinedScalarDamage.h.

Referenced by initialSetup(), and updateQpDamageIndex().

◆ _damage_models_names

std::vector<MaterialName> CombinedScalarDamage::_damage_models_names
protected

Definition at line 44 of file CombinedScalarDamage.h.

Referenced by initialSetup().

◆ _maximum_damage_increment

const Real& ScalarDamageBase::_maximum_damage_increment
protectedinherited

Maximum damage increment allowed for the time step.

Definition at line 66 of file ScalarDamageBase.h.

Referenced by ScalarDamageBase::computeTimeStepLimit().

◆ _residual_stiffness_fraction

const Real& ScalarDamageBase::_residual_stiffness_fraction
protectedinherited

Residual fraction of stiffness used for material that is fully damaged.

Definition at line 63 of file ScalarDamageBase.h.

Referenced by ScalarDamageBase::updateJacobianMultForDamage().

◆ _use_old_damage

const bool ScalarDamageBase::_use_old_damage
protectedinherited

If true, use the damage index from the old state (rather than the current state)

Definition at line 60 of file ScalarDamageBase.h.

Referenced by ScalarDamageBase::computeUndamagedOldStress(), ScalarDamageBase::updateJacobianMultForDamage(), and ScalarDamageBase::updateStressForDamage().


The documentation for this class was generated from the following files:
ScalarDamageBase::_residual_stiffness_fraction
const Real & _residual_stiffness_fraction
Residual fraction of stiffness used for material that is fully damaged.
Definition: ScalarDamageBase.h:63
ScalarDamageBase::_damage_index_old
const MaterialProperty< Real > & _damage_index_old
Definition: ScalarDamageBase.h:55
ScalarDamageBase::validParams
static InputParameters validParams()
Definition: ScalarDamageBase.C:16
ScalarDamageBase
Base class for scalar damage models.
Definition: ScalarDamageBase.h:23
ScalarDamageBase::_use_old_damage
const bool _use_old_damage
If true, use the damage index from the old state (rather than the current state)
Definition: ScalarDamageBase.h:60
ScalarDamageBase::ScalarDamageBase
ScalarDamageBase(const InputParameters &parameters)
Definition: ScalarDamageBase.C:41
CombinedScalarDamage::_damage_models_names
std::vector< MaterialName > _damage_models_names
Definition: CombinedScalarDamage.h:44
CombinedScalarDamage::_damage_models
std::vector< ScalarDamageBase * > _damage_models
Definition: CombinedScalarDamage.h:46
ScalarDamageBase::_maximum_damage_increment
const Real & _maximum_damage_increment
Maximum damage increment allowed for the time step.
Definition: ScalarDamageBase.h:66
CombinedScalarDamage::CombinationType::Product
ScalarDamageBase::_damage_index_older
const MaterialProperty< Real > & _damage_index_older
Definition: ScalarDamageBase.h:56
ScalarDamageBase::getQpDamageIndex
const Real & getQpDamageIndex(unsigned int qp)
Definition: ScalarDamageBase.C:60
ScalarDamageBase::_damage_index
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.
Definition: ScalarDamageBase.h:54
CombinedScalarDamage::_combination_type
const CombinationType _combination_type
Type of expansion.
Definition: CombinedScalarDamage.h:42
ScalarDamageBase::updateQpDamageIndex
virtual void updateQpDamageIndex()=0
Update the damage index at the current qpoint.
CombinedScalarDamage::CombinationType::Maximum
ScalarDamageBase::_damage_index_name
const std::string _damage_index_name
Name of the material property where the damage index is stored.
Definition: ScalarDamageBase.h:48
DamageBase::setQp
void setQp(unsigned int qp)
Sets the value of the member variable _qp for use in inheriting classes.
Definition: DamageBase.C:40