www.mooseframework.org
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 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
 

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
 

Detailed Description

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

Definition at line 24 of file CombinedScalarDamage.h.

Member Enumeration Documentation

◆ CombinationType

Enumerator
Maximum 
Product 

Definition at line 34 of file CombinedScalarDamage.h.

35  {
36  Maximum,
37  Product
38  };

Constructor & Destructor Documentation

◆ CombinedScalarDamage()

CombinedScalarDamage::CombinedScalarDamage ( const InputParameters &  parameters)

Definition at line 34 of file CombinedScalarDamage.C.

35  : ScalarDamageBase(parameters),
36  _combination_type(getParam<MooseEnum>("combination_type").getEnum<CombinationType>()),
37  _damage_models_names(getParam<std::vector<MaterialName>>("damage_models"))
38 {
39 }
const CombinationType _combination_type
Type of expansion.
ScalarDamageBase(const InputParameters &parameters)
std::vector< MaterialName > _damage_models_names

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 88 of file ScalarDamageBase.C.

89 {
90  Real current_damage_increment = (_damage_index[_qp] - _damage_index_old[_qp]);
91  if (MooseUtils::absoluteFuzzyEqual(current_damage_increment, 0.0))
92  return std::numeric_limits<Real>::max();
93 
94  return _dt * _maximum_damage_increment / current_damage_increment;
95 }
const MaterialProperty< Real > & _damage_index_old
const Real & _maximum_damage_increment
Maximum damage increment allowed for the time step.
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.

◆ 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 56 of file DamageBase.C.

Referenced by ComputeDamageStress::computeQpStress().

57 {
58 }

◆ getDamageIndexName()

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

Definition at line 41 of file ScalarDamageBase.h.

41 { return _damage_index_name; }
const std::string _damage_index_name
Name of the material property where the damage index is stored.

◆ getQpDamageIndex()

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

Definition at line 58 of file ScalarDamageBase.C.

Referenced by updateQpDamageIndex().

59 {
60  setQp(qp);
62  return _damage_index[_qp];
63 }
void setQp(unsigned int qp)
Sets the value of the member variable _qp for use in inheriting classes.
Definition: DamageBase.C:39
virtual void updateQpDamageIndex()=0
Update the damage index at the current qpoint.
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.

◆ initialSetup()

void CombinedScalarDamage::initialSetup ( )
override

Definition at line 42 of file CombinedScalarDamage.C.

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

◆ initQpStatefulProperties()

void ScalarDamageBase::initQpStatefulProperties ( )
overridevirtualinherited

Definition at line 52 of file ScalarDamageBase.C.

53 {
54  _damage_index[_qp] = 0.0;
55 }
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.

◆ resetProperties()

void DamageBase::resetProperties ( )
inlinefinalinherited

Definition at line 70 of file DamageBase.h.

70 {}

◆ 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 69 of file DamageBase.h.

69 {}

◆ setQp()

void DamageBase::setQp ( unsigned int  qp)
inherited

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

Definition at line 39 of file DamageBase.C.

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

40 {
41  _qp = qp;
42 }

◆ updateDamage()

void ScalarDamageBase::updateDamage ( )
overridevirtualinherited

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

Reimplemented from DamageBase.

Definition at line 66 of file ScalarDamageBase.C.

67 {
69 }
virtual void updateQpDamageIndex()=0
Update the damage index at the current qpoint.

◆ 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 81 of file ScalarDamageBase.C.

82 {
83  jacobian_mult *= std::max((1.0 - (_use_old_damage ? _damage_index_old[_qp] : _damage_index[_qp])),
85 }
const bool _use_old_damage
If true, use the damage index from the old state (rather than the current state)
const MaterialProperty< Real > & _damage_index_old
const Real & _residual_stiffness_fraction
Residual fraction of stiffness used for material that is fully damaged.
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.

◆ updateQpDamageIndex()

void CombinedScalarDamage::updateQpDamageIndex ( )
overrideprotectedvirtual

Update the damage index at the current qpoint.

Implements ScalarDamageBase.

Definition at line 58 of file CombinedScalarDamage.C.

59 {
60  switch (_combination_type)
61  {
63  _damage_index[_qp] = _damage_index_old[_qp];
64  for (unsigned int i = 0; i < _damage_models.size(); ++i)
65  _damage_index[_qp] = std::max(_damage_index[_qp], _damage_models[i]->getQpDamageIndex(_qp));
66  break;
68  _damage_index[_qp] = 1.0;
69  for (unsigned int i = 0; i < _damage_models.size(); ++i)
70  _damage_index[_qp] *= 1.0 - _damage_models[i]->getQpDamageIndex(_qp);
71  _damage_index[_qp] = 1.0 - _damage_index[_qp];
72  break;
73  }
74 
75  _damage_index[_qp] =
76  std::max(_damage_index_old[_qp], std::max(0.0, std::min(1.0, _damage_index[_qp])));
77 }
const CombinationType _combination_type
Type of expansion.
std::vector< ScalarDamageBase * > _damage_models
const MaterialProperty< Real > & _damage_index_old
const Real & getQpDamageIndex(unsigned int qp)
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.

◆ 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 72 of file ScalarDamageBase.C.

73 {
74  // Avoid multiplying by a small negative number, which could occur if damage_index
75  // is slightly greater than 1.0
76  stress_new *=
77  std::max((1.0 - (_use_old_damage ? _damage_index_old[_qp] : _damage_index[_qp])), 0.0);
78 }
const bool _use_old_damage
If true, use the damage index from the old state (rather than the current state)
const MaterialProperty< Real > & _damage_index_old
MaterialProperty< Real > & _damage_index
Material property that provides the damage index.

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 75 of file DamageBase.h.

Referenced by ScalarMaterialDamage::updateQpDamageIndex().

◆ _combination_type

const CombinationType CombinedScalarDamage::_combination_type
protected

Type of expansion.

Definition at line 41 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 45 of file ScalarDamageBase.h.

Referenced by ScalarDamageBase::getDamageIndexName().

◆ _damage_index_old

const MaterialProperty<Real>& ScalarDamageBase::_damage_index_old
protectedinherited

◆ _damage_models

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

Definition at line 45 of file CombinedScalarDamage.h.

Referenced by initialSetup(), and updateQpDamageIndex().

◆ _damage_models_names

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

Definition at line 43 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 62 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 59 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 56 of file ScalarDamageBase.h.

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


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