OOFEM 3.0
Loading...
Searching...
No Matches
hydratingconcretemat.C
Go to the documentation of this file.
1/*
2 *
3 * ##### ##### ###### ###### ### ###
4 * ## ## ## ## ## ## ## ### ##
5 * ## ## ## ## #### #### ## # ##
6 * ## ## ## ## ## ## ## ##
7 * ## ## ## ## ## ## ## ##
8 * ##### ##### ## ###### ## ##
9 *
10 *
11 * OOFEM : Object Oriented Finite Element Code
12 *
13 * Copyright (C) 1993 - 2025 Borek Patzak
14 *
15 *
16 *
17 * Czech Technical University, Faculty of Civil Engineering,
18 * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19 *
20 * This library is free software; you can redistribute it and/or
21 * modify it under the terms of the GNU Lesser General Public
22 * License as published by the Free Software Foundation; either
23 * version 2.1 of the License, or (at your option) any later version.
24 *
25 * This program is distributed in the hope that it will be useful,
26 * but WITHOUT ANY WARRANTY; without even the implied warranty of
27 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28 * Lesser General Public License for more details.
29 *
30 * You should have received a copy of the GNU Lesser General Public
31 * License along with this library; if not, write to the Free Software
32 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33 */
34
36#include "gausspoint.h"
37#include "timestep.h"
38#include "mathfem.h"
39#include "classfactory.h"
40
41namespace oofem {
43
44HydratingConcreteMat :: HydratingConcreteMat(int n, Domain *d) : IsotropicHeatTransferMaterial(n, d){ }
45
46void
47HydratingConcreteMat :: initializeFrom(InputRecord &ir)
48{
49 // set conductivity k and capacity c
50 IsotropicHeatTransferMaterial :: initializeFrom(ir);
51
52 activationEnergy = 38400; //J/mol/K
53 referenceTemperature = 25.;//C
55
57
58 /*hydrationModelType==1: exponential hydration model, summarized in A.K. Schindler and K.J. Folliard: Heat of Hydration Models for Cementitious
59 * Materials, ACI Materials Journal, 2005
60 * hydrationModelType==2: affinity hydration model inspired by Miguel Cervera and Javier Oliver and Tomas Prato:Thermo-chemo-mechanical model
61 * for concrete. I: Hydration and aging, Journal of Engineering Mechanics ASCE, 125(9), 1018-1027, 1999
62 */
63 if ( hydrationModelType == 1 ) {
67 } else if ( hydrationModelType == 2 ) {
74 } else if ( hydrationModelType == 3 ) { //Saeed Rahimi-Aghdam, Zdeněk P. Bažant, Gianluca Cusatis: Extended Microprestress-Solidification Theory (XMPS) for Long-Term Creep and Diffusion Size Effect in Concrete at Variable Environment, JEM-ASCE, 2019. Appendix A. Still unfinished.
75 referenceTemperature = 20.;//according to the authors
78 rhoCem = 3150.; //kg/m3
80 rhoAgg = 1600.; //kg/m3
82 Vc0 = rhoAgg*1000./(rhoAgg*1000.+rhoCem*1000.*ac+rhoCem*rhoAgg*wc);
83 Vw0 = rhoAgg*rhoCem*wc/(rhoAgg*1000.+rhoCem*1000.*ac+rhoCem*rhoAgg*wc);
84
85 double Blaine=350.;//m2/kg
87 this->a0 = 6.5e-6*350/Blaine;
88 this->ng = Vc0/(4./3*M_PI*a0*a0*a0);
89
90 double alphaSet0 = 0.05;
92
93 timeSet = 3*3600; //s
95
96
97 double alphaCrit0 = 0.36;
99
100 this->B0 = 1.1e-11/3600./24.; //m2/s
102
103 double f1 = 6.5e-6/a0;
104 double f2 = 1+2.5*(wc-0.3);
105 double f3 = exp( this->activationEnergy / 8.314 * ( 1. / ( 273.15 + 20. ) - 1. / ( 273.15 + this->referenceTemperature ) ) );
106 alphaCrit = alphaCrit0 * f1 * f2 * f3;
107 if (alphaCrit>0.65) { alphaCrit = 0.65; }
108 alphaSet = alphaSet0 * alphaCrit / alphaCrit0;
109
110 VCemSet = (1-alphaSet)*Vc0;
111 VCHSet = 0.59*alphaSet*Vc0; //CH vol. per unit vol. of cement
112 VGelSet = 1.52*alphaSet*Vc0; //Gel vol. per unit vol. of cement
113 this->aSet = pow( VCemSet/(4./3.*M_PI*ng), 1./3.);
114 this->zSet = pow( (VCemSet+VGelSet)/(4./3.*M_PI*ng), 1./3.);
115 } else {
116 throw ValueInputException(ir, _IFT_HydratingConcreteMat_hydrationModelType, "Unknown hdyration model");
117 }
118
120
122
125
128
130
131 relMatAge = 0.;
133
136 capacityType = 0;
138 densityType = 0;
140
143
144 timeToSeconds = 1.;
146
147}
148
149// returns hydration power [W/m3 of concrete]
150void
151HydratingConcreteMat :: computeInternalSourceVector(FloatArray &val, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
152{
153 val.resize(1);
154 if ( mode == VM_Total || mode == VM_TotalIntrinsic ) {
155 val.at(1) = this->GivePower(tStep, gp, mode);
156 } else {
157 OOFEM_ERROR("Undefined mode %s\n", __ValueModeTypeToString(mode) );
158 }
159}
160
161
162double
163HydratingConcreteMat :: giveCharacteristicValue(MatResponseMode mode, GaussPoint *gp, TimeStep *tStep) const
164{
165 if ( mode == Capacity ) {
166 return ( giveConcreteCapacity(gp, tStep) * giveConcreteDensity(gp, tStep) );
167 } else if ( mode == IntSource ) { //for nonlinear solver, return dHeat/dTemperature
168 HydratingConcreteMatStatus *ms = static_cast< HydratingConcreteMatStatus * >( this->giveStatus(gp) );
169 //it suffices to compute derivative of scaling Arrhenius equation with respect to temporary temperature
170 double stateVec = ms->giveField() + 273.15;
171 double tempStateVec = ms->giveTempField() + 273.15;
172 return this->activationEnergy / ( 8.314 * tempStateVec * tempStateVec ) * exp(1. / stateVec - 1. / tempStateVec);
173 } else {
174 OOFEM_ERROR("unknown mode (%s)\n", __MatResponseModeToString(mode) );
175 }
176
177 // return 0.;
178}
179
180
181double HydratingConcreteMat :: giveIsotropicConductivity(GaussPoint *gp, TimeStep *tStep) const
182{
183 auto ms = static_cast< HydratingConcreteMatStatus * >( this->giveStatus(gp) );
184 double conduct;
185
186 if ( conductivityType == 0 ) { //given from input file
187 conduct = IsotropicHeatTransferMaterial :: giveProperty('k', gp, tStep);
188 } else if ( conductivityType == 1 ) { //compute according to Ruiz, Schindler, Rasmussen. Kim, Chang: Concrete temperature modeling and strength prediction using maturity concepts in the FHWA HIPERPAV software, 7th international conference on concrete pavements, Orlando (FL), USA, 2001
189 conduct = IsotropicHeatTransferMaterial :: giveProperty('k', gp, tStep) * ( 1.0 - 0.33 / 1.33 * ms->giveDoHActual() );
190 } else {
191 OOFEM_ERROR("Unknown conductivityType %d\n", conductivityType);
192 }
193
194 //Parallel Voigt model, 20 W/m/K for steel
195 conduct = conduct * ( 1. - this->reinforcementDegree ) + 20. * this->reinforcementDegree;
196
197 if ( conduct < 0.3 || conduct > 5 ) {
198 OOFEM_WARNING("Weird concrete thermal conductivity %f W/m/K\n", conduct);
199 }
200
201 return conduct;
202}
203
204//normally it returns J/kg/K of concrete
205double HydratingConcreteMat :: giveConcreteCapacity(GaussPoint *gp, TimeStep *tStep) const
206{
207 double capacityConcrete;
208
209 if ( capacityType == 0 ) { //given from OOFEM input file
210 capacityConcrete = IsotropicHeatTransferMaterial :: giveProperty('c', gp, tStep);
211 } else if ( capacityType == 1 ) {
212 OOFEM_ERROR("Calculate from 5-component model, not implemented in capacityType %d\n", capacityType);
213 } else {
214 OOFEM_ERROR("Unknown capacityType %d\n", capacityType);
215 }
216
217 //Parallel Voigt model, 500 J/kg/K for steel
218 capacityConcrete = capacityConcrete * ( 1. - this->reinforcementDegree ) + 500. * this->reinforcementDegree;
219
220 if ( capacityConcrete < 500 || capacityConcrete > 2000 ) {
221 OOFEM_WARNING("Weird concrete heat capacity %f J/kg/K\n", capacityConcrete);
222 }
223
224 return capacityConcrete;
225}
226
227
228double HydratingConcreteMat :: giveConcreteDensity(GaussPoint *gp, TimeStep *tStep) const
229{
230 double concreteBulkDensity;
231
232 if ( densityType == 0 ) { //get from input file
233 concreteBulkDensity = IsotropicHeatTransferMaterial :: giveProperty('d', gp, tStep);
234 } else if ( densityType == 1 ) { //calculate from 5-component model - not implemented
235 OOFEM_ERROR("Calculate from 5-component model, not implemented in densityType %d\n", densityType);
236 } else {
237 OOFEM_ERROR("Unknown densityType %d\n", densityType);
238 }
239
240 //Parallel Voigt model, 7850 kg/m3 for steel
241 concreteBulkDensity = concreteBulkDensity * ( 1. - this->reinforcementDegree ) + 7850. * this->reinforcementDegree;
242
243 if ( concreteBulkDensity < 1000 || concreteBulkDensity > 4000 ) {
244 OOFEM_WARNING("Weird concrete density %f kg/m3\n", concreteBulkDensity);
245 }
246
247 return concreteBulkDensity;
248}
249
250
251int
252HydratingConcreteMat :: giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep)
253{
254 // printf ("IP %d::giveIPValue, IST %d", giveNumber(), type);
255 if ( type == IST_HydrationDegree ) {
256 auto status = static_cast< HydratingConcreteMatStatus * >( this->giveStatus(gp) );
257 answer.resize(1);
258 answer.at(1) = status->giveDoHActual();
259 //else answer.at(1) = 0;
260 return 1;
261 } else if (type == IST_EquivalentTime) {
262 auto status = static_cast< HydratingConcreteMatStatus * >( this->giveStatus(gp) );
263 answer.resize(1);
264 answer.at(1) = status->equivalentTime;
265 return 1;
266 } else {
267 return TransportMaterial :: giveIPValue(answer, gp, type, tStep);
268 }
269}
270
271
272std::unique_ptr<MaterialStatus>
273HydratingConcreteMat :: CreateStatus(GaussPoint *gp) const
274{
275 return std::make_unique<HydratingConcreteMatStatus>(gp);
276}
277
278
279HydratingConcreteMatStatus :: HydratingConcreteMatStatus(GaussPoint *g) : TransportMaterialStatus(g) { }
280
281
282//linear solver (NonStationaryTransportProblem) IntrinsicTime = TargetTime
283//nonlinear solver (NLTransientTransportProblem) IntrinsicTime depends on alpha
284double HydratingConcreteMat :: GivePower(TimeStep *tStep, GaussPoint *gp, ValueModeType mode) const
285{
286 auto ms = static_cast< HydratingConcreteMatStatus * >( this->giveStatus(gp) );
287 double castingTime = this->giveCastingTime();
288 double evalTime = tStep->giveIntrinsicTime();
289 double targTime = tStep->giveTargetTime();
290
291 if ( tStep->giveNumber() == 0 ) {
292 return 0;
293 }
294
295 //do not calculate anything before casting time
296 if ( targTime - castingTime <= 0 ) {
297 ms->power = 0.;
298 return 0.;
299 }
300 //return computed power (homexportmodule)
301 if ( evalTime == ms->lastEvalTime ) {
302 return ms->power;
303 }
304
305 if(ms->firstCall && (this->relMatAge !=0.)){
306 ms->lastEquivalentTime = this->relMatAge;
307 }
308
309 if ( this->hydrationModelType == 1 ) { //exponential affinity hydration model, need to keep equivalent time
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) );
313 //printf("%f %f %f %f\n", equivalentTime, this->lastEquivalentTime, evalTime, lastEvalTime);
314 }
315 } else if ( this->hydrationModelType == 2 ) { //affinity hydration model inspired by Miguel Cervera et al.
316 double alphaTrialOld, alphaTrialNew = 0.0;
317 double time, dTime;
318 //calculate first degree of hydration which corresponds to relMatAge. Then proceed normally further.
319 if(ms->firstCall && (this->relMatAge !=0.)){
320 dTime = this->relMatAge / this->minModelTimeStepIntegrations;
321 time = 0.;
322 ms->degreeOfHydration = ms->lastDegreeOfHydration;
323 while ( time <= this->relMatAge ) {
324 time += dTime;
325 alphaTrialOld = ms->degreeOfHydration + scaleTemperature(gp) * affinity25(ms->degreeOfHydration) * dTime; //predictor
326 for ( int i = 0; i < 4; i++ ) {
327 alphaTrialNew = ms->degreeOfHydration + scaleTemperature(gp) * dTime / 2. * ( affinity25(ms->degreeOfHydration) + affinity25(alphaTrialOld) );
328 alphaTrialOld = alphaTrialNew;
329 }
330 ms->degreeOfHydration = alphaTrialNew;
331 }
332 ms->lastDegreeOfHydration = ms->degreeOfHydration;
333 }
334
335 //Integrate after castingTime, determine dTime for integration
336 alphaTrialNew = 0.0;
337 time = ms->lastEvalTime;
338 dTime = ( evalTime - time ) / this->minModelTimeStepIntegrations;
339 if ( dTime > this->maxModelIntegrationTime ) {
340 dTime = this->maxModelIntegrationTime;
341 }
342 ms->degreeOfHydration = ms->lastDegreeOfHydration;
343 //integration loop through hydration model at a given TimeStep
344 while ( time < evalTime ) {
345 if ( time + dTime > evalTime ) {
346 dTime = evalTime - time;
347 } else {
348 time += dTime;
349 }
350 //printf("%f %f %f %f\n", time, affinity, scaleTemperature(), degreeOfHydration);
351 alphaTrialOld = ms->degreeOfHydration + scaleTemperature(gp) * affinity25(ms->degreeOfHydration) * dTime; //predictor
352 //http://en.wikipedia.org/wiki/Predictor%E2%80%93corrector_method
353 //corrector - integration through trapezoidal rule
354 //3 loops normally suffices
355 for ( int i = 0; i < 4; i++ ) {
356 alphaTrialNew = ms->degreeOfHydration + scaleTemperature(gp) * dTime / 2. * ( affinity25(ms->degreeOfHydration) + affinity25(alphaTrialOld) );
357 alphaTrialOld = alphaTrialNew;
358 }
359 ms->degreeOfHydration = alphaTrialNew;
360 ms->equivalentTime = ms->lastEquivalentTime + ( evalTime - ms->lastEvalTime ) * scaleTemperature(gp);
361 }
362
363 } else if ( this->hydrationModelType == 3 ) { //Rahimi-Aghdam's model, still unfinished
364 double RH=0.99;//ToDo - relative humidity in pore checking from registered fields
365 double hStar = 0.88;
366 double cf = 0.;
367 double nh = 8.;
368
369 double time = ms->lastEvalTime;
370 double dTime = ( evalTime - time ) / this->minModelTimeStepIntegrations;
371
372 if ( dTime > this->maxModelIntegrationTime ) {
373 dTime = this->maxModelIntegrationTime;
374 }
375
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;
382
383 while ( time < evalTime ) {
384 if ( time + dTime > evalTime ) {
385 dTime = evalTime - time;
386 } else {
387 time += dTime;
388 }
389
390 if ( ms->degreeOfHydration < alphaSet ){//treat first dormant period
391 //assume constant rate
392 ms->degreeOfHydration += scaleTemperature(gp) * (alphaSet/timeSet ) * dTime;
393 ms->VCem = (1.-ms->degreeOfHydration)*Vc0;
394 ms->VCH = VCHSet * ms->degreeOfHydration/alphaSet;
395 ms->VGel = VGelSet * ms->degreeOfHydration/alphaSet;
396 } else {
397 double f0, f4;
398
399 if (ms->zShell==0.){//setting time
400 ms->zShell = this->zSet;
401 ms->aCement = this->aSet;
402 ms->VCem=VCemSet;
403 ms->VGel=VGelSet;
404 ms->VCH=VCHSet;
405 }
406
407 f0 = cf + (1.-cf)/(1. + pow((1.-RH)/(1.-hStar) , nh) );
408 if ( ms->degreeOfHydration > 0.75*alphaCrit ) {
409 double beta = ms->degreeOfHydration - 0.75*alphaCrit + 0.75*alphaCrit*0.30/(alphaCrit/2.);
410 double p = pow(beta/0.30, 1.8);
411 f4 = p * exp(-p);//error in the original article?
412 } else {
413 double gamma = pow(ms->degreeOfHydration/(alphaCrit/2.), 1.8);
414 f4 = gamma * exp (-gamma);
415 }
416
417 double Beff = B0 * f0 * f4;
418 // radius of the equivalent contact-free C-S-H shells
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);
422// double hc= 0.77 + 0.22*pow(wc-0.17,0.5) + 0.15*(alphaU/ms->degreeOfHydration-1.);
423// hc = min(hc,0.99); //wrong numbers
424 double hc=0.78;
425
426 double Qt1 = 4*M_PI*ms->aCement*ms->zShell*Beff*(RH-hc)/(ms->zShell - ms->aCement) * zShellWedge*zShellWedge / (ms->zShell*ms->zShell);
427
428 double xsi_gc=1.21, xsi_CHc=0.59, xsi_wc=(1.21+1.13)/2.;//assuming half
429 double xsi_cw=1/xsi_wc;
430 double xsi_gw=xsi_gc*xsi_cw;
431 double xsi_CHw = xsi_CHc*xsi_cw;
432
433 double dVCem = -ng*Qt1*xsi_cw * dTime;
434 ms->VCem += dVCem;
435 double dVGel = ng*Qt1*xsi_gw * dTime;
436 ms->VGel += dVGel;
437 ms->VCH += ng*Qt1*xsi_CHw * dTime;
438
439 ms->aCement += 1./(4.*M_PI*a0*a0*ng)*dVCem;
440 ms->degreeOfHydration -= 3./(4.*M_PI*a0*a0*a0*ng)*dVCem;
441
442// if (ms->degreeOfHydration > alphaCrit) {
443 ms->zShell += (dVGel+dVCem)/(4.*M_PI*ng*zShellWedge*zShellWedge);//error in article, missing ng?
444// }
445 //ToDo relative humidity decrement, saturation degree
446 }
447 }
448
449
450
451 } else {
452 OOFEM_ERROR("Unknown hydration model type %d", this->hydrationModelType);
453 }
454
455 ms->power = this->Qpot * ( ms->degreeOfHydration - ms->lastDegreeOfHydration ) / ( evalTime - ms->lastEvalTime );
456 ms->power *= 1000 * this->massCement; // W/m3 of concrete
457 ms->firstCall = false;
458 //internal variables are updated in HydratingConcreteMatStatus :: updateYourself()
459 return ms->power;
460}
461
462
463double HydratingConcreteMat :: scaleTemperature(GaussPoint *gp) const
464{
465 auto ms = static_cast< HydratingConcreteMatStatus * >( this->giveStatus(gp) );
466 return exp( this->activationEnergy / 8.314 * ( 1. / ( 273.15 + this->referenceTemperature ) - 1. / ( 273.15 + ms->giveTempField() ) ) );
467}
468
469double HydratingConcreteMat :: affinity25(double DoH) const
470{
471 double result = this->B1 *timeToSeconds* ( this->B2 / this->DoHInf + DoH ) * ( this->DoHInf - DoH ) * exp(-this->eta * DoH / this->DoHInf);
472 if ( result < 0. ) { //numerical instabilities
473 return 0.;
474 }
475
476 //add slag reaction
477 if ( this->P1 != 0. && DoH >= this->DoH1 ) {
478 result *= 1. + this->P1 * ( DoH - this->DoH1 );
479 }
480 return result;
481}
482
483
484double HydratingConcreteMatStatus :: giveDoHActual() const
485{
486 return degreeOfHydration;
487}
488
489void
490HydratingConcreteMatStatus :: updateYourself(TimeStep *tStep)
491{
492 HydratingConcreteMat *mat = static_cast< HydratingConcreteMat * >( this->gp->giveMaterial() );
493 this->lastEvalTime = tStep->giveIntrinsicTime(); //where heat power was evaluated in the last equilibrium
496 this->lastZShell = this->zShell;
497 this->lastACement = this->aCement;
498 this->lastVCem = this->VCem;
499 this->lastVGel = this->VGel;
500 this->lastVCH = this->VCH;
501
502 //average from last and current temperatures, in C*hour
503 if ( !tStep->isIcApply() && mat->giveCastingTime() < tStep->giveIntrinsicTime() ) {
504 this->maturity += ( ( this->giveField() + this->giveTempField() ) / 2. - mat->giveMaturityT0() ) * tStep->giveTimeIncrement() / 3600.;
505 }
506 TransportMaterialStatus :: updateYourself(tStep);
507}
508
509
510void
511HydratingConcreteMatStatus :: printOutputAt(FILE *file, TimeStep *tStep) const
512{
513 HydratingConcreteMat *mat = static_cast< HydratingConcreteMat * >( this->gp->giveMaterial() );
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");
518}
519} // end namespace oofem
#define REGISTER_Material(class)
void resize(Index s)
Definition floatarray.C:94
double & at(Index i)
Definition floatarray.h:202
double zShell
Radius of the equivalent contact-free C-S-H shells.
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 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 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
Definition isoheatmat.h:79
IsotropicHeatTransferMaterial(int n, Domain *d)
Definition isoheatmat.C:45
double giveCastingTime() const
Definition material.h:177
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Definition material.C:206
double castingTime
Definition material.h:115
double giveTimeIncrement()
Returns solution step associated time increment.
Definition timestep.h:168
double giveTargetTime()
Returns target time.
Definition timestep.h:164
bool isIcApply()
Definition timestep.C:154
int giveNumber()
Returns receiver's number.
Definition timestep.h:144
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
Definition timestep.h:166
double giveField() const
Return last field.
double giveTempField() const
Return last field.
double maturity
A scalar containing maturity (integration of temperature over time).
#define OOFEM_WARNING(...)
Definition error.h:80
#define OOFEM_ERROR(...)
Definition error.h:79
#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
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Definition inputrecord.h:75
#define IR_GIVE_FIELD(__ir, __value, __id)
Definition inputrecord.h:67
#define M_PI
Definition mathfem.h:52
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)

This page is part of the OOFEM-3.0 documentation. Copyright Copyright (C) 1994-2025 Borek Patzak Bořek Patzák
Project e-mail: oofem@fsv.cvut.cz
Generated at for OOFEM by doxygen 1.15.0 written by Dimitri van Heesch, © 1997-2011