Line data Source code
1 : //* This file is part of the MOOSE framework 2 : //* https://mooseframework.inl.gov 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 "ComputeDamageStress.h" 11 : #include "DamageBase.h" 12 : 13 : registerMooseObject("SolidMechanicsApp", ComputeDamageStress); 14 : registerMooseObject("SolidMechanicsApp", ADComputeDamageStress); 15 : 16 : template <bool is_ad> 17 : InputParameters 18 288 : ComputeDamageStressTempl<is_ad>::validParams() 19 : { 20 288 : InputParameters params = ComputeFiniteStrainElasticStressTempl<is_ad>::validParams(); 21 288 : params.addClassDescription( 22 : "Compute stress for damaged elastic materials in conjunction with a damage model."); 23 576 : params.addRequiredParam<MaterialName>("damage_model", "Name of the damage model"); 24 288 : return params; 25 0 : } 26 : 27 : template <bool is_ad> 28 216 : ComputeDamageStressTempl<is_ad>::ComputeDamageStressTempl(const InputParameters & parameters) 29 : : ComputeFiniteStrainElasticStressTempl<is_ad>(parameters), 30 216 : _material_timestep_limit(this->template declareProperty<Real>("material_timestep_limit")), 31 216 : _damage_model(nullptr) 32 : { 33 216 : } 34 : 35 : template <bool is_ad> 36 : void 37 206 : ComputeDamageStressTempl<is_ad>::initialSetup() 38 : { 39 206 : MaterialName damage_model_name = this->template getParam<MaterialName>("damage_model"); 40 : DamageBaseTempl<is_ad> * dmb = 41 206 : dynamic_cast<DamageBaseTempl<is_ad> *>(&this->getMaterialByName(damage_model_name)); 42 206 : if (dmb) 43 204 : _damage_model = dmb; 44 : else 45 4 : this->paramError("damage_model", 46 : "Damage Model " + damage_model_name + 47 : " is not compatible with ComputeDamageStress"); 48 204 : } 49 : 50 : template <> 51 : void 52 719897 : ComputeDamageStressTempl<false>::computeQpStress() 53 : { 54 719897 : ComputeFiniteStrainElasticStressTempl<false>::computeQpStress(); 55 : 56 719897 : _damage_model->setQp(_qp); 57 719897 : _damage_model->updateDamage(); 58 719896 : _damage_model->updateStressForDamage(this->_stress[_qp]); 59 719896 : _damage_model->finiteStrainRotation(this->_rotation_increment[_qp]); 60 719896 : _damage_model->updateJacobianMultForDamage(_Jacobian_mult[_qp]); 61 : 62 719896 : _material_timestep_limit[_qp] = _damage_model->computeTimeStepLimit(); 63 719896 : } 64 : 65 : template <> 66 : void 67 479377 : ComputeDamageStressTempl<true>::computeQpStress() 68 : { 69 479377 : ComputeFiniteStrainElasticStressTempl<true>::computeQpStress(); 70 : 71 479377 : _damage_model->setQp(_qp); 72 479377 : _damage_model->updateDamage(); 73 479376 : _damage_model->updateStressForDamage(this->_stress[_qp]); 74 479376 : _damage_model->finiteStrainRotation(this->_rotation_increment[_qp]); 75 : 76 479376 : _material_timestep_limit[_qp] = _damage_model->computeTimeStepLimit(); 77 479376 : } 78 : 79 : template class ComputeDamageStressTempl<false>; 80 : template class ComputeDamageStressTempl<true>;