LCOV - code coverage report
Current view: top level - src/materials - ConcreteDryingShrinkage.C (source / functions) Hit Total Coverage
Test: idaholab/blackbear: 75f23c Lines: 42 43 97.7 %
Date: 2025-07-17 04:05:57 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.addRangeCheckedParam<Real>(
      31             :       "exponent", 1, "exponent>0", "exponent of the shrinkage law, default: 1");
      32         330 :   params.addRangeCheckedParam<Real>("irreversibility_threshold",
      33             :                                     "0<=irreversibility_threshold<=1",
      34             :                                     "humidity below which shrinkage becomes irreversible");
      35         165 :   return params;
      36           0 : }
      37             : 
      38         126 : ConcreteDryingShrinkage::ConcreteDryingShrinkage(const InputParameters & parameters)
      39             :   : ComputeEigenstrainBase(parameters),
      40         126 :     _humidity(coupledValue("humidity")),
      41         252 :     _shrinkage_coefficient(getParam<Real>("drying_shrinkage_coefficient")),
      42         252 :     _exponent(getParam<Real>("exponent")),
      43         252 :     _is_irreversible(isParamValid("irreversibility_threshold")),
      44         126 :     _irreversibility_threshold(isParamValid("irreversibility_threshold")
      45         210 :                                    ? getParam<Real>("irreversibility_threshold")
      46             :                                    : 0),
      47         126 :     _irreversible_shrinkage(_is_irreversible ? &declareProperty<Real>("irreversible_shrinkage")
      48             :                                              : NULL),
      49         126 :     _irreversible_shrinkage_old(
      50         294 :         _is_irreversible ? &getMaterialPropertyOld<Real>("irreversible_shrinkage") : NULL)
      51             : {
      52         126 : }
      53             : 
      54             : void
      55         112 : ConcreteDryingShrinkage::initQpStatefulProperties()
      56             : {
      57         112 :   ComputeEigenstrainBase::initQpStatefulProperties();
      58             : 
      59         112 :   if (_is_irreversible)
      60         112 :     (*_irreversible_shrinkage)[_qp] = 0;
      61         112 : }
      62             : 
      63             : void
      64       26880 : ConcreteDryingShrinkage::computeQpEigenstrain()
      65             : {
      66       26880 :   _eigenstrain[_qp].zero();
      67             : 
      68       26880 :   Real shrinkage = 0;
      69       26880 :   if (_is_irreversible)
      70             :   {
      71        8960 :     (*_irreversible_shrinkage)[_qp] = (*_irreversible_shrinkage_old)[_qp];
      72        8960 :     if (_humidity[_qp] > _irreversibility_threshold)
      73             :     {
      74             :       // we are still in the reversible regime
      75        6720 :       shrinkage = std::min((*_irreversible_shrinkage)[_qp],
      76       13440 :                            std::pow(std::max((1. - _humidity[_qp]), 0.), _exponent) *
      77        6720 :                                _shrinkage_coefficient);
      78             :     }
      79             :     else
      80             :     {
      81             :       // we need to check if the new humidity is lower than the previous
      82             :       Real reversible_shrinkage =
      83        2240 :           std::pow(std::max((1. - _irreversibility_threshold), 0.), _exponent) *
      84        2240 :           _shrinkage_coefficient;
      85        2240 :       shrinkage = std::pow(std::max((1. - _humidity[_qp]), 0.), _exponent) * _shrinkage_coefficient;
      86        2240 :       Real irreversible_shrinkage = shrinkage - reversible_shrinkage;
      87        2240 :       if (irreversible_shrinkage < (*_irreversible_shrinkage)[_qp])
      88         896 :         (*_irreversible_shrinkage)[_qp] = irreversible_shrinkage;
      89             :     }
      90             :   }
      91             :   else
      92       18144 :     shrinkage = std::pow(std::max((1. - _humidity[_qp]), 0.), _exponent) * _shrinkage_coefficient;
      93             : 
      94             :   // shrinkage is assumed isotropic
      95       26880 :   _eigenstrain[_qp].addIa(shrinkage);
      96       26880 : }

Generated by: LCOV version 1.14