OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
hydram.C
Go to the documentation of this file.
1 /* TODO
2  *
3  * could only one HydrationModel instance be used during staggered analysis for both tm and sm analysis?
4  * if initialized in one of the slave problems, it can hardly be accessed from the other domain,
5  * if initialized in master staggered problem, it could be assigned to both of the slave problems (setHydrationModel(*)), but it's not very clean
6  * in the future, when more types of hydration models are implemented, a separate input file for the hydration model could be used.
7  *
8  * the staggered problem should be extended to enable
9  * 1) different time step lengths - done by dtf
10  * 2) alternate stepping - several time steps performed in one analysis, while only one in the other
11  * e.g. plastic evolution - short time x tm analysis without load changes
12  *
13  * should provide a function to compute we (water consumption) based on chemical cement composition and/or concrete mixture
14  * w/c and a/c or [c/V .. result of wc,ac,rho] ratio.
15  *
16  * UpdateInternalState:
17  * maybe hydration model should ensure that the hydration degree is NOT recalculated in isothermal analysis for each gp,
18  * when each gp refers to the material level status. Maybe it will be necessary to save time stamp in status?
19  * but even then, there is no way to check if the state vector isn't changed.
20  * ==> keep it at caller (only HellMat is now the case)
21  * in case of the planned several hydration model statuses + interpolation, internal state update must be done for each gp,
22  * and HydrationModel must keep track of the status variables extents, to select the appropriate range for interpolation.
23  * ??? / choose 'typical' integration points at beginning of analysis, compute hydration there
24  \ use extreme computed values, which may be at different places in time
25  *
26  */
27 
28 #include "hydram.h"
29 #include "gausspoint.h"
30 #include "datastream.h"
31 #include "mathfem.h"
32 #include "contextioerr.h"
33 
34 #include <cstdio>
35 
36 namespace oofem {
37 // ======= class HydrationModelStatus implementation =======
39 {
40  hydrationDegree = 0;
42 }
43 
44 void
46 {
47  fprintf(file, " ksi %.5f", hydrationDegree);
48 }
49 
50 void
52 // initializes temp status - resets temp variables to saved equilibrium state
53 // Normally, this is used to clear temp status variables during equilibrium iteration
54 // (e.g. plastic multiplier, active yield surface, ...)
55 // In HellmichMaterial, there is number of auxiliary status values that only need to be evaluated once for particular
56 // time, and have to recalculated only if the iteration is restarted.
57 
58 // In the hydration model, this means resetting to hydration degree at start of step.
59 // This should only be done at step restart or restoring context (InitStepIncrements->initGpForNewStep)
60 
61 // Because hydration model initTempStatus is never called directly, it should be determined in master status
62 // initTempStatus(), whether hydration model init is necessary.
63 {
65 }
66 
67 void
69 // update after new equilibrium state reached - prepare status for saving context and for next time increment
70 {
72 }
73 
74 //modified_zh 25.6.2004 obj = NULL is set in .h
77 // saves current context(state) into stream
78 {
79  if ( !stream.write(hydrationDegree) ) {
81  }
82 
83  return CIO_OK;
84 }
85 
86 //modified_zh 25.6.2004 obj = NULL is set in .h
89 // restores current context(state) from stream
90 {
91  if ( !stream.read(hydrationDegree) ) {
93  }
94 
95  tempHydrationDegree = hydrationDegree; // for oofeg
96  return CIO_OK;
97 }
98 
99 
100 // ======= class HydrationModel implementation =======
101 // default constructor - Lafarge mixture
103 {
106 }
107 
108 // constructor
110 {
111  setMixture(mix);
112  if ( ( usefr ) && ( usefr <= frMixed ) ) {
113  useFindRoot = usefr;
114  } else {
115  OOFEM_ERROR("unknown FindRootMethod");
116  }
117 }
118 
121 {
122  IRResultType result; // Required by IR_GIVE_FIELD macro
123  double value;
124 
125  //hydration>0 -> initial hydration degree
128  if ( initialHydrationDegree >= 0. ) {
129  OOFEM_LOG_INFO("HydrationModel: Hydration from %.2f.", initialHydrationDegree);
130  } else {
131  OOFEM_WARNING("Hydration degree input incorrect, use 0..1 to set initial material hydration degree.");
132  return IRRT_BAD_FORMAT;
133  }
134 
136  OOFEM_LOG_INFO("HydrationModel: Model parameters for Skanska C60/75 mixture.");
137  setMixture(mtC60);
138  }
139 
140  timeScale = 1.;
141  value = -1.;
143  if ( value >= 0. ) {
144  timeScale = value;
145  OOFEM_LOG_INFO("HydrationModel: Time scale set to %.0f", timeScale);
146  }
147 
148  // Optional direct input of material parameters
149  le = 0;
150  value = -1.;
152  if ( value >= 0 ) {
153  le = value;
154  OOFEM_LOG_INFO("HydrationModel: Latent heat of hydration set to %.0f", le);
155  }
156 
157  value = -1;
159  if ( value >= 0 ) {
160  cv = value;
161  OOFEM_LOG_INFO("HydrationModel: Cement content set to %.0f kg/m3", cv);
162  we = 0.23 * cv;
163  }
164 
165  value = -1.;
167  if ( value >= 0 ) {
168  we = value;
169  }
170 
171  if ( cv || ( value >= 0 ) ) {
172  OOFEM_LOG_INFO("HydrationModel: Water consumption for hydration set to %.0f kg/m3", we);
173  }
174 
175  return IRRT_OK;
176 }
177 
178 void
180 {
181  // === Initializes material parameters for given mixture ===
182  mixture = mix;
183  // Normalized chemical affinity regression function coefficients
184  // (Lafarge mixture)
185  if ( mix == mtLafarge ) {
186  aa = 7.313;
187  ba = 10.46;
188  ca = 169.3;
189  da = 4.370;
190 
191  e0 = 0.05; // ksi_0
192  }
193  // Huber mixture
194  else if ( mix == mtHuber ) {
195  aa = 15.93;
196  ba = 7.33;
197  ca = 0.855e8;
198  da = 26.7;
199 
200  e0 = 0.10; // ksi_0
201  }
202  // Skanska C60/75 mixture
203  else if ( ( mix == mtC60 ) || ( mix == mtC100 ) ) { // used for C100 too
204  aa = 8.5;
205  ba = 5.0;
206  ca = 300;
207  da = 10;
208 
209  e0 = 0.05; // ksi_0
210  } else {
211  OOFEM_ERROR("Unknown mixture type!");
212  }
213 
214  ear = 4000; // activation term [K]
215  if ( !le ) {
216  le = 190000; // latent heat [kJ/m3]
217  }
218 
219  // rc = 2428; // heat capacity [kJ/m3K] - set in master material input
220 }
221 
222 
223 // === Material functions ===
224 double
226 // Returns the normalized chemical affinity A~(ksi) [1/s]
227 {
228  if ( ksi < e0 ) {
229  ksi = e0;
230  }
231 
232  return ( aa * ( 1 - exp(-ba * ksi) ) / ( 1 + ca * pow(ksi, da) ) );
233 }
234 
235 double
237 // Returns the derivation of chemical affinity dA~/dksi(ksi)
238 {
239  double ksinad, enaksi;
240 
241  if ( ksi < e0 ) {
242  return ( 0 );
243  }
244 
245  ksinad = pow(ksi, da);
246  enaksi = exp(-ba * ksi);
247 
248  return ( aa * ( ca * da * ksinad * ( enaksi - 1 ) / ksi + ba * enaksi * ( ca * ksinad + 1 ) ) /
249  pow(1 + ca * ksinad, 2) );
250 }
251 
252 double
253 HydrationModel :: localResidual(double dks) // G(dksi) 4.12
254 // !!! uses auxiliary ksi, dt, T in hydration model instance
255 {
256  return ( dks - auxdt * affinity(auxksi + dks) * exp(-ear / auxT) * ( 1. + auxh * auxh ) / 2. );
257 }
258 
259 double
260 HydrationModel :: dksidT(double ksi, double T, double h, double dt)
261 /*
262  * !!! should use state vector to enable adding state variables, but is OK on the level of dIntSource/dState
263  * G = dksi - dt * aff(ksi) * exp(-ear/T) * (1+h^2)/2 = 0
264  * dksi/dT = - dG/dT / dG/dksi, dksi->0 dksi/dksi=1
265  * = - -dt*aff(ksi)*(--ear/T^2)*exp(-ear/T)*(1+h^2)/2 / (1 - dt*daff/dksi * exp(-ear/T) * (1+h^2)/2)
266  *
267  * dh/dT, dh/dksi uz nejde, od toho je iterace ksi(h,T)
268  */
269 {
270  double aux;
271  aux = dt * exp(-ear / T) * ( 1 + h * h ) / 2;
272  return ( aux * affinity(ksi) * ear / ( T * T ) ) /
273  ( 1 - aux * dAdksi(ksi) );
274 }
275 
276 double
277 HydrationModel :: dksidh(double ksi, double T, double h, double dt)
278 /*
279  * G = dks - dt * aff(ksi) * exp(-ear/T) * (1+h^2)/2 = 0
280  * dksi/dh = - dG/dh / dG/dksi
281  * = - -dt*aff(ksi) *exp(-ear/T) * h / (1 - dt*daff/dksi * exp(-ear/T) * (1+h^2)/2)
282  */
283 {
284  double aux;
285  aux = dt * exp(-ear / T);
286  return ( aux * affinity(ksi) * h ) /
287  ( 1 - aux * dAdksi(ksi) * ( 1 + h * h ) / 2 );
288 }
289 
292 /*
293  * Returns the hydration model status obtained from gp associated material status or from model associated status in case of isothermal analysis
294  * Creates the hydration model status if necessary.
295  */
296 {
298  HydrationModelStatus *status = NULL;
299  if ( hmi ) {
300  status = hmi->giveHydrationModelStatus();
301  if ( !status ) {
302  status = static_cast< HydrationModelStatus * >( this->CreateStatus(gp) );
303  hmi->setHydrationModelStatus(status);
304  }
305  } else {
306  OOFEM_ERROR("Master status undefined.");
307  }
308 
309  return status;
310 }
311 
312 void
314 /*
315  * Returns the hydration heat generated in gp during time step tStep.
316  * Can be overriden to return also water consumption as second component of the internal source vector.
317  */
318 // !!! Works only for current TimeStep, no check done
319 // !!! Should suffice to return val(1) without moisture analysis.
320 {
321  val.resize(2);
322  val(0) = le * giveHydrationDegree(gp, tStep, mode); // heat SOURCE
323  val(1) = -we *giveHydrationDegree(gp, tStep, mode); // water CONSUMPTION
324 }
325 
326 double
328 // Transport status needs to be obtained from master status, it's better to pass as a parameter
329 // to enable usage from structural material
330 {
331  double answer = 0;
332 
333  if ( ( rmode == IntSource ) || ( rmode == IntSource_hh ) || ( rmode == IntSource_ww ) || ( rmode == IntSource_wh ) || ( rmode == IntSource_hw ) ) {
334  if ( vec.isEmpty() ) {
335  OOFEM_ERROR("undefined state vector.");
336  }
337 
338  answer = computeIntSource(vec, gp, tStep, rmode);
339  } else {
340  OOFEM_ERROR("wrong MatResponseMode.");
341  }
342 
343  return answer;
344 }
345 
346 double
347 HydrationModel :: computeHydrationDegreeIncrement(double ksi, double T, double h, double dt)
348 // Computes the hydration degree increment according to given hydration degree, temperature and time increment.
349 // !!! sets aux values in material
350 {
351  double result = 0.0;
352 
353  if ( ksi < 1.0 ) {
354  auxksi = ksi;
355  auxT = T;
356  auxh = h;
357  auxdt = dt;
358  switch ( useFindRoot ) {
359  case frRegula: result = regulafindroot();
360  break;
361  case frBinTree: result = bintreefindroot();
362  break;
363  case frMixed: result = mixedfindroot();
364  break;
365 #ifdef DEBUG
366  default: {
367  OOFEM_ERROR("unknown FindRootMethod %d", useFindRoot);
368  }
369 #endif
370  }
371 
372  if ( ksi + result > 1.0 ) {
373 #ifdef VERBOSE
374  OOFEM_LOG_INFO("temp=%.12f, dksi %.15f -> %f\n", T, result, 1.0 - ksi);
375 #endif
376  result = 1.0 - ksi;
377  }
378  } else {
379  result = 0.;
380  }
381 
382  return ( result );
383 }
384 
385 double
387 /*
388  * Computes and returns the derivatives of the material-generated Internal Source with respect to the tm state vector.
389  * Used in IntSourceLHS matrix for quadratic convergency of global iteration.
390  * State vector must contain relative humidity, not water content
391  *
392  * Called from giveCharacteristicValue - IntSource_hh, IntSource_ww, IntSource_wh, IntSource_hw.
393  * IntSource_hh = -lksi * dksidT (dHeat / dT)
394  * IntSource_ww = wksi * dksidh (dWater / dh)
395  * IntSource_hw = -lksi * dksidh (dHeat / dh)
396  * IntSource_wh = -wksi * dksidT (dWater / dT)
397  */
398 {
399  // prepare ksi, T, h, dt
400  double ksi, T, h, dt;
401  ksi = giveHydrationDegree(gp, tStep, VM_Total);
402  T = vec(0);
403  h = vec(1);
404  // !!! timeScale
405  dt = tStep->giveTimeIncrement() * timeScale;
406 
407  if ( ksi < 1.0 ) {
408  switch ( rmode ) {
409  case IntSource:
410  case IntSource_hh: return -le *dksidT(ksi, T, h, dt);
411 
412  case IntSource_ww: return we *dksidh(ksi, T, h, dt);
413 
414  case IntSource_hw: return -le *dksidh(ksi, T, h, dt);
415 
416  case IntSource_wh: return -we *dksidT(ksi, T, h, dt);
417 
418  default: OOFEM_ERROR("Wrong MatResponseMode.");
419  }
420  }
421 
422  return 0;
423 }
424 
425 // === public services ===
426 
427 double
429 // returns the hydration degree in integration point gp
430 {
431  HydrationModelStatus *status = static_cast< HydrationModelStatus * >( giveStatus(gp) );
432  double ksi = status->giveTempHydrationDegree();
433  if ( mode == VM_Incremental ) {
434  ksi -= status->giveHydrationDegree();
435  }
436 
437  return ksi;
438 }
439 
440 void
442 /*
443  * Recalculates the hydration degree according to the given new state vector and time increment, using equilib status
444  * State vector is supposed to contain [1]->temperature, [2]->relative humidity!
445  * caller should ensure that this is called only when state vector is changed
446  */
447 {
448  double ksi, dksi, T = 0., h = 1.;
449  // get hydration model status associated with integration point
450  HydrationModelStatus *status = static_cast< HydrationModelStatus * >( giveStatus(gp) );
451 
452  if ( vec.giveSize() ) {
453  T = vec(0);
454  if ( vec.giveSize() > 1 ) {
455  h = vec(1);
456  } else {
457  h = 1; // assume saturated if undefined
458  }
459  } else {
460  OOFEM_ERROR("undefined state vector.");
461  }
462 
463  ksi = status->giveHydrationDegree();
464  if ( !ksi && initialHydrationDegree ) {
466  status->setHydrationDegree(ksi);
467  }
468 
469  // !!! timeScale
470  if ( tStep->giveTimeIncrement() > 0. ) {
471  dksi = computeHydrationDegreeIncrement(ksi, T, h, tStep->giveTimeIncrement() * timeScale);
472  } else {
473  dksi = 0.;
474  }
475 
476  status->setTempHydrationDegree(ksi + dksi);
477 }
478 
479 
480 // === Auxiliary functions === (root finding)
481 double
483 {
484  double x0, y0, yl, xl = 0., xr = 1.;
485 
486  do {
487  yl = localResidual(xl);
488  x0 = yl * ( xl - xr ) / ( localResidual(xr) - yl ) + xl;
489  y0 = localResidual(x0);
490  if ( y0 < 0 ) {
491  xl = x0;
492  } else {
493  xr = x0;
494  }
495 
496 #ifdef VERBOSEFINDROOT
497  OOFEM_LOG_INFO("regulafindroot: x=%.15f, chyba %.15f \n", x0, y0);
498 #endif
499  } while ( fabs(y0) > ROOT_PRECISION_DKSI );
500 
501  return ( x0 );
502 }
503 
504 double
506 {
507  double xl = 0., xr = 1., x0, y0;
508 
509  do {
510  x0 = ( xl + xr ) / 2;
511  y0 = localResidual(x0);
512  if ( y0 < 0 ) {
513  xl = x0;
514  } else {
515  xr = x0;
516  }
517 
518 #ifdef VERBOSEFINDROOT
519  OOFEM_LOG_INFO("bintreefindroot: x=%.15f, chyba %.15f \n", x0, y0);
520 #endif
521  } while ( fabs(y0) > ROOT_PRECISION_DKSI );
522 
523  return ( x0 );
524 }
525 
526 
527 
528 double
530 {
531  double x0 = 0., y0, yl, xl = 0., xr = 1.;
532  int jcount, done = 0;
533 
534  do {
535  for ( jcount = 0; ( jcount < BINARY_TREE_STEPS ); jcount++ ) {
536  x0 = ( xl + xr ) / 2;
537  y0 = localResidual(x0);
538  if ( fabs(y0) < ROOT_PRECISION_DKSI ) {
539  done = 1;
540  break;
541  }
542 
543  if ( y0 < 0 ) {
544  xl = x0;
545  } else {
546  xr = x0;
547  }
548  }
549 
550  if ( !done ) {
551  yl = localResidual(xl);
552  x0 = yl * ( xl - xr ) / ( localResidual(xr) - yl ) + xl;
553  y0 = localResidual(x0);
554 
555  if ( fabs(y0) < ROOT_PRECISION_DKSI ) {
556  break;
557  } else
558  if ( y0 < 0 ) {
559  xl = x0;
560  } else {
561  xr = x0;
562  }
563 
564 #ifdef VERBOSEFINDROOT
565  OOFEM_LOG_INFO("mixedfindroot: x=%.15f, chyba %.15f \n", x0, y0);
566 #endif
567  }
568  } while ( !done );
569 
570  return ( x0 );
571 }
572 
575 {
576  return new HydrationModelStatus(1, this->giveDomain(), gp);
577 }
578 
579 // ======= HydrationModelStatusInterface implementation =======
580 void
582 {
583  if ( hydrationModelStatus ) {
584  hydrationModelStatus->updateYourself(tStep);
585  }
586 }
587 
588 void
590 {
591  if ( hydrationModelStatus ) {
592  hydrationModelStatus->printOutputAt(file, tStep);
593  }
594 }
595 
596 // ======= HydrationModelInterface implementation =======
597 
600 {
601  IRResultType result; // Required by IR_GIVE_FIELD macro
602  double value;
603 
604  // !!! should use separate field, e.g. hydramname #hydramnumber
605  // Hydration>0 -> Model starting at value, hydration<0 -> Constant at given value
606  value = -2.;
607  constantHydrationDegree = 1.0;
609  if ( value >= 0. ) {
610  OOFEM_LOG_INFO("HydratingMaterial: creating HydrationModel.");
611  hydrationModel.reset( new HydrationModel() );
612  if ( !hydrationModel ) {
613  OOFEM_WARNING("Could not create HydrationModel instance.");
614  return IRRT_BAD_FORMAT;
615  }
616 
617  hydrationModel->initializeFrom(ir);
618  }
619  // constant hydration degree
620  else if ( value >= -1. ) {
621  constantHydrationDegree = -value;
622  OOFEM_LOG_INFO("HydratingMaterial: Hydration degree set to %.2f.", -value);
623  } else {
624  OOFEM_WARNING("Hydration degree input incorrect, use -1..<0 for constant hydration degree, 0..1 to set initial material hydration degree.");
625  return IRRT_BAD_FORMAT;
626  }
627 
628  // Material cast time - start of hydration
629  // 11/3/2004 OK *unfinished in Hellmat, needs to be checked in hm_Interface->updateInternalState
630  castAt = 0.;
632  if ( castAt >= 0. ) {
633  OOFEM_LOG_INFO("HydratingMaterial: Hydration starts at time %.2g.", castAt);
634  }
635 
636  return IRRT_OK;
637 }
638 
639 void
641 {
642  if ( hydrationModel ) {
643  TimeStep hydraTime( ( const TimeStep ) *tStep );
644  int notime = 0;
645  if ( tStep->giveTargetTime() - tStep->giveTimeIncrement() < castAt ) {
646  if ( tStep->giveTargetTime() >= castAt ) {
647  hydraTime.setTimeIncrement(tStep->giveTargetTime() - castAt);
648  } else {
649  notime = 1;
650  }
651  }
652 
653  if ( !notime ) {
654  hydrationModel->updateInternalState(vec, gp, &hydraTime);
655  }
656  }
657 }
658 
659 double
661 {
662  if ( hydrationModel ) {
663  return hydrationModel->giveHydrationDegree(gp, tStep, mode);
664  } else {
665  return constantHydrationDegree;
666  }
667 }
668 } // end namespace oofem
HydrationModelStatus * giveHydrationModelStatus()
Returns the associated hydration model status.
Definition: hydram.h:291
virtual double giveCharacteristicValue(const FloatArray &vec, MatResponseMode rmode, GaussPoint *gp, TimeStep *tStep)
Returns coefficients for LHS contribution from internal sources (dHeat/dT, dWaterSource/dw) for given...
Definition: hydram.C:327
double giveHydrationDegree(GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Returns the hydration degree at end of TimeStep tStep in given integraion point.
Definition: hydram.C:428
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver&#39;s output to given stream.
Definition: hydram.C:45
void computeInternalSourceVector(FloatArray &val, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Returns generated heat for given gp [kJ/m3], eventually water consumption.
Definition: hydram.C:313
double e0
ksi_0.
Definition: hydram.h:166
#define _IFT_HydrationModel_hheat
Definition: hydram.h:90
Class and object Domain.
Definition: domain.h:115
double dksidh(double ksi, double T, double h, double dt)
Definition: hydram.C:277
double dAdksi(double ksi)
Returns the derivation of chemical affinity dA~/dksi(ksi).
Definition: hydram.C:236
#define _IFT_HydrationModel_cv
Definition: hydram.h:91
double mixedfindroot()
Definition: hydram.C:529
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
Definition: datastream.h:54
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
Definition: valuemodetype.h:78
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
Definition: hydram.C:51
void setTempHydrationDegree(double v)
Definition: hydram.h:133
double cv
Input cement content kg/m3 for evaluation of total water consumption.
Definition: hydram.h:166
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
Definition: hydram.C:76
virtual bool hasField(InputFieldType id)=0
Returns true if record contains field identified by idString keyword.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
Definition: hydram.C:88
double giveTargetTime()
Returns target time.
Definition: timestep.h:146
void setTimeIncrement(double newDt)
Sets solution step time increment.
Definition: timestep.h:152
General IO error.
virtual void updateInternalState(const FloatArray &vec, GaussPoint *gp, TimeStep *tStep)
Updates internal state of material according to new state vector - computes the hydration degree for ...
Definition: hydram.C:441
double affinity(double ksi)
Returns the normalized chemical affinity A~(ksi) [1/s].
Definition: hydram.C:225
MatResponseMode
Describes the character of characteristic material matrix.
virtual int read(int *data, int count)=0
Reads count integer values into array pointed by data.
MixtureType
Definition: hydram.h:150
double localResidual(double dks)
Definition: hydram.C:253
#define THROW_CIOERR(e)
Definition: contextioerr.h:61
void setHydrationModelStatus(HydrationModelStatus *s)
Sets the associated hydration model status. Analogue to gp->setMaterialStatus.
Definition: hydram.h:293
double giveTimeIncrement()
Returns solution step associated time increment.
Definition: timestep.h:150
void setMixture(MixtureType mix)
Sets the mixture type and appropriate material parameters.
Definition: hydram.C:179
virtual int write(const int *data, int count)=0
Writes count integer values from array pointed by data.
double giveTempHydrationDegree()
Returns the temp hydration degree.
Definition: hydram.h:129
double bintreefindroot()
Definition: hydram.C:505
#define OOFEM_LOG_INFO(...)
Definition: logger.h:127
double computeHydrationDegreeIncrement(double ksi, double T, double h, double dt)
Computes and returns hydration degree increment for given ksi, T [K], dt [s].
Definition: hydram.C:347
double giveHydrationDegree()
Returns the non-temp hydration degree. Used for step restart and postprocessing.
Definition: hydram.h:131
#define OOFEM_ERROR(...)
Definition: error.h:61
#define BINARY_TREE_STEPS
Definition: hydram.h:103
FindRootMethod useFindRoot
Definition: hydram.h:207
bool isEmpty() const
Returns true if receiver is empty.
Definition: floatarray.h:222
Abstract base class for all material models.
Definition: material.h:95
double giveHydrationDegree(GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Returns the hydration degree at end of TimeStep tStep in given integration point. ...
Definition: hydram.C:660
Abstract base class representing a material status information.
Definition: matstatus.h:84
double initialHydrationDegree
!! initial hydration degree - set in initialize From, but not used
Definition: hydram.h:161
#define _IFT_HydrationModelInterface_castAt
Definition: hydram.h:98
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates and returns new HydrationModelStatus instance.
Definition: hydram.C:574
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Definition: hydram.C:68
Class representing vector of real numbers.
Definition: floatarray.h:82
HydrationModel()
Constructor.
Definition: hydram.C:102
MixtureType mixture
Used concrete mixture.
Definition: hydram.h:157
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes the hydration model according to object description stored in input record.
Definition: hydram.C:120
double ear
Activation term [K].
Definition: hydram.h:166
IRResultType
Type defining the return values of InputRecord reading operations.
Definition: irresulttype.h:47
double computeIntSource(const FloatArray &vec, GaussPoint *gp, TimeStep *tStep, MatResponseMode rmode)
Computes and returns the derivatives of the material-generated Internal Source with respect to the tm...
Definition: hydram.C:386
double le
Latent heat [kJ/m3].
Definition: hydram.h:166
Class representing the general Input Record.
Definition: inputrecord.h:101
This class implements associated Status to HydrationModel.
Definition: hydram.h:116
void printOutputAt(FILE *file, TimeStep *tStep)
Outputs the status variables.
Definition: hydram.C:589
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
Definition: femcmpnn.h:179
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
Definition: contextmode.h:43
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
Definition: hydram.C:291
HydrationModelStatus(int n, Domain *d, GaussPoint *g)
Definition: hydram.C:38
double auxksi
!! possible problem for parallel computation, performance???
Definition: hydram.h:180
Domain * giveDomain() const
Definition: femcmpnn.h:100
#define _IFT_HydrationModel_c60mix
Definition: hydram.h:88
void setHydrationDegree(double v)
Definition: hydram.h:132
#define ROOT_PRECISION_DKSI
Definition: hydram.h:102
#define IR_GIVE_OPTIONAL_FIELD(__ir, __value, __id)
Macro facilitating the use of input record reading methods.
Definition: inputrecord.h:78
int giveSize() const
Returns the size of receiver.
Definition: floatarray.h:218
the oofem namespace is to define a context or scope in which all oofem names are defined.
double regulafindroot()
Definition: hydram.C:482
double we
Total water consumption for hydration [kg/m3].
Definition: hydram.h:166
#define _IFT_HydrationModel_water
Definition: hydram.h:92
#define _IFT_HydrationModel_hydration
Definition: hydram.h:87
double aa
Normalized chemical affinity regression function coefficients.
Definition: hydram.h:166
#define _IFT_HydrationModel_timeScale
Definition: hydram.h:89
Class representing integration point in finite element program.
Definition: gausspoint.h:93
#define OOFEM_WARNING(...)
Definition: error.h:62
virtual void updateInternalState(const FloatArray &vec, GaussPoint *gp, TimeStep *tStep)
Calls hydrationModel->updateInternalState, if the material is already cast.
Definition: hydram.C:640
Class representing solution step.
Definition: timestep.h:80
FindRootMethod
Definition: hydram.h:149
IRResultType initializeFrom(InputRecord *ir)
Creates and initializes the hydration model according to object description stored in input record...
Definition: hydram.C:599
double dksidT(double ksi, double T, double h, double dt)
Definition: hydram.C:260
void updateYourself(TimeStep *tStep)
Updates the equilibrium variables to temporary values.
Definition: hydram.C:581
double timeScale
time scale - used for time input in other units than seconds
Definition: hydram.h:163
void resize(int s)
Resizes receiver towards requested size.
Definition: floatarray.C:631
#define _IFT_HydrationModelInterface_hydration
Definition: hydram.h:97

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:29 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011