LCOV - code coverage report
Current view: top level - src/materials - ComputeDamageStress.C (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: #32971 (54bef8) with base c6cf66 Lines: 33 34 97.1 %
Date: 2026-05-29 20:40:07 Functions: 8 8 100.0 %
Legend: Lines: hit not hit

          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>;

Generated by: LCOV version 1.14