95 KelvinChainMaterial :: initializeFrom(ir);
101Eurocode2CreepMaterial :: computeElasticityStrengthParams(
int cemType)
108 if ( cemType == 1 ) {
110 }
else if ( cemType == 2 ) {
112 }
else if ( cemType == 3 ) {
121Eurocode2CreepMaterial :: computeShrinkageParams(
int cemType,
double henv)
124 double alpha_ds1, alpha_ds2;
126 if ( cemType == 1 ) {
129 }
else if ( cemType == 2 ) {
132 }
else if ( cemType == 3 ) {
142 if ( this->
h0 >= 500 ) {
144 }
else if ( this->
h0 >= 300 ) {
145 this->
kh = 0.75 - 0.05 * (
h0 - 300. ) / 200.;
146 }
else if ( this->
h0 >= 200 ) {
147 this->
kh = 0.85 - 0.10 * (
h0 - 200. ) / 100.;
148 }
else if ( this->
h0 >= 100 ) {
149 this->
kh = 1.00 - 0.15 * (
h0 - 100. ) / 100.;
155 double beta_RH = 1.55 * ( 1. - henv * henv * henv );
156 this->
eps_cd_0 = -0.85e-6 * ( ( 220. + 110. * alpha_ds1 ) * exp(-alpha_ds2 * this->
fcm28 * ( this->
stiffnessFactor / 1.e6 ) / 10.) * beta_RH );
172Eurocode2CreepMaterial :: computeCreepParams(
int cemType,
double henv)
176 if ( cemType == 1 ) {
178 }
else if ( cemType == 2 ) {
180 }
else if ( cemType == 3 ) {
187 double alpha_1, alpha_2, alpha_3;
196 this->
phi_RH = ( 1. + alpha_1 * ( 1. - henv ) / ( 0.1 * pow(this->
h0, 1. / 3.) ) ) * alpha_2;
200 this->
beta_H = 1.5 * this->
h0 * ( 1. + pow( ( 1.2 * henv ), 18. ) ) + 250. * alpha_3;
201 this->
beta_H =
min(this->beta_H, 1500. * alpha_3);
210 this->
phi_RH = 1. + ( 1. - henv ) / ( 0.1 * pow(this->
h0, 1. / 3.) );
214 this->
beta_H = 1.5 * this->
h0 * ( 1. + pow( ( 1.2 * henv ), 18. ) ) + 250.;
230Eurocode2CreepMaterial :: computeConcreteStrengthAtAge(
double age)
const
232 double beta = exp( this->
s * ( 1. - sqrt( 28. / ( age / this->
timeFactor ) ) ) );
234 return beta * this->
fcm28;
238Eurocode2CreepMaterial :: computeMeanElasticModulusAtAge(
double age)
const
244 Ecm_at_age = pow( ( fcm_at_age / this->
fcm28 ), 0.3 ) * this->
Ecm28;
250Eurocode2CreepMaterial :: computeCreepFunction(
double t,
double t_prime,
GaussPoint *gp,
TimeStep *tStep)
const
264Eurocode2CreepMaterial :: computeCreepCoefficient(
double t,
double t_prime,
GaussPoint *gp,
TimeStep *tStep)
const
273 double beta_t0 = 1. / ( 0.1 + pow(t_prime_equiv / this->
timeFactor, 0.2) );
276 double beta_c = pow( ( ( t - t_prime ) / ( this->
beta_H * this->
timeFactor + t - t_prime ) ), 0.3 );
294 double initMaturity, incrMaturity;
295 double averageTemperature;
304 averageTemperature = et.
at(1);
310 averageTemperature =
min(averageTemperature, 80.);
311 averageTemperature =
max(averageTemperature, 0.);
313 incrMaturity = exp( -1. * ( 4000. / ( 273. + averageTemperature ) - 13.65 ) ) * tStep->
giveTimeIncrement();
319 return initMaturity + incrMaturity / 2.;
329 double age = maturity * pow( ( 9. / ( 2. + pow(maturity, 1.2) ) + 1. ), this->
alpha_T_cement );
330 return max(age, 0.5);
349 double chainStiffness = 0.;
351 if ( !Material :: isActivated(tStep) ) {
356 chainStiffness = KelvinChainMaterial :: giveEModulus(gp, tStep);
362 sum = 1. / chainStiffness;
368 if ( t_halfstep <= 0. ) {
369 OOFEM_ERROR(
"attempt to evaluate material stiffness at negative age");
375 chainStiffness = 1. /
sum;
378 return chainStiffness;
383Eurocode2CreepMaterial :: computeCharTimes()
407 OOFEM_WARNING(
"begOfTimeOfInterest was chosen bigger than 1 days, reseting its value to 1 days (could have lead to big errors in the numerical integration of the stiffness of the zeroth Kelvin unit (the retardation spectrum is very steep)");
424 OOFEM_WARNING(
"endOfTimeOfInterest was chosen bigger than 10.000 days, reseting to 10.000 days (the retardation spectrum is almost zero afterwards)");
439 for (
int mu = 1; mu <= this->
nUnits; mu++ ) {
451Eurocode2CreepMaterial :: computeRetardationTimeCorrection(
int mu)
const
453 return 1. + 0.555 * exp( -4. * pow( ( this->
tau1 * pow( 10.,
double( mu - 1 ) ) / ( this->
beta_H * this->
timeFactor ) ), 2. ) );
461Eurocode2CreepMaterial :: evaluateSpectrumAt(
double tau)
const
475 double ddPhi = n * ( n - 1. ) * pow( f, ( n - 2. ) ) * df * df + n *pow( f, ( n - 1. ) ) * ddf;
477 return -4. * tau * tau * ddPhi;
482Eurocode2CreepMaterial :: computeCharCoefficients(
double atTime,
GaussPoint *gp,
TimeStep *tStep)
const
502 const double tau0 = this->
tau1 / sqrt(10.0);
504 this->
EspringVal = 1. / ( ( log(10.) / 3. ) * (
516 for (
int mu = 1; mu <= this->
nUnits; mu++ ) {
517 double tauMu = this->
tau1 * pow( 10.,
double( mu - 1 ) );
522 answer.
times(coefficient);
525 return KelvinChainMaterial :: computeCharCoefficients(atTime, gp, tStep);
531Eurocode2CreepMaterial :: giveShrinkageStrainVector(
FloatArray &answer,
534 ValueModeType mode)
const
543 if ( ( mode != VM_Total ) && ( mode != VM_Incremental ) ) {
553 if ( mode == VM_Incremental ) {
556 if ( dryingTimeNow > 0. ) {
563 if ( autoShrTimeNow > 0. ) {
570 if ( dryingTimeNow > 0. ) {
577 if ( autoShrTimeNow > this->
relMatAge ) {
585 if ( answer.
at(1) != answer.
at(1) ) {
591Eurocode2CreepMaterial :: computeIncrementOfDryingShrinkageVector(
FloatArray &answer,
GaussPoint *gp,
double tNow,
double tThen)
const
596 if ( ( mode == _3dShell ) || ( mode == _3dBeam ) || ( mode == _2dPlate ) || ( mode == _2dBeam ) ) {
604 if ( tNow > tThen ) {
606 double beta_ds_now = tNow / ( tNow + 0.04 * pow(this->
h0, 3. / 2.) );
607 double beta_ds_then = tThen / ( tThen + 0.04 * pow(this->
h0, 3. / 2.) );
609 double dEpsSh = ( beta_ds_now - beta_ds_then ) * this->
kh * this->
eps_cd_0;
611 fullAnswer.
at(1) = fullAnswer.
at(2) = fullAnswer.
at(3) = dEpsSh;
614 StructuralMaterial :: giveReducedSymVectorForm( answer, fullAnswer, gp->
giveMaterialMode() );
619Eurocode2CreepMaterial :: computeIncrementOfAutogenousShrinkageVector(
FloatArray &answer,
GaussPoint *gp,
double tNow,
double tThen)
const
624 if ( ( mode == _3dShell ) || ( mode == _3dBeam ) || ( mode == _2dPlate ) || ( mode == _2dBeam ) ) {
632 if ( tNow > tThen ) {
634 double beta_as_now = 1. - exp( -0.2 * sqrt(tNow) );
635 double beta_as_then = 1. - exp( -0.2 * sqrt(tThen) );
637 double dEpsAu = ( beta_as_now - beta_as_then ) * this->
eps_ca_infty;
639 fullAnswer.
at(1) = fullAnswer.
at(2) = fullAnswer.
at(3) = dEpsAu;
642 StructuralMaterial :: giveReducedSymVectorForm( answer, fullAnswer, gp->
giveMaterialMode() );
646std::unique_ptr<MaterialStatus>
649 return std::make_unique<Eurocode2CreepMaterialStatus>(gp,
nUnits);
656 KelvinChainMaterial :: giveRealStressVector(answer, gp, reducedStrain, tStep);
668Eurocode2CreepMaterialStatus :: updateYourself(
TimeStep *tStep)
676 KelvinChainMaterialStatus :: updateYourself(tStep);
683 KelvinChainMaterialStatus :: saveContext(stream, mode);
697 KelvinChainMaterialStatus :: restoreContext(stream, mode);
#define REGISTER_Material(class)
virtual int read(int *data, std::size_t count)=0
Reads count integer values into array pointed by data.
virtual int write(const int *data, std::size_t count)=0
Writes count integer values from array pointed by data.
double maturity
temperature-dependent equivalent age, maturity (equilibrated value)
double giveTemperature() const
void setTempConcreteMaturity(double src)
double temperature
temperature (equilibrated value)
double giveConcreteMaturity() const
double tempTemperature
temperature (temporary value)
double tempMaturity
temperature-dependent equivalent age, maturity (temporary value)
void setTempTemperature(double src)
ec2ShrinkageType
shrinkage option
@ EC2_AutogenousShrinkage
void computeCreepParams(int, double)
sets parameters for creep according to formulas from EC
bool retardationSpectrumApproximation
void computeShrinkageParams(int, double)
sets parameters for shrinkage according to formulas from EC
double alpha_T_cement
influence of cement type on concrete equivalent age, B.9 in EC2
double eps_ca_infty
asymptotic value of autogenous shrinakge, 3.12 in EC2
double kh
drying shrinkage coefficient
double fcm28
mean compressive strength at 28 days default - to be specified in units of the analysis (e....
double computeRetardationTimeCorrection(int mu) const
computes correction factor which multiplies the retardation times
virtual double computeEquivalentAge(GaussPoint *gp, TimeStep *tStep) const
implements B.9
double h0
effective thickness [mm]
double Ecm28
Young's modulus at 28 days default [MPa].
double s
parameter determined by cement type
void computeIncrementOfDryingShrinkageVector(FloatArray &answer, GaussPoint *gp, double tNow, double tThen) const
computes increment of drying shrinkage - the shrinkage strain is isotropic
double t0
duration of curing [day, sec, ...]
void computeElasticityStrengthParams(int)
sets parameters for elasticity and strength according to formulas from EC
double evaluateSpectrumAt(double tau) const
evaluates retardation spectrum at given time (t-t')
virtual double computeConcreteStrengthAtAge(double age) const
evaluates concrete strength at given age
virtual double computeMeanElasticModulusAtAge(double age) const
evaluates concrete mean elastic modulus at given age
double eps_cd_0
asymptotic value of drying shrinkage at zero relative humidity, B.11 in EC2
double stiffnessFactor
factor unifying stiffnesses (Ecm is predicted from fcm...)
void computeIncrementOfAutogenousShrinkageVector(FloatArray &answer, GaussPoint *gp, double tNow, double tThen) const
computes increment of autogenous shrinkage - the shrinkage strain is isotropic
double tau1
fixed retardation time of the first unit
virtual double computeEquivalentMaturity(GaussPoint *gp, TimeStep *tStep) const
implements B.10
double phi_RH
drying creep coefficient
double beta_fcm
drying creep coefficient
double EspringVal
stiffness of the zeroth Kelvin unit
enum oofem::Eurocode2CreepMaterial::ec2ShrinkageType shType
virtual double computeCreepCoefficient(double t, double t_prime, GaussPoint *gp, TimeStep *tStep) const
Evaluation of the compliance function (according to appendix B from the EC).
bool temperatureDependent
switch for temperature dependence of concrete maturity (default option is off)
double beta_H
drying creep coefficient
void zero()
Zeroes all coefficients of receiver.
void add(const FloatArray &src)
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Element * giveElement()
Returns corresponding element to receiver.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
bool isActivated(TimeStep *tStep) const override
Extended meaning: returns true if the material is cast (target time > casting time) or the precasing ...
int nUnits
Number of (Maxwell or Kelvin) units in the rheologic chain.
double relMatAge
Physical age of the material at castingTime.
double endOfTimeOfInterest
Time (age???) up to which the model should give a good approximation.
double begOfTimeOfInterest
Time from which the model should give a good approximation. Optional field. Default value is 0....
FloatArray charTimes
Characteristic times of individual units (relaxation or retardation times).
virtual void computeResultingIPTemperatureAt(FloatArray &answer, TimeStep *tStep, GaussPoint *gp, ValueModeType mode)
double giveTimeIncrement()
Returns solution step associated time increment.
double giveTargetTime()
Returns target time.
TimeStep * givePreviousStep()
Returns pointer to previous solution step.
#define OOFEM_WARNING(...)
#define _IFT_Eurocode2CreepMaterial_shType
#define _IFT_Eurocode2CreepMaterial_fcm28
#define _IFT_Eurocode2CreepMaterial_t0
#define _IFT_Eurocode2CreepMaterial_spectrum
#define _IFT_Eurocode2CreepMaterial_h0
#define _IFT_Eurocode2CreepMaterial_henv
#define _IFT_Eurocode2CreepMaterial_stiffnessFactor
#define _IFT_Eurocode2CreepMaterial_cemType
#define _IFT_Eurocode2CreepMaterial_temperatureDependent
FloatArrayF< N > min(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
FloatArrayF< N > max(const FloatArrayF< N > &a, const FloatArrayF< N > &b)
double sum(const FloatArray &x)
@ CIO_IOERR
General IO error.