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 : }