00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <stdio.h>
00018 #include <stdlib.h>
00019 #include <math.h>
00020 #include "constrel.h"
00021 #include "concreteBc.h"
00022 #include "globalt.h"
00023
00024 concreteBmatc::concreteBmatc()
00025 {
00026 mw = 18.01528e-3;
00027 ma = 28.9645e-3;
00028 gasr = 8.31441;
00029
00030 t0 = 273.15;
00031 p0 = 101325.0;
00032 tcr = 647.3;
00033
00034
00035
00036 scr = 0.9;
00037 ag = 2.0;
00038
00039
00040
00041 sir = 0.2;
00042 aw = 2.0;
00043 bw = 6.0;
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068 tref = 298.15;
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095 av = 1.0;
00096 fs = 1.0;
00097
00098
00099 hydren = 0.5e+6;
00100
00101 finv = 0.65;
00102
00103 fste = 0.36;
00104 }
00105 concreteBmatc::~concreteBmatc()
00106 {}
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117 double concreteBmatc::concreteB_sw(double pc,double t)
00118
00119 {
00120 double sw,eds,gds,a,tt;
00121 double q0,q2,q3,e0,z;
00122
00123 z = 0.5;
00124 q3= 30.0e6;
00125
00126 if (t < 373.15)
00127 a = ads;
00128 else{
00129 tt=(t-373.15)/(647.15-373.15);
00130 q0=(q3-q2)*((2.*(tt*tt*tt))-(3.0*(tt*tt))+1.0);
00131 q2 = 25.0e6;
00132 a = q0 + q2;
00133 }
00134
00135 if (t < tcr)
00136 eds = pow(((tcr - t0)/(tcr - t)),nds);
00137 else{
00138 e0=pow(((tcr-293.15)/z),nds);
00139 eds = nds/z*e0*t + e0 - nds/z*e0*(tcr - z);
00140 }
00141
00142 gds = pow((eds/a*pc),(bds/(bds-1.0)));
00143 sw = pow((gds + 1.0),(-1.0/bds));
00144
00145 return(sw);
00146 }
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157 double concreteBmatc::concreteB_dsw_dpc(double pc,double t)
00158
00159 {
00160 double dsw_dpc,eds,a,dg_dpc,tt,gds;
00161 double q0,q2,q3,e0,z;
00162
00163 z = 0.5;
00164 q3= 30.0e6;
00165
00166 if (t < 373.15)
00167 a = ads;
00168 else{
00169 tt=(t-373.15)/(647.15-373.15);
00170 q0=(q3-q2)*((2.*(tt*tt*tt))-(3.0*(tt*tt))+1.0);
00171 q2 = 25.0e6;
00172 a = q0 + q2;
00173 }
00174
00175 if (t < tcr){
00176 eds = pow(((tcr - t0)/(tcr - t)),nds);
00177 }
00178 else{
00179 e0=pow(((tcr-293.15)/z),nds);
00180 eds = nds/z*e0*t + e0 - nds/z*e0*(tcr - z);
00181 }
00182 gds = pow((eds/a*pc),(bds/(bds-1.0)));
00183 dg_dpc = (bds/(bds-1.0))*eds/a*pow((eds/a*pc),(bds/(bds-1.0)-1.0));
00184 dsw_dpc = (-1.0/bds)*pow((gds + 1.0),(-1.0-1.0/bds))*dg_dpc;
00185
00186 return(dsw_dpc);
00187 }
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199 double concreteBmatc::concreteB_dsw_dt(double pc,double t)
00200
00201 {
00202 double dsw_dt,eds,de_dt,gds,a,da_dt,dea_dt,dg_dt,tt,dtt_dt;
00203 double q0,dq0_dt,q2,q3,e0,z;
00204
00205 z = 0.5;
00206 q3= 30.0e6;
00207
00208 if (t < 373.15){
00209 a = ads;
00210 da_dt = 0.0;
00211 }
00212 else{
00213 tt=(t-373.15)/(647.15-373.15);
00214 q0=(q3-q2)*((2.*(tt*tt*tt))-(3.0*(tt*tt))+1.0);
00215 dtt_dt = 1.0/(647.15-373.15);
00216 dq0_dt = (q3-q2)*(6.0*tt*tt*dtt_dt - 6.0*tt*dtt_dt + 1.0);
00217 q2 = 25.0e6;
00218 a = q0 + q2;
00219 da_dt = dq0_dt;
00220 }
00221
00222 if (t < tcr){
00223 eds = pow(((tcr - t0)/(tcr - t)),nds);
00224 de_dt = nds*pow(((tcr - t0)/(tcr - t)),(nds-1.0))*(tcr - t0)/(tcr - t)/(tcr - t);
00225 }
00226 else{
00227 e0=pow(((tcr-293.15)/z),nds);
00228 eds = nds/z*e0*t + e0 - nds/z*e0*(tcr - z);
00229 de_dt = nds/z*e0;
00230 }
00231
00232 gds = pow((eds/a*pc),(bds/(bds-1.0)));
00233 dea_dt = (de_dt*a - da_dt*eds)/a/a;
00234 dg_dt = (bds/(bds-1.0))*pc*pow((eds/a*pc),(bds/(bds-1.0)-1.0))*dea_dt;
00235 dsw_dt = (-1.0/bds)*pow((gds + 1.0),(-1.0-1.0/bds))*dg_dt;
00236
00237 return(dsw_dt);
00238 }
00239
00240
00241
00242
00243
00244
00245 double concreteBmatc::concreteB_ssp()
00246 {
00247 return(0.55);
00248 }
00249
00250
00251
00252
00253
00254
00255
00256
00257 double concreteBmatc::concreteB_krg(double s)
00258 {
00259 double krg;
00260
00261 krg = 1.0 - pow((s/scr),ag);
00262
00263 return(krg);
00264 }
00265
00266
00267
00268
00269
00270
00271
00272
00273 double concreteBmatc::concreteB_krw(double s,double rh)
00274 {
00275 double krw,help;
00276
00277 if (rh < 0.75)
00278 krw = pow(((s-sir)/(1.0-sir)),aw);
00279 else{
00280 help = 1.0 + pow(((1.0-rh)/0.25),bw);
00281 krw = pow(help,-1.0)*pow(s,aw);
00282 }
00283
00284 return(krw);
00285 }
00286
00287
00288
00289
00290
00291
00292
00293 double concreteBmatc::concreteB_phi(double t)
00294 {
00295 double phi;
00296
00297 phi = phi0 + aphi*(t - t0);
00298
00299 return(phi);
00300 }
00301
00302
00303
00304
00305
00306
00307
00308
00309
00310 double concreteBmatc::concreteB_kintr(double pg,double t,double dam)
00311 {
00312 double kintr,ad;
00313
00314 kintr = k0*pow(10.0,(ak*(t-t0)))*pow((pg/p0),bk);
00315
00316
00317 ad = 4.0;
00318 kintr = kintr + k0*pow(10.0,(ad*dam));
00319
00320
00321
00322
00323 return(kintr);
00324 }
00325
00326
00327
00328
00329
00330
00331
00332 double concreteBmatc::concreteB_cps(double t)
00333 {
00334 double cps;
00335
00336 cps = cps0*(1.0 + ac*(t - tref));
00337
00338 return(cps);
00339 }
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350 double concreteBmatc::concreteB_rhocp(double pc,double pg,double t,long ipp)
00351 {
00352 double s,phi,rhocp,rhow,rhog,rhogw,cps,cpw,cpga,cpgw,rhos;
00353 state_eq tt;
00354
00355 s = concreteB_sw(pc,t);
00356 phi = concreteB_phi(t);
00357 rhow = tt.get_rhow(t);
00358 rhog = tt.get_rhog(pc,pg,t);
00359 rhogw = tt.get_rhogw(pc,t);
00360 cps = concreteB_cps(t);
00361 cpw = tt.get_cpw();
00362 cpga = tt.get_cpga();
00363 cpgw = tt.get_cpgw();
00364 rhos = concreteB_rhos(t);
00365
00366 rhocp = (1.0-phi)*rhos*cps + phi*(s*rhow*cpw + (1.0-s)*(rhog*cpga + rhogw*(cpgw-cpga)));
00367
00368 return(rhocp);
00369 }
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381 double concreteBmatc::concreteB_cp(double pc,double pg,double t,long ipp)
00382 {
00383 double s,phi,cp,rho,rhow,rhog,rhogw,cps,cpw,cpga,cpgw,rhos;
00384 state_eq tt;
00385
00386 s = concreteB_sw(pc,t);
00387 phi = concreteB_phi(t);
00388 rho = tt.get_rho(pc,pg,t,ipp);
00389 rhow = tt.get_rhow(t);
00390 rhog = tt.get_rhog(pc,pg,t);
00391 rhogw = tt.get_rhogw(pc,t);
00392 cps = concreteB_cps(t);
00393 cpw = tt.get_cpw();
00394 cpga = tt.get_cpga();
00395 cpgw = tt.get_cpgw();
00396 rhos = concreteB_rhos(t);
00397
00398 cp = (1.0-phi)*rhos*cps + phi*(s*rhow*cpw + (1.0-s)*(rhog*cpga + rhogw*(cpgw-cpga)));
00399 cp = cp/rho;
00400
00401 return(cp);
00402 }
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413 double concreteBmatc::concreteB_fs(double pc,double t)
00414 {
00415 double f,tau;
00416
00417 tau = concreteB_tau(pc,t);
00418
00419 f = fs*tau;
00420
00421 return(f);
00422 }
00423
00424
00425
00426
00427
00428
00429
00430
00431
00432 double concreteBmatc::concreteB_tau(double pc,double t)
00433 {
00434 double phi,s,tau;
00435
00436 s = concreteB_sw(pc,t);
00437 phi = concreteB_phi(t);
00438
00439 tau = pow(phi,(1.0/3.0))*pow((1.0-s),(7.0/3.0));
00440
00441 return(tau);
00442 }
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452 double concreteBmatc::concreteB_deff(double pc,double pg,double t)
00453 {
00454
00455 double deff,f,phi,s,cdiff;
00456 state_eq tt;
00457
00458 phi = concreteB_phi(t);
00459 s = concreteB_sw(pc,t);
00460 cdiff = tt.get_cdiff(pc,pg,t);
00461 f = concreteB_fs(pc,t);
00462
00463 deff = phi*pow((1.0 - s),av)*f*cdiff;
00464
00465 return(deff);
00466 }
00467
00468
00469
00470
00471
00472
00473
00474
00475 double concreteBmatc::concreteB_lambdaeff(double pc,double pg,double t)
00476 {
00477 double lambdaeff,lambdad,lambdad0,alam,s,phi,rhow,rhos;
00478 state_eq tt;
00479
00480 s = concreteB_sw(pc,t);
00481 phi = concreteB_phi(t);
00482 lambdad0 = 1.67;
00483 alam = -1.017e-3;
00484 rhow = tt.get_rhow(t);
00485 rhos = concreteB_rhos(t);
00486
00487 if (t < tcr)
00488 lambdad = lambdad0*(1.0 + alam*(t-298.15));
00489 else
00490 lambdad = lambdad0*(1.0 + alam*(tcr-298.15));
00491
00492 lambdaeff = lambdad*(1+ 4.0*phi*rhow*s/(1.0-phi)/rhos);
00493
00494 return(lambdaeff);
00495 }
00496
00497
00498
00499
00500
00501
00502
00503
00504
00505 double concreteBmatc::concreteB_kt(double pc,double pg,double t)
00506 {
00507 double kt,ks;
00508
00509 ks = concreteB_ks(pc,pg,t);
00510
00511 kt = ks;
00512
00513 return(kt);
00514 }
00515
00516
00517
00518
00519
00520
00521
00522
00523
00524 double concreteBmatc::concreteB_ks(double pc,double pg,double t)
00525
00526 {
00527 double ks;
00528
00529 ks = emod/(3.0*(1.0 - 2.0*nu));
00530
00531 return(ks);
00532 }
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542 double concreteBmatc::concreteB_rhos(double t)
00543 {
00544 double rhos,rhos_th0,ah,aphi,phit,phi_th0;
00545
00546 ah = 0.0;
00547 aphi = 0.0;
00548
00549
00550 phit = concreteB_phi(t);
00551 phi_th0 = 0.0;
00552
00553 rhos = rhos_th0 + ah/aphi*log((1.0-phit)/(1.0-phi_th0));
00554
00555 return(rhos);
00556 }
00557
00558
00559
00560
00561
00562
00563 double concreteBmatc::concreteB_betas()
00564 {
00565 return(betas);
00566 }
00567
00568
00569
00570
00571
00572
00573 double concreteBmatc::concreteB_emod()
00574 {
00575 return(emod);
00576 }
00577
00578
00579
00580
00581
00582
00583 double concreteBmatc::concreteB_nu()
00584 {
00585 return(nu);
00586 }
00587
00588
00589
00590
00591
00592
00593
00594
00595
00596 double concreteBmatc::concreteB_dmdh_dt(double pc,double pg,double t)
00597 {
00598 double dfhyt,dehydw_dt;
00599
00600 if((t-t0)< 105.0){
00601
00602 dfhyt = 0.0;
00603 }
00604 else{
00605
00606 dfhyt = (3.1416*0.004/2.0)*cos(3.1416/2.0*(1.0-2.0*exp(-0.004*((t-t0)-105.0))))*exp(-0.004*((t-t0)-105.0));
00607 }
00608
00609
00610 dehydw_dt = fste*finv*c1*dfhyt;
00611
00612 return(dehydw_dt);
00613 }
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624 double concreteBmatc::concreteB_dhdehydr(double pc,double pg,double t)
00625 {
00626 double dhdehydr;
00627
00628 dhdehydr = hydren;
00629
00630 return(dhdehydr);
00631 }
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641 double concreteBmatc::concreteB_drhos_dgammadh(double pc,double pg,double t)
00642 {
00643 double drhos_dgammadh;
00644
00645 drhos_dgammadh = 0.0;
00646
00647 return(drhos_dgammadh);
00648 }
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658 double concreteBmatc::concreteB_dgammadh_dt(double pc,double pg,double t)
00659 {
00660 double dgammadh_dt;
00661
00662 dgammadh_dt = 0.0;
00663
00664 return(dgammadh_dt);
00665 }
00666
00667
00668
00669
00670
00671 void concreteBmatc::read(XFILE *in)
00672 {
00673 xfscanf (in,"%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %lf",
00674 &emod, &nu, &rhos_th0, &betas, &phi0, &aphi, &ads, &bds, &nds, &k0, &ak, &bk, &ac, &cps0);
00675 }