LCOV - code coverage report
Current view: top level - src/materials - ConcreteDryingShrinkage.C (source / functions) Hit Total Coverage
Test: idaholab/blackbear: 276f95 Lines: 45 46 97.8 %
Date: 2025-10-28 03:10:25 Functions: 4 4 100.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /****************************************************************/
       2             : /*               DO NOT MODIFY THIS HEADER                      */
       3             : /*                       BlackBear                              */
       4             : /*                                                              */
       5             : /*           (c) 2017 Battelle Energy Alliance, LLC             */
       6             : /*                   ALL RIGHTS RESERVED                        */
       7             : /*                                                              */
       8             : /*          Prepared by Battelle Energy Alliance, LLC           */
       9             : /*            Under Contract No. DE-AC07-05ID14517              */
      10             : /*            With the U. S. Department of Energy               */
      11             : /*                                                              */
      12             : /*            See COPYRIGHT for full restrictions               */
      13             : /****************************************************************/
      14             : 
      15             : #include "ConcreteDryingShrinkage.h"
      16             : #include "RankTwoTensor.h"
      17             : 
      18             : registerMooseObject("BlackBearApp", ConcreteDryingShrinkage);
      19             : 
      20             : InputParameters
      21         165 : ConcreteDryingShrinkage::validParams()
      22             : {
      23         165 :   InputParameters params = ComputeEigenstrainBase::validParams();
      24             : 
      25         165 :   params.addClassDescription("Computes concrete drying shrinkage");
      26         330 :   params.addRequiredCoupledVar("humidity", "relative humidity");
      27         330 :   params.addRangeCheckedParam<Real>("drying_shrinkage_coefficient",
      28             :                                     "drying_shrinkage_coefficient<0",
      29             :                                     "total shrinkage at 0 relative humidity");
      30         330 :   params.setDocUnit("drying_shrinkage_coefficient", "unitless");
      31         330 :   params.addRangeCheckedParam<Real>(
      32             :       "exponent", 1, "exponent>0", "exponent of the shrinkage law, default: 1");
      33         330 :   params.setDocUnit("exponent", "unitless");
      34         330 :   params.addRangeCheckedParam<Real>("irreversibility_threshold",
      35             :                                     "0<=irreversibility_threshold<=1",
      36             :                                     "relative humidity below which shrinkage becomes irreversible");
      37         330 :   params.setDocUnit("irreversibility_threshold", "unitless");
      38         165 :   return params;
      39           0 : }
      40             : 
      41         126 : ConcreteDryingShrinkage::ConcreteDryingShrinkage(const InputParameters & parameters)
      42             :   : ComputeEigenstrainBase(parameters),
      43         126 :     _humidity(coupledValue("humidity")),
      44         252 :     _shrinkage_coefficient(getParam<Real>("drying_shrinkage_coefficient")),
      45         252 :     _exponent(getParam<Real>("exponent")),
      46         252 :     _is_irreversible(isParamValid("irreversibility_threshold")),
      47         126 :     _irreversibility_threshold(isParamValid("irreversibility_threshold")
      48         210 :                                    ? getParam<Real>("irreversibility_threshold")
      49             :                                    : 0),
      50         126 :     _irreversible_shrinkage(_is_irreversible ? &declareProperty<Real>("irreversible_shrinkage")
      51             :                                              : NULL),
      52         126 :     _irreversible_shrinkage_old(
      53         294 :         _is_irreversible ? &getMaterialPropertyOld<Real>("irreversible_shrinkage") : NULL)
      54             : {
      55         126 : }
      56             : 
      57             : void
      58         112 : ConcreteDryingShrinkage::initQpStatefulProperties()
      59             : {
      60         112 :   ComputeEigenstrainBase::initQpStatefulProperties();
      61             : 
      62         112 :   if (_is_irreversible)
      63         112 :     (*_irreversible_shrinkage)[_qp] = 0;
      64         112 : }
      65             : 
      66             : void
      67       26880 : ConcreteDryingShrinkage::computeQpEigenstrain()
      68             : {
      69       26880 :   _eigenstrain[_qp].zero();
      70             : 
      71       26880 :   Real shrinkage = 0;
      72       26880 :   if (_is_irreversible)
      73             :   {
      74        8960 :     (*_irreversible_shrinkage)[_qp] = (*_irreversible_shrinkage_old)[_qp];
      75        8960 :     if (_humidity[_qp] > _irreversibility_threshold)
      76             :     {
      77             :       // we are still in the reversible regime
      78        6720 :       shrinkage = std::min((*_irreversible_shrinkage)[_qp],
      79       13440 :                            std::pow(std::max((1. - _humidity[_qp]), 0.), _exponent) *
      80        6720 :                                _shrinkage_coefficient);
      81             :     }
      82             :     else
      83             :     {
      84             :       // we need to check if the new humidity is lower than the previous
      85             :       Real reversible_shrinkage =
      86        2240 :           std::pow(std::max((1. - _irreversibility_threshold), 0.), _exponent) *
      87        2240 :           _shrinkage_coefficient;
      88        2240 :       shrinkage = std::pow(std::max((1. - _humidity[_qp]), 0.), _exponent) * _shrinkage_coefficient;
      89        2240 :       Real irreversible_shrinkage = shrinkage - reversible_shrinkage;
      90        2240 :       if (irreversible_shrinkage < (*_irreversible_shrinkage)[_qp])
      91         896 :         (*_irreversible_shrinkage)[_qp] = irreversible_shrinkage;
      92             :     }
      93             :   }
      94             :   else
      95       18144 :     shrinkage = std::pow(std::max((1. - _humidity[_qp]), 0.), _exponent) * _shrinkage_coefficient;
      96             : 
      97             :   // shrinkage is assumed isotropic
      98       26880 :   _eigenstrain[_qp].addIa(shrinkage);
      99       26880 : }

Generated by: LCOV version 1.14