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