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 456 : ComputeDamageStressTempl<is_ad>::validParams() 19 : { 20 456 : InputParameters params = ComputeFiniteStrainElasticStressTempl<is_ad>::validParams(); 21 456 : params.addClassDescription( 22 : "Compute stress for damaged elastic materials in conjunction with a damage model."); 23 912 : params.addRequiredParam<MaterialName>("damage_model", "Name of the damage model"); 24 456 : return params; 25 0 : } 26 : 27 : template <bool is_ad> 28 342 : ComputeDamageStressTempl<is_ad>::ComputeDamageStressTempl(const InputParameters & parameters) 29 : : ComputeFiniteStrainElasticStressTempl<is_ad>(parameters), 30 342 : _material_timestep_limit(this->template declareProperty<Real>("material_timestep_limit")), 31 342 : _damage_model(nullptr) 32 : { 33 342 : } 34 : 35 : template <bool is_ad> 36 : void 37 322 : ComputeDamageStressTempl<is_ad>::initialSetup() 38 : { 39 322 : MaterialName damage_model_name = this->template getParam<MaterialName>("damage_model"); 40 : DamageBaseTempl<is_ad> * dmb = 41 322 : dynamic_cast<DamageBaseTempl<is_ad> *>(&this->getMaterialByName(damage_model_name)); 42 322 : if (dmb) 43 318 : _damage_model = dmb; 44 : else 45 8 : this->paramError("damage_model", 46 : "Damage Model " + damage_model_name + 47 : " is not compatible with ComputeDamageStress"); 48 318 : } 49 : 50 : template <> 51 : void 52 1358546 : ComputeDamageStressTempl<false>::computeQpStress() 53 : { 54 1358546 : ComputeFiniteStrainElasticStressTempl<false>::computeQpStress(); 55 : 56 1358546 : _damage_model->setQp(_qp); 57 1358546 : _damage_model->updateDamage(); 58 1358544 : _damage_model->updateStressForDamage(this->_stress[_qp]); 59 1358544 : _damage_model->finiteStrainRotation(this->_rotation_increment[_qp]); 60 1358544 : _damage_model->updateJacobianMultForDamage(_Jacobian_mult[_qp]); 61 : 62 1358544 : _material_timestep_limit[_qp] = _damage_model->computeTimeStepLimit(); 63 1358544 : } 64 : 65 : template <> 66 : void 67 954530 : ComputeDamageStressTempl<true>::computeQpStress() 68 : { 69 954530 : ComputeFiniteStrainElasticStressTempl<true>::computeQpStress(); 70 : 71 954530 : _damage_model->setQp(_qp); 72 954530 : _damage_model->updateDamage(); 73 954528 : _damage_model->updateStressForDamage(this->_stress[_qp]); 74 954528 : _damage_model->finiteStrainRotation(this->_rotation_increment[_qp]); 75 : 76 954528 : _material_timestep_limit[_qp] = _damage_model->computeTimeStepLimit(); 77 954528 : } 78 : 79 : template class ComputeDamageStressTempl<false>; 80 : template class ComputeDamageStressTempl<true>;