112 if ( ( usefr ) && ( usefr <=
frMixed ) ) {
131 OOFEM_WARNING(
"Hydration degree input incorrect, use 0..1 to set initial material hydration degree.");
136 OOFEM_LOG_INFO(
"HydrationModel: Model parameters for Skanska C60/75 mixture.");
171 if (
cv || ( value >= 0 ) ) {
172 OOFEM_LOG_INFO(
"HydrationModel: Water consumption for hydration set to %.0f kg/m3",
we);
203 else if ( ( mix ==
mtC60 ) || ( mix ==
mtC100 ) ) {
232 return (
aa * ( 1 - exp(-
ba * ksi) ) / ( 1 +
ca * pow(ksi,
da) ) );
239 double ksinad, enaksi;
245 ksinad = pow(ksi,
da);
246 enaksi = exp(-
ba * ksi);
248 return (
aa * (
ca *
da * ksinad * ( enaksi - 1 ) / ksi +
ba * enaksi * (
ca * ksinad + 1 ) ) /
249 pow(1 +
ca * ksinad, 2) );
271 aux = dt * exp(-
ear / T) * ( 1 + h * h ) / 2;
273 ( 1 - aux *
dAdksi(ksi) );
285 aux = dt * exp(-
ear / T);
286 return ( aux *
affinity(ksi) * h ) /
287 ( 1 - aux *
dAdksi(ksi) * ( 1 + h * h ) / 2 );
333 if ( ( rmode == IntSource ) || ( rmode == IntSource_hh ) || ( rmode == IntSource_ww ) || ( rmode == IntSource_wh ) || ( rmode == IntSource_hw ) ) {
372 if ( ksi + result > 1.0 ) {
374 OOFEM_LOG_INFO(
"temp=%.12f, dksi %.15f -> %f\n", T, result, 1.0 - ksi);
400 double ksi, T, h, dt;
410 case IntSource_hh:
return -
le *
dksidT(ksi, T, h, dt);
412 case IntSource_ww:
return we *
dksidh(ksi, T, h, dt);
414 case IntSource_hw:
return -
le *
dksidh(ksi, T, h, dt);
416 case IntSource_wh:
return -
we *
dksidT(ksi, T, h, dt);
433 if ( mode == VM_Incremental ) {
448 double ksi, dksi, T = 0., h = 1.;
484 double x0, y0, yl, xl = 0., xr = 1.;
496 #ifdef VERBOSEFINDROOT 497 OOFEM_LOG_INFO(
"regulafindroot: x=%.15f, chyba %.15f \n", x0, y0);
507 double xl = 0., xr = 1., x0, y0;
510 x0 = ( xl + xr ) / 2;
518 #ifdef VERBOSEFINDROOT 519 OOFEM_LOG_INFO(
"bintreefindroot: x=%.15f, chyba %.15f \n", x0, y0);
531 double x0 = 0., y0, yl, xl = 0., xr = 1.;
532 int jcount, done = 0;
536 x0 = ( xl + xr ) / 2;
564 #ifdef VERBOSEFINDROOT 583 if ( hydrationModelStatus ) {
584 hydrationModelStatus->updateYourself(tStep);
591 if ( hydrationModelStatus ) {
592 hydrationModelStatus->printOutputAt(file, tStep);
607 constantHydrationDegree = 1.0;
612 if ( !hydrationModel ) {
617 hydrationModel->initializeFrom(ir);
620 else if ( value >= -1. ) {
621 constantHydrationDegree = -value;
622 OOFEM_LOG_INFO(
"HydratingMaterial: Hydration degree set to %.2f.", -value);
624 OOFEM_WARNING(
"Hydration degree input incorrect, use -1..<0 for constant hydration degree, 0..1 to set initial material hydration degree.");
632 if ( castAt >= 0. ) {
633 OOFEM_LOG_INFO(
"HydratingMaterial: Hydration starts at time %.2g.", castAt);
642 if ( hydrationModel ) {
654 hydrationModel->updateInternalState(vec, gp, &hydraTime);
662 if ( hydrationModel ) {
663 return hydrationModel->giveHydrationDegree(gp, tStep, mode);
665 return constantHydrationDegree;
HydrationModelStatus * giveHydrationModelStatus()
Returns the associated hydration model status.
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...
double giveHydrationDegree(GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Returns the hydration degree at end of TimeStep tStep in given integraion point.
virtual void printOutputAt(FILE *file, TimeStep *tStep)
Print receiver's output to given stream.
void computeInternalSourceVector(FloatArray &val, GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Returns generated heat for given gp [kJ/m3], eventually water consumption.
#define _IFT_HydrationModel_hheat
double dksidh(double ksi, double T, double h, double dt)
double dAdksi(double ksi)
Returns the derivation of chemical affinity dA~/dksi(ksi).
#define _IFT_HydrationModel_cv
The purpose of DataStream abstract class is to allow to store/restore context to different streams...
ValueModeType
Type representing the mode of UnknownType or CharType, or similar types.
virtual void initTempStatus()
Initializes the temporary internal variables, describing the current state according to previously re...
double tempHydrationDegree
void setTempHydrationDegree(double v)
double cv
Input cement content kg/m3 for evaluation of total water consumption.
virtual contextIOResultType saveContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Stores receiver state to output stream.
virtual contextIOResultType restoreContext(DataStream &stream, ContextMode mode, void *obj=NULL)
Restores the receiver state previously written in stream.
double giveTargetTime()
Returns target time.
void setTimeIncrement(double newDt)
Sets solution step time increment.
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 ...
double affinity(double ksi)
Returns the normalized chemical affinity A~(ksi) [1/s].
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.
double localResidual(double dks)
void setHydrationModelStatus(HydrationModelStatus *s)
Sets the associated hydration model status. Analogue to gp->setMaterialStatus.
double giveTimeIncrement()
Returns solution step associated time increment.
void setMixture(MixtureType mix)
Sets the mixture type and appropriate material parameters.
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.
#define OOFEM_LOG_INFO(...)
double computeHydrationDegreeIncrement(double ksi, double T, double h, double dt)
Computes and returns hydration degree increment for given ksi, T [K], dt [s].
double giveHydrationDegree()
Returns the non-temp hydration degree. Used for step restart and postprocessing.
#define BINARY_TREE_STEPS
FindRootMethod useFindRoot
bool isEmpty() const
Returns true if receiver is empty.
Abstract base class for all material models.
double giveHydrationDegree(GaussPoint *gp, TimeStep *tStep, ValueModeType mode)
Returns the hydration degree at end of TimeStep tStep in given integration point. ...
Abstract base class representing a material status information.
double initialHydrationDegree
!! initial hydration degree - set in initialize From, but not used
#define _IFT_HydrationModelInterface_castAt
virtual MaterialStatus * CreateStatus(GaussPoint *gp) const
Creates and returns new HydrationModelStatus instance.
virtual void updateYourself(TimeStep *tStep)
Update equilibrium history variables according to temp-variables.
Class representing vector of real numbers.
HydrationModel()
Constructor.
MixtureType mixture
Used concrete mixture.
virtual IRResultType initializeFrom(InputRecord *ir)
Initializes the hydration model according to object description stored in input record.
double ear
Activation term [K].
IRResultType
Type defining the return values of InputRecord reading operations.
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...
double le
Latent heat [kJ/m3].
This class implements associated Status to HydrationModel.
void printOutputAt(FILE *file, TimeStep *tStep)
Outputs the status variables.
virtual Interface * giveInterface(InterfaceType t)
Interface requesting service.
long ContextMode
Context mode (mask), defining the type of information written/read to/from context.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
Returns material status of receiver in given integration point.
HydrationModelStatus(int n, Domain *d, GaussPoint *g)
double auxksi
!! possible problem for parallel computation, performance???
Domain * giveDomain() const
#define _IFT_HydrationModel_c60mix
void setHydrationDegree(double v)
#define ROOT_PRECISION_DKSI
int giveSize() const
Returns the size of receiver.
the oofem namespace is to define a context or scope in which all oofem names are defined.
double we
Total water consumption for hydration [kg/m3].
#define _IFT_HydrationModel_water
#define _IFT_HydrationModel_hydration
double aa
Normalized chemical affinity regression function coefficients.
#define _IFT_HydrationModel_timeScale
Class representing integration point in finite element program.
#define OOFEM_WARNING(...)
virtual void updateInternalState(const FloatArray &vec, GaussPoint *gp, TimeStep *tStep)
Calls hydrationModel->updateInternalState, if the material is already cast.
Class representing solution step.
IRResultType initializeFrom(InputRecord *ir)
Creates and initializes the hydration model according to object description stored in input record...
double dksidT(double ksi, double T, double h, double dt)
void updateYourself(TimeStep *tStep)
Updates the equilibrium variables to temporary values.
double timeScale
time scale - used for time input in other units than seconds
void resize(int s)
Resizes receiver towards requested size.
#define _IFT_HydrationModelInterface_hydration