LCOV - code coverage report
Current view: top level - src/materials - PorosityFromStrain.C (source / functions) Hit Total Coverage
Test: idaholab/moose solid_mechanics: f45d79 Lines: 36 36 100.0 %
Date: 2025-07-25 05:00:39 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 "PorosityFromStrain.h"
      11             : 
      12             : registerMooseObject("SolidMechanicsApp", PorosityFromStrain);
      13             : registerMooseObject("SolidMechanicsApp", ADPorosityFromStrain);
      14             : 
      15             : template <bool is_ad>
      16             : InputParameters
      17         400 : PorosityFromStrainTempl<is_ad>::validParams()
      18             : {
      19         400 :   InputParameters params = Material::validParams();
      20             : 
      21         400 :   params.addClassDescription("Porosity calculation from the inelastic strain.");
      22             : 
      23         800 :   params.addParam<MaterialPropertyName>(
      24             :       "porosity_name", "porosity", "Name of porosity material property");
      25         800 :   params.addRequiredRangeCheckedParam<Real>(
      26             :       "initial_porosity", "initial_porosity>=0.0 & initial_porosity<1.0", "Initial porosity");
      27         800 :   params.addRequiredParam<MaterialPropertyName>("inelastic_strain",
      28             :                                                 "Name of the combined inelastic strain");
      29         800 :   MooseEnum negative_behavior("ZERO INITIAL_CONDITION EXCEPTION", "INITIAL_CONDITION");
      30         800 :   params.addParam<MooseEnum>(
      31             :       "negative_behavior", negative_behavior, "Enum how to handle negative porosities");
      32             : 
      33         400 :   return params;
      34         400 : }
      35             : 
      36             : template <bool is_ad>
      37         300 : PorosityFromStrainTempl<is_ad>::PorosityFromStrainTempl(const InputParameters & parameters)
      38             :   : Material(parameters),
      39         300 :     _porosity(declareGenericProperty<Real, is_ad>(getParam<MaterialPropertyName>("porosity_name"))),
      40         600 :     _porosity_old(getMaterialPropertyOld<Real>("porosity_name")),
      41         600 :     _initial_porosity(getParam<Real>("initial_porosity")),
      42         300 :     _inelastic_strain(getGenericMaterialProperty<RankTwoTensor, is_ad>("inelastic_strain")),
      43         600 :     _inelastic_strain_old(getMaterialPropertyOld<RankTwoTensor>("inelastic_strain")),
      44         600 :     _negative_behavior(this->template getParam<MooseEnum>("negative_behavior")
      45         300 :                            .template getEnum<NegativeBehavior>())
      46             : {
      47         300 : }
      48             : 
      49             : template <bool is_ad>
      50             : void
      51        1190 : PorosityFromStrainTempl<is_ad>::initQpStatefulProperties()
      52             : {
      53        1190 :   _porosity[_qp] = _initial_porosity;
      54        1190 : }
      55             : 
      56             : template <bool is_ad>
      57             : void
      58       77704 : PorosityFromStrainTempl<is_ad>::computeQpProperties()
      59             : {
      60      155304 :   _porosity[_qp] =
      61      155304 :       (1.0 - _porosity_old[_qp]) * (_inelastic_strain[_qp] - _inelastic_strain_old[_qp]).trace() +
      62       77704 :       _porosity_old[_qp];
      63             : 
      64       77704 :   if (_porosity[_qp] < 0.0)
      65             :   {
      66          50 :     if (_negative_behavior == NegativeBehavior::ZERO)
      67          24 :       _porosity[_qp] = 0.0;
      68          50 :     if (_negative_behavior == NegativeBehavior::INITIAL_CONDITION)
      69          24 :       _porosity[_qp] = _initial_porosity;
      70          50 :     if (_negative_behavior == NegativeBehavior::EXCEPTION)
      71           2 :       mooseException("In ", _name, ": porosity is negative.");
      72             :   }
      73             : 
      74       77702 :   if (std::isnan(_porosity[_qp]))
      75           2 :     mooseException("In ", _name, ": porosity is nan. Cutting timestep.");
      76       77700 : }

Generated by: LCOV version 1.14