00001 #include "globalt.h"
00002 #include "saltmat2.h"
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 saltmat2::saltmat2 ()
00034 {
00035 mw = 0.01801528;
00036 ma = 28.9645;
00037 gasr = 8.31441;
00038
00039 }
00040
00041 saltmat2::~saltmat2 ()
00042 {}
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055 void saltmat2::matcond (matrix &d,long ri,long ci,long ipp)
00056 {
00057 long n;
00058 n = d.n;
00059
00060 switch (n){
00061 case 1:{
00062 matcond1d (d,ri,ci,ipp);
00063 break;
00064 }
00065 case 2:{
00066 matcond2d (d,ri,ci,ipp);
00067 break;
00068 }
00069 case 3:{
00070 matcond3d (d,ri,ci,ipp);
00071 break;
00072 }
00073 default:{
00074 fprintf (stderr,"\n unknown number of components of stress tensor is required");
00075 fprintf (stderr,"\n in function (%s, line %d).\n",__FILE__,__LINE__);
00076 }
00077 }
00078 }
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 void saltmat2::matcond2 (matrix &d,long ri,long ci,long ipp)
00091 {
00092 long n;
00093 n = d.n;
00094
00095 switch (n){
00096 case 1:{
00097
00098
00099 }
00100 case 2:{
00101 matcond2d2 (d,ri,ci,ipp);
00102 break;
00103 }
00104 case 3:{
00105
00106
00107 }
00108 default:{
00109 fprintf (stderr,"\n unknown number of components of stress tensor is required");
00110 fprintf (stderr,"\n in function (%s, line %d).\n",__FILE__,__LINE__);
00111 }
00112 }
00113 }
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123 void saltmat2::matcond1d (matrix &d,long ri,long ci,long ipp)
00124 {
00125 double k;
00126 double x1,x2,x3,cfmax;
00127 k = 0.0;
00128
00129 x1 = Tm->ip[ipp].av[0];
00130 x2 = Tm->ip[ipp].av[1];
00131 x3 = Tm->ip[ipp].av[2];
00132
00133
00134 CorD(16,kd,0,x1,cfmax,a2,a3);
00135 if (x2 > cfmax){
00136 x2 = cfmax;
00137 }
00138
00139
00140 if((ri == 0) && (ci == 0))
00141 k = k11 (x1,x2,x3);
00142 if((ri == 0) && (ci == 1))
00143 k = k12 (x1,x2,x3);
00144 if((ri == 0) && (ci == 2))
00145 k = k13 (x1,x2,x3);
00146
00147 if((ri == 1) && (ci == 0))
00148 k = k21 (x1,x2,x3);
00149 if((ri == 1) && (ci == 1))
00150 k = k22 (x1,x2,x3);
00151 if((ri == 1) && (ci == 2))
00152 k = k23 (x1,x2,x3);
00153
00154 if((ri == 2) && (ci == 0))
00155 k = k31 (x1,x2,x3);
00156 if((ri == 2) && (ci == 1))
00157 k = k32 (x1,x2,x3);
00158 if((ri == 2) && (ci == 2))
00159 k = k33 (x1,x2,x3);
00160
00161 d[0][0] = k;
00162 }
00163
00164 void saltmat2::matcond2d2 (matrix &d,long ri,long ci,long ipp)
00165 {
00166 d[0][0] = 0.0; d[0][1] = 0.0;
00167 }
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177 void saltmat2::matcond2d (matrix &d,long ri,long ci,long ipp)
00178 {
00179 double k;
00180 double x1,x2,x3,cfmax;
00181 k = 0.0;
00182
00183 x1 = Tm->ip[ipp].av[0];
00184 x2 = Tm->ip[ipp].av[1];
00185 x3 = Tm->ip[ipp].av[2];
00186
00187
00188 CorD(16,kd,0,x1,cfmax,a2,a3);
00189 if (x2 > cfmax){
00190 x2 = cfmax;
00191 }
00192
00193 if((ri == 0) && (ci == 0))
00194 k = k11 (x1,x2,x3);
00195 if((ri == 0) && (ci == 1))
00196 k = k12 (x1,x2,x3);
00197 if((ri == 0) && (ci == 2))
00198 k = k13 (x1,x2,x3);
00199
00200 if((ri == 1) && (ci == 0))
00201 k = k21 (x1,x2,x3);
00202 if((ri == 1) && (ci == 1))
00203 k = k22 (x1,x2,x3);
00204 if((ri == 1) && (ci == 2))
00205 k = k23 (x1,x2,x3);
00206
00207 if((ri == 2) && (ci == 0))
00208 k = k31 (x1,x2,x3);
00209 if((ri == 2) && (ci == 1))
00210 k = k32 (x1,x2,x3);
00211 if((ri == 2) && (ci == 2))
00212 k = k33 (x1,x2,x3);
00213
00214 fillm(0.0,d);
00215
00216 d[0][0] = k; d[0][1] = 0.0;
00217 d[1][0] = 0.0; d[1][1] = k;
00218
00219 }
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230 void saltmat2::matcond3d (matrix &d,long ri,long ci,long ipp)
00231 {
00232 double k;
00233 double x1,x2,x3,cfmax;
00234 k = 0.0;
00235
00236 x1 = Tm->ip[ipp].av[0];
00237 x2 = Tm->ip[ipp].av[1];
00238 x3 = Tm->ip[ipp].av[2];
00239
00240
00241 CorD(16,kd,0,x1,cfmax,a2,a3);
00242 if (x2 > cfmax){
00243 x2 = cfmax;
00244 }
00245
00246 if((ri == 0) && (ci == 0))
00247 k = k11 (x1,x2,x3);
00248 if((ri == 0) && (ci == 1))
00249 k = k12 (x1,x2,x3);
00250 if((ri == 0) && (ci == 2))
00251 k = k13 (x1,x2,x3);
00252
00253 if((ri == 1) && (ci == 0))
00254 k = k21 (x1,x2,x3);
00255 if((ri == 1) && (ci == 1))
00256 k = k22 (x1,x2,x3);
00257 if((ri == 1) && (ci == 2))
00258 k = k23 (x1,x2,x3);
00259
00260 if((ri == 2) && (ci == 0))
00261 k = k31 (x1,x2,x3);
00262 if((ri == 2) && (ci == 1))
00263 k = k32 (x1,x2,x3);
00264 if((ri == 2) && (ci == 2))
00265 k = k33 (x1,x2,x3);
00266
00267 fillm(0.0,d);
00268
00269 d[0][0]=k; d[0][1]=0.0; d[0][2]=0.0;
00270 d[1][0]=0.0; d[1][1]=k; d[1][2]=0.0;
00271 d[2][0]=0.0; d[2][1]=0.0; d[2][2]=k;
00272 }
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283 void saltmat2::matcap (double &c,long ri,long ci,long ipp)
00284 {
00285 double x1,x2,x3;
00286 c = 0.0;
00287
00288 x1 = Tm->ip[ipp].av[0];
00289 x2 = Tm->ip[ipp].av[1];
00290 x3 = Tm->ip[ipp].av[2];
00291
00292 if((ri == 0) && (ci == 0))
00293 c = c11 (x1,x2,x3);
00294 if((ri == 0) && (ci == 1))
00295 c = c12 (x1,x2,x3);
00296 if((ri == 0) && (ci == 2))
00297 c = c13 (x1,x2,x3);
00298
00299 if((ri == 1) && (ci == 0))
00300 c = c21 (x1,x2,x3);
00301 if((ri == 1) && (ci == 1))
00302 c = c22 (x1,x2,x3);
00303 if((ri == 1) && (ci == 2))
00304 c = c23 (x1,x2,x3);
00305
00306 if((ri == 2) && (ci == 0))
00307 c = c31 (x1,x2,x3);
00308 if((ri == 2) && (ci == 1))
00309 c = c32 (x1,x2,x3);
00310 if((ri == 2) && (ci == 2))
00311 c = c33 (x1,x2,x3);
00312 }
00313
00314
00315 void saltmat2::values_correction (vector &nv)
00316 {
00317 double cfmax;
00318
00319 CorD(16,kd,0,1,cfmax,a2,a3);
00320 if (nv[1] > cfmax){
00321 nv[1] = cfmax;
00322 }
00323 }
00324
00325
00326
00327
00328
00329
00330
00331
00332 void saltmat2::read (XFILE *in)
00333 {
00334 int i, j;
00335 for (i = 2; i<19; i++)
00336 {
00337 xfscanf(in, "%d",&MatChar[i]);
00338 }
00339 xfscanf(in, "%d",&MatChar[19]);
00340 for (i = 2;i <= 19; i++)
00341 {
00342
00343 switch (MatChar[i])
00344 {
00345 case 0:
00346 break;
00347 case 1:xfscanf(in, "%lf",&MatConst[i]);
00348
00349 break;
00350 case 2: if( MatChar[i-1] ==2)
00351 {
00352 xfscanf(in, "%lf %lf",&MatData[i][0][0],&MatData[i][1][0]);
00353 }
00354 else
00355 {
00356 xfscanf(in, "%lf %lf",&MatData[i][0][0],&MatData[i][1][0]);
00357 }
00358
00359 switch (int(MatData[i][1][0]))
00360 {
00361 case 2: for (j=1; j<=MatData[i][0][0];j++)
00362 {
00363 xfscanf(in, "%lf %lf",&MatData[i][0][j],&MatData[i][1][j] );
00364 }
00365 break;
00366 case 3: for (j=1; j<=MatData[i][0][0];j++)
00367 {
00368 xfscanf(in, "%lf %lf %lf",&MatData[i][0][j],&MatData[i][1][j],&MatData[i][2][j] );
00369 }
00370 break;
00371 }
00372 xfscanf(in, "%d",&MatData[i][0][0]);
00373 break;
00374 case 3:
00375 break;
00376 case 30: if( MatChar[i-1] ==1)
00377 {
00378 xfscanf(in, "%lf %lf",&MatFunce[i][0],&MatFunce[i][1]);
00379 }
00380 else
00381 {
00382 xfscanf(in, "%lf %lf",&MatFunce[i][0],&MatFunce[i][1]);
00383 }
00384
00385 break;
00386 case 31: if( MatChar[i-1] ==1)
00387 {
00388 if (i == 6)
00389 {
00390 xfscanf(in, "%lf %lf %lf",&MatFunce[i][0],&MatFunce[i][1], &MatFunce[i][2]);
00391 }
00392 else
00393 {
00394 xfscanf(in, "%lf %lf",&MatFunce[i][0],&MatFunce[i][1]);
00395 }
00396 }
00397 else
00398 {
00399 if (i == 6)
00400 {
00401 xfscanf(in, "%lf %lf %lf",&MatFunce[i][0],&MatFunce[i][1], &MatFunce[i][2]);
00402 }
00403 else
00404 {
00405 xfscanf(in, "%lf %lf",&MatFunce[i][0],&MatFunce[i][1]);
00406 }
00407 }
00408
00409 break;
00410 case 32: if( MatChar[i-1] ==1)
00411 {
00412 xfscanf(in, "%lf %lf",&MatFunce[i][0],&MatFunce[i][1]);
00413 }
00414 else
00415 {
00416 xfscanf(in, "%lf %lf",&MatFunce[i][0],&MatFunce[i][1]);
00417 }
00418 break;
00419 }
00420 }
00421
00422 }
00423
00424
00425
00426
00427
00428
00429 double saltmat2::k11(double x1,double x2,double x3)
00430 {
00431 double k11;
00432 double kapak, ps, delta, dfdw;
00433 double p = 101325;
00434 double a,u,n;
00435 int kod;
00436 CorD(5,kd,1,x1,kapak,a2,a3);
00437
00438 ps = pgws(294.15);
00439
00440 delta = permeabilitavodnipary(294.15,p);
00441
00442
00443 CorD(6,kod,1,x1,u,a,n);
00444
00445 switch (kod)
00446 {
00447 case 2:
00448 dfdw = a;
00449 break;
00450 case 30:
00451 break;
00452 case 31: {
00453 dfdw = (u/(a*x1*n))*pow((1-(log(x1))/a),(-1-(1/n)));
00454
00455
00456 }
00457 break;
00458 }
00459 k11 = 1000*kapak + ps*delta*dfdw;
00460 return (k11);
00461 }
00462
00463 double saltmat2::k12(double x1,double x2,double x3)
00464 {
00465 double k12;
00466
00467 k12 =0.0;
00468
00469 return (k12);
00470 }
00471
00472 double saltmat2::k13(double x1,double x2,double x3)
00473 {
00474 double k13;
00475
00476 k13 = 0.0;
00477
00478
00479
00480 return (k13);
00481 }
00482
00483 double saltmat2::k21(double x1,double x2,double x3)
00484 {
00485 double k21;
00486 double kapak;
00487
00488 CorD(5,kd,1,x1,kapak,a2,a3);
00489
00490 k21 = kapak*x2*1;
00491
00492 return (k21);
00493 }
00494
00495 double saltmat2::k22(double x1,double x2,double x3)
00496 {
00497 double k22;
00498 double dcoef;
00499
00500
00501 CorD(14,kd,1000,x2,dcoef,a2,a3);
00502
00503 k22 = dcoef*x1;
00504
00505
00506 return (k22);
00507 }
00508
00509 double saltmat2::k23(double x1,double x2,double x3)
00510 {
00511 double k23;
00512
00513 k23 = 0.0;
00514
00515
00516 return (k23);
00517 }
00518
00519 double saltmat2::k31(double x1,double x2,double x3)
00520 {
00521 double k31;
00522
00523 k31 = 0.0;
00524
00525
00526
00527 return (k31);
00528 }
00529
00530 double saltmat2::k32(double x1,double x2,double x3)
00531 {
00532 double k32;
00533
00534 k32= 0.0;
00535
00536
00537
00538 return (k32);
00539 }
00540
00541 double saltmat2::k33(double x1,double x2,double x3)
00542 {
00543 double k33;
00544
00545 k33= 0.0;
00546
00547
00548
00549 return (k33);
00550 }
00551
00552 double saltmat2::c11(double x1,double x2,double x3)
00553 {
00554 double c11;
00555 double ps;
00556 double fi,dfdw, wsoli, por;
00557 double u, a, n;
00558 int kod;
00559
00560 ps = pgws(294.15);
00561 CorD(3,kd,1,x1,por,a2,a3);
00562 CorD(6,kod,1,x1,u,a,n);
00563
00564 switch (kod)
00565 {
00566 case 2: fi = u;
00567 dfdw = a;
00568 break;
00569 case 30:
00570 break;
00571 case 31: {
00572 dfdw = (u/(a*x1*n))*pow((1-(log(x1))/a),(-1-(1/n)));
00573 fi = u*pow((1-(log(x1))/a),(-1/n));
00574
00575 }
00576 break;
00577 }
00578
00579 CorD(17,kd,0,x1,wsoli,a2,a3);
00580
00581 c11 = 1000 + mw/(gasr*294.15)*ps*(por-x1-wsoli)*dfdw-mw*ps*fi/(gasr*294.15);
00582
00583 return(c11);
00584 }
00585
00586 double saltmat2::c12(double x1,double x2,double x3)
00587 {
00588 double c12;
00589
00590 c12 = 0.0;
00591
00592 return(c12);
00593 }
00594
00595 double saltmat2::c13(double x1,double x2,double x3)
00596 {
00597 double c13;
00598
00599 c13 = 0.0;
00600
00601 return(c13);
00602 }
00603
00604 double saltmat2::c21(double x1,double x2,double x3)
00605 {
00606 double c21,cfmax;
00607
00608
00609 CorD(16,kd,0,x1,cfmax,a2,a3);
00610 if (x2 > cfmax){
00611 c21 = cfmax;
00612
00613 }
00614 else{
00615 c21 = x2;
00616 }
00617
00618 return(c21);
00619 }
00620
00621 double saltmat2::c22(double x1,double x2,double x3)
00622 {
00623 double c22;
00624 double dCbDcf;
00625 int k;
00626 double a,b, Cb;
00627
00628 if (x2 <= 0) x2 = 1e-10;
00629 if (x1 <0) x1 = 0;
00630
00631 CorD(15,k,1000,x2,a,b,a3);
00632
00633 switch (k)
00634 {
00635 case 31: dCbDcf = b*a*pow(x2,(b-1));
00636 break;
00637 case 30: Cb = 1/(1/(a*b*x2)+1/b);
00638 dCbDcf = Cb*Cb/(a*b*x2*x2);
00639 break;
00640 case 2: binding_izoterm_derivation(x2,dCbDcf);
00641
00642 break;
00643 case 0: dCbDcf =0;
00644 break;
00645 }
00646
00647 c22 = x1 + dCbDcf;
00648
00649
00650 return(c22);
00651 }
00652
00653 double saltmat2::c23(double x1,double x2,double x3)
00654 {
00655 double c23;
00656
00657
00658 c23 = 1.0;
00659
00660 return(c23);
00661 }
00662
00663 double saltmat2::c31(double x1,double x2,double x3)
00664 {
00665 double c31;
00666 double cfmax;
00667
00668 CorD(16,kd,0,x1,cfmax,a2,a3);
00669
00670 if (x2 < cfmax){
00671 c31 = 0.0;
00672 }
00673 else{
00674 c31 = cfmax-x2;
00675 }
00676
00677 return(c31);
00678 }
00679
00680 double saltmat2::c32(double x1,double x2,double x3)
00681 {
00682 double c32;
00683 double cfmax;
00684
00685 CorD(16,kd,0,x1,cfmax,a2,a3);
00686
00687 if (x2 < cfmax){
00688 c32 = 0.0;
00689 }
00690 else{
00691 c32 = -x1;
00692 }
00693
00694 return(c32);
00695 }
00696
00697 double saltmat2::c33(double x1,double x2,double x3)
00698 {
00699 double c33;
00700
00701 c33 = 1.0;
00702
00703 return(c33);
00704 }
00705
00706
00707
00708 void saltmat2::auxiliarydata (double x1,double x2,double x3)
00709 {}
00710
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
00724
00725
00726
00727 double saltmat2::transmission_transcoeff(double trc,long ri,long ci,long nn,long bc,long ipp)
00728 {
00729 long k;
00730 double new_trc,x1,x2,x3;
00731 new_trc = 0.0;
00732
00733 k=Gtt->give_dof(nn,0);
00734 if (k>0) {x1 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00735 if (k==0) {x1 = 0.0;}
00736 if (k<0) {x1 = Tb->lc[0].pv[0-k-1].getval();}
00737 k=Gtt->give_dof(nn,1);
00738 if (k>0) {x2 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00739 if (k==0) {x2 = 0.0;}
00740 if (k<0) {x2 = Tb->lc[0].pv[0-k-1].getval();}
00741 k=Gtt->give_dof(nn,2);
00742 if (k>0) {x3 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00743 if (k==0) {x3 = 0.0;}
00744 if (k<0) {x3 = Tb->lc[0].pv[0-k-1].getval();}
00745
00746 if((ri == 0) && (ci == 0))
00747 new_trc = get_transmission_transcoeff_11(x1,x2,x3,bc,ipp);
00748 if((ri == 0) && (ci == 1))
00749 new_trc = 0.0;
00750 if((ri == 0) && (ci == 2))
00751 new_trc = 0.0;
00752
00753 if((ri == 1) && (ci == 0))
00754 new_trc = 0.0;
00755 if((ri == 1) && (ci == 1))
00756 new_trc = 0.0;
00757 if((ri == 1) && (ci == 2))
00758 new_trc = 0.0;
00759
00760 if((ri == 2) && (ci == 0))
00761 new_trc = 0.0;
00762 if((ri == 2) && (ci == 1))
00763 new_trc = 0.0;
00764 if((ri == 2) && (ci == 2))
00765 new_trc = 0.0;
00766
00767 new_trc = new_trc*trc;
00768
00769 return (new_trc);
00770 }
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783 double saltmat2::transmission_nodval(double nodval,long ri,long ci,long nn,long bc,long ipp)
00784 {
00785 long k;
00786 double new_nodval,x1,x2,x3;
00787 new_nodval = 0.0;
00788
00789 k=Gtt->give_dof(nn,0);
00790 if (k>0) {x1 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00791 if (k==0) {x1 = 0.0;}
00792 if (k<0) {x1 = Tb->lc[0].pv[0-k-1].getval();}
00793 k=Gtt->give_dof(nn,1);
00794 if (k>0) {x2 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00795 if (k==0) {x2 = 0.0;}
00796 if (k<0) {x2 = Tb->lc[0].pv[0-k-1].getval();}
00797 k=Gtt->give_dof(nn,2);
00798 if (k>0) {x3 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00799 if (k==0) {x3 = 0.0;}
00800 if (k<0) {x3 = Tb->lc[0].pv[0-k-1].getval();}
00801
00802 if((ri == 0) && (ci == 0))
00803 new_nodval = get_transmission_nodval_11(nodval,x1,x2,x3,bc,ipp);
00804 if((ri == 0) && (ci == 1))
00805 new_nodval = 0.0;
00806 if((ri == 0) && (ci == 2))
00807 new_nodval = 0.0;
00808
00809 if((ri == 1) && (ci == 0))
00810 new_nodval = 0.0;
00811 if((ri == 1) && (ci == 1))
00812 new_nodval = 0.0;
00813 if((ri == 1) && (ci == 2))
00814 new_nodval = 0.0;
00815
00816 if((ri == 2) && (ci == 0))
00817 new_nodval = 0.0;
00818 if((ri == 2) && (ci == 1))
00819 new_nodval = 0.0;
00820 if((ri == 2) && (ci == 2))
00821 new_nodval = 0.0;
00822
00823 return (new_nodval);
00824 }
00825
00826
00827
00828
00829
00830
00831
00832
00833
00834
00835
00836
00837
00838 double saltmat2::transmission_flux(double nodval,long ri,long ci,long nn,long bc,long ipp)
00839 {
00840 long k;
00841 double flux,x1,x2,x3;
00842 flux = 0.0;
00843
00844 k=Gtt->give_dof(nn,0);
00845 if (k>0) {x1 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00846 if (k==0) {x1 = 0.0;}
00847 if (k<0) {x1 = Tb->lc[0].pv[0-k-1].getval();}
00848 k=Gtt->give_dof(nn,1);
00849 if (k>0) {x2 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00850 if (k==0) {x2 = 0.0;}
00851 if (k<0) {x2 = Tb->lc[0].pv[0-k-1].getval();}
00852 k=Gtt->give_dof(nn,2);
00853 if (k>0) {x3 = Lsrst->lhs[k-1]+Lsrst->lhsi[k-1];}
00854 if (k==0) {x3 = 0.0;}
00855 if (k<0) {x3 = Tb->lc[0].pv[0-k-1].getval();}
00856
00857 if((ri == 0) && (ci == 0))
00858 flux = get_transmission_flux_11(nodval,x1,x2,x3,bc,ipp);
00859 if((ri == 0) && (ci == 1))
00860 flux = 0.0;
00861 if((ri == 0) && (ci == 2))
00862 flux = 0.0;
00863
00864 if((ri == 1) && (ci == 0))
00865 flux = 0.0;
00866 if((ri == 1) && (ci == 1))
00867 flux = 0.0;
00868 if((ri == 1) && (ci == 2))
00869 flux = 0.0;
00870
00871 if((ri == 2) && (ci == 0))
00872 flux = 0.0;
00873 if((ri == 2) && (ci == 1))
00874 flux = 0.0;
00875 if((ri == 2) && (ci == 2))
00876 flux = 0.0;
00877
00878 return (flux);
00879 }
00880
00881
00882
00883
00884
00885
00886
00887
00888
00889
00890 double saltmat2::get_transmission_nodval_11(double bv,double x1,double x2,double x3,long bc,long ipp)
00891 {
00892 double nodval;
00893
00894 switch (bc){
00895 case 30:{
00896 nodval = bv;
00897 break;
00898 }
00899 default:{
00900 fprintf (stderr,"\n\n No real boundary condition is prescribed (%s, line %d).\n",__FILE__,__LINE__);
00901 exit(0);
00902 }
00903 }
00904
00905 return(nodval);
00906 }
00907
00908
00909
00910
00911
00912
00913
00914
00915
00916 double saltmat2::get_transmission_transcoeff_11(double x1,double x2,double x3,long bc,long ipp)
00917 {
00918 double trc;
00919
00920 switch (bc){
00921 case 30:{
00922 trc=1.0;
00923 break;
00924 }
00925 default:{
00926 fprintf (stderr,"\n\n No real boundary condition is prescribed (%s, line %d).\n",__FILE__,__LINE__);
00927 exit(0);
00928 }
00929 }
00930
00931 return(trc);
00932 }
00933
00934
00935
00936
00937
00938
00939
00940
00941
00942
00943 double saltmat2::get_transmission_flux_11(double bv,double x1,double x2,double x3,long bc,long ipp)
00944 {
00945 double flux;
00946
00947 switch (bc){
00948 case 30:{
00949 flux = (bv - x1);
00950 break;
00951 }
00952 default:{
00953 fprintf (stderr,"\n\n No real boundary condition is prescribed (%s, line %d).\n",__FILE__,__LINE__);
00954 exit(0);
00955 }
00956 }
00957
00958 return(flux);
00959 }
00960
00961
00962
00963
00964
00965
00966
00967
00968 double saltmat2::get_othervalue(long compother,long ipp, double x1,double x2,double x3)
00969 {
00970 double other;
00971
00972 switch (compother){
00973 case 0:{
00974 other = x1;
00975 break;
00976 }
00977 default:{
00978 fprintf (stderr,"\n\n unknown type of component is required in function (%s, line %d).\n",__FILE__,__LINE__);
00979 }
00980 }
00981 return (other);
00982 }
00983
00984
00985
00986
00987
00988
00989 void saltmat2::print_othervalue_name(FILE *out,long compother)
00990 {
00991 switch (compother){
00992 case 0:{
00993 fprintf (out,"First unknown (Units) ");
00994 break;
00995 }
00996 default:{
00997 fprintf (stderr,"\n\n unknown type of component is required in function (%s, line %d).\n",__FILE__,__LINE__);
00998 }
00999 }
01000 }
01001
01002
01003
01004
01005 double saltmat2::pgws(double t)
01006 {
01007 double pgw;
01008
01009 pgw = exp(23.5771 - 4042.9/(t - 37.58));
01010
01011 return (pgw);
01012 }
01013
01014
01015
01016
01017
01018 double saltmat2::permeabilitavodnipary(double t, double p)
01019 {
01020
01021 double Da, Dp,rv,pa;
01022 double mi;
01023
01024 CorD(4,kd,0,0,mi,a2,a3);
01025
01026 rv = 461.5;
01027 pa = 101325;
01028
01029
01030
01031 Da = (2.306e-5 * pa)/(rv * t * p)*pow((t/294.15),1.81);
01032 Dp = Da/mi;
01033 return (Dp);
01034 }
01035
01036 void saltmat2::CorD(int cislochar, int &kvyhl,double in, double x, double & y, double & z, double &z2)
01037 {
01038
01039 switch (MatChar[cislochar])
01040 {
01041 case 0:
01042 break;
01043 case 1: y = MatConst[cislochar];
01044 break;
01045 case 2: {
01046 int i = 1;
01047
01048 int psl, prad;
01049 prad = int (MatData[cislochar][0][0]);
01050 psl = int (MatData[cislochar][1][0]);
01051 if (x <=0)
01052 {
01053 x = 0;
01054 y = MatData[cislochar][1][1];
01055 if (psl == 3)
01056 {
01057 z = MatData[cislochar][2][1];
01058 }
01059
01060 }
01061 else {
01062 if (x > in)
01063 {
01064 x = in;
01065 y = MatData[cislochar][1][prad];
01066 if (psl == 3)
01067 {
01068 z = MatData[cislochar][2][prad];
01069 }
01070 }
01071 else
01072 {
01073 while (x > MatData[cislochar][0][i]){
01074 i++;
01075 }
01076
01077 y = MatData[cislochar][1][i-1] + ((x - MatData[cislochar][0][i-1])*(MatData[cislochar][1][i] - MatData[cislochar][1][i-1]))/(MatData[cislochar][0][i] - MatData[cislochar][0][i-1]);
01078 if (psl == 3)
01079 {
01080 z = MatData[cislochar][2][i-1] + ((x - MatData[cislochar][0][i-1])*(MatData[cislochar][2][i] - MatData[cislochar][2][i-1]))/(MatData[cislochar][0][i] - MatData[cislochar][0][i-1]);
01081 }
01082 }
01083 }
01084 kvyhl = 2;
01085 }
01086 break;
01087 case 30: y = MatFunce[cislochar][0];
01088 z = MatFunce[cislochar][1];
01089 kvyhl = 30;
01090 break;
01091 case 31: y = MatFunce[cislochar][0];
01092 z = MatFunce[cislochar][1];
01093 if (cislochar == 6)
01094 {
01095 z2 = MatFunce[cislochar][2];
01096 }
01097 kvyhl = 31;
01098 break;
01099 case 32: y = MatFunce[cislochar][0];
01100 z = MatFunce[cislochar][1];
01101 kvyhl = 32;
01102 break;
01103 case 33:
01104 break;
01105 default:{
01106 fprintf (stderr,"\n\n unknown definition of material parameter is required");
01107 fprintf (stderr,"\n in function CorD (file %s, line %d)\n",__FILE__,__LINE__);
01108 }
01109 }
01110
01111 }
01112
01113
01114
01115 void saltmat2::binding_izoterm_derivation(double x2, double & derbi)
01116 {
01117
01118 int i = 0;
01119 if ( x2 < 0)
01120 {
01121 x2 = 0;
01122 }
01123
01124 while (x2 > MatData[15][0][i]){
01125 i++;
01126 }
01127 derbi = (MatData [15][1][i] - MatData [15][1][i-1])/(MatData [15][0][i] - MatData [15][0][i-1]);
01128
01129 }