00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <stdio.h>
00011 #include <stdlib.h>
00012 #include <math.h>
00013 #include "constrel.h"
00014 #include "C30bazant.h"
00015 #include "globalt.h"
00016
00017 C30bazmat::C30bazmat()
00018 {
00019 mw = 18.01528;
00020 ma = 28.9645;
00021 gasr = 8314.41;
00022
00023 t0 = 273.15;
00024 p0 = 101325.0;
00025 tcr = 647.3;
00026
00027 w1 = 163.0;
00028 c1 = 450.0;
00029
00030
00031 phi0 = 0.0825468;
00032 aphi = 0.00017417;
00033
00034
00035 k0 = 2.0e-18;
00036 ak = 6.29e-3;
00037
00038
00039 scr = 0.8;
00040 ag = 2.0;
00041
00042
00043 sir = 0.05;
00044 aw = 3.0;
00045 bw = 6.0;
00046
00047
00048 rhos = 2564.0;
00049
00050 fs = 1.0;
00051
00052
00053 lambdas0 = 1.9215152;
00054 alam = -0.0012525253;
00055
00056
00057 ac = -0.22626263;
00058 cps0 = 855.25758;
00059
00060
00061 hydren = 0.5e+6;
00062
00063 finv = 0.65;
00064
00065 fste = 0.36;
00066
00067 ddbw0 = 1.0e-20;
00068
00069
00070 dld = 8.0E-2;
00071
00072
00073 emod0 = 3.452222e+10;
00074
00075
00076 vcoeff = 0.18;
00077
00078
00079 betas = 3.0*10.0e-6;
00080
00081
00082 alpha = 0.5;
00083
00084
00085
00086 at = 1.0;
00087 bt = 15000.0;
00088
00089 acc = 1.876;
00090 }
00091 C30bazmat::~C30bazmat()
00092 {}
00093
00094
00095
00096
00097
00098
00099
00100
00101 double C30bazmat::sat(double pc,double t)
00102 {
00103 double sw,rh,tamb,tem,tt1,mt1,fcm,mt;
00104 state_eq tt;
00105
00106 tamb= 25.0;
00107 rh = tt.get_rh(pc,t);
00108
00109
00110 if (t < tcr){
00111 tem = t - 273.15;
00112 if (tem < tamb)
00113 tem = tamb;
00114 }
00115 else
00116 tem = tcr - 273.15;
00117
00118
00119 tt1 = ((tem+10.0)/(25.0+10.0))*((tem+10.0)/(25.0+10.0));
00120 mt1 = 1.04 - (tt1/(24.0+tt1));
00121 if(t < tcr){
00122 fcm = (tcr-t)/(tcr-298.15);
00123 mt = mt1*fcm;
00124 if(mt < 1.0e-4)
00125 mt = 1.0e-4;
00126 }
00127 else
00128 mt = 1.0e-4;
00129
00130
00131 sw = pow(rh,(1.0/mt));
00132
00133
00134 if(sw < 1.0e-3)
00135 {
00136 sw=1.0e-3;
00137 fprintf (Outt,"\n\n Uprava saturace");
00138 }
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148 return(sw);
00149 }
00150
00151
00152
00153
00154
00155
00156
00157
00158 double C30bazmat::dsat_dpc(double pc,double t)
00159 {
00160 double dsw_dpc;
00161 double sw,rh,tamb,tem,tt1,mt1,fcm,mt;
00162 double ssmh,drhdc,dsdc;
00163 state_eq tt;
00164
00165 tamb= 25.0;
00166 rh = tt.get_rh(pc,t);
00167 drhdc = tt.get_drh_dpc(pc,t);
00168
00169
00170 if (t < tcr){
00171 tem = t - 273.15;
00172 if (tem < tamb)
00173 tem = tamb;
00174 }
00175 else
00176 tem = tcr - 273.15;
00177
00178
00179 tt1 = ((tem+10.0)/(25.0+10.0))*((tem+10.0)/(25.0+10.0));
00180 mt1 = 1.04 - (tt1/(24.0+tt1));
00181 if(t < tcr){
00182 fcm = (tcr-t)/(tcr-298.15);
00183 mt = mt1*fcm;
00184 if(mt<1.0e-4) mt=1.0e-4;
00185 }
00186 else{
00187 mt = 1.0e-4;
00188 }
00189
00190
00191 sw = pow(rh,(1.0/mt));
00192
00193
00194
00195 if(sw < 1.0e-3)
00196 {
00197 sw=1.0e-3;
00198 fprintf (Outt,"\n\n Uprava saturace");
00199 }
00200
00201 ssmh = sw/mt/rh;
00202 dsdc = ssmh*drhdc;
00203
00204
00205
00206
00207 dsw_dpc = dsdc;
00208
00209 return(dsw_dpc);
00210 }
00211
00212
00213
00214
00215
00216
00217
00218
00219 double C30bazmat::dsat_dt(double pc,double t)
00220 {
00221 double dsw_dt;
00222 double sw,rh,tamb,tem,tt1,mt1,fcm,mt,dtt1dt,dm1tdt,dfcmdt,dmtdt;
00223 double lnh,xfun,drhdt,ssmh,dsdt;
00224 state_eq tt;
00225
00226 tamb= 25.0;
00227 rh = tt.get_rh(pc,t);
00228 drhdt = tt.get_drh_dt(pc,t);
00229
00230
00231 if (t < tcr){
00232 tem = t - 273.15;
00233 if (tem < tamb)
00234 tem = tamb;
00235 }
00236 else
00237 tem = tcr - 273.15;
00238
00239
00240 tt1 = ((tem+10.)/(25.0+10.))*((tem+10.)/(25.0+10.));
00241 mt1 = 1.04 - (tt1/(24.+tt1));
00242 if(t < tcr){
00243 fcm = (tcr-t)/(tcr-298.15);
00244 mt = mt1*fcm;
00245 dtt1dt = 2.0*(tem+10.0)/((25.0+10.0)*(25.0+10.0));
00246 dm1tdt = -24.0*dtt1dt/((24.0+tt1)*(24.0+tt1));
00247 dfcmdt = -1.0/(tcr-298.15);
00248 if(mt<1.0e-4) mt=1.0e-4;
00249 }
00250 else{
00251 fcm = 0.0;
00252 mt = 1.0e-4;
00253 dtt1dt = 0.0;
00254 dm1tdt = 0.0;
00255 dfcmdt = 0.0;
00256 }
00257
00258 dmtdt = dm1tdt*fcm + mt1*dfcmdt;
00259
00260
00261 sw = pow(rh,(1.0/mt));
00262
00263
00264 lnh = log(rh);
00265
00266 if(sw < 1.0e-3)
00267 {
00268 sw=1.0e-3;
00269 fprintf (Outt,"\n\n Uprava saturace");
00270 }
00271
00272
00273 if(t < tcr){
00274 xfun = drhdt - rh/mt*lnh*dmtdt;
00275 ssmh = sw/mt/rh;
00276 dsdt = ssmh*xfun;
00277 }
00278 else{
00279 xfun = drhdt - rh/mt*lnh*dmtdt ;
00280 ssmh = sw/mt/rh;
00281 dsdt = 0.0;
00282 }
00283
00284
00285
00286
00287 dsw_dt = dsdt;
00288
00289 return(dsw_dt);
00290 }
00291
00292
00293
00294
00295
00296
00297
00298 double C30bazmat::ssp()
00299 {
00300 return(0.55);
00301 }
00302
00303
00304
00305
00306
00307
00308
00309
00310 double C30bazmat::C30baz_phi()
00311 {
00312 double phi;
00313
00314 phi = phi0;
00315
00316 return(phi);
00317 }
00318
00319
00320
00321
00322
00323
00324 double C30bazmat::C30baz_kintr()
00325 {
00326 double kintr;
00327
00328 kintr = k0;
00329
00330 return(kintr);
00331 }
00332
00333
00334
00335
00336
00337
00338
00339
00340 double C30bazmat::C30baz_krg(double pc,double t)
00341 {
00342 double krg,s;
00343
00344 s = sat(pc,t);
00345
00346
00347
00348 krg = 1.0 - s;
00349
00350 return(krg);
00351 }
00352
00353
00354
00355
00356
00357
00358
00359
00360 double C30bazmat::C30baz_krw(double pc,double t)
00361 {
00362 double krw,s;
00363
00364 s = sat(pc,t);
00365
00366
00367
00368 krw = exp(10.0*log(s));
00369
00370
00371 return(krw);
00372 }
00373
00374
00375
00376
00377
00378
00379
00380
00381 double C30bazmat::C30baz_dd(double pc,double t)
00382 {
00383 double tau,dd;
00384
00385 tau = C30baz_tau(pc,t);
00386
00387 dd = tau*mw*ma/gasr;
00388
00389
00390 return(dd);
00391 }
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401 double C30bazmat::C30baz_deff(double pc,double pg,double t)
00402 {
00403 double deff,dd,phi,s,cdiff;
00404 state_eq tt;
00405
00406 dd = C30baz_dd(pc,t);
00407 phi = C30baz_phi();
00408 s = sat(pc,t);
00409 cdiff = tt.get_cdiff(pc,pg,t);
00410
00411 deff = dd*phi*(1.0 - s)*fs*cdiff;
00412
00413 return(deff);
00414 }
00415
00416
00417
00418
00419
00420
00421 double C30bazmat::C30baz_cps()
00422 {
00423 double cps;
00424
00425 cps = cps0;
00426
00427 return(cps);
00428 }
00429
00430
00431
00432
00433
00434
00435
00436
00437
00438 double C30bazmat::C30baz_rhocp(double pc,double pg,double t)
00439 {
00440 double s,phi,rhocp,rhow,rhog,rhogw,cps,cpw,cpga,cpgw,rhos;
00441 state_eq tt;
00442
00443 s = sat(pc,t);
00444 phi = C30baz_phi();
00445 rhow = tt.get_rhow(t);
00446 rhog = tt.get_rhog(pc,pg,t);
00447 rhogw = tt.get_rhogw(pc,t);
00448 cps = C30baz_cps();
00449 cpw = tt.get_cpw();
00450 cpga = tt.get_cpga();
00451 cpgw = tt.get_cpgw();
00452 rhos = C30baz_rhos();
00453
00454 rhocp = (1.0-phi)*rhos*cps + phi*(s*rhow*cpw + (1.0-s)*(rhog*cpga + rhogw*(cpgw-cpga)));
00455
00456 return(rhocp);
00457 }
00458
00459
00460
00461
00462
00463
00464
00465
00466
00467 double C30bazmat::C30baz_tau(double pc,double t)
00468 {
00469 double phi,s,tau;
00470
00471 s = sat(pc,t);
00472 phi = C30baz_phi();
00473
00474
00475 tau = exp(1.0/3.0*log(phi))*exp(7.0/3.0*log(1.0-s));
00476
00477
00478 return(tau);
00479 }
00480
00481
00482
00483
00484
00485
00486 double C30bazmat::C30baz_lambdas()
00487 {
00488 double lambdas;
00489
00490 lambdas = lambdas0;
00491
00492 return(lambdas);
00493 }
00494
00495
00496
00497
00498
00499
00500
00501 double C30bazmat::C30baz_lambdaeff(double pc,double t)
00502 {
00503 double lambdaeff,lambdas,s,phi,rhow,rhos;
00504 state_eq tt;
00505
00506 s = sat(pc,t);
00507 phi = C30baz_phi();
00508 rhow = tt.get_rhow(t);
00509 lambdas = C30baz_lambdas();
00510 rhos = C30baz_rhos();
00511
00512 lambdaeff = lambdas*(1.0 + 4.0*phi*rhow*s/(1.0-phi)/rhos);
00513
00514 return(lambdaeff);
00515 }
00516
00517
00518
00519
00520
00521
00522 double C30bazmat::C30baz_rhos()
00523 {
00524 return(rhos);
00525 }
00526
00527
00528
00529
00530
00531
00532 double C30bazmat::C30baz_betas()
00533 {
00534 return(betas);
00535 }
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546 double C30bazmat::C30baz_hydw(double pc,double pg,double t)
00547 {
00548 double fhy,hydw;
00549
00550 if((t-t0)< 105.0){
00551 fhy = 0.0;
00552 }
00553 else{
00554 fhy = (1.0+sin(3.1416/2.0*(1.0-2.0*exp(-0.004*((t-t0)-105.0)))))/2.0;
00555 }
00556
00557 hydw = fste*finv*c1*fhy;
00558
00559 return(hydw);
00560 }
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570 double C30bazmat::C30baz_dehydw_dt(double pc,double pg,double t)
00571 {
00572 double dfhyt,dehydw_dt;
00573
00574 if((t-t0)< 105.0){
00575 dfhyt = 0.0;
00576 }
00577 else{
00578 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));
00579 }
00580
00581 dehydw_dt = fste*finv*c1*dfhyt;
00582
00583 return(dehydw_dt);
00584 }
00585
00586
00587
00588
00589
00590
00591
00592
00593
00594
00595 double C30bazmat::C30baz_hydren(double pc,double pg,double t)
00596 {
00597 return(hydren);
00598 }
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608 double C30bazmat::C30baz_fste(double pc,double pg,double t)
00609 {
00610 return(fste);
00611 }
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621 double C30bazmat::C30baz_ddbw(double pc,double pg,double t)
00622 {
00623 double ddbw;
00624
00625 ddbw = ddbw0*exp(-1.0*t/(295.0));
00626 if (t > tcr)
00627 ddbw = ddbw0*exp(-1.0*tcr/(295.0));
00628
00629 return(ddbw);
00630 }
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641 double C30bazmat::C30baz_emod(double pc,double pg,double t)
00642 {
00643 double emod,ttc;
00644
00645 ttc = t - 273.15;
00646
00647 if (ttc <= 500.0)
00648 emod = 3.5604e10 - 54.089*1.0e6*ttc;
00649 else
00650 emod = 0.8560e10*exp((-54.089/8560.0)*(ttc-500.0));
00651
00652 return(emod);
00653 }
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664 double C30bazmat::C30baz_fct(double pc,double pg,double t)
00665 {
00666 double fct,ttc;
00667
00668 ttc = t - 273.15;
00669
00670 if (ttc <= 600.0)
00671 fct = (6.0 - 8.56e-3*ttc)*1.0e6;
00672 else
00673 fct = 0.864*1.0e6;
00674
00675 return(fct);
00676 }
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688 double C30bazmat::C30baz_xk0(double pc,double pg,double t)
00689 {
00690 double fct,emod,xk0;
00691
00692 fct = C30baz_fct(pc,pg,t);
00693 emod = C30baz_emod(pc,pg,t);
00694
00695 xk0 = fct/emod;
00696
00697 return(xk0);
00698 }
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709 double C30bazmat::C30baz_bcc(double pc,double pg,double t)
00710 {
00711 double bcc,ttc;
00712
00713 ttc = t - 273.15;
00714
00715 bcc = 1550.0*exp(-0.0015154*ttc);
00716
00717 return(bcc);
00718 }
00719
00720
00721
00722
00723
00724
00725 double C30bazmat::C30baz_alpha()
00726 {
00727 return(alpha);
00728 }
00729
00730
00731
00732
00733
00734
00735
00736 double C30bazmat::C30baz_nu()
00737 {
00738 return(vcoeff);
00739 }
00740
00741
00742
00743
00744
00745
00746 void C30bazmat::read(XFILE *in)
00747 {}
00748
00749
00750
00751
00752
00753
00754
00755 void C30bazmat::print(FILE *out)
00756 {}