www.mooseframework.org
CombinedScalarDamage.C
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #include "CombinedScalarDamage.h"
11 
12 registerMooseObject("TensorMechanicsApp", CombinedScalarDamage);
13 
15 
16 InputParameters
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 }
34 
35 CombinedScalarDamage::CombinedScalarDamage(const InputParameters & parameters)
36  : ScalarDamageBase(parameters),
37  _combination_type(getParam<MooseEnum>("combination_type").getEnum<CombinationType>()),
38  _damage_models_names(getParam<std::vector<MaterialName>>("damage_models"))
39 {
40 }
41 
42 void
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 }
57 
58 void
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 }
registerMooseObject
registerMooseObject("TensorMechanicsApp", CombinedScalarDamage)
CombinedScalarDamage.h
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
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
CombinedScalarDamage
Scalar damage model computed as the combination of multiple damage models.
Definition: CombinedScalarDamage.h:23
CombinedScalarDamage::CombinationType::Product
CombinedScalarDamage::CombinationType
CombinationType
Definition: CombinedScalarDamage.h:35
ScalarDamageBase::getQpDamageIndex
const Real & getQpDamageIndex(unsigned int qp)
Definition: ScalarDamageBase.C:60
CombinedScalarDamage::CombinedScalarDamage
CombinedScalarDamage(const InputParameters &parameters)
Definition: CombinedScalarDamage.C:35
CombinedScalarDamage::initialSetup
void initialSetup() override
Definition: CombinedScalarDamage.C:43
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
CombinedScalarDamage::validParams
static InputParameters validParams()
Definition: CombinedScalarDamage.C:17
CombinedScalarDamage::CombinationType::Maximum
CombinedScalarDamage::updateQpDamageIndex
virtual void updateQpDamageIndex() override
Update the damage index at the current qpoint.
Definition: CombinedScalarDamage.C:59
defineLegacyParams
defineLegacyParams(CombinedScalarDamage)