50 IsotropicHeatTransferMaterial :: initializeFrom(ir);
87 this->
a0 = 6.5e-6*350/Blaine;
90 double alphaSet0 = 0.05;
97 double alphaCrit0 = 0.36;
100 this->
B0 = 1.1e-11/3600./24.;
103 double f1 = 6.5e-6/
a0;
104 double f2 = 1+2.5*(
wc-0.3);
154 if ( mode == VM_Total || mode == VM_TotalIntrinsic ) {
157 OOFEM_ERROR(
"Undefined mode %s\n", __ValueModeTypeToString(mode) );
163HydratingConcreteMat :: giveCharacteristicValue(MatResponseMode mode,
GaussPoint *gp,
TimeStep *tStep)
const
165 if ( mode == Capacity ) {
167 }
else if ( mode == IntSource ) {
170 double stateVec = ms->
giveField() + 273.15;
172 return this->
activationEnergy / ( 8.314 * tempStateVec * tempStateVec ) * exp(1. / stateVec - 1. / tempStateVec);
174 OOFEM_ERROR(
"unknown mode (%s)\n", __MatResponseModeToString(mode) );
187 conduct = IsotropicHeatTransferMaterial :: giveProperty(
'k', gp, tStep);
189 conduct = IsotropicHeatTransferMaterial :: giveProperty(
'k', gp, tStep) * ( 1.0 - 0.33 / 1.33 * ms->giveDoHActual() );
197 if ( conduct < 0.3 || conduct > 5 ) {
198 OOFEM_WARNING(
"Weird concrete thermal conductivity %f W/m/K\n", conduct);
207 double capacityConcrete;
210 capacityConcrete = IsotropicHeatTransferMaterial :: giveProperty(
'c', gp, tStep);
220 if ( capacityConcrete < 500 || capacityConcrete > 2000 ) {
221 OOFEM_WARNING(
"Weird concrete heat capacity %f J/kg/K\n", capacityConcrete);
224 return capacityConcrete;
230 double concreteBulkDensity;
233 concreteBulkDensity = IsotropicHeatTransferMaterial :: giveProperty(
'd', gp, tStep);
243 if ( concreteBulkDensity < 1000 || concreteBulkDensity > 4000 ) {
244 OOFEM_WARNING(
"Weird concrete density %f kg/m3\n", concreteBulkDensity);
247 return concreteBulkDensity;
255 if ( type == IST_HydrationDegree ) {
258 answer.
at(1) = status->giveDoHActual();
261 }
else if (type == IST_EquivalentTime) {
264 answer.
at(1) = status->equivalentTime;
267 return TransportMaterial :: giveIPValue(answer, gp, type, tStep);
272std::unique_ptr<MaterialStatus>
275 return std::make_unique<HydratingConcreteMatStatus>(gp);
301 if ( evalTime == ms->lastEvalTime ) {
305 if(ms->firstCall && (this->relMatAge !=0.)){
306 ms->lastEquivalentTime = this->
relMatAge;
310 ms->equivalentTime = ms->lastEquivalentTime + ( evalTime - ms->lastEvalTime ) *
scaleTemperature(gp);
311 if ( ms->equivalentTime != 0. ) {
312 ms->degreeOfHydration = this->
DoHInf * exp( -pow(this->
tau / ms->equivalentTime, this->beta) );
316 double alphaTrialOld, alphaTrialNew = 0.0;
319 if(ms->firstCall && (this->relMatAge !=0.)){
322 ms->degreeOfHydration = ms->lastDegreeOfHydration;
326 for (
int i = 0; i < 4; i++ ) {
328 alphaTrialOld = alphaTrialNew;
330 ms->degreeOfHydration = alphaTrialNew;
332 ms->lastDegreeOfHydration = ms->degreeOfHydration;
337 time = ms->lastEvalTime;
342 ms->degreeOfHydration = ms->lastDegreeOfHydration;
344 while ( time < evalTime ) {
345 if ( time + dTime > evalTime ) {
346 dTime = evalTime - time;
355 for (
int i = 0; i < 4; i++ ) {
357 alphaTrialOld = alphaTrialNew;
359 ms->degreeOfHydration = alphaTrialNew;
360 ms->equivalentTime = ms->lastEquivalentTime + ( evalTime - ms->lastEvalTime ) *
scaleTemperature(gp);
369 double time = ms->lastEvalTime;
376 ms->degreeOfHydration = ms->lastDegreeOfHydration;
377 ms->zShell = ms->lastZShell;
378 ms->aCement = ms->lastACement;
379 ms->VCem = ms->lastVCem;
380 ms->VGel = ms->lastVGel;
381 ms->VCH = ms->lastVCH;
383 while ( time < evalTime ) {
384 if ( time + dTime > evalTime ) {
385 dTime = evalTime - time;
390 if ( ms->degreeOfHydration <
alphaSet ){
393 ms->VCem = (1.-ms->degreeOfHydration)*
Vc0;
400 ms->zShell = this->
zSet;
401 ms->aCement = this->
aSet;
407 f0 = cf + (1.-cf)/(1. + pow((1.-RH)/(1.-hStar) , nh) );
408 if ( ms->degreeOfHydration > 0.75*
alphaCrit ) {
410 double p = pow(
beta/0.30, 1.8);
413 double gamma = pow(ms->degreeOfHydration/(
alphaCrit/2.), 1.8);
414 f4 = gamma * exp (-gamma);
417 double Beff =
B0 * f0 * f4;
419 double zShellWedge = ms->zShell / (1.+pow((ms->zShell-this->a0)/(this->a0/6.4),5.));
420 double alphaU = 0.46 + 0.95*pow(
wc-0.17,0.6);
421 alphaU =
min(alphaU,1.0);
426 double Qt1 = 4*
M_PI*ms->aCement*ms->zShell*Beff*(RH-hc)/(ms->zShell - ms->aCement) * zShellWedge*zShellWedge / (ms->zShell*ms->zShell);
428 double xsi_gc=1.21, xsi_CHc=0.59, xsi_wc=(1.21+1.13)/2.;
429 double xsi_cw=1/xsi_wc;
430 double xsi_gw=xsi_gc*xsi_cw;
431 double xsi_CHw = xsi_CHc*xsi_cw;
433 double dVCem = -
ng*Qt1*xsi_cw * dTime;
435 double dVGel =
ng*Qt1*xsi_gw * dTime;
437 ms->VCH +=
ng*Qt1*xsi_CHw * dTime;
440 ms->degreeOfHydration -= 3./(4.*
M_PI*
a0*
a0*
a0*
ng)*dVCem;
443 ms->zShell += (dVGel+dVCem)/(4.*
M_PI*
ng*zShellWedge*zShellWedge);
455 ms->power = this->
Qpot * ( ms->degreeOfHydration - ms->lastDegreeOfHydration ) / ( evalTime - ms->lastEvalTime );
457 ms->firstCall =
false;
463double HydratingConcreteMat :: scaleTemperature(
GaussPoint *gp)
const
469double HydratingConcreteMat :: affinity25(
double DoH)
const
477 if ( this->
P1 != 0. && DoH >= this->
DoH1 ) {
478 result *= 1. + this->
P1 * ( DoH - this->
DoH1 );
484double HydratingConcreteMatStatus :: giveDoHActual()
const
490HydratingConcreteMatStatus :: updateYourself(
TimeStep *tStep)
506 TransportMaterialStatus :: updateYourself(tStep);
511HydratingConcreteMatStatus :: printOutputAt(FILE *file,
TimeStep *tStep)
const
514 TransportMaterialStatus :: printOutputAt(file, tStep);
515 fprintf(file,
" status {");
516 fprintf( file,
"EvaluatingTime %e EquivalentTime %e DoH %f HeatPower %f [W/m3 of concrete] Temperature %f conductivity %f capacity %f density %f", tStep->
giveIntrinsicTime(), this->lastEquivalentTime, this->giveDoHActual(), this->power, this->giveTempField(), mat->
giveIsotropicConductivity(this->gp, tStep), mat->
giveConcreteCapacity(this->gp, tStep), mat->
giveConcreteDensity(this->gp, tStep) );
517 fprintf(file,
"}\n");
#define REGISTER_Material(class)
double zShell
Radius of the equivalent contact-free C-S-H shells.
double lastDegreeOfHydration
double lastEquivalentTime
double relMatAge
Relative material age (as "equivalent time") at the time of casting (castingTime),...
double DoH1
Optional extension to slag-rich, high-blended cements.
double zSet
Radius of gel barrier at setting time.
double rhoCem
Density of cement and aggregates (weighted average from fine and coarse aggregates.
double GivePower(TimeStep *tStep, GaussPoint *gp, ValueModeType mode) const
double affinity25(double alpha) const
Return affinity scaled to 25C.
double massCement
Mass of cement in kg per 1m3 of concrete.
virtual double giveConcreteCapacity(GaussPoint *gp, TimeStep *tStep) const
double timeSet
Time at setting.
double alphaCrit
Degree of hydration at which the gel barrier will be completed.
virtual double giveConcreteDensity(GaussPoint *gp, TimeStep *tStep) const
double activationEnergy
Activation energy of concrete (default 38400 J/mol/K).
double referenceTemperature
Reference temperature for hydration model.
double reinforcementDegree
Degree of reinforcement, if defined, reinforcement effect for conductivity and capacity is accounted ...
int hydrationModelType
Type of hydration model, e.g. exponential curve, Cervera's model.
double giveIsotropicConductivity(GaussPoint *gp, TimeStep *tStep) const override
double maxModelIntegrationTime
double a0
Average cement particle radius (m).
double B0
Basic diffusivity (about 1.1e-11 m2/day for Portland cements).
double wc
Water/cement ratio and aggregate/cement ratio.
double Vc0
Initial volume fraction of cement and water.
double ng
Number of cement particles in a unit volume.
double Qpot
Potential heat of hydration, for ordinary Portland cement approximately 500 J/g.
double minModelTimeStepIntegrations
Minimum number of integration steps for hydration model within a given timeStep.
int conductivityType
Use different methods to evaluate material conductivity, capacity, or density.
double aSet
Radius of cement particle at setting time.
double VCemSet
Volume fractions at setting time.
double scaleTemperature(GaussPoint *gp) const
double alphaSet
Degree of hydration for setting time.
double timeToSeconds
timeToSeconds, =1 when running in seconds (default), =86400 when time in days
GaussPoint * gp
Associated integration point.
virtual double giveMaturityT0() const
IsotropicHeatTransferMaterial(int n, Domain *d)
double giveCastingTime() const
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
double giveTimeIncrement()
Returns solution step associated time increment.
double giveTargetTime()
Returns target time.
int giveNumber()
Returns receiver's number.
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
double giveField() const
Return last field.
double giveTempField() const
Return last field.
double maturity
A scalar containing maturity (integration of temperature over time).
TransportMaterialStatus(GaussPoint *g)
#define OOFEM_WARNING(...)
#define _IFT_HydratingConcreteMat_activationEnergy
#define _IFT_HydratingConcreteMat_capacitytype
#define _IFT_HydratingConcreteMat_timeSet
#define _IFT_HydratingConcreteMat_eta
#define _IFT_HydratingConcreteMat_relMatAge
#define _IFT_HydratingConcreteMat_alphaCrit0
#define _IFT_HydratingConcreteMat_hydrationModelType
#define _IFT_HydratingConcreteMat_qpot
#define _IFT_HydratingConcreteMat_alphaSet0
#define _IFT_HydratingConcreteMat_timeToSeconds
#define _IFT_HydratingConcreteMat_minModelTimeStepIntegrations
#define _IFT_HydratingConcreteMat_tau
#define _IFT_HydratingConcreteMat_reinforcementDegree
#define _IFT_HydratingConcreteMat_conductivitytype
#define _IFT_HydratingConcreteMat_maxModelIntegrationTime
#define _IFT_HydratingConcreteMat_DoHInf
#define _IFT_HydratingConcreteMat_wc
#define _IFT_HydratingConcreteMat_ac
#define _IFT_HydratingConcreteMat_referenceTemperature
#define _IFT_HydratingConcreteMat_P1
#define _IFT_HydratingConcreteMat_rhoCem
#define _IFT_HydratingConcreteMat_B0
#define _IFT_HydratingConcreteMat_B2
#define _IFT_HydratingConcreteMat_Blaine
#define _IFT_HydratingConcreteMat_B1
#define _IFT_HydratingConcreteMat_rhoAgg
#define _IFT_HydratingConcreteMat_beta
#define _IFT_HydratingConcreteMat_DoH1
#define _IFT_HydratingConcreteMat_densitytype
#define _IFT_HydratingConcreteMat_massCement
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)