57#ifdef keep_track_of_strains
85#ifdef keep_track_of_strains
120#ifdef keep_track_of_strains
189 double fc, c, wc, ac;
217 p = p_tilde / ( p_tilde - 1. );
272 if ( this->
p < 100. ) {
319 if ( ( this->
khc > 1. ) || ( this->
khc < 0. ) ) {
380 eps_cas0 = -alpha_as *pow( ( fc / 10. ) / ( 6. + fc / 10. ), 2.5) * 1e-6;
391 double b4_r_alpha = 0., b4_eps_au_cem = 0., b4_tau_au_cem = 0., b4_r_ea, b4_r_ew, b4_r_tw;
396 if ( b4_cem_type == 0 ) {
401 b4_eps_au_cem = 210.e-6;
404 }
else if ( b4_cem_type == 1 ) {
409 b4_eps_au_cem = -84.e-6;
412 }
else if ( b4_cem_type == 2 ) {
417 b4_eps_au_cem = 0.e-6;
430 b4_eps_au_infty = -b4_eps_au_cem *pow(ac / 6., b4_r_ea) * pow(wc / 0.38, b4_r_ew);
437 b4_tau_au = b4_tau_au_cem * pow(wc / 0.38, b4_r_tw);
454 "autogenous shrinkage cannot be described according to fib and B4 simultaneously");
485 ValueModeType mode)
const
487 if ( ( mode != VM_Total ) && ( mode != VM_Incremental ) ) {
491#ifndef keep_track_of_strains
492 if ( mode == VM_Total ) {
493 OOFEM_ERROR(
"for total formulation of shrinkage strains need to define keep_track_of_strains");
502 double dryShrIncr = 0.;
503 double autoShrIncr = 0.;
514#ifdef keep_track_of_strains
517 dryShrIncr = dry_shr.
at(1);
531#ifdef keep_track_of_strains
533 autoShrIncr = eps_as.
at(1);
539 if ( mode == VM_Incremental ) {
551 if ( ( mMode == _3dShell ) || ( mMode == _3dBeam ) || ( mMode == _2dPlate ) || ( mMode == _2dBeam ) ) {
560 if ( ( mMode == _2dLattice ) || ( mMode == _3dLattice ) ) {
572std::unique_ptr<MaterialStatus>
578 return std::make_unique<MPSMaterialStatus>(gp,
nUnits);
608 q3 = 0.29 * pow(wc, 4.) *
q2;
612 sprintf(buff,
"q1=%lf q2=%lf q3=%lf q4=%lf",
q1,
q2,
q3,
q4);
631 double Qf = 1. / ( 0.086 * pow(t_prime / this->
lambda0, 2. / 9.) + 1.21 * pow(t_prime / this->
lambda0, 4. / 9.) );
632 double Z = pow(t_prime / this->
lambda0, -m) * log( 1. + pow(t / this->
lambda0 - t_prime / this->
lambda0, n) );
633 double r = 1.7 * pow(t_prime / this->
lambda0, 0.12) + 8.0;
634 double Q = Qf * pow( ( 1. + pow( ( Qf / Z ), r) ), -1. / r);
636 double C0 =
q2 * Q +
q3 * log( 1. + pow(t / this->
lambda0 - t_prime / this->
lambda0, n) ) +
q4 * log(t / t_prime);
682 for (
int mu = 1; mu <= this->
nUnits; mu++ ) {
683 charTimes.at(mu) = Tau1 * pow(10., mu - 1);
695 double lambda0ToPowN = pow(
lambda0, 0.1);
696 double tau0 = pow(2 * this->
giveCharTime(1) / sqrt(10.0), 0.1);
697 EspringVal = 1. / (
q2 * log(1.0 + tau0 / lambda0ToPowN) -
q2 * tau0 / ( 10.0 * lambda0ToPowN + 10.0 * tau0 ) );
702 for (
int mu = 1; mu <= this->
nUnits; mu++ ) {
704 answer.
at(mu) = 10. * pow(1 + tauMu / lambda0ToPowN, 2) / ( log(10.0) *
q2 * ( tauMu / lambda0ToPowN ) * ( 0.9 + tauMu / lambda0ToPowN ) );
730 double dEtaR, etaR, L;
743 OOFEM_ERROR(
"Attempting to evaluate stiffness at negative age: %f. Refine time steps or change material definition!\n", atAge);
752 #pragma omp critical (MPS_Emodulus)
756 if (
EparVal.giveSize() == 0 ) {
771 Cf = 0.5 * ( dt ) / eta;
784 dEtaR = eta / this->
computePsiR(gp, tStep, 1) - etaR;
785 if ( fabs(dEtaR) > 1.e-4 * etaR ) {
786 L = log(1 + dEtaR / etaR);
787 Cf = dt * ( 1. - etaR * L / dEtaR ) / dEtaR;
789 Cf = dt * ( 0.5 - dEtaR / ( 3 * etaR ) ) / etaR;
810 if ( Emodulus < 0. ) {
811 OOFEM_ERROR(
"Incremental modulus is negative %f", Emodulus);
825 double alpha =
q3 /
q2;
829 atAge = this->
relMatAge - this->
castingTime + ( tStep->giveTargetTime() - 0.5 * tStep->giveTimeIncrement() );
834 return 1. / ( alpha + pow(
lambda0 / atAge, m) );
849 if ( deltaT / tauMu > 30 ) {
852 return exp(-( deltaT ) / tauMu);
867 if ( deltaT / tauMu < 1.e-5 ) {
868 return 1 - 0.5 * ( deltaT / tauMu ) + 1 / 6 * ( pow(deltaT / tauMu, 2) ) - 1 / 24 * ( pow(deltaT / tauMu, 3) );
869 }
else if ( deltaT / tauMu > 30 ) {
870 return tauMu / deltaT;
872 return ( 1.0 - exp(-( deltaT ) / tauMu) ) * tauMu / deltaT;
879 double eta = 0., tHalfStep;
881 double prevEta, PsiS, e, dt;
882 double A = 0., B = 0.;
883 double T_new = 0., T_old = 0., H_new = 0., H_old = 0.;
898 eta = tHalfStep /
q4;
955 A = sqrt(
muS * fabs( ( T_new + T_old ) * kh * ( H_new - H_old ) / ( H_new + H_old ) + log( ( H_new + H_old ) / 2.) * ( T_new - T_old ) ) / ( dt * this->
roomTemperature ) );
957 A = sqrt(
muS * fabs( ( T_new + T_old ) * kh * ( H_new - H_old ) / ( H_new + H_old ) - kT * ( T_new - T_old ) ) / ( dt * this->
roomTemperature ) );
959 B = sqrt(PsiS / this->
q4);
962 A = sqrt(
muS * ( kh * fabs( log(H_new) - log(H_old) ) ) / dt);
963 B = sqrt(PsiS / this->
q4);
966 B = sqrt(PsiS / this->
q4);
971 if ( ( A * B * dt ) > 1.e-6 ) {
972 e = exp(-2 * A * B * dt);
973 eta = ( B / A ) * ( B * ( 1. - e ) + A * prevEta * ( 1. + e ) ) / ( B * ( 1. + e ) + A * prevEta * ( 1. - e ) );
975 eta = ( prevEta + B * B * dt ) / ( 1. + A * A * prevEta * dt );
977 }
else if ( (
p < 100 ) && (
p > 2 ) ) {
978 double iterTol = 1.e-12;
980 double deltaDeltaEta;
986 A = pow(
muS, 1. / (
p - 1. ) ) * fabs( ( T_new + T_old ) * kh * ( H_new - H_old ) / ( H_new + H_old ) + log( ( H_new + H_old ) / 2.) * ( T_new - T_old ) ) / ( dt * this->
roomTemperature );
988 A = pow(
muS, 1. / (
p - 1. ) ) * fabs( ( T_new + T_old ) * kh * ( H_new - H_old ) / ( H_new + H_old ) - kT * ( T_new - T_old ) ) / ( dt * this->
roomTemperature );
992 A = pow(
muS, 1. / (
p - 1. ) ) * ( kh * fabs( log(H_new) - log(H_old) ) ) / dt;
995 A = pow(
muS, 1. / (
p - 1. ) ) * fabs( kT * ( T_new - T_old ) ) / ( dt * this->
roomTemperature );
1004 double relError = 1.;
1006 while ( relError > iterTol ) {
1007 f = deltaEta / dt + A * pow( prevEta + 0.5 * deltaEta,
p / (
p - 1. ) ) - B;
1008 df = 1 / dt + A *
p * pow( prevEta + 0.5 * deltaEta, 1. / (
p - 1. ) ) / ( 2. * (
p - 1. ) );
1010 deltaDeltaEta = -f / df;
1011 deltaEta += deltaDeltaEta;
1014 OOFEM_ERROR(
"iterative Newton method not converging");
1017 relError = fabs(deltaDeltaEta / deltaEta);
1020 eta = prevEta + deltaEta;
1021 }
else if (
p < 0. ) {
1023 double iterTol = 1.e-6;
1025 double deltaDeltaEta;
1032 A = ( fabs(log( ( H_new + H_old ) / 2.) ) * fabs(T_new - T_old) + 0.5 * ( T_new + T_old ) * kh * fabs( log(H_new) - log(H_old) ) ) * pow(
muS, 1. / (
p - 1. ) ) / ( dt * this->
roomTemperature );
1034 A = pow(
muS, 1. / (
p - 1. ) ) * fabs( T_new * log(H_new) - T_old * log(H_old) ) / ( dt * this->
roomTemperature );
1037 A = ( kT * fabs(T_new - T_old) + 0.5 * ( T_new + T_old ) * kh * fabs( log(H_new) - log(H_old) ) ) * pow(
muS, 1. / (
p - 1. ) ) / ( dt * this->
roomTemperature );
1040 B = PsiS / this->
q4;
1042 A = ( kh * fabs( log(H_new) - log(H_old) ) ) * pow(
muS, 1. / (
p - 1. ) ) / dt;
1043 B = PsiS / this->
q4;
1045 A = kT * fabs(T_new - T_old) * pow(
muS, 1. / (
p - 1. ) ) / ( dt * this->
roomTemperature );
1046 B = PsiS / this->
q4;
1054 double relError = 1.;
1055 double minEta = 1.e-6;
1057 while ( relError > iterTol ) {
1058 f = deltaEta / dt + A * pow( prevEta + deltaEta,
p / (
p - 1. ) ) - B;
1059 df = 1 / dt + A * pow( prevEta + deltaEta, 1. / (
p - 1. ) ) *
p / (
p - 1. );
1061 deltaDeltaEta = -f / df;
1062 deltaEta += deltaDeltaEta;
1064 if ( ( prevEta + deltaEta ) < 0 ) {
1065 deltaEta = minEta - prevEta;
1069 OOFEM_ERROR(
"iterative Newton method not converging");
1073 relError = fabs(deltaDeltaEta / deltaEta);
1076 eta = prevEta + deltaEta;
1084 A =
k3 * ( fabs(log( ( H_new + H_old ) / 2.) ) * fabs(T_new - T_old) + 0.5 * ( T_new + T_old ) * kh * fabs( log(H_new) - log(H_old) ) ) / ( dt * this->
roomTemperature );
1086 A =
k3 * fabs( T_new * log(H_new) - T_old * log(H_old) ) / ( dt * this->
roomTemperature );
1089 A =
k3 * ( kT * fabs(T_new - T_old) + 0.5 * ( T_new + T_old ) * kh * fabs( log(H_new) - log(H_old) ) ) / ( dt * this->
roomTemperature );
1092 B = PsiS / this->
q4;
1096 A =
k3 * ( kh * fabs( log(H_new) - log(H_old) ) ) / dt;
1097 B = PsiS / this->
q4;
1100 B = PsiS / this->
q4;
1107 eta = prevEta + B * dt;
1109 if ( ( A * dt ) > 30. ) {
1112 eta = ( prevEta - B / A ) * exp(-A * dt) + B / A;
1125 OOFEM_ERROR(
"trying to return negative viscosity %f", eta);
1155 FloatArray KelvinEigenStrain, reducedAnswer, sigma;
1159 double dEtaR, etaR, L;
1163 if ( mode == VM_Incremental ) {
1171 dt = tStep->giveTimeIncrement();
1175 reducedAnswer.
times(dt / eta);
1186 dEtaR = eta / this->
computePsiR(gp, tStep, 1) - etaR;
1188 if ( fabs(dEtaR) > 1.e-4 * etaR ) {
1189 L = log(1 + dEtaR / etaR);
1190 reducedAnswer.
times(dt * L / dEtaR);
1192 reducedAnswer.
times(dt * ( 1 - 0.5 * dEtaR / etaR + dEtaR * dEtaR / ( 3 * etaR * etaR ) ) / etaR);
1210 reducedAnswer.
add(KelvinEigenStrain);
1212 answer = reducedAnswer;
1214#ifdef keep_track_of_strains
1218#ifndef keep_track_of_strains
1219 OOFEM_ERROR(
"for total formulation of shrinkage strains need to define keep_track_of_strains");
1223 answer.add(reducedAnswer);
1240 if ( ( mMode == _3dShell ) || ( mMode == _3dBeam ) || ( mMode == _2dPlate ) || ( mMode == _2dBeam ) ) {
1246 double kShFactor = 1.;
1247 if ( this->
sh_a != 1. ) {
1249 kShFactor =
sh_a + ( 1. -
sh_a ) / ( 1. + pow( ( 1. - h ) / ( 1. -
sh_hC ),
sh_n) );
1253 if (
ksh_h.giveSize() >= 2 ) {
1255 double tol = 1.e-10;
1256 for (
int i = 2; i <=
ksh_h.giveSize(); i++ ) {
1257 if ( ( h -
ksh_h.at(i) ) < tol ) {
1271 double EpsSh = humDiff *
kSh * kShFactor;
1275 if ( ( mMode == _2dLattice ) || ( mMode == _3dLattice ) ) {
1276 fullAnswer.
at(1) = EpsSh;
1278 fullAnswer.
at(1) = fullAnswer.
at(2) = fullAnswer.
at(3) = EpsSh;
1297 if ( ( mMode == _3dShell ) || ( mMode == _3dBeam ) || ( mMode == _2dPlate ) || ( mMode == _2dBeam ) ) {
1303 double t_equiv_beg, t_equiv_end;
1319 double eps_cas =
eps_cas0 * ( -exp( -0.2 * sqrt(t_equiv_end) ) + exp( -0.2 * sqrt(t_equiv_beg) ) );
1323 if ( ( mMode == _2dLattice ) || ( mMode == _3dLattice ) ) {
1324 fullAnswer.at(1) = eps_cas;
1326 fullAnswer.at(1) = fullAnswer.at(2) = fullAnswer.at(3) = eps_cas;
1345 if ( ( mMode == _3dShell ) || ( mMode == _3dBeam ) || ( mMode == _2dPlate ) || ( mMode == _2dBeam ) ) {
1352 double t_equiv_beg, t_equiv_end;
1366 if ( ( mMode == _2dLattice ) || ( mMode == _3dLattice ) ) {
1367 fullAnswer.at(1) = eps_au;
1369 fullAnswer.at(1) = fullAnswer.at(2) = fullAnswer.at(3) = eps_au;
1381 if ( ( mMode == _3dShell ) || ( mMode == _3dBeam ) || ( mMode == _2dPlate ) || ( mMode == _2dBeam ) ) {
1388 double t_equiv_beg, t_equiv_end;
1403 if ( ( mMode == _2dLattice ) || ( mMode == _3dLattice ) ) {
1404 fullAnswer.
at(1) = eps_au;
1406 fullAnswer.
at(1) = fullAnswer.
at(2) = fullAnswer.
at(3) = eps_au;
1415MPSMaterial::inverse_sorption_isotherm
const
1425 double phi = exp( a * ( 1.0 - pow( ( w_h / w ), ( n ) ) ) );
1440 double H_tot = 0.0, H_inc = 0.0;
1453 if ( ( tf = fm->
giveField(FT_HumidityConcentration) ) ) {
1455 if ( ( err = tf->evaluateAt(et2, gcoords, VM_Total, tStep) ) ) {
1456 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
1459 if ( ( err = tf->evaluateAt(ei2, gcoords, VM_Incremental, tStep) ) ) {
1460 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
1485 case 0:
return H_tot - H_inc;
1487 case 1:
return H_tot;
1489 case 2:
return H_tot - 0.5 * H_inc;
1491 case 3:
return H_inc;
1493 default:
OOFEM_ERROR(
"option %d not supported", option);
1504 double h_nano_beg, h_nano_end;
1517 double beta, lambda;
1519 if ( deltaT / this->
tau_nano > 30 ) {
1522 beta = exp(-( deltaT ) / this->
tau_nano);
1525 if ( deltaT / this->
tau_nano < 1.e-5 ) {
1526 lambda = 1. - 0.5 * ( deltaT / this->
tau_nano ) + 1. / 6. * ( pow(deltaT / this->
tau_nano, 2) ) - 1. / 24. * ( pow(deltaT / this->
tau_nano, 3) );
1527 }
else if ( deltaT / this->
tau_nano > 30. ) {
1530 lambda = ( 1.0 - beta ) * this->
tau_nano / deltaT;
1533 h_nano_end = h_nano_beg + ( 1. - lambda ) * ( h_end - h_beg ) + ( 1. - beta ) * ( h_beg - h_nano_beg );
1538 case 0:
return h_nano_beg;
1540 case 1:
return h_nano_end;
1542 case 2:
return 0.5 * ( h_nano_beg + h_nano_end );
1544 case 3:
return ( h_nano_end - h_nano_beg );
1546 default:
OOFEM_ERROR(
"option %d not supported", option);
1555 double T_tot = 0.0, T_inc = 0.0;
1567 if ( ( tf = fm->
giveField(FT_Temperature) ) ) {
1569 if ( ( err = tf->evaluateAt(et1, gcoords, VM_Total, tStep) ) ) {
1570 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
1573 if ( ( err = tf->evaluateAt(ei1, gcoords, VM_Incremental, tStep) ) ) {
1574 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
1588 status->
setT(T_tot);
1591 T_tot = status->
giveT();
1597 case 0:
return T_tot - T_inc;
1599 case 1:
return T_tot;
1601 case 2:
return T_tot - 0.5 * T_inc;
1603 case 3:
return T_inc;
1605 default:
OOFEM_ERROR(
"option %d not supported", option);
1636 return betaRH * betaRT;
1646 double AverageHum = 0.;
1652 double betaSH =
alphaS + ( 1. -
alphaS ) * AverageHum * AverageHum;
1659 double AverageHum = 0.;
1667 double betaSH =
alphaS + ( 1. -
alphaS ) * AverageHum * AverageHum;
1669 return betaSH * betaST;
1679 double hydrationTimescale = 1.;
1686 double betaEH = 1. / ( 1. + pow( (
alphaE * ( 1. - AverageHum ) ), 4.) );
1687 return hydrationTimescale * betaEH;
1691 return hydrationTimescale * betaET;
1695 double betaEH = 1. / ( 1. + pow( (
alphaE * ( 1. - AverageHum ) ), 4.) );
1697 return hydrationTimescale * betaEH * betaET;
1716 if ( option == 0 ) {
1718 }
else if ( option == 1 ) {
1727 if ( option == 0 ) {
1729 }
else if ( option == 1 ) {
1744 if ( type == IST_DryingShrinkageTensor ) {
1749 }
else if ( type == IST_AutogenousShrinkageTensor ) {
1754 }
else if ( type == IST_TotalShrinkageTensor ) {
1759 }
else if ( type == IST_CreepStrainTensor ) {
1762 }
else if ( type == IST_IncrementCreepModulus ) {
1768 }
else if ( type == IST_EquivalentTime ) {
#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.
virtual int computeGlobalCoordinates(FloatArray &answer, const FloatArray &lcoords)
Domain * domain
Link to domain object, useful for communicating with other FEM components.
int number
Component number.
FieldPtr giveField(FieldType key)
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void beProductOf(const FloatMatrix &aMatrix, const FloatArray &anArray)
void add(const FloatArray &src)
const FloatArray & giveNaturalCoordinates() const
Returns coordinate array of receiver.
MaterialMode giveMaterialMode()
Returns corresponding material mode of receiver.
Element * giveElement()
Returns corresponding element to receiver.
GaussPoint * gp
Associated integration point.
void restoreContext(DataStream &stream, ContextMode mode) override
void initTempStatus() override
void saveContext(DataStream &stream, ContextMode mode) override
KelvinChainSolidMaterialStatus(GaussPoint *g, int nunits)
void updateYourself(TimeStep *tStep) override
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
void giveEigenStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const override
void initializeFrom(InputRecord &ir) override
double giveEModulus(GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the incremental modulus.
void setHum(double src)
Stores relative humidity.
void setFlowTermViscosityTemp(double src)
double tempDryingShrinkageStrain
void storeEmodulus(double src)
Returns Emodulus if computed previously in the same tStep.
MPSMaterialStatus(GaussPoint *g, int nunits)
double giveTIncrement()
Returns temperature increment.
void setEmodulusFlag(bool src)
void updateYourself(TimeStep *tStep) override
double giveHumIncrement()
Returns relative humidity increment.
void setTmax(double src)
Stores maximum reached temperature.
FloatArray creepStrainIncrement
void saveContext(DataStream &stream, ContextMode mode) override
double dryingShrinkageStrain
const FloatArray & giveCreepStrain() const
bool giveStoredEmodulusFlag(void)
double humNano
value of relative humidity in the nanopores
double giveStoredEmodulus(void)
Returns Emodulus if computed previously in the same tStep.
void setTempDryingShrinkageStrain(double src)
double giveDryingShrinkageStrain(void)
double giveHumNano()
Returns relative humidity (nanopores).
double giveHumMin()
Returns previously minimum previously reached humidity - treatment of cyclic ambient coditions.
void setEquivalentTimeTemp(double src)
Stores equivalent time.
void restoreContext(DataStream &stream, ContextMode mode) override
double giveEquivalentTime()
Returns equivalent time.
double giveFlowTermViscosityTemp()
void initTempStatus() override
bool storedEmodulusFlag
flag for Emodulus - true if modulus has been already computed in the current time step
double giveTmax()
Returns previously maximum reached temperature.
double giveFlowTermViscosity()
Returns viscosity of the flow term (associated with q4 and microprestress evolution).
double autogenousShrinkageStrain
double giveAutogenousShrinkageStrain(void)
double giveT()
Returns temperature.
void setTempAutogenousShrinkageStrain(double src)
void setHumNanoTemp(double src)
Stores relative humidity (nanopores).
double equivalentTimeTemp
double flowTermViscosityTemp
void setHumIncrement(double src)
Stores relative humidity increment.
double hum
Values of humidity and temperature in a particular GP, their increment, and maximum/minimum to treat ...
double equivalentTime
Hidden variable - equivalent time: necessary to compute solidified volume.
double tempAutogenousShrinkageStrain
void setHumMin(double src)
Stores minimum reached humidity.
void setTIncrement(double src)
Stores temperature increment.
void setT(double src)
Stores temperature.
double giveHum()
Returns relative humidity.
void setCreepStrainIncrement(FloatArray src)
double roomTemperature
parameter reducing creep effects of thermal cycling
double computeCreepFunction(double t, double t_prime, GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the basic creep compliance function - can be used to compute elastic modulus in derived...
void giveRealStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &reducedStrain, TimeStep *tStep) const override
double temperScaleDifference
0 for Kelvin, 273.15 for Celsius
double kTm
kTm replaces ln(h) on RHS of the differential equation describing evolution of MPS
void computeAutogenousShrinkageDefinedByTF(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of the autogenousShrinkageStrainVector given by an auxiliary time function (autoShrinkageT...
double computeEquivalentTime(GaussPoint *gp, TimeStep *tStep, int option) const
double khc
parameter reducing creep effects of hygral cycling (0 = complete reduction, 1 = no reduction,...
void giveEigenStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const override
double computeBetaMu(GaussPoint *gp, TimeStep *tStep, int Mu) const override
factors for exponential algorithm
double giveHumidityNano(GaussPoint *gp, TimeStep *tStep, int option) const
double computeFlowTermViscosity(GaussPoint *gp, TimeStep *tStep) const
Evaluation of the flow term viscosity.
double giveHumidity(GaussPoint *gp, TimeStep *tStep, int option) const
double computeLambdaMu(GaussPoint *gp, TimeStep *tStep, int Mu) const override
FloatArray computeCharCoefficients(double tPrime, GaussPoint *gp, TimeStep *tStep) const override
Evaluation of characteristic moduli of the non-aging Kelvin chain.
double eps_cas0
parameter for autogenous shrinkage according to fib MC 2010
void predictParametersFrom(double, double, double, double)
double computePsiS(GaussPoint *gp, TimeStep *tStep) const
Evaluation of the factor transforming real time to reduced time (effect on the evolution of micropres...
void initializeFrom(InputRecord &ir) override
double computeSolidifiedVolume(GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the relative volume of the solidified material.
double kTc
parameter reducing creep effects of thermal cycling (replaces kTm in such case)
double giveEModulus(GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the incremental modulus.
void computeB4AutogenousShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of the autogenousShrinkageStrainVector according to Bazant's B4 model. In the model the ev...
void computeCharTimes() override
Evaluation of characteristic times.
double kSh
additional parameters for sorption isotherm (used to compute relative humidity from water content)
double stiffnessFactor
scaling factor 1. for Pa, 1.e6 for MPa - only for empirical formulas - q1-q4 and ft and gf
double alphaE
parameters that control the effect of humidity on rates of hydration, creep and microprestress relaxa...
double giveInitViscosity(TimeStep *tStep) const
Returns initial value of the flow term viscosity.
std::unique_ptr< MaterialStatus > CreateStatus(GaussPoint *gp) const override
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
double giveEquivalentTime(GaussPoint *gp, TimeStep *tStep) const override
By default returns equivalent time in the middle of the time step.
double computePsiE(GaussPoint *gp, TimeStep *tStep) const
Evaluation of the factor transforming real time to equivalent time (effect on the solidified volume).
void computeFibAutogenousShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of the autogenousShrinkageStrainVector according to fib MC 2010 - autogenous shrinkage is ...
double lambda0
constant equal to one day in time units of analysis (eg. 86400 if the analysis runs in seconds)
double t0
age when temperature or humidity starts to change
double computePsiR(GaussPoint *gp, TimeStep *tStep, int option) const
double giveTemperature(GaussPoint *gp, TimeStep *tStep, int option) const
void giveShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const override
FloatArray ksh_h
nonlinear shrinkage function - user-defined piecewise-linear function
double sh_a
parameters for nonlinear shrinkage function
void computePointShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of the shrinkageStrainVector - shrinkage is fully dependent on humidity rate in given GP.
enum oofem::MPSMaterial::coupledAnalysisType CoupledAnalysis
double q1
compliances of the B3 model
double muS
fluidity parameter used in viscosity evolution equation
bool timeDependent_ksh
flag activating equivalent-time-dependence of shrinkage coefficient
double p
exponent in the microprestress/viscosity governing equation
double QEtoR
activation energies
double b4_eps_au_infty
parameters for autogenous shrinkage according to B4 model
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
virtual bool isActivated(TimeStep *tStep) const
virtual const FloatArray & giveViscoelasticStressVector() const
double giveEndOfTimeOfInterest()
Access to the time up to which the response should be accurate.
int nUnits
Number of (Maxwell or Kelvin) units in the rheologic chain.
double relMatAge
Physical age of the material at castingTime.
double giveCharTime(int) const
Access to the characteristic time of a given unit.
double endOfTimeOfInterest
Time (age???) up to which the model should give a good approximation.
FloatArray EparVal
Partial moduli of individual units.
void giveUnitComplianceMatrix(FloatMatrix &answer, GaussPoint *gp, TimeStep *tStep) const
Evaluation of elastic compliance matrix for unit Young's modulus.
double begOfTimeOfInterest
Time from which the model should give a good approximation. Optional field. Default value is 0....
virtual void updateEparModuli(double tPrime, GaussPoint *gp, TimeStep *tStep) const
Update of partial moduli of individual chain units.
int giveIPValue(FloatArray &answer, GaussPoint *gp, InternalStateType type, TimeStep *tStep) override
FloatArray charTimes
Characteristic times of individual units (relaxation or retardation times).
static void giveReducedSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the full unsymmetric Voigt vector (2nd order tensor) to reduced form.
static int giveSizeOfVoigtSymVector(MaterialMode mmode)
static void giveFullSymVectorForm(FloatArray &answer, const FloatArray &vec, MaterialMode matMode)
Converts the reduced unsymmetric Voigt vector (2nd order tensor) to full form.
double giveTimeIncrement()
Returns solution step associated time increment.
double giveTargetTime()
Returns target time.
TimeStep * givePreviousStep()
Returns pointer to previous solution step.
double giveIntrinsicTime()
Returns intrinsic time, e.g. time in which constitutive model is evaluated.
#define OOFEM_LOG_DEBUG(...)
#define _IFT_MPSMaterial_temperInCelsius
#define _IFT_MPSMaterial_autoShrinkageTF
#define _IFT_MPSMaterial_q2
#define _IFT_MPSMaterial_cc
#define _IFT_MPSMaterial_q1
#define _IFT_MPSMaterial_sh_n
#define _IFT_MPSMaterial_wcr
#define _IFT_MPSMaterial_sh_hC
#define _IFT_MPSMaterial_q4
#define _IFT_MPSMaterial_ktm
#define _IFT_MPSMaterial_p
#define _IFT_MPSMaterial_stiffnessfactor
#define _IFT_MPSMaterial_B4_tau_au
#define _IFT_MPSMaterial_mode
#define _IFT_MPSMaterial_p_tilde
#define _IFT_MPSMaterial_acr
#define _IFT_MPSMaterial_khc
#define _IFT_MPSMaterial_alphae
#define _IFT_MPSMaterial_alphas
#define _IFT_MPSMaterial_timedependent_ksh
#define _IFT_MPSMaterial_factor_ksh_fh
#define _IFT_MPSMaterial_alphar
#define _IFT_MPSMaterial_qetor
#define _IFT_MPSMaterial_wc
#define _IFT_MPSMaterial_sh_a
#define _IFT_MPSMaterial_mus
#define _IFT_MPSMaterial_B4_r_t
#define _IFT_MPSMaterial_fc
#define _IFT_MPSMaterial_coupledanalysistype
#define _IFT_MPSMaterial_eps_cas0
#define _IFT_MPSMaterial_B4_alpha
#define _IFT_MPSMaterial_ksh
#define _IFT_MPSMaterial_alpha_as
#define _IFT_MPSMaterial_k3
#define _IFT_MPSMaterial_B4_cem_type
#define _IFT_MPSMaterial_ktc
#define _IFT_MPSMaterial_lambda0
#define _IFT_MPSMaterial_factor_ksh_h
#define _IFT_MPSMaterial_q3
#define _IFT_MPSMaterial_B4_eps_au_infty
#define _IFT_MPSMaterial_tau_nano
#define _IFT_MPSMaterial_qrtor
#define _IFT_MPSMaterial_ac
#define _IFT_MPSMaterial_hydrationTimescaleTF
#define _IFT_MPSMaterial_qstor
double sum(const FloatArray &x)
std::shared_ptr< Field > FieldPtr
@ CIO_IOERR
General IO error.
#define _IFT_RheoChainMaterial_timefactor