48 MaxwellChainMaterial :: initializeFrom(ir);
57 double fc = 0.0, c = 0.0, wc = 0.0, ac = 0.0, alpha1 = 0.0, alpha2 = 0.0;
114 E28 = 4734. * sqrt(fc);
121B3Material :: predictParametersFrom(
double fc,
double c,
double wc,
double ac,
122 double t0,
double alpha1,
double alpha2)
158 q1 = 127 * pow(fc, -0.5);
159 q2 = 185.4 * pow(c, 0.5) * pow(fc, -0.9);
160 q3 = 0.29 * pow(wc, 4.) *
q2;
161 q4 = 20.3 * pow(ac, -0.7);
168 kt = 85000 * pow(
t0, -0.08) * pow(fc, -0.25);
169 EpsSinf = alpha1 * alpha2 * ( 1.9e-2 * pow(
w, 2.1) * pow(fc, -0.28) + 270. );
173 q5 = 7.57e5 * ( 1. / fc ) * pow(
EpsSinf, -0.6);
175 OOFEM_LOG_DEBUG(
"B3mat[%d]: estimated params: q1 %lf q2 %lf q3 %lf q4 %lf q5 %lf kt %lf EpsSinf %lf\n",
178 OOFEM_LOG_DEBUG(
"B3mat[%d]: estimated params: q1 %lf q2 %lf q3 %lf q4 %lf\n",
196 double Qf = 1. / ( 0.086 * pow(t_prime, 2. / 9.) + 1.21 * pow(t_prime, 4. / 9.) );
197 double Z = pow(t_prime, -m) * log( 1. + pow(t - t_prime,
n) );
198 double r = 1.7 * pow(t_prime, 0.12) + 8.0;
199 double Q = Qf * pow( ( 1. + pow( ( Qf / Z ),
r ) ), -1. /
r );
201 double C0 =
q2 * Q +
q3 *log( 1. + pow ( t - t_prime,
n ) ) +
q4 *log(t / t_prime);
207 double TauSh =
kt * pow(
ks * 2.0 *
vs, 2.);
209 if ( ( t -
t0 ) >= 0 ) {
210 St1 = tanh( pow( ( t -
t0 ) / TauSh, 1. / 2. ) );
216 if ( ( t_prime -
t0 ) >= 0 ) {
217 St2 = tanh( pow( ( t_prime -
t0 ) / TauSh, 1. / 2. ) );
222 double H1 = 1. - ( 1. -
hum ) * St1;
223 double H2 = 1. - ( 1. -
hum ) * St2;
224 Cd =
q5 * pow( ( exp(-8.0 * H1) - exp(-8.0 * H2) ), 0.5 );
229 return 1.e-6 * (
q1 + C0 + Cd );
238 ValueModeType mode)
const
246 if ( ( mode != VM_Total ) && ( mode != VM_Incremental ) ) {
253 if ( ( mode == VM_Incremental ) && ( !tStep->
isTheFirstStep() ) ) {
273 if ( ( mode == _3dShell ) || ( mode == _3dBeam ) || ( mode == _2dPlate ) || ( mode == _2dBeam ) ) {
282 double TauSh =
kt * pow(
ks * 2.0 *
vs, 2.);
286 St = tanh( pow( ( time -
t0 ) / TauSh, 1. / 2. ) );
294 kh = 1. - pow(
hum, 3);
295 }
else if (
hum == 1 ) {
299 double help = 1. - pow(
hum, 3);
300 kh = help + ( -0.2 - help ) / ( 1. - 0.98 ) * (
hum - 0.98 );
304 double E607 =
E28 * pow(607 / ( 4. + 0.85 * 607 ), 0.5);
305 double Et0Tau =
E28 * pow( (
t0 + TauSh ) / ( 4. + 0.85 * (
t0 + TauSh ) ), 0.5 );
306 double EpsShInf =
EpsSinf * E607 / Et0Tau;
308 double EpsSh = -EpsShInf * kh * St;
310 fullAnswer.
at(1) = fullAnswer.
at(2) = fullAnswer.
at(3) = EpsSh * 1.e-6;
312 StructuralMaterial :: giveReducedSymVectorForm( answer, fullAnswer, gp->
giveMaterialMode() );
323 double wrate = 0.0, trate = 0.0;
325 int tflag = 0, wflag = 0;
330 if ( ( mmode == _3dShell ) || ( mmode == _3dBeam ) || ( mmode == _2dPlate ) || ( mmode == _2dBeam ) ) {
341 FloatArray gcoords, et2, ei2, stressVector, fullStressVector;
343 if ( ( tf = fm->
giveField(FT_Temperature) ) ) {
347 if ( ( err = tf->evaluateAt(et2, gcoords, VM_Incremental, tStep) ) ) {
348 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
355 if ( ( tf = fm->
giveField(FT_HumidityConcentration) ) ) {
359 if ( ( err = tf->evaluateAt(et2, gcoords, VM_Total, tStep) ) ) {
360 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
363 if ( ( err = tf->evaluateAt(ei2, gcoords, VM_Incremental, tStep) ) ) {
364 OOFEM_ERROR(
"tf->evaluateAt failed, error value %d", err);
372 if ( ( tflag == 0 ) || ( wflag == 0 ) ) {
385 StructuralMaterial :: giveFullSymVectorForm( fullStressVector, stressVector, gp->
giveMaterialMode() );
388 for (
int i = 1; i <= 3; i++ ) {
389 sv += stressVector.
at(i);
395 double h1 =
es0 * ( et0 / et );
396 double sn =
sgn(wrate +
at * trate);
398 fullAnswer.
at(1) = h1 * ( 1.0 + sn * (
r * fullStressVector.
at(1) +
rprime * sv ) ) * ( wrate +
at * trate );
399 fullAnswer.
at(2) = h1 * ( 1.0 + sn * (
r * fullStressVector.
at(2) +
rprime * sv ) ) * ( wrate +
at * trate );
400 fullAnswer.
at(3) = h1 * ( 1.0 + sn * (
r * fullStressVector.
at(3) +
rprime * sv ) ) * ( wrate +
at * trate );
406 if ( mode == VM_Incremental ) {
407 StructuralMaterial :: giveReducedSymVectorForm( answer, fullAnswer, gp->
giveMaterialMode() );
418 StructuralMaterial :: giveFullSymVectorForm( fssv, ssv, gp->
giveMaterialMode() );
420 fullAnswer.
add(fssv);
422 StructuralMaterial :: giveReducedSymVectorForm( answer, fullAnswer, gp->
giveMaterialMode() );
428B3Material :: inverse_sorption_isotherm(
double w)
const
432 double phi = exp(
a * ( 1.0 - pow( (
w_h /
w ), (
n ) ) ) );
434 if ( ( phi < 0.2 ) || ( phi > 0.98 ) ) {
435 OOFEM_ERROR(
"Relative humidity h = %e (w=%e) is out of range", phi,
w);
#define _IFT_B3Material_vs
#define _IFT_B3Material_es0
#define _IFT_B3Material_EpsSinf
#define _IFT_B3Material_ncoeff
#define _IFT_B3Material_ac
#define _IFT_B3Material_alpha2
#define _IFT_B3Material_r
#define _IFT_B3Material_wc
#define _IFT_B3Material_q2
#define _IFT_B3Material_kt
#define _IFT_B3Material_q5
#define _IFT_B3Material_rprime
#define _IFT_B3Material_cc
#define _IFT_B3Material_q1
#define _IFT_B3Material_fc
#define _IFT_B3Material_q3
#define _IFT_B3Material_at
#define _IFT_B3Material_mode
#define _IFT_B3Material_q4
#define _IFT_B3Material_a
#define _IFT_B3Material_hum
#define _IFT_B3Material_wh
#define _IFT_B3Material_t0
#define _IFT_B3Material_shmode
#define _IFT_B3Material_alpha1
#define _IFT_B3Material_ks
#define REGISTER_Material(class)
virtual void computeShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep, ValueModeType mode) const
Free shrinkage at material point, requires staggered analysis.
double t0
Age when drying begins (in days).
double a
Constant (obtained from experiments) A [Pedersen, 1990].
void predictParametersFrom(double, double, double, double, double, double, double)
virtual void computeTotalAverageShrinkageStrainVector(FloatArray &answer, GaussPoint *gp, TimeStep *tStep) const
double inverse_sorption_isotherm(double w) const
double computeCreepFunction(double t, double t_prime, GaussPoint *gp, TimeStep *tStep) const override
Evaluation of the creep compliance function at time t when loading is acting from time t_prime.
double w_h
Constant water content (obtained from experiments) w_h [Pedersen, 1990].
enum oofem::B3Material::b3ShModeType shMode
double n
Constant-exponent (obtained from experiments) n [Pedersen, 1990].
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 add(const FloatArray &src)
void subtract(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.
virtual MaterialStatus * giveStatus(GaussPoint *gp) const
FloatArray * giveShrinkageStrainVector()
virtual const FloatArray & giveViscoelasticStressVector() const
double relMatAge
Physical age of the material at castingTime.
double giveTargetTime()
Returns target time.
TimeStep * givePreviousStep()
Returns pointer to previous solution step.
#define OOFEM_LOG_DEBUG(...)
double sgn(double i)
Returns the signum of given value (if value is < 0 returns -1, otherwise returns 1).
std::shared_ptr< Field > FieldPtr