├── FCT_Algo ├── IsIndeterminate ├── README.md ├── fequal ├── float_equal ├── function ├── getlen ├── init ├── isFiniteNumber ├── linsegment ├── liq_vol ├── mass_transfer_rate ├── neighbour └── puckkets_algo /IsIndeterminate: -------------------------------------------------------------------------------- 1 | #include "udf.h" 2 | #include "sg.h" 3 | #include "sg_vof.h" 4 | #include "cxbool.h" 5 | 6 | extern void 7 | IsIndeterminate(double x, cxboolean *IND) 8 | { 9 | *IND = FALSE; 10 | if (x != x) 11 | { 12 | *IND = TRUE; 13 | } 14 | return; 15 | } 16 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FLUENT-VOF-EVAPORATION-CONDENSATION-UDF-Library 2 | UDF Library for Modeling Evaporation and Condensation using VOF model in ANSYS-FLUENT 3 | 4 | This user-defined subroutine library is written to (a) track two-phase cells in the orthogonal solution domain, and (b) to model phase change phenomena like Evaporation/Condensation in the two-phase interface using Modified VOF model. 5 | Readers may refer to " Agarwal, D.K, Welch, S.W.J, Biswas, G., and Durst, F. 2004. Planer Simulation of Bubble Growth in Film Boiling in Near-Critical Water Using a Variant of the VOF Method", J. Heat Transfer, 126, pp. 1-11 " for understanding the sub-routines used in this code. Please cite this paper if you use this code and contact me at bharatbhushansharma15113@gmail.com if you need any clarification regarding this code. 6 | 7 | NOTE: 8 | 1). This is a geometry dimension dependent code, 9 | 2). It is meant for 2D simulations only. 10 | 3). Properties used in this code are those mentioned in above referred paper. 11 | 12 | PS: Most of the sub-routines are explained in the code itself. 13 | 14 | Best Wishes: 15 | 16 | Bharat Bhushan Sharma 17 | Email: bharatbhushansharma15113@gmail.com 18 | -------------------------------------------------------------------------------- /fequal: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | extern cxboolean 8 | fequal(real a, real b) 9 | { 10 | real epsilon = 0.0000001 ; 11 | 12 | if(fabs(a - b) < epsilon ) 13 | { 14 | return TRUE; 15 | } 16 | else 17 | { 18 | return FALSE; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /float_equal: -------------------------------------------------------------------------------- 1 | #include "udf.h" 2 | #include "sg.h" 3 | #include "sg_vof.h" 4 | #include "cxbool.h" 5 | 6 | extern int 7 | float_equal(float f1, float f2) 8 | { 9 | float precision = 0.0000001; 10 | if (((f1 - precision) < f2) && ((f1 + precision) > f2)) 11 | { 12 | return 1; 13 | } 14 | else 15 | { 16 | return 0; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /function: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | 8 | extern void 9 | G_fun(cell_t c, Thread *t, real theta, real *Gfun) 10 | { 11 | /* Constructs approximation to interface shape. Interface is 12 | plane surface surface in each cell. Unit normal is constructed 13 | from liquid volume fraction profile. 14 | also see the G-function of Pucket et al. (JCP, 130, 269-282, 1997) */ 15 | 16 | cell_t cr, cf, cl, ca, crf, cra, clf, cla ; 17 | Thread *tf, *ta, *tr, *tl, *trf, *tra, *tlf, *tla ; 18 | face_t fr,ff,fl,fa,ffr,far,ffl,fal,flfl,frfl,frfr,frff,fraf,fraa; 19 | Thread *tfr, *tff, *tfl, *tfa, *tffr, *tfar, *tffl, *tfal, *tflfl, *tfrfl, *tfrfr, *tfrff, *tfraf, *tfraa; 20 | Thread *t_f, *t_fr, *t_ff, *t_fl, *t_fa; 21 | 22 | Thread *t_liquid = THREAD_SUB_THREAD(t,0); 23 | 24 | real dx, dy; 25 | real nx , ny , normalx , normaly , dvol ; 26 | real voll, voidll, dvoid ; 27 | real xi, yi ; 28 | real lenij ; 29 | real xc[ND_ND], xci[ND_ND], xfrfr[ND_ND], xfrfl[ND_ND], xffr[ND_ND], xfar[ND_ND], xffl[ND_ND], xflfl[ND_ND], xfrff[ND_ND], xfraf[ND_ND], xfraa[ND_ND]; 30 | real dxc, dyc, dxrf, dyrf, dxlf, dylf, dxra, dyra ; 31 | int rr, cc, n, N; 32 | real xp, xpm, xm, xmm, yp, ypm, ym, ymm; 33 | real len; 34 | 35 | cxboolean check; 36 | cxboolean check_r ; 37 | cxboolean check_f ; 38 | cxboolean check_l ; 39 | cxboolean check_a ; 40 | 41 | check = FALSE; 42 | check_r = FALSE; 43 | check_f = FALSE; 44 | check_l = FALSE; 45 | check_a = FALSE; 46 | 47 | C_CENTROID(xc,c,t); 48 | 49 | delta( c, t_liquid, &dx, &dy ); 50 | 51 | 52 | len = C_UDMI(c,t,4); // slen[c]; // REVISED !!!!! 53 | 54 | nx = cos(theta); 55 | ny = sin(theta); 56 | 57 | xi = xc[0] - len * nx ; 58 | yi = xc[1] - len * ny ; 59 | dvol = dx*dy; 60 | (*Gfun) = 0.0; 61 | 62 | 63 | 64 | t_f = C_FACE_THREAD(c,t,0); 65 | if( BOUNDARY_FACE_THREAD_P(t_f) ) 66 | { 67 | // BOUNDARY CELLS ARE NOT CONSIDERED HERE. LATER ON IT MAY BE REQUIRED. 68 | } 69 | else 70 | { 71 | 72 | (fr) = C_FACE(c,t,1); 73 | (tfr) = C_FACE_THREAD(c,t,1); 74 | (fl) = C_FACE(c,t,3); /* --------------------- FOR ---------------------- */ 75 | (tfl) = C_FACE_THREAD(c,t,3); /* ------------------ INTERIOR -------------------- */ 76 | (ff) = C_FACE(c,t,2); /* -------------------- CELLS --------------------- */ 77 | (tff) = C_FACE_THREAD(c,t,2); 78 | (fa) = C_FACE(c,t,0); 79 | (tfa) = C_FACE_THREAD(c,t,0); 80 | 81 | /* ----------- RIGHT FACE ----------- */ 82 | 83 | (cr) = F_C0((fr),(tfr)); 84 | if((cr) == c) 85 | { 86 | (cr) = F_C1((fr),(tfr)); 87 | 88 | (tr) = F_C1_THREAD((fr),(tfr)); 89 | 90 | } 91 | else 92 | { 93 | 94 | (tr) = F_C0_THREAD((fr),(tfr)); 95 | 96 | } 97 | 98 | /* ----------- LEFT FACE ------------ */ 99 | 100 | (cl) = F_C0((fl),(tfl)); 101 | if((cl) == c) 102 | { 103 | (cl) = F_C1((fl),(tfl)); 104 | (tl) = F_C1_THREAD((fl),(tfl)); 105 | } 106 | else 107 | { 108 | (tl) = F_C0_THREAD((fl),(tfl)); 109 | } 110 | 111 | /* ----------- FRONT FACE ------------ */ 112 | 113 | (cf) = F_C0((ff),(tff)); 114 | if((cf) == c) 115 | { 116 | (cf) = F_C1((ff),(tff)); 117 | 118 | (tf) = F_C1_THREAD((ff),(tff)); 119 | 120 | } 121 | else 122 | { 123 | 124 | (tf) = F_C0_THREAD((ff),(tff)); 125 | } 126 | 127 | 128 | /* ------------ AFTER FACE ------------ */ 129 | 130 | (ca) = F_C0((fa),(tfa)); 131 | if((ca) == c) 132 | { 133 | (ca) = F_C1((fa),(tfa)); 134 | (ta) = F_C1_THREAD((fa),(tfa)); 135 | } 136 | else 137 | { 138 | (ta) = F_C0_THREAD((fa),(tfa)); 139 | } 140 | 141 | 142 | c_face_loop((cr),(tr),N) 143 | { 144 | t_fr = C_FACE_THREAD((cr),(tr),N); 145 | if( BOUNDARY_FACE_THREAD_P(t_fr) ) 146 | { 147 | check_r = TRUE; 148 | } 149 | } 150 | 151 | c_face_loop((cf),(tf),N) 152 | { 153 | t_ff = C_FACE_THREAD((cf),(tf),N); 154 | if( BOUNDARY_FACE_THREAD_P(t_ff) ) 155 | { 156 | check_f = TRUE; 157 | } 158 | } 159 | 160 | c_face_loop((cl),(tl),N) 161 | { 162 | t_fl = C_FACE_THREAD((cl),(tl),N); 163 | if( BOUNDARY_FACE_THREAD_P(t_fl) ) 164 | { 165 | check_l = TRUE; 166 | } 167 | } 168 | 169 | c_face_loop((ca),(ta),N) 170 | { 171 | t_fa = C_FACE_THREAD((ca),(ta),N); 172 | if( BOUNDARY_FACE_THREAD_P(t_fa) ) 173 | { 174 | check_a = TRUE; 175 | } 176 | } 177 | 178 | if( check_r || check_f || check_l || check_a ) 179 | { 180 | // BOUNDARY CELLS ARE NOT CONSIDERED HERE. 181 | // Message(" BOUNDARY CELL ENCOUNTERED \n "); 182 | 183 | } 184 | else 185 | { 186 | /* ============== DEFINITION OF SECONDARY NEIGHBOURS ============== */ 187 | 188 | 189 | (ffr) = C_FACE((cr),(tr),2); 190 | (tffr) = C_FACE_THREAD((cr),(tr),2); 191 | 192 | (far) = C_FACE((cr),(tr),0); 193 | (tfar) = C_FACE_THREAD((cr),(tr),0); 194 | 195 | (ffl) = C_FACE((cl),(tl),2); 196 | (tffl) = C_FACE_THREAD((cl),(tl),2); 197 | 198 | (fal) = C_FACE((cl),(tl),0); 199 | (tfal) = C_FACE_THREAD((cl),(tl),0); 200 | 201 | // Message("far, tfar, ffl, tffl, fal, tfal = %u %u %u %u %u %u \n", far, tfar, ffl, tffl, fal, tfal); 202 | 203 | 204 | 205 | /* ======================== (crf,trf) ============================= */ 206 | 207 | (crf) = F_C0((ffr),(tffr)); 208 | if((crf) == (cr)) 209 | { 210 | (crf) = F_C1((ffr),(tffr)); 211 | (trf) = F_C1_THREAD((ffr),(tffr)); 212 | } 213 | else 214 | { 215 | (trf) = F_C0_THREAD((ffr),(tffr)); 216 | } 217 | // Message(" crf = %u \n ", crf); 218 | /* ======================== (cra,tra) ============================= */ 219 | 220 | (cra) = F_C0((far),(tfar)); 221 | if((cra) == (cr)) 222 | { 223 | (cra) = F_C1((far),(tfar)); 224 | (tra) = F_C1_THREAD((far),(tfar)); 225 | } 226 | else 227 | { 228 | (tra) = F_C0_THREAD((far),(tfar)); 229 | } 230 | // Message(" cra = %u \n ", cra); 231 | /* ======================== (clf,tlf) ============================= */ 232 | 233 | (clf) = F_C0((ffl),(tffl)); 234 | if((clf) == (cl)) 235 | { 236 | (clf) = F_C1((ffl),(tffl)); 237 | (tlf) = F_C1_THREAD((ffl),(tffl)); 238 | } 239 | else 240 | { 241 | (tlf) = F_C0_THREAD((ffl),(tffl)); 242 | } 243 | // Message(" clf = %u \n ", clf); 244 | /* ======================== (cla,tla) ============================= */ 245 | 246 | (cla) = F_C0((fal),(tfal)); 247 | if((cla) == (cl)) 248 | { 249 | (cla) = F_C1((fal),(tfal)); 250 | (tla) = F_C1_THREAD((fal),(tfal)); 251 | } 252 | else 253 | { 254 | (tla) = F_C0_THREAD((fal),(tfal)); 255 | } 256 | 257 | 258 | 259 | 260 | for (rr = -1; rr <= 1; ++rr) // REVISED !!!!! 261 | for (cc = -1; cc <= 1; ++cc) // REVISED !!!!! 262 | { 263 | if( rr == 1 && cc == -1 ) 264 | { 265 | C_CENTROID(xci,clf,tlf); 266 | 267 | dxc = xc[0] - xci[0]; 268 | dyc = xc[1] - xci[1]; 269 | C_UDMI(clf,t,4) = len - dxc*nx - dyc*ny ; 270 | C_UDMI(clf,t,2) = nx; 271 | C_UDMI(clf,t,3) = ny; 272 | 273 | } 274 | else if( rr == 1 && cc == 0 ) 275 | { 276 | C_CENTROID(xci,cf,tf); 277 | 278 | dxc = xc[0] - xci[0]; 279 | dyc = xc[1] - xci[1]; 280 | C_UDMI(cf,t,4) = len - dxc*nx - dyc*ny ; 281 | C_UDMI(cf,t,2) = nx; 282 | C_UDMI(cf,t,3) = ny; 283 | } 284 | else if( rr == 1 && cc == 1 ) 285 | { 286 | C_CENTROID(xci,crf,trf); 287 | 288 | dxc = xc[0] - xci[0]; 289 | dyc = xc[1] - xci[1]; 290 | C_UDMI(crf,t,4) = len - dxc*nx - dyc*ny ; 291 | C_UDMI(crf,t,2) = nx; 292 | C_UDMI(crf,t,3) = ny; 293 | } 294 | else if( rr == 0 && cc == -1 ) 295 | { 296 | C_CENTROID(xci,cl,tl); 297 | 298 | dxc = xc[0] - xci[0]; 299 | dyc = xc[1] - xci[1]; 300 | C_UDMI(cl,t,4) = len - dxc*nx - dyc*ny ; 301 | C_UDMI(cl,t,2) = nx; 302 | C_UDMI(cl,t,3) = ny; 303 | } 304 | else if( rr == 0 && cc == 0 ) 305 | { 306 | goto SUPERMAN; 307 | } 308 | else if( rr == 0 && cc == 1 ) 309 | { 310 | C_CENTROID(xci,cr,tr); 311 | 312 | dxc = xc[0] - xci[0]; 313 | dyc = xc[1] - xci[1]; 314 | C_UDMI(cr,t,4) = len - dxc*nx - dyc*ny ; 315 | C_UDMI(cr,t,2) = nx; 316 | C_UDMI(cr,t,3) = ny; 317 | } 318 | else if( rr == - 1 && cc == - 1 ) 319 | { 320 | C_CENTROID(xci,cla,tla); 321 | 322 | dxc = xc[0] - xci[0]; 323 | dyc = xc[1] - xci[1]; 324 | C_UDMI(cla,t,4) = len - dxc*nx - dyc*ny ; 325 | C_UDMI(cla,t,2) = nx; 326 | C_UDMI(cla,t,3) = ny; 327 | } 328 | else if( rr == - 1 && cc == 0 ) 329 | { 330 | C_CENTROID(xci,ca,ta); 331 | 332 | dxc = xc[0] - xci[0]; 333 | dyc = xc[1] - xci[1]; 334 | C_UDMI(ca,t,4) = len - dxc*nx - dyc*ny ; 335 | C_UDMI(ca,t,2) = nx; 336 | C_UDMI(ca,t,3) = ny; 337 | } 338 | else if( rr == - 1 && cc == 1 ) 339 | { 340 | C_CENTROID(xci,cra,tra); 341 | 342 | dxc = xc[0] - xci[0]; 343 | dyc = xc[1] - xci[1]; 344 | C_UDMI(cra,t,4) = len - dxc*nx - dyc*ny ; 345 | C_UDMI(cra,t,2) = nx; 346 | C_UDMI(cra,t,3) = ny; 347 | } 348 | 349 | 350 | 351 | 352 | frfr = C_FACE(crf, trf, 1); 353 | tfrfr = C_FACE_THREAD(crf, trf, 1); 354 | 355 | frfl = C_FACE(crf, trf, 3); 356 | tfrfl = C_FACE_THREAD(crf, trf, 3); 357 | 358 | frff = C_FACE(crf, trf, 2); 359 | tfrff = C_FACE_THREAD(crf, trf, 2); 360 | 361 | ffr = C_FACE(crf, trf, 0); 362 | tffr = C_FACE_THREAD(crf, trf, 0); 363 | 364 | ffl = C_FACE(cf, tf, 3); 365 | tffl = C_FACE_THREAD(cf, tf, 3); 366 | 367 | flfl = C_FACE(clf, tlf, 3); 368 | tflfl = C_FACE_THREAD(clf, tlf, 3); 369 | 370 | fraf = C_FACE(cr, tr, 0); 371 | tfraf = C_FACE_THREAD(cr, tr, 0); 372 | 373 | fraa = C_FACE(cra, tra, 0); 374 | tfraa = C_FACE_THREAD(cra, tra, 0); 375 | 376 | F_CENTROID(xfrfr,frfr, tfrfr); 377 | F_CENTROID(xfrfl,frfl, tfrfl); 378 | F_CENTROID(xffl,ffl, tffl); 379 | F_CENTROID(xflfl,flfl, tflfl); 380 | F_CENTROID(xfrff,frff, tfrff); 381 | F_CENTROID(xffr,ffr, tffr); 382 | F_CENTROID(xfraf,fraf, tfraf); 383 | F_CENTROID(xfraa,fraa, tfraa); 384 | 385 | // Message("xp, xmm, yp, ymm = %f %f %f %f \n", xp, xmm, yp, ymm); 386 | 387 | 388 | if ( rr == 1 && cc == - 1 ) 389 | { 390 | if( clf == 1795 ) 391 | { 392 | // Message(" 1,-1 clf, t_liquid, xflfl[0], xffl[0], xffr[1], xfrff[1] = %u %u %f %f %f %f \n", clf, t_liquid, xflfl[0], xffl[0], xffr[1], xfrff[1]); 393 | } 394 | 395 | 396 | lgvol( clf, t_liquid, xflfl[0], xffl[0], xffr[1], xfrff[1], &voll ); 397 | voidll = voll/dvol; 398 | dvoid = C_VOF(clf,t_liquid) - voidll; 399 | // Message(" 1,-1 voll = %f \n", voll); 400 | } 401 | else if ( rr == 1 && cc == 0 ) 402 | { 403 | // Message(" 1,0 xffl[0], xfrfl[0], xffr[1], xfrff[1] = %f %f %f %f \n", xffl[0], xfrfl[0], xffr[1], xfrff[1]); 404 | lgvol( cf, t_liquid, xffl[0], xfrfl[0], xffr[1], xfrff[1], &voll ); 405 | voidll = voll/dvol; 406 | dvoid = C_VOF(cf,t_liquid) - voidll; 407 | // Message(" 1,0 voll = %f \n", voll); 408 | } 409 | else if ( rr == 1 && cc == 1 ) 410 | { 411 | // Message(" 1,1 xfrfl[0], xfrfr[0], xffr[1], xfrff[1] = %f %f %f %f \n", xfrfl[0], xfrfr[0], xffr[1], xfrff[1] ); 412 | lgvol( crf, t_liquid, xfrfl[0], xfrfr[0], xffr[1], xfrff[1], &voll ); 413 | voidll = voll/dvol; 414 | dvoid = C_VOF(crf,t_liquid) - voidll; 415 | // Message(" 1,1 voll = %f \n", voll); 416 | } 417 | else if ( rr == 0 && cc == - 1 ) 418 | { 419 | // Message(" 0,-1 xflfl[0], xffl[0], xfraf[1], xffr[1] = %f %f %f %f \n", xflfl[0], xffl[0], xfraf[1], xffr[1]); 420 | lgvol( cl, t_liquid, xflfl[0], xffl[0], xfraf[1], xffr[1], &voll ); 421 | voidll = voll/dvol; 422 | dvoid = C_VOF(cl,t_liquid) - voidll; 423 | // Message(" 0,-1 voll = %f \n", voll); 424 | } 425 | else if ( rr == 0 && cc == 1 ) 426 | { 427 | // Message(" 0,1 xfrfl[0], xfrfr[0], xfraf[1], xffr[1] = %f %f %f %f \n", xfrfl[0], xfrfr[0], xfraf[1], xffr[1]); 428 | lgvol( cr, t_liquid, xfrfl[0], xfrfr[0], xfraf[1], xffr[1], &voll ); 429 | voidll = voll/dvol; 430 | dvoid = C_VOF(cr,t_liquid) - voidll; 431 | // Message(" 0,1 voll = %f \n", voll); 432 | } 433 | else if ( rr == -1 && cc == - 1 ) 434 | { 435 | // Message(" -1,-1 xflfl[0], xffl[0], xfraa[1], xfraf[1] = %f %f %f %f \n", xflfl[0], xffl[0], xfraa[1], xfraf[1]); 436 | lgvol( cla, t_liquid, xflfl[0], xffl[0], xfraa[1], xfraf[1], &voll ); 437 | voidll = voll/dvol; 438 | dvoid = C_VOF(cla,t_liquid) - voidll; 439 | // Message(" -1,-1 voll = %f \n", voll); 440 | } 441 | else if ( rr == - 1 && cc == 0 ) 442 | { 443 | // Message(" -1,0 xffl[0], xfrfl[0], xfraa[1], xfraf[1] = %f %f %f %f \n", xffl[0], xfrfl[0], xfraa[1], xfraf[1]); 444 | lgvol( ca, t_liquid, xffl[0], xfrfl[0], xfraa[1], xfraf[1], &voll ); 445 | voidll = voll/dvol; 446 | dvoid = C_VOF(ca,t_liquid) - voidll; 447 | // Message(" -1,0 voll = %f \n", voll); 448 | } 449 | else if ( rr == - 1 && cc == 1 ) 450 | { 451 | // Message(" -1,1 xfrfl[0], xfrfr[0], xfraa[1], xfraf[1] = %f %f %f %f \n", xfrfl[0], xfrfr[0], xfraa[1], xfraf[1]); 452 | lgvol( cra, t_liquid, xfrfl[0], xfrfr[0], xfraa[1], xfraf[1], &voll ); 453 | voidll = voll/dvol; 454 | dvoid = C_VOF(cra,t_liquid) - voidll; 455 | // Message(" -1,1 voll = %f \n", voll); 456 | } 457 | 458 | (*Gfun) = (*Gfun) + dvoid*dvoid ; 459 | // Message( "Gfun = %u %d %d %.15f %f \n", c, rr, cc, (*Gfun), dvoid ); 460 | SUPERMAN: ; 461 | } 462 | } 463 | } 464 | } 465 | -------------------------------------------------------------------------------- /getlen: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | /*--------- get_len function ----------- */ 8 | /* This function uses SECANT ITERATIVE METHOD for calculating the value of 9 | correct len(which is distance between midpoint of interface and the centroid of that cell) in a cell. 10 | Strategy is simple. Just use first two approximate values of len(here diagonals are used) then employe 11 | SECANT method which should stop once void fraction estimated from this len value is matching with actual void fraction from 12 | Fluent SOlver. */ 13 | 14 | // IMPORTANT NOTE: In This Macro Boundary cells are not considered. SO if we are not considering boundary cells then this part becomes grid geometry independent. 15 | // But if in future we include boundary cells as well then This part needs to be changed for different geometry. 16 | extern void 17 | get_len(cell_t c, Thread *t, real nx, real ny ) 18 | { 19 | /* =========================== DECLARATION ============================ */ 20 | 21 | face_t fr,ff,fl,fa; 22 | Thread *tfr, *tff, *tfl, *tfa; 23 | Thread *t_f; 24 | Node *node; 25 | int niter,itermx; 26 | real voll; 27 | int n, nvert,a; 28 | real xr, yf, xl, ya, xc[ND_ND], XR[ND_ND], XF[ND_ND], XL[ND_ND], XA[ND_ND]; 29 | real dx,dy; 30 | 31 | real leng , lenp1 , lenm1 , vdfm1 , vdf; 32 | real ndiag1, ndiag2, mxslen, epslen; 33 | real lvol, vol ; 34 | real volume , err, errm1, denerr, void_t; 35 | real toler; 36 | real *ptl, *ptr, *pta, *ptf ; 37 | real xi, yi; 38 | real xv1, xv2, yv1, yv2; 39 | real tx, ty, eps; 40 | real xvert[5], yvert[5], slope , slopi; 41 | real xint1, xint2, yint1, yint2; 42 | real iface_int1, iface_int2 ; 43 | real xtest, ytest, dot_prod; 44 | real len; 45 | 46 | // Message(" c, C_UDMI(c,t,7) = %u %f \n", c, C_UDMI(c,t,7) ); 47 | 48 | delta( c, t, &dx, &dy ); 49 | // nmx(c,t, &nx, &ny); 50 | vol = dx*dy; 51 | 52 | C_CENTROID(xc,c,t); 53 | 54 | t_f = C_FACE_THREAD(c,t,0); 55 | 56 | if(BOUNDARY_FACE_THREAD_P(t_f)) 57 | { 58 | /* 59 | c_node_loop(c,t,a) 60 | { 61 | node = C_NODE(c,t,a); 62 | 63 | 64 | if( NODE_X(node) == 0 ) 65 | { 66 | fr = C_FACE(c,t,2); 67 | tfr = C_FACE_THREAD(c,t,2); 68 | fl = C_FACE(c,t,0); 69 | tfl = C_FACE_THREAD(c,t,0); 70 | ff = C_FACE(c,t,3); 71 | tff = C_FACE_THREAD(c,t,3); 72 | fa = C_FACE(c,t,1); 73 | tfa = C_FACE_THREAD(c,t,1); 74 | } 75 | 76 | if( NODE_X(node)*1000000 == 1135 ) 77 | { 78 | fr = C_FACE(c,t,0); 79 | tfr = C_FACE_THREAD(c,t,0); 80 | fl = C_FACE(c,t,2); 81 | tfl = C_FACE_THREAD(c,t,2); 82 | ff = C_FACE(c,t,1); 83 | tff = C_FACE_THREAD(c,t,1); 84 | fa = C_FACE(c,t,3); 85 | tfa = C_FACE_THREAD(c,t,3); 86 | } 87 | 88 | if( NODE_Y(node) == 0 ) 89 | { 90 | fr = C_FACE(c,t,1); 91 | tfr = C_FACE_THREAD(c,t,1); 92 | fl = C_FACE(c,t,3); 93 | tfl = C_FACE_THREAD(c,t,3); 94 | ff = C_FACE(c,t,2); 95 | tff = C_FACE_THREAD(c,t,2); 96 | fa = C_FACE(c,t,0); 97 | tfa = C_FACE_THREAD(c,t,0); 98 | } 99 | 100 | if( NODE_Y(node)*100000 == 227 ) 101 | { 102 | fr = C_FACE(c,t,3); 103 | tfr = C_FACE_THREAD(c,t,3); 104 | fl = C_FACE(c,t,1); 105 | tfl = C_FACE_THREAD(c,t,1); 106 | ff = C_FACE(c,t,0); 107 | tff = C_FACE_THREAD(c,t,0); 108 | fa = C_FACE(c,t,2); 109 | tfa = C_FACE_THREAD(c,t,2); 110 | } 111 | } 112 | */ 113 | } 114 | else 115 | { 116 | 117 | fr = C_FACE(c,t,1); 118 | tfr = C_FACE_THREAD(c,t,1); 119 | fl = C_FACE(c,t,3); /* --------------------- FOR ---------------------- */ 120 | tfl = C_FACE_THREAD(c,t,3); /* ------------------ INTERIOR -------------------- */ 121 | ff = C_FACE(c,t,2); /* -------------------- CELLS --------------------- */ 122 | tff = C_FACE_THREAD(c,t,2); 123 | fa = C_FACE(c,t,0); 124 | tfa = C_FACE_THREAD(c,t,0); 125 | 126 | 127 | 128 | F_CENTROID(XR,fr,tfr); 129 | F_CENTROID(XF,ff,tff); 130 | F_CENTROID(XL,fl,tfl); 131 | F_CENTROID(XA,fa,tfa); 132 | 133 | xr = XR[0] ; 134 | yf = XF[1] ; 135 | xl = XL[0] ; 136 | ya = XA[1] ; 137 | 138 | ptl = &xl; 139 | ptr = &xr; 140 | pta = &ya; 141 | ptf = &yf; 142 | 143 | // Message("nx, ny = %f %f \n", nx, ny); 144 | ndiag1 = fabs( dx*(nx) + dy*(ny) ); 145 | ndiag2 = fabs( - dx*(nx) + dy*(ny) ); 146 | 147 | // Pick the maximum of these dot products and use half that distance for max slen 148 | mxslen = 0.5*max( ndiag1, ndiag2 ); 149 | // Message("dx, dy, mxslen = %g %g %g \n", dx, dy, mxslen); 150 | // Message("xc, yc = %g %g \n", xc[0], xc[1]); 151 | toler = 0.0001; 152 | volume = dx*dy; 153 | 154 | 155 | 156 | void_t = C_VOF(c,t); 157 | void_t = VDMNMX(void_t); 158 | 159 | // Message(" void_t = %f \n " , void_t); 160 | 161 | /* ==================================== use secant method ==================================== */ 162 | 163 | /* =========== first starting value and perturbation length for secant method =========== */ 164 | /* --------------------------------------------------------------------------------- */ 165 | epslen = 0.05*mxslen; 166 | lenm1 = epslen; 167 | // (*slen) = lenm1; 168 | C_UDMI(c,t,4) = lenm1; 169 | // Message(" 1st slen = %g \n " , C_UDMI(c,t,4)); 170 | lgvol( c, t, xl, xr, ya, yf, &lvol ); 171 | // Message(" nx, ny, voll first value = %f %f %g \n " , nx, ny, lvol); 172 | 173 | vdfm1 = lvol/vol; 174 | errm1 = vdfm1 - void_t; 175 | if (fabs(errm1) < toler) 176 | { 177 | lenp1 = lenm1; 178 | goto HI; 179 | } 180 | 181 | /* =================== second starting value for secant method ==================== */ 182 | leng = lenm1 - epslen; 183 | // (*slen) = leng; 184 | C_UDMI(c,t,4) = leng; 185 | // Message("2nd slen = %g \n " , C_UDMI(c,t,4)); 186 | /* =================== main iteration loop - secant method ======================== */ 187 | itermx = 100; 188 | for (niter = 1; niter < itermx; niter++) 189 | { 190 | lgvol( c, t, xl, xr, ya, yf, &lvol ); 191 | 192 | vdf = lvol/vol; 193 | err = vdf - void_t; 194 | denerr = err - errm1; 195 | // Message("c, slen, lvol = %u %g %g \n", c, C_UDMI(c,t,4), lvol); 196 | 197 | // Message("c, niter, nx, ny, void_t, vdf = %u %d %f %f %.15f %.15f \n \n " , c, niter, nx, ny, void_t, vdf); 198 | 199 | /* if( vdf > 1.0 ) 200 | { 201 | goto HI; 202 | } */ 203 | 204 | // Message("denerr %.15f \n", denerr); 205 | 206 | if(fequal(denerr , 0.0)) 207 | { 208 | // Message( "bug in iface = niter, c, err, slen, lvol, nx, ny %d %u %g %g %g %f %f \n \n", niter, c, err, C_UDMI(c,t,4), lvol, nx, ny); 209 | C_UDMI(c,t,5) = fabs(err); 210 | // Message(" void_t,vdfm1,vdf = %.10f %.10f %.10f \n ", void_t,vdfm1,vdf ); 211 | // Message(" err,errm1 = %.10f %.10f \n ", err,errm1 ); 212 | // Message(" slen = %.15f \n ", C_UDMI(c,t,4) ); 213 | // Message(" nx,ny = %.10f %.10f \n \n ", nx,ny ); 214 | // return; 215 | // denerr = -0.1 ; 216 | return; 217 | } 218 | 219 | lenp1 = leng - err*(leng - lenm1)/denerr; 220 | 221 | if (fabs(err) < toler) 222 | { 223 | // Message(" err = %u %g \n \n ", c, err ); 224 | // Message("c, slen, lvol, nx, ny = %u %g %g %f %f \n", c, C_UDMI(c,t,4), lvol, nx, ny); 225 | C_UDMI(c,t,5) = fabs(err); // udm memory for accessing err value in LVIRA loop. 226 | goto HI; 227 | } 228 | 229 | 230 | 231 | lenm1 = leng; 232 | leng = lenp1; 233 | // (*slen) = leng; 234 | errm1 = err; 235 | C_UDMI(c,t,4) = leng; 236 | } 237 | HI: ; 238 | // Message( " HI !!! I am in Get_Len. \n " ); 239 | lenp1 = min(mxslen, max(-mxslen,lenp1)); 240 | 241 | // (*slen) = lenp1; 242 | C_UDMI(c,t,4) = lenp1; 243 | // Message("c, slen, void_t, vdf = %u %g %.15f %.15f \n " , c, C_UDMI(c,t,4), void_t, vdf ); 244 | } 245 | HI1:; 246 | 247 | return; 248 | } 249 | -------------------------------------------------------------------------------- /init: -------------------------------------------------------------------------------- 1 | 2 | 3 | #include "udf.h" 4 | #include "sg.h" 5 | #include "sg_vof.h" 6 | #include "cxbool.h" 7 | 8 | 9 | /* THIS PART is used for initialising nx, ny values using LVIRA method. 10 | Refer G.Biswas Notes and iface() subroutine file for further clarification. */ 11 | 12 | // IMPORTANT NOTE: In This Macro Boundary cells are not considered. SO if we are not considering boundary cells then this part becomes grid geometry independent. 13 | // But if in future we include boundary cells as well then This part needs to be changed for different geometry. 14 | 15 | hello ; 16 | 17 | DEFINE_INIT(normal,d) 18 | { // MODIFIED PART OF THIS UDF............. 19 | Thread *t, *t_liquid; 20 | cell_t c, cf, ca,cr,cl,crf,cra,clf,cla; 21 | Thread *tf,*ta,*tr,*tl,*trf,*tra,*tlf,*tla; 22 | Thread *t_f; 23 | Node *node; 24 | face_t fr,ff,fl,fa,ffr,far,ffl,fal,frp,flp,frm,flm; 25 | Thread *tfr,*tff,*tfl,*tfa,*tffr,*tfar,*tffl,*tfal, *tfrp, *tflp, *tfrm, *tflm; 26 | real X[ND_ND],XC[ND_ND]; 27 | float XS[3]; 28 | int i,j,k,n,nr,nl,nf,na,N,r,l,f,a, iphs; 29 | real xc[ND_ND],xcr[ND_ND]; 30 | cell_t *cell; 31 | Thread *threadf, *threadface; 32 | Thread *t_fr, *t_ff, *t_fl, *t_fa; 33 | 34 | cxboolean check_r ; 35 | cxboolean check_f ; 36 | cxboolean check_l ; 37 | cxboolean check_a ; 38 | cxboolean boundary ; 39 | real nx, ny, ax, ay; 40 | real fe,fw,fn,fs; 41 | real rmag2,rmag; 42 | real len; 43 | 44 | int niter,itermx,maxiter,ifter; 45 | real nxy, nyy, sleny; 46 | real thetay, thetal; 47 | real Gfunp , Gerr, theta, dtheta, theta_inc; 48 | real Gfunpr, Gprime, thetar, nxr, nyr; 49 | real save_len[3][3], save_nx[3][3], save_ny[3][3]; 50 | 51 | thread_loop_c(t,d) 52 | { 53 | if (FLUID_THREAD_P(t)) 54 | { 55 | begin_c_loop_all(c,t) 56 | { 57 | check_r = FALSE; 58 | check_f = FALSE; 59 | check_l = FALSE; 60 | check_a = FALSE; 61 | boundary = FALSE; 62 | 63 | 64 | t_liquid = THREAD_SUB_THREAD(t,0); 65 | 66 | iphs = C_UDMI(c,t,1); //iphase[c];; 67 | 68 | if ( iphs != 2 ) 69 | { 70 | // Message(" Single phase cell \n"); 71 | goto END; 72 | } 73 | else 74 | { 75 | // Message(" Mixture phase cell \n"); 76 | t_f = C_FACE_THREAD(c,t,0); 77 | 78 | if(BOUNDARY_FACE_THREAD_P(t_f)) 79 | { 80 | boundary = TRUE; 81 | 82 | /* c_node_loop(c,t,a) 83 | { 84 | node = C_NODE(c,t,a); 85 | 86 | if( NODE_Y(node) == 0 ) 87 | { 88 | 89 | if( NODE_X(node) == 0 ) 90 | { 91 | ff = C_FACE(c,t,3); 92 | tff = C_FACE_THREAD(c,t,3); 93 | 94 | fr = C_FACE(c,t,2); 95 | tfr = C_FACE_THREAD(c,t,2); 96 | 97 | // ----------- RIGHT FACE ----------- 98 | 99 | cr = F_C0(fr,tfr); 100 | if(cr == c) 101 | { 102 | cr = F_C1(fr,tfr); 103 | tr = F_C1_THREAD(fr,tfr); 104 | } 105 | else 106 | { 107 | tr = F_C0_THREAD(fr,tfr); 108 | } 109 | // ----------- FRONT FACE ------------ 110 | 111 | cf = F_C0(ff,tff); 112 | if(cf == c) 113 | { 114 | cf = F_C1(ff,tff); 115 | tf = F_C1_THREAD(ff,tff); 116 | } 117 | else 118 | { 119 | tf = F_C0_THREAD(ff,tff); 120 | } 121 | 122 | frp = C_FACE(cf,tf,2); 123 | tfrp = C_FACE_THREAD(cf,tf,2); 124 | 125 | // ----------- crf cell ----------- 126 | 127 | crf = F_C0(frp,tfrp); 128 | if(crf == cf) 129 | { 130 | crf = F_C1(frp,tfrp); 131 | trf = F_C1_THREAD(frp,tfrp); 132 | } 133 | else 134 | { 135 | trf = F_C0_THREAD(frp,tfrp); 136 | } 137 | 138 | 139 | fe = (1.0/4.0)*(0.0 + 2*C_VOF(cr,t_liquid) + C_VOF(crf,t_liquid)); 140 | fw = (1.0/4.0)*(0.0); 141 | fn = (1.0/4.0)*(0.0 + 2*C_VOF(cf,t_liquid) + C_VOF(crf,t_liquid)); 142 | fs = (1.0/4.0)*(0.0); 143 | 144 | 145 | } 146 | else if( NODE_X(node)*1000000 == 1135 ) 147 | { 148 | ff = C_FACE(c,t,2); 149 | tff = C_FACE_THREAD(c,t,2); 150 | 151 | fl = C_FACE(c,t,3); 152 | tfl = C_FACE_THREAD(c,t,3); 153 | 154 | // ----------- LEFT FACE ------------ 155 | 156 | cl = F_C0(fl,tfl); 157 | if(cl == c) 158 | { 159 | cl = F_C1(fl,tfl); 160 | tl = F_C1_THREAD(fl,tfl); 161 | } 162 | else 163 | { 164 | tl = F_C0_THREAD(fl,tfl); 165 | } 166 | 167 | 168 | // ----------- FRONT FACE ------------ 169 | 170 | cf = F_C0(ff,tff); 171 | if(cf == c) 172 | { 173 | cf = F_C1(ff,tff); 174 | tf = F_C1_THREAD(ff,tff); 175 | } 176 | else 177 | { 178 | tf = F_C0_THREAD(ff,tff); 179 | } 180 | 181 | flp = C_FACE(cf,tf,2); 182 | tflp = C_FACE_THREAD(cf,tf,2); 183 | 184 | // ----------- clf cell ----------- 185 | 186 | clf = F_C0(flp,tflp); 187 | if(clf == cf) 188 | { 189 | clf = F_C1(flp,tflp); 190 | tlf = F_C1_THREAD(flp,tflp); 191 | } 192 | else 193 | { 194 | tlf = F_C0_THREAD(flp,tflp); 195 | } 196 | 197 | fe = (1.0/4.0)*(0.0); 198 | fw = (1.0/4.0)*(0.0 + 2*C_VOF(cl,t_liquid) + C_VOF(clf,t_liquid)); 199 | fn = (1.0/4.0)*(C_VOF(clf,t_liquid) + 2*C_VOF(cf,t_liquid) + 0.0); 200 | fs = (1.0/4.0)*(0.0); 201 | 202 | } 203 | else 204 | { 205 | ff = C_FACE(c,t,2); 206 | tff = C_FACE_THREAD(c,t,2); 207 | 208 | fr = C_FACE(c,t,1); 209 | tfr = C_FACE_THREAD(c,t,1); 210 | 211 | fl = C_FACE(c,t,3); 212 | tfl = C_FACE_THREAD(c,t,3); 213 | 214 | // ----------- RIGHT FACE ----------- 215 | 216 | cr = F_C0(fr,tfr); 217 | if(cr == c) 218 | { 219 | cr = F_C1(fr,tfr); 220 | tr = F_C1_THREAD(fr,tfr); 221 | } 222 | else 223 | { 224 | tr = F_C0_THREAD(fr,tfr); 225 | } 226 | 227 | // ----------- LEFT FACE ------------ 228 | 229 | cl = F_C0(fl,tfl); 230 | if(cl == c) 231 | { 232 | cl = F_C1(fl,tfl); 233 | tl = F_C1_THREAD(fl,tfl); 234 | } 235 | else 236 | { 237 | tl = F_C0_THREAD(fl,tfl); 238 | } 239 | 240 | 241 | // ----------- FRONT FACE ------------ 242 | 243 | cf = F_C0(ff,tff); 244 | if(cf == c) 245 | { 246 | cf = F_C1(ff,tff); 247 | tf = F_C1_THREAD(ff,tff); 248 | } 249 | else 250 | { 251 | tf = F_C0_THREAD(ff,tff); 252 | } 253 | 254 | frp = C_FACE(cf,tf,1); 255 | tfrp = C_FACE_THREAD(cf,tf,1); 256 | 257 | flp = C_FACE(cf,tf,3); 258 | tflp = C_FACE_THREAD(cf,tf,3); 259 | 260 | // ----------- crf cell ----------- 261 | 262 | crf = F_C0(frp,tfrp); 263 | if(crf == cf) 264 | { 265 | crf = F_C1(frp,tfrp); 266 | trf = F_C1_THREAD(frp,tfrp); 267 | } 268 | else 269 | { 270 | trf = F_C0_THREAD(frp,tfrp); 271 | } 272 | 273 | // ----------- clf cell ----------- 274 | 275 | clf = F_C0(flp,tflp); 276 | if(clf == cf) 277 | { 278 | clf = F_C1(flp,tflp); 279 | tlf = F_C1_THREAD(flp,tflp); 280 | } 281 | else 282 | { 283 | tlf = F_C0_THREAD(flp,tflp); 284 | } 285 | 286 | fe = (1.0/4.0)*(0.0 + 2*C_VOF(cr,t_liquid) + C_VOF(crf,t_liquid)); 287 | fw = (1.0/4.0)*(0.0 + 2*C_VOF(cl,t_liquid) + C_VOF(clf,t_liquid)); 288 | fn = (1.0/4.0)*(C_VOF(clf,t_liquid) + 2*C_VOF(cf,t_liquid) + C_VOF(crf,t_liquid)); 289 | fs = (1.0/4.0)*(0.0); 290 | 291 | } 292 | 293 | 294 | 295 | } 296 | 297 | if( ( NODE_X(node)*100000 == 0.0 ) && ( NODE_Y(node) > 0.0 ) && ( NODE_Y(node)*100000 != 227 ) ) 298 | { 299 | ff = C_FACE(c,t,3); 300 | tff = C_FACE_THREAD(c,t,3); 301 | fr = C_FACE(c,t,2); 302 | tfr = C_FACE_THREAD(c,t,2); 303 | fa = C_FACE(c,t,1); 304 | tfa = C_FACE_THREAD(c,t,1); 305 | 306 | // ----------- FRONT FACE ------------ 307 | 308 | cf = F_C0(ff,tff); 309 | if(cf == c) 310 | { 311 | cf = F_C1(ff,tff); 312 | tf = F_C1_THREAD(ff,tff); 313 | } 314 | else 315 | { 316 | tf = F_C0_THREAD(ff,tff); 317 | } 318 | 319 | // ----------- RIGHT FACE ----------- 320 | 321 | cr = F_C0(fr,tfr); 322 | if(cr == c) 323 | { 324 | cr = F_C1(fr,tfr); 325 | tr = F_C1_THREAD(fr,tfr); 326 | } 327 | else 328 | { 329 | tr = F_C0_THREAD(fr,tfr); 330 | } 331 | 332 | // ------------ AFTER FACE ------------ 333 | 334 | ca = F_C0(fa,tfa); 335 | if(ca == c) 336 | { 337 | ca = F_C1(fa,tfa); 338 | ta = F_C1_THREAD(fa,tfa); 339 | } 340 | else 341 | { 342 | ta = F_C0_THREAD(fa,tfa); 343 | } 344 | 345 | far = C_FACE(cr,tr,0); 346 | tfar = C_FACE_THREAD(cr,tr,0); 347 | 348 | ffr = C_FACE(cr,tr,2); 349 | tffr = C_FACE_THREAD(cr,tr,2); 350 | 351 | // ----------- crf cell ----------- 352 | 353 | crf = F_C0(ffr,tffr); 354 | if(crf == cr) 355 | { 356 | crf = F_C1(ffr,tffr); 357 | trf = F_C1_THREAD(ffr,tffr); 358 | } 359 | else 360 | { 361 | trf = F_C0_THREAD(ffr,tffr); 362 | } 363 | 364 | // ----------- cra cell ----------- 365 | 366 | cra = F_C0(far,tfar); 367 | if(crf == cr) 368 | { 369 | crf = F_C1(far,tfar); 370 | trf = F_C1_THREAD(far,tfar); 371 | } 372 | else 373 | { 374 | trf = F_C0_THREAD(far,tfar); 375 | } 376 | 377 | fe = (1.0/4.0)*(C_VOF(cra,t_liquid) + 2*C_VOF(cr,t_liquid) + C_VOF(crf,t_liquid)); 378 | fw = (1.0/4.0)*(0.0); 379 | fn = (1.0/4.0)*(0.0 + 2*C_VOF(cf,t_liquid) + C_VOF(crf,t_liquid)); 380 | fs = (1.0/4.0)*(0.0 + 2*C_VOF(ca,t_liquid) + C_VOF(cra,t_liquid)); 381 | 382 | } 383 | 384 | if( ( NODE_X(node)*1000000 == 1135 ) && ( NODE_Y(node) > 0.0 ) && ( NODE_Y(node)*100000 != 227 ) ) 385 | { 386 | ff = C_FACE(c,t,1); 387 | tff = C_FACE_THREAD(c,t,1); 388 | 389 | fl = C_FACE(c,t,2); 390 | tfl = C_FACE_THREAD(c,t,2); 391 | 392 | fa = C_FACE(c,t,3); 393 | tfa = C_FACE_THREAD(c,t,3); 394 | 395 | // ----------- FRONT FACE ------------ 396 | 397 | cf = F_C0(ff,tff); 398 | if(cf == c) 399 | { 400 | cf = F_C1(ff,tff); 401 | tf = F_C1_THREAD(ff,tff); 402 | } 403 | else 404 | { 405 | tf = F_C0_THREAD(ff,tff); 406 | } 407 | 408 | // ----------- LEFT FACE ------------ 409 | 410 | cl = F_C0(fl,tfl); 411 | if(cl == c) 412 | { 413 | cl = F_C1(fl,tfl); 414 | tl = F_C1_THREAD(fl,tfl); 415 | } 416 | else 417 | { 418 | tl = F_C0_THREAD(fl,tfl); 419 | } 420 | 421 | // ------------ AFTER FACE ------------ 422 | 423 | ca = F_C0(fa,tfa); 424 | if(ca == c) 425 | { 426 | ca = F_C1(fa,tfa); 427 | ta = F_C1_THREAD(fa,tfa); 428 | } 429 | else 430 | { 431 | ta = F_C0_THREAD(fa,tfa); 432 | } 433 | 434 | fal = C_FACE(cl,tl,0); 435 | tfal = C_FACE_THREAD(cl,tl,0); 436 | 437 | ffl = C_FACE(cl,tl,2); 438 | tffl = C_FACE_THREAD(cl,tl,2); 439 | 440 | // ----------- clf cell ----------- 441 | 442 | clf = F_C0(ffl,tffl); 443 | if(clf == cl) 444 | { 445 | clf = F_C1(ffl,tffl); 446 | tlf = F_C1_THREAD(ffl,tffl); 447 | } 448 | else 449 | { 450 | tlf = F_C0_THREAD(ffl,tffl); 451 | } 452 | 453 | // ----------- cla cell ----------- 454 | 455 | cla = F_C0(fal,tfal); 456 | if(clf == cl) 457 | { 458 | clf = F_C1(fal,tfal); 459 | tlf = F_C1_THREAD(fal,tfal); 460 | } 461 | else 462 | { 463 | tlf = F_C0_THREAD(fal,tfal); 464 | } 465 | 466 | fe = (1.0/4.0)*(0.0); 467 | fw = (1.0/4.0)*(C_VOF(cla,t_liquid) + 2*C_VOF(cl,t_liquid) + C_VOF(clf,t_liquid)); 468 | fn = (1.0/4.0)*(C_VOF(clf,t_liquid) + 2*C_VOF(cf,t_liquid) + 0.0); 469 | fs = (1.0/4.0)*(C_VOF(cla,t_liquid) + 2*C_VOF(ca,t_liquid) + 0.0); 470 | 471 | } 472 | 473 | 474 | 475 | } */ 476 | 477 | 478 | } 479 | else 480 | { 481 | // Message("Interior Mixture cell \n"); 482 | fr = C_FACE(c,t,1); 483 | tfr = C_FACE_THREAD(c,t,1); 484 | fl = C_FACE(c,t,3); /* --------------------- FOR ---------------------- */ 485 | tfl = C_FACE_THREAD(c,t,3); /* ------------------ INTERIOR -------------------- */ 486 | ff = C_FACE(c,t,2); /* -------------------- CELLS --------------------- */ 487 | tff = C_FACE_THREAD(c,t,2); 488 | fa = C_FACE(c,t,0); 489 | tfa = C_FACE_THREAD(c,t,0); 490 | 491 | 492 | 493 | /* ----------- RIGHT FACE ----------- */ 494 | 495 | cr = F_C0(fr,tfr); 496 | if(cr == c) 497 | { 498 | cr = F_C1(fr,tfr); 499 | tr = F_C1_THREAD(fr,tfr); 500 | } 501 | else 502 | { 503 | tr = F_C0_THREAD(fr,tfr); 504 | } 505 | 506 | /* ----------- LEFT FACE ------------ */ 507 | 508 | cl = F_C0(fl,tfl); 509 | if(cl == c) 510 | { 511 | cl = F_C1(fl,tfl); 512 | tl = F_C1_THREAD(fl,tfl); 513 | } 514 | else 515 | { 516 | tl = F_C0_THREAD(fl,tfl); 517 | } 518 | /* ----------- FRONT FACE ------------ */ 519 | cf = F_C0(ff,tff); 520 | if(cf == c) 521 | { 522 | cf = F_C1(ff,tff); 523 | tf = F_C1_THREAD(ff,tff); 524 | } 525 | else 526 | { 527 | tf = F_C0_THREAD(ff,tff); 528 | } 529 | /* ------------ AFTER FACE ------------ */ 530 | ca = F_C0(fa,tfa); 531 | if(ca == c) 532 | { 533 | ca = F_C1(fa,tfa); 534 | ta = F_C1_THREAD(fa,tfa); 535 | } 536 | else 537 | { 538 | ta = F_C0_THREAD(fa,tfa); 539 | } 540 | 541 | 542 | // Message("%u %u %u %u \n", cr, cl, cf, ca); 543 | 544 | c_face_loop(cr,tr,N) 545 | { 546 | t_fr = C_FACE_THREAD(cr,tr,N); 547 | if( BOUNDARY_FACE_THREAD_P(t_fr) ) 548 | { 549 | check_r = TRUE; 550 | } 551 | } 552 | 553 | c_face_loop(cf,tf,N) 554 | { 555 | t_ff = C_FACE_THREAD(cf,tf,N); 556 | if( BOUNDARY_FACE_THREAD_P(t_ff) ) 557 | { 558 | check_f = TRUE; 559 | } 560 | } 561 | 562 | c_face_loop(cl,tl,N) 563 | { 564 | t_fl = C_FACE_THREAD(cl,tl,N); 565 | if( BOUNDARY_FACE_THREAD_P(t_fl) ) 566 | { 567 | check_l = TRUE; 568 | } 569 | } 570 | 571 | c_face_loop(ca,ta,N) 572 | { 573 | t_fa = C_FACE_THREAD(ca,ta,N); 574 | if( BOUNDARY_FACE_THREAD_P(t_fa) ) 575 | { 576 | check_a = TRUE; 577 | } 578 | } 579 | 580 | 581 | 582 | if( check_r ) 583 | { 584 | // Message(" BOUNDARY CELL ENCOUNTERED \n "); 585 | 586 | 587 | ffr = C_FACE(cr,tr,1); 588 | tffr = C_FACE_THREAD(cr,tr,1); 589 | 590 | far = C_FACE(cr,tr,3); 591 | tfar = C_FACE_THREAD(cr,tr,3); 592 | 593 | ffl = C_FACE(cl,tl,2); 594 | tffl = C_FACE_THREAD(cl,tl,2); 595 | 596 | fal = C_FACE(cl,tl,0); 597 | tfal = C_FACE_THREAD(cl,tl,0); 598 | 599 | 600 | /* ======================== (crf,trf) ============================= */ 601 | 602 | crf = F_C0(ffr,tffr); 603 | if(crf == cr) 604 | { 605 | crf = F_C1(ffr,tffr); 606 | trf = F_C1_THREAD(ffr,tffr); 607 | } 608 | else 609 | { 610 | trf = F_C0_THREAD(ffr,tffr); 611 | } 612 | // Message(" crf = %u \n ", crf); 613 | /* ======================== (cra,tra) ============================= */ 614 | 615 | cra = F_C0(far,tfar); 616 | if(cra == cr) 617 | { 618 | cra = F_C1(far,tfar); 619 | tra = F_C1_THREAD(far,tfar); 620 | } 621 | else 622 | { 623 | tra = F_C0_THREAD(far,tfar); 624 | } 625 | // Message(" cra = %u \n ", cra); 626 | /* ======================== (clf,tlf) ============================= */ 627 | 628 | clf = F_C0(ffl,tffl); 629 | if(clf == cl) 630 | { 631 | clf = F_C1(ffl,tffl); 632 | tlf = F_C1_THREAD(ffl,tffl); 633 | } 634 | else 635 | { 636 | tlf = F_C0_THREAD(ffl,tffl); 637 | } 638 | // Message(" clf = %u \n ", clf); 639 | /* ======================== (cla,tla) ============================= */ 640 | 641 | cla = F_C0(fal,tfal); 642 | if(cla == cl) 643 | { 644 | cla = F_C1(fal,tfal); 645 | tla = F_C1_THREAD(fal,tfal); 646 | } 647 | else 648 | { 649 | tla = F_C0_THREAD(fal,tfal); 650 | } 651 | // Message(" cla = %u \n ", cla); 652 | 653 | } 654 | else if ( check_f ) 655 | { 656 | 657 | frp = C_FACE(cf,tf,3); 658 | tfrp = C_FACE_THREAD(cf,tf,3); 659 | 660 | flp = C_FACE(cf,tf,1); 661 | tflp = C_FACE_THREAD(cf,tf,1); 662 | 663 | frm = C_FACE(ca,ta,1); 664 | tfrm = C_FACE_THREAD(ca,ta,1); 665 | 666 | flm = C_FACE(ca,ta,3); 667 | tflm = C_FACE_THREAD(ca,ta,3); 668 | 669 | /* ======================== (crf,trf) ============================= */ 670 | 671 | crf = F_C0(frp,tfrp); 672 | if(crf == cr) 673 | { 674 | crf = F_C1(frp,tfrp); 675 | trf = F_C1_THREAD(frp,tfrp); 676 | } 677 | else 678 | { 679 | trf = F_C0_THREAD(frp,tfrp); 680 | } 681 | 682 | /* ======================== (clf,tlf) ============================= */ 683 | 684 | clf = F_C0(flp,tflp); 685 | if(clf == cl) 686 | { 687 | clf = F_C1(flp,tflp); 688 | tlf = F_C1_THREAD(flp,tflp); 689 | } 690 | else 691 | { 692 | tlf = F_C0_THREAD(flp,tflp); 693 | } 694 | 695 | /* ======================== (cra,tra) ============================= */ 696 | 697 | cra = F_C0(frm,tfrm); 698 | if(cra == cr) 699 | { 700 | cra = F_C1(frm,tfrm); 701 | tra = F_C1_THREAD(frm,tfrm); 702 | } 703 | else 704 | { 705 | tra = F_C0_THREAD(frm,tfrm); 706 | } 707 | 708 | /* ======================== (cla,tla) ============================= */ 709 | 710 | cla = F_C0(flm,tflm); 711 | if(cla == cl) 712 | { 713 | cla = F_C1(flm,tflm); 714 | tla = F_C1_THREAD(flm,tflm); 715 | } 716 | else 717 | { 718 | tla = F_C0_THREAD(flm,tflm); 719 | } 720 | 721 | } 722 | else if ( check_l ) 723 | { 724 | 725 | ffl = C_FACE(cl,tl,3); 726 | tffl = C_FACE_THREAD(cl,tl,3); 727 | 728 | fal = C_FACE(cl,tl,1); 729 | tfal = C_FACE_THREAD(cl,tl,1); 730 | 731 | ffr = C_FACE(cr,tr,2); 732 | tffr = C_FACE_THREAD(cr,tr,2); 733 | 734 | far = C_FACE(cr,tr,0); 735 | tfar = C_FACE_THREAD(cr,tr,0); 736 | 737 | /* ======================== (crf,trf) ============================= */ 738 | 739 | crf = F_C0(ffr,tffr); 740 | if(crf == cr) 741 | { 742 | crf = F_C1(ffr,tffr); 743 | trf = F_C1_THREAD(ffr,tffr); 744 | } 745 | else 746 | { 747 | trf = F_C0_THREAD(ffr,tffr); 748 | } 749 | // Message(" crf = %u \n ", crf); 750 | /* ======================== (cra,tra) ============================= */ 751 | 752 | cra = F_C0(far,tfar); 753 | if(cra == cr) 754 | { 755 | cra = F_C1(far,tfar); 756 | tra = F_C1_THREAD(far,tfar); 757 | } 758 | else 759 | { 760 | tra = F_C0_THREAD(far,tfar); 761 | } 762 | // Message(" cra = %u \n ", cra); 763 | /* ======================== (clf,tlf) ============================= */ 764 | 765 | clf = F_C0(ffl,tffl); 766 | if(clf == cl) 767 | { 768 | clf = F_C1(ffl,tffl); 769 | tlf = F_C1_THREAD(ffl,tffl); 770 | } 771 | else 772 | { 773 | tlf = F_C0_THREAD(ffl,tffl); 774 | } 775 | // Message(" clf = %u \n ", clf); 776 | /* ======================== (cla,tla) ============================= */ 777 | 778 | cla = F_C0(fal,tfal); 779 | if(cla == cl) 780 | { 781 | cla = F_C1(fal,tfal); 782 | tla = F_C1_THREAD(fal,tfal); 783 | } 784 | else 785 | { 786 | tla = F_C0_THREAD(fal,tfal); 787 | } 788 | // Message(" cla = %u \n ", cla); 789 | 790 | 791 | } 792 | else if ( check_a ) 793 | { 794 | 795 | frm = C_FACE(ca,ta,1); 796 | tfrm = C_FACE_THREAD(ca,ta,1); 797 | 798 | flm = C_FACE(ca,ta,3); 799 | tflm = C_FACE_THREAD(ca,ta,3); 800 | 801 | frp = C_FACE(cf,tf,1); 802 | tfrp = C_FACE_THREAD(cf,tf,1); 803 | 804 | flp = C_FACE(cf,tf,3); 805 | tflp = C_FACE_THREAD(cf,tf,3); 806 | 807 | /* ======================== (crf,trf) ============================= */ 808 | 809 | crf = F_C0(frp,tfrp); 810 | if(crf == cr) 811 | { 812 | crf = F_C1(frp,tfrp); 813 | trf = F_C1_THREAD(frp,tfrp); 814 | } 815 | else 816 | { 817 | trf = F_C0_THREAD(frp,tfrp); 818 | } 819 | 820 | /* ======================== (clf,tlf) ============================= */ 821 | 822 | clf = F_C0(flp,tflp); 823 | if(clf == cl) 824 | { 825 | clf = F_C1(flp,tflp); 826 | tlf = F_C1_THREAD(flp,tflp); 827 | } 828 | else 829 | { 830 | tlf = F_C0_THREAD(flp,tflp); 831 | } 832 | 833 | /* ======================== (cra,tra) ============================= */ 834 | 835 | cra = F_C0(frm,tfrm); 836 | if(cra == cr) 837 | { 838 | cra = F_C1(frm,tfrm); 839 | tra = F_C1_THREAD(frm,tfrm); 840 | } 841 | else 842 | { 843 | tra = F_C0_THREAD(frm,tfrm); 844 | } 845 | 846 | /* ======================== (cla,tla) ============================= */ 847 | 848 | cla = F_C0(flm,tflm); 849 | if(cla == cl) 850 | { 851 | cla = F_C1(flm,tflm); 852 | tla = F_C1_THREAD(flm,tflm); 853 | } 854 | else 855 | { 856 | tla = F_C0_THREAD(flm,tflm); 857 | } 858 | } 859 | else 860 | { 861 | /* ============== DEFINITION OF SECONDARY NEIGHBOURS ============== */ 862 | 863 | 864 | ffr = C_FACE(cr,tr,2); 865 | tffr = C_FACE_THREAD(cr,tr,2); 866 | 867 | far = C_FACE(cr,tr,0); 868 | tfar = C_FACE_THREAD(cr,tr,0); 869 | 870 | ffl = C_FACE(cl,tl,2); 871 | tffl = C_FACE_THREAD(cl,tl,2); 872 | 873 | fal = C_FACE(cl,tl,0); 874 | tfal = C_FACE_THREAD(cl,tl,0); 875 | 876 | // Message(" far, tfar, ffl, tffl, fal, tfal = %u %u %u %u %u %u \n ", far, tfar, ffl, tffl, fal, tfal); 877 | 878 | 879 | 880 | /* ======================== (crf,trf) ============================= */ 881 | 882 | crf = F_C0(ffr,tffr); 883 | if(crf == cr) 884 | { 885 | crf = F_C1(ffr,tffr); 886 | trf = F_C1_THREAD(ffr,tffr); 887 | } 888 | else 889 | { 890 | trf = F_C0_THREAD(ffr,tffr); 891 | } 892 | // Message(" crf = %u \n ", crf); 893 | /* ======================== (cra,tra) ============================= */ 894 | 895 | cra = F_C0(far,tfar); 896 | if(cra == cr) 897 | { 898 | cra = F_C1(far,tfar); 899 | tra = F_C1_THREAD(far,tfar); 900 | } 901 | else 902 | { 903 | tra = F_C0_THREAD(far,tfar); 904 | } 905 | // Message(" cra = %u \n ", cra); 906 | /* ======================== (clf,tlf) ============================= */ 907 | 908 | clf = F_C0(ffl,tffl); 909 | if(clf == cl) 910 | { 911 | clf = F_C1(ffl,tffl); 912 | tlf = F_C1_THREAD(ffl,tffl); 913 | } 914 | else 915 | { 916 | tlf = F_C0_THREAD(ffl,tffl); 917 | } 918 | // Message(" clf = %u \n ", clf); 919 | /* ======================== (cla,tla) ============================= */ 920 | 921 | cla = F_C0(fal,tfal); 922 | if(cla == cl) 923 | { 924 | cla = F_C1(fal,tfal); 925 | tla = F_C1_THREAD(fal,tfal); 926 | } 927 | else 928 | { 929 | tla = F_C0_THREAD(fal,tfal); 930 | } 931 | // Message(" cla = %u \n ", cla); 932 | 933 | } 934 | // Message("%u %u %u %u %u %u %u %u \n", check_r, check_f, check_l, check_a, crf, clf, cra, cla); 935 | 936 | 937 | 938 | fe = (1.0/4.0)*(C_VOF(cra,t_liquid) + 2*C_VOF(cr,t_liquid) + C_VOF(crf,t_liquid)); 939 | fw = (1.0/4.0)*(C_VOF(cla,t_liquid) + 2*C_VOF(cl,t_liquid) + C_VOF(clf,t_liquid)); 940 | fn = (1.0/4.0)*(C_VOF(clf,t_liquid) + 2*C_VOF(cf,t_liquid) + C_VOF(crf,t_liquid)); 941 | fs = (1.0/4.0)*(C_VOF(cla,t_liquid) + 2*C_VOF(ca,t_liquid) + C_VOF(cra,t_liquid)); 942 | 943 | 944 | 945 | 946 | nx = (1.0/2.0)*(fe-fw); 947 | ny = (1.0/2.0)*(fn-fs); 948 | 949 | rmag2 = nx*nx + ny*ny; 950 | 951 | ax = nx/sqrt(rmag2); 952 | ay = ny/sqrt(rmag2); 953 | 954 | 955 | 956 | if (rmag2 > 0.001) 957 | { 958 | rmag = sqrt(rmag2); 959 | nx = nx/rmag; 960 | ny = ny/rmag; 961 | 962 | 963 | C_UDMI(c,t,2) = nx; 964 | C_UDMI(c,t,3) = ny; 965 | 966 | } 967 | else 968 | { 969 | if(C_VOF(c,t_liquid) < 0.5) 970 | { 971 | rmag = 1.0; 972 | C_UDMI(c,t,1) = 3; 973 | goto END; 974 | } 975 | else 976 | { 977 | rmag = 1.0; 978 | C_UDMI(c,t,1) = 1; 979 | goto END; 980 | } 981 | } 982 | // C_UDMI(c,t,7) = 1; 983 | // Youngs method represents first guess 984 | 985 | get_len(c, t_liquid, nx, ny); 986 | 987 | // Message(" Youngs Normals = %f %f \n", nx, ny); 988 | 989 | // if(C_UDMI(c,t,5) < 0.0001 ) 990 | // { 991 | // Message(" I am in 1 %u \n", c); 992 | // C_UDMI(c,t,2) = nx; 993 | // C_UDMI(c,t,3) = ny; 994 | // goto GET_LEN_END; 995 | // } 996 | 997 | nxy = nx; 998 | nyy = ny; 999 | sleny = C_UDMI(c,t,4); 1000 | thetay = atan2(nyy,nxy); 1001 | 1002 | /* if ( boundary ) 1003 | { 1004 | c_node_loop(c,t,k) 1005 | { 1006 | node = C_NODE(c,t,k); 1007 | 1008 | if( NODE_Y(node) == 0 ) 1009 | { 1010 | if(NODE_X(node) == 0) 1011 | { 1012 | save_len[1][1] = 0.0 ; 1013 | save_len[2][1] = 0.0 ; 1014 | save_len[3][1] = 0.0 ; 1015 | save_len[1][2] = C_UDMI(cf,tf,4) ; 1016 | save_len[2][2] = C_UDMI(c,t,4) ; 1017 | save_len[3][2] = 0.0 ; 1018 | save_len[1][3] = C_UDMI(crf,trf,4) ; 1019 | save_len[2][3] = C_UDMI(cr,tr,4) ; 1020 | save_len[3][3] = 0.0 ; 1021 | 1022 | save_nx[1][1] = 0.0 ; 1023 | save_nx[2][1] = 0.0 ; 1024 | save_nx[3][1] = 0.0 ; 1025 | save_nx[1][2] = C_UDMI(cf,tf,2) ; 1026 | save_nx[2][2] = C_UDMI(c,t,2) ; 1027 | save_nx[3][2] = 0.0 ; 1028 | save_nx[1][3] = C_UDMI(crf,trf,2) ; 1029 | save_nx[2][3] = C_UDMI(cr,tr,2) ; 1030 | save_nx[3][3] = 0.0 ; 1031 | 1032 | save_ny[1][1] = 0.0 ; 1033 | save_ny[2][1] = 0.0 ; 1034 | save_ny[3][1] = 0.0 ; 1035 | save_ny[1][2] = C_UDMI(cf,tf,3) ; 1036 | save_ny[2][2] = C_UDMI(c,t,3) ; 1037 | save_ny[3][2] = 0.0 ; 1038 | save_ny[1][3] = C_UDMI(crf,trf,3) ; 1039 | save_ny[2][3] = C_UDMI(cr,tr,3) ; 1040 | save_ny[3][3] = 0.0 ; 1041 | } 1042 | else if( NODE_X(node)*1000000 == 1135 ) 1043 | { 1044 | save_len[1][1] = C_UDMI(clf,tlf,4) ; 1045 | save_len[2][1] = C_UDMI(cl,tl,4) ; 1046 | save_len[3][1] = 0.0 ; 1047 | save_len[1][2] = C_UDMI(cf,tf,4) ; 1048 | save_len[2][2] = C_UDMI(c,t,4) ; 1049 | save_len[3][2] = 0.0 ; 1050 | save_len[1][3] = 0.0 ; 1051 | save_len[2][3] = 0.0 ; 1052 | save_len[3][3] = 0.0 ; 1053 | 1054 | save_nx[1][1] = C_UDMI(clf,tlf,2) ; 1055 | save_nx[2][1] = C_UDMI(cl,tl,2) ; 1056 | save_nx[3][1] = 0.0 ; 1057 | save_nx[1][2] = C_UDMI(cf,tf,2) ; 1058 | save_nx[2][2] = C_UDMI(c,t,2) ; 1059 | save_nx[3][2] = 0.0 ; 1060 | save_nx[1][3] = 0.0 ; 1061 | save_nx[2][3] = 0.0 ; 1062 | save_nx[3][3] = 0.0 ; 1063 | 1064 | save_ny[1][1] = C_UDMI(clf,tlf,3) ; 1065 | save_ny[2][1] = C_UDMI(cl,tl,3) ; 1066 | save_ny[3][1] = 0.0 ; 1067 | save_ny[1][2] = C_UDMI(cf,tf,3) ; 1068 | save_ny[2][2] = C_UDMI(c,t,3) ; 1069 | save_ny[3][2] = 0.0 ; 1070 | save_ny[1][3] = 0.0 ; 1071 | save_ny[2][3] = 0.0 ; 1072 | save_ny[3][3] = 0.0 ; 1073 | } 1074 | else 1075 | { 1076 | save_len[1][1] = C_UDMI(clf,tlf,4) ; 1077 | save_len[2][1] = C_UDMI(cl,tl,4) ; 1078 | save_len[3][1] = 0.0 ; 1079 | save_len[1][2] = C_UDMI(cf,tf,4) ; 1080 | save_len[2][2] = C_UDMI(c,t,4) ; 1081 | save_len[3][2] = 0.0 ; 1082 | save_len[1][3] = C_UDMI(crf,trf,4) ; 1083 | save_len[2][3] = C_UDMI(cr,tr,4) ; 1084 | save_len[3][3] = 0.0 ; 1085 | 1086 | save_nx[1][1] = C_UDMI(clf,tlf,2) ; 1087 | save_nx[2][1] = C_UDMI(cl,tl,2) ; 1088 | save_nx[3][1] = 0.0 ; 1089 | save_nx[1][2] = C_UDMI(cf,tf,2) ; 1090 | save_nx[2][2] = C_UDMI(c,t,2) ; 1091 | save_nx[3][2] = 0.0 ; 1092 | save_nx[1][3] = C_UDMI(crf,trf,2) ; 1093 | save_nx[2][3] = C_UDMI(cr,tr,2) ; 1094 | save_nx[3][3] = 0.0 ; 1095 | 1096 | save_ny[1][1] = C_UDMI(clf,tlf,3) ; 1097 | save_ny[2][1] = C_UDMI(cl,tl,3) ; 1098 | save_ny[3][1] = 0.0 ; 1099 | save_ny[1][2] = C_UDMI(cf,tf,3) ; 1100 | save_ny[2][2] = C_UDMI(c,t,3) ; 1101 | save_ny[3][2] = 0.0 ; 1102 | save_ny[1][3] = C_UDMI(crf,trf,3) ; 1103 | save_ny[2][3] = C_UDMI(cr,tr,3) ; 1104 | save_ny[3][3] = 0.0 ; 1105 | } 1106 | 1107 | 1108 | } 1109 | 1110 | if( ( NODE_X(node) == 0 ) && ( NODE_Y(node) > 0.0 ) && ( NODE_Y(node)*100000 != 227 ) ) 1111 | { 1112 | save_len[1][1] = 0.0 ; 1113 | save_len[2][1] = 0.0 ; 1114 | save_len[3][1] = 0.0 ; 1115 | save_len[1][2] = C_UDMI(cf,tf,4) ; 1116 | save_len[2][2] = C_UDMI(c,t,4) ; 1117 | save_len[3][2] = C_UDMI(ca,ta,4) ; 1118 | save_len[1][3] = C_UDMI(crf,trf,4) ; 1119 | save_len[2][3] = C_UDMI(cr,tr,4) ; 1120 | save_len[3][3] = C_UDMI(cra,tra,4) ; 1121 | 1122 | save_nx[1][1] = 0.0 ; 1123 | save_nx[2][1] = 0.0 ; 1124 | save_nx[3][1] = 0.0 ; 1125 | save_nx[1][2] = C_UDMI(cf,tf,2) ; 1126 | save_nx[2][2] = C_UDMI(c,t,2) ; 1127 | save_nx[3][2] = C_UDMI(ca,ta,2) ; 1128 | save_nx[1][3] = C_UDMI(crf,trf,2) ; 1129 | save_nx[2][3] = C_UDMI(cr,tr,2) ; 1130 | save_nx[3][3] = C_UDMI(cra,tra,2) ; 1131 | 1132 | save_ny[1][1] = 0.0 ; 1133 | save_ny[2][1] = 0.0 ; 1134 | save_ny[3][1] = 0.0 ; 1135 | save_ny[1][2] = C_UDMI(cf,tf,3) ; 1136 | save_ny[2][2] = C_UDMI(c,t,3) ; 1137 | save_ny[3][2] = C_UDMI(ca,ta,3) ; 1138 | save_ny[1][3] = C_UDMI(crf,trf,3) ; 1139 | save_ny[2][3] = C_UDMI(cr,tr,3) ; 1140 | save_ny[3][3] = C_UDMI(cra,tra,3) ; 1141 | 1142 | } 1143 | if( ( NODE_X(node)*1000000 == 1135 ) && ( NODE_Y(node) > 0.0 ) && ( NODE_Y(node)*100000 != 227 ) ) 1144 | { 1145 | save_len[1][1] = C_UDMI(clf,tlf,4) ; 1146 | save_len[2][1] = C_UDMI(cl,tl,4) ; 1147 | save_len[3][1] = C_UDMI(cla,tla,4) ; 1148 | save_len[1][2] = C_UDMI(cf,tf,4) ; 1149 | save_len[2][2] = C_UDMI(c,t,4) ; 1150 | save_len[3][2] = C_UDMI(ca,ta,4) ; 1151 | save_len[1][3] = 0.0 ; 1152 | save_len[2][3] = 0.0 ; 1153 | save_len[3][3] = 0.0 ; 1154 | 1155 | save_nx[1][1] = C_UDMI(clf,tlf,2) ; 1156 | save_nx[2][1] = C_UDMI(cl,tl,2) ; 1157 | save_nx[3][1] = C_UDMI(cla,tla,2) ; 1158 | save_nx[1][2] = C_UDMI(cf,tf,2) ; 1159 | save_nx[2][2] = C_UDMI(c,t,2) ; 1160 | save_nx[3][2] = C_UDMI(ca,ta,2) ; 1161 | save_nx[1][3] = 0.0 ; 1162 | save_nx[2][3] = 0.0 ; 1163 | save_nx[3][3] = 0.0 ; 1164 | 1165 | save_ny[1][1] = C_UDMI(clf,tlf,3) ; 1166 | save_ny[2][1] = C_UDMI(cl,tl,3) ; 1167 | save_ny[3][1] = C_UDMI(cla,tla,3) ; 1168 | save_ny[1][2] = C_UDMI(cf,tf,3) ; 1169 | save_ny[2][2] = C_UDMI(c,t,3) ; 1170 | save_ny[3][2] = C_UDMI(ca,ta,3) ; 1171 | save_ny[1][3] = 0.0 ; 1172 | save_ny[2][3] = 0.0 ; 1173 | save_ny[3][3] = 0.0 ; 1174 | } 1175 | } 1176 | 1177 | } 1178 | else 1179 | { */ 1180 | /* I AM BHARAT save_len[1][1] = C_UDMI(clf,tlf,4) ; 1181 | save_len[2][1] = C_UDMI(cl,tl,4) ; 1182 | save_len[3][1] = C_UDMI(cla,tla,4) ; 1183 | save_len[1][2] = C_UDMI(cf,tf,4) ; 1184 | save_len[2][2] = C_UDMI(c,t,4) ; 1185 | save_len[3][2] = C_UDMI(ca,ta,4) ; 1186 | save_len[1][3] = C_UDMI(crf,trf,4) ; 1187 | save_len[2][3] = C_UDMI(cr,tr,4) ; 1188 | save_len[3][3] = C_UDMI(cra,tra,4) ; 1189 | 1190 | save_nx[1][1] = C_UDMI(clf,tlf,2) ; 1191 | save_nx[2][1] = C_UDMI(cl,tl,2) ; 1192 | save_nx[3][1] = C_UDMI(cla,tla,2) ; 1193 | save_nx[1][2] = C_UDMI(cf,tf,2) ; 1194 | save_nx[2][2] = C_UDMI(c,t,2) ; 1195 | save_nx[3][2] = C_UDMI(ca,ta,2) ; 1196 | save_nx[1][3] = C_UDMI(crf,trf,2) ; 1197 | save_nx[2][3] = C_UDMI(cr,tr,2) ; 1198 | save_nx[3][3] = C_UDMI(cra,tra,2) ; 1199 | 1200 | save_ny[1][1] = C_UDMI(clf,tlf,3) ; 1201 | save_ny[2][1] = C_UDMI(cl,tl,3) ; 1202 | save_ny[3][1] = C_UDMI(cla,tla,3) ; 1203 | save_ny[1][2] = C_UDMI(cf,tf,3) ; 1204 | save_ny[2][2] = C_UDMI(c,t,3) ; 1205 | save_ny[3][2] = C_UDMI(ca,ta,3) ; 1206 | save_ny[1][3] = C_UDMI(crf,trf,3) ; 1207 | save_ny[2][3] = C_UDMI(cr,tr,3) ; 1208 | save_ny[3][3] = C_UDMI(cra,tra,3) ; */ 1209 | // } 1210 | 1211 | 1212 | // Newton's method to find normal using LVIRA 1213 | 1214 | theta = atan2(ny,nx); 1215 | dtheta = 0.001; 1216 | Gerr = 1.0; 1217 | ifter = 0; 1218 | maxiter = 150; 1219 | 1220 | 1221 | lvira11: ; 1222 | // Message(" BEFORE LVIRA \n"); 1223 | if ( (fabs(Gerr) >= pow(10.,-8)) && ifter < maxiter ) 1224 | { 1225 | // Message("lvira %u \n", c); 1226 | 1227 | ifter = ifter + 1; 1228 | 1229 | lvira(c, t, theta, dtheta, &Gfunp); 1230 | // Message(" c, ifter, theta, dtheta, Gfunp, nx, ny = %u %d %f %f %g %f %f \n " , c, ifter, theta, dtheta, Gfunp, nx, ny ); 1231 | 1232 | if( (fabs(Gfunp) <= 0.000001) ) 1233 | { 1234 | goto check11; 1235 | 1236 | } 1237 | 1238 | thetar = theta + dtheta; 1239 | 1240 | lvira(c, t, thetar, dtheta, &Gfunpr); // theta-right 1241 | 1242 | Gprime = (Gfunpr - Gfunp)/dtheta; 1243 | 1244 | theta_inc = - Gfunp/Gprime; 1245 | 1246 | theta = theta + theta_inc; 1247 | 1248 | nx = cos(theta); 1249 | ny = sin(theta); 1250 | 1251 | Gerr = fabs(theta_inc); 1252 | // Message(" check \n" ); 1253 | // C_UDMI(c,t,7) = 2; 1254 | get_len(c, t_liquid, nx, ny ); 1255 | 1256 | goto lvira11; 1257 | } 1258 | check11: ; 1259 | 1260 | // Message(" Normals After LVIRA loop = %f %f \n", nx, ny); 1261 | 1262 | if ( ifter > maxiter) 1263 | { 1264 | // Message(" One Happened \n"); 1265 | nx = nxy; 1266 | ny = nyy; 1267 | C_UDMI(c,t,4) = sleny; 1268 | } 1269 | thetal = atan2(ny,nx); 1270 | if( fabs(thetal - thetay) > M_PI/20.0 ) 1271 | { 1272 | // Message(" Two Happened \n"); 1273 | nx = nxy; 1274 | ny = nyy; 1275 | C_UDMI(c,t,4) = sleny; 1276 | } 1277 | 1278 | // Message(" Correct Normals After LVIRA loop = %f %f \n", nx, ny); 1279 | GET_LEN_END:; 1280 | C_UDMI(c,t,2) = nx; 1281 | C_UDMI(c,t,3) = ny; 1282 | 1283 | // C_UDMI(c,t,7) = 3; 1284 | get_len(c, t_liquid, nx, ny ); 1285 | 1286 | // Message("GET_LEN_END = BEFORE \n"); 1287 | 1288 | C_CENTROID(XC,c,t); 1289 | if(fequal( XC[0], 3.1278*pow(10.0,-06) ) && ( C_UDMI(c,t,2) < 0.0 ) ) 1290 | { 1291 | C_UDMI(c,t,2) = 0.0; 1292 | C_UDMI(c,t,3) = 1.0; 1293 | nx = C_UDMI(c,t,2) ; 1294 | ny = C_UDMI(c,t,3) ; 1295 | 1296 | // C_UDMI(c,t,7) = 4; 1297 | get_len(c, t_liquid, nx, ny ); 1298 | } 1299 | else if(fequal( XC[0], 0.0011318472222 ) && ( C_UDMI(c,t,2) < 0.0 ) ) 1300 | { 1301 | C_UDMI(c,t,2) = 0.0; 1302 | C_UDMI(c,t,3) = 1.0; 1303 | nx = C_UDMI(c,t,2) ; 1304 | ny = C_UDMI(c,t,3) ; 1305 | 1306 | // C_UDMI(c,t,7) = 5; 1307 | get_len(c, t_liquid, nx, ny ); 1308 | } 1309 | 1310 | 1311 | // Message("GET_LEN_END = AFTER \n"); 1312 | // Message("B slen, nx, ny = %u %g %f %f \n", c, C_UDMI(c,t,4), nx, ny ); 1313 | 1314 | 1315 | /* if ( boundary ) 1316 | { 1317 | c_node_loop(c,t,k) 1318 | { 1319 | node = C_NODE(c,t,k); 1320 | 1321 | if( NODE_Y(node) == 0 ) 1322 | { 1323 | if(NODE_X(node) == 0) 1324 | { 1325 | 1326 | C_UDMI(cf,tf,4) = save_len[1][2] ; 1327 | 1328 | C_UDMI(crf,trf,4) = save_len[1][3] ; 1329 | C_UDMI(cr,tr,4) = save_len[2][3] ; 1330 | 1331 | 1332 | 1333 | C_UDMI(cf,tf,2) = save_nx[1][2] ; 1334 | 1335 | C_UDMI(crf,trf,2) = save_nx[1][3] ; 1336 | C_UDMI(cr,tr,2) = save_nx[2][3] ; 1337 | 1338 | 1339 | 1340 | C_UDMI(cf,tf,3) = save_ny[1][2] ; 1341 | 1342 | C_UDMI(crf,trf,3) = save_ny[1][3] ; 1343 | C_UDMI(cr,tr,3) = save_ny[2][3] ; 1344 | 1345 | } 1346 | else if( NODE_X(node)*1000000 == 1135 ) 1347 | { 1348 | C_UDMI(clf,tlf,4) = save_len[1][1] ; 1349 | C_UDMI(cl,tl,4) = save_len[2][1] ; 1350 | C_UDMI(cf,tf,4) = save_len[1][2] ; 1351 | 1352 | 1353 | C_UDMI(clf,tlf,2) = save_nx[1][1] ; 1354 | C_UDMI(cl,tl,2) = save_nx[2][1] ; 1355 | C_UDMI(cf,tf,2) = save_nx[1][2] ; 1356 | 1357 | 1358 | C_UDMI(clf,tlf,3) = save_ny[1][1] ; 1359 | C_UDMI(cl,tl,3) = save_ny[2][1] ; 1360 | C_UDMI(cf,tf,3) = save_ny[1][2] ; 1361 | 1362 | 1363 | } 1364 | else 1365 | { 1366 | C_UDMI(clf,tlf,4) = save_len[1][1] ; 1367 | C_UDMI(cl,tl,4) = save_len[2][1] ; 1368 | C_UDMI(cf,tf,4) = save_len[1][2] ; 1369 | C_UDMI(crf,trf,4) = save_len[1][3] ; 1370 | C_UDMI(cr,tr,4) = save_len[2][3] ; 1371 | 1372 | C_UDMI(clf,tlf,2) = save_nx[1][1] ; 1373 | C_UDMI(cl,tl,2) = save_nx[2][1] ; 1374 | C_UDMI(cf,tf,2) = save_nx[1][2] ; 1375 | C_UDMI(crf,trf,2) = save_nx[1][3] ; 1376 | C_UDMI(cr,tr,2) = save_nx[2][3] ; 1377 | 1378 | C_UDMI(clf,tlf,3) = save_ny[1][1] ; 1379 | C_UDMI(cl,tl,3) = save_ny[2][1] ; 1380 | C_UDMI(cf,tf,3) = save_ny[1][2] ; 1381 | C_UDMI(crf,trf,3) = save_ny[1][3] ; 1382 | C_UDMI(cr,tr,3) = save_ny[2][3] ; 1383 | 1384 | } 1385 | 1386 | 1387 | } 1388 | 1389 | if( ( NODE_X(node) == 0 ) && ( NODE_Y(node) > 0.0 ) && ( NODE_Y(node)*100000 != 227 ) ) 1390 | { 1391 | C_UDMI(cf,tf,4) = save_len[1][2] ; 1392 | C_UDMI(ca,ta,4) = save_len[3][2] ; 1393 | C_UDMI(crf,trf,4) = save_len[1][3] ; 1394 | C_UDMI(cr,tr,4) = save_len[2][3] ; 1395 | C_UDMI(cra,tra,4) = save_len[3][3] ; 1396 | 1397 | C_UDMI(cf,tf,2) = save_nx[1][2] ; 1398 | C_UDMI(ca,ta,2) = save_nx[3][2] ; 1399 | C_UDMI(crf,trf,2) = save_nx[1][3] ; 1400 | C_UDMI(cr,tr,2) = save_nx[2][3] ; 1401 | C_UDMI(cra,tra,2) = save_nx[3][3] ; 1402 | 1403 | C_UDMI(cf,tf,3) = save_ny[1][2] ; 1404 | C_UDMI(ca,ta,3) = save_ny[3][2] ; 1405 | C_UDMI(crf,trf,3) = save_ny[1][3] ; 1406 | C_UDMI(cr,tr,3) = save_ny[2][3] ; 1407 | C_UDMI(cra,tra,3) = save_ny[3][3] ; 1408 | 1409 | } 1410 | if( ( NODE_X(node)*1000000 == 1135 ) && ( NODE_Y(node) > 0.0 ) && ( NODE_Y(node)*100000 != 227 ) ) 1411 | { 1412 | C_UDMI(clf,tlf,4) = save_len[1][1] ; 1413 | C_UDMI(cl,tl,4) = save_len[2][1] ; 1414 | C_UDMI(cla,tla,4) = save_len[3][1] ; 1415 | C_UDMI(cf,tf,4) = save_len[1][2] ; 1416 | C_UDMI(ca,ta,4) = save_len[3][2] ; 1417 | 1418 | C_UDMI(clf,tlf,2) = save_nx[1][1] ; 1419 | C_UDMI(cl,tl,2) = save_nx[2][1] ; 1420 | C_UDMI(cla,tla,2) = save_nx[3][1] ; 1421 | C_UDMI(cf,tf,2) = save_nx[1][2] ; 1422 | C_UDMI(ca,ta,2) = save_nx[3][2] ; 1423 | 1424 | C_UDMI(clf,tlf,3) = save_ny[1][1] ; 1425 | C_UDMI(cl,tl,3) = save_ny[2][1] ; 1426 | C_UDMI(cla,tla,3) = save_ny[3][1] ; 1427 | C_UDMI(cf,tf,3) = save_ny[1][2] ; 1428 | C_UDMI(ca,ta,3) = save_ny[3][2] ; 1429 | } 1430 | } 1431 | 1432 | } 1433 | else 1434 | { */ 1435 | /* I AM NOTHING C_UDMI(clf,tlf,4) = save_len[1][1] ; 1436 | C_UDMI(cl,tl,4) = save_len[2][1] ; 1437 | C_UDMI(cla,tla,4) = save_len[3][1] ; 1438 | C_UDMI(cf,tf,4) = save_len[1][2] ; 1439 | C_UDMI(ca,ta,4) = save_len[3][2] ; 1440 | C_UDMI(crf,trf,4) = save_len[1][3] ; 1441 | C_UDMI(cr,tr,4) = save_len[2][3] ; 1442 | C_UDMI(cra,tra,4) = save_len[3][3] ; 1443 | 1444 | C_UDMI(clf,tlf,2) = save_nx[1][1] ; 1445 | C_UDMI(cl,tl,2) = save_nx[2][1] ; 1446 | C_UDMI(cla,tla,2) = save_nx[3][1] ; 1447 | C_UDMI(cf,tf,2) = save_nx[1][2] ; 1448 | C_UDMI(ca,ta,2) = save_nx[3][2] ; 1449 | C_UDMI(crf,trf,2) = save_nx[1][3] ; 1450 | C_UDMI(cr,tr,2) = save_nx[2][3] ; 1451 | C_UDMI(cra,tra,2) = save_nx[3][3] ; 1452 | 1453 | C_UDMI(clf,tlf,3) = save_ny[1][1] ; 1454 | C_UDMI(cl,tl,3) = save_ny[2][1] ; 1455 | C_UDMI(cla,tla,3) = save_ny[3][1] ; 1456 | C_UDMI(cf,tf,3) = save_ny[1][2] ; 1457 | C_UDMI(ca,ta,3) = save_ny[3][2] ; 1458 | C_UDMI(crf,trf,3) = save_ny[1][3] ; 1459 | C_UDMI(cr,tr,3) = save_ny[2][3] ; 1460 | C_UDMI(cra,tra,3) = save_ny[3][3] ; */ 1461 | // } 1462 | 1463 | 1464 | } 1465 | END:; 1466 | } 1467 | 1468 | // Message("init iface - after - c, iphs, C_UDMI(c,t,2), C_UDMI(c,t,3) = %u %f %.15f %.15f \n", c, C_UDMI(c,t,1), C_UDMI(c,t,2), C_UDMI(c,t,3)); 1469 | 1470 | } 1471 | end_c_loop_all(c,t) 1472 | } 1473 | } 1474 | } 1475 | -------------------------------------------------------------------------------- /isFiniteNumber: -------------------------------------------------------------------------------- 1 | #include "udf.h" 2 | #include "sg.h" 3 | #include "sg_vof.h" 4 | #include "cxbool.h" 5 | 6 | 7 | extern void 8 | IsFiniteNumber(double x, cxboolean *INF) 9 | { 10 | *INF = TRUE; 11 | if (x <= DBL_MAX && x >= -DBL_MAX) 12 | { 13 | *INF = FALSE; 14 | } 15 | return; 16 | } 17 | -------------------------------------------------------------------------------- /linsegment: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | /*--------- linseg function ----------- */ 8 | /* Computes the endpoints of the interface (xint,yint) and the 9 | number of endpoints (nint) 10 | bounded by the four lines xl, xr, ya, and yf 11 | (xleft, xright, yaft, yfront) 12 | The liquid-gas interface plane cuts through the volume at 13 | a distance sleng from the point (xc,yc). slen is measured such 14 | that slen*(nx,ny) + (xbase,ybase) = (xc,yc). 15 | The normal to the interface plane (into the liquid phase) 16 | is (nx,ny). 17 | */ 18 | // GRID GEOMETRY INDEPENDENT PART. 19 | extern void 20 | linseg( cell_t c, Thread *t, real xl, real xr, real ya, real yf, real *xint1, real *xint2, real *yint1, real *yint2, int *iface_int1, int *iface_int2 ) 21 | { 22 | cell_t cr, cf, cl, ca, crf, cra, clf, cla ; 23 | Thread *tf, *ta, *tr, *tl, *trf, *tra, *tlf, *tla ; 24 | 25 | Thread *t_liquid; 26 | face_t fr, ff, fl, fa; 27 | Thread *tfr, *tff, *tfl, *tfa; 28 | real xc[ND_ND], XR[ND_ND], XF[ND_ND], XL[ND_ND], XA[ND_ND] ; 29 | real xi, yi; 30 | real tx,ty; 31 | real eps; 32 | real slope,slopi; 33 | real xtest, ytest, dot_prod; 34 | real dot_prod_new, dot_prod_old; 35 | real len, nx, ny; 36 | real dx, dy ; 37 | 38 | real xint[ND_ND], yint[ND_ND] ; 39 | int nint; 40 | int iphs; 41 | int iface_int[ND_ND]; 42 | /* iface_int = 1 - bottom edge 43 | 2 - right edge 44 | 3 - top edge 45 | 4 - left edge */ 46 | 47 | 48 | iface_int[0] = 0; 49 | iface_int[1] = 0; 50 | 51 | eps = 0.000000001; 52 | 53 | iphs = C_UDMI(c,t,1); 54 | nx = C_UDMI(c,t,2); 55 | ny = C_UDMI(c,t,3); 56 | len = C_UDMI(c,t,4); 57 | 58 | // Message(" linseg c, nx, ny = %u %f %f \n ", c, nx, ny); 59 | 60 | C_CENTROID(xc,c,t); 61 | 62 | delta( c, t, &dx, &dy ); 63 | 64 | tx = -ny; 65 | ty = nx; 66 | 67 | xi = xc[0] - len * nx; 68 | yi = xc[1] - len * ny; 69 | 70 | // Message(" xi = %f \n", xi); 71 | 72 | nint = 0; 73 | *xint1 = 0.0; 74 | *yint1 = 0.0; 75 | *xint2 = 0.0; 76 | *yint2 = 0.0; 77 | // if( c == 1795 ) 78 | // { 79 | // Message("c, nx, ny, xi, yi, xl, xr, ya, yf = %u %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f \n", c, nx, ny, xi, yi, xl, xr, ya, yf); 80 | // } 81 | 82 | 83 | 84 | /* ====== switch to cases depending on slope ====== */ 85 | 86 | if( fabs(nx) < eps*dx ) 87 | { 88 | if ( yi > ya && yi < yf ) 89 | { 90 | // Message("1 \n"); 91 | xint[0] = xl; 92 | yint[0] = yi; 93 | xint[1] = xr; 94 | yint[1] = yi; 95 | iface_int[0] = 4; 96 | iface_int[1] = 2; 97 | *xint1 = xint[0]; 98 | *yint1 = yint[0]; 99 | *xint2 = xint[1]; 100 | *yint2 = yint[1]; 101 | *iface_int1 = iface_int[0]; 102 | *iface_int2 = iface_int[1]; 103 | nint = 2; 104 | // if( c == 1795 ) 105 | // { 106 | // Message(" LINSEG (1) %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 107 | // } 108 | } 109 | } 110 | else if ( fabs(ny) < eps*dy ) 111 | { 112 | if( xi > xl && xi < xr ) 113 | { 114 | // Message("2 \n"); 115 | xint[0] = xi; 116 | yint[0] = ya; 117 | xint[1] = xi; 118 | yint[1] = yf; 119 | iface_int[0] = 1; 120 | iface_int[1] = 3; 121 | *xint1 = xint[0]; 122 | *yint1 = yint[0]; 123 | *xint2 = xint[1]; 124 | *yint2 = yint[1]; 125 | *iface_int1 = iface_int[0]; 126 | *iface_int2 = iface_int[1]; 127 | nint = 2; 128 | // if( c == 1795 ) 129 | // { 130 | // Message(" LINSEG (2) %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 131 | // } 132 | } 133 | } 134 | else 135 | { 136 | slope = - nx/ny; 137 | slopi = - ny/nx; 138 | 139 | /* ====== test top ====== */ 140 | ytest = yf; 141 | xtest = slopi*( ytest - yi ) + xi; 142 | 143 | // Message("top iphase, nx, ny, slope, slopi, xc[0], xc[1], len, xi, yi, ytest, xtest = %u %d %f %f %f %f %f %g %f %f %f %f %f \n ", c,iphs, nx, ny, slope, slopi, xc[0], xc[1], len, xi, yi, ytest, xtest); 144 | 145 | if( ( xtest >= xl ) && ( xtest <= xr ) ) 146 | { 147 | // Message("3 \n"); 148 | nint = nint + 1 ; 149 | xint[nint - 1] = xtest; 150 | yint[nint - 1] = ytest; 151 | iface_int[nint - 1] = 3; 152 | *xint1 = xint[0]; 153 | *yint1 = yint[0]; 154 | *xint2 = xint[1]; 155 | *yint2 = yint[1]; 156 | *iface_int1 = iface_int[0]; 157 | *iface_int2 = iface_int[1]; 158 | // if( c == 1795 ) 159 | // { 160 | // Message(" LINSEG (3) %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 161 | // } 162 | } 163 | 164 | /* ====== test bottom ====== */ 165 | ytest = ya; 166 | xtest = slopi*( ytest - yi ) + xi; 167 | // Message("bottom nx, ny, slope, slopi, ytest, xtest = %u %f %f %f %f %f %f \n ", c, nx, ny, slope, slopi, ytest, xtest); 168 | if( ( xtest >= xl ) && ( xtest <= xr ) ) 169 | { 170 | // Message("4 \n"); 171 | nint = nint + 1; 172 | xint[nint - 1] = xtest; 173 | yint[nint - 1] = ytest; 174 | iface_int[nint - 1] = 1; 175 | *xint1 = xint[0]; 176 | *yint1 = yint[0]; 177 | *xint2 = xint[1]; 178 | *yint2 = yint[1]; 179 | *iface_int1 = iface_int[0]; 180 | *iface_int2 = iface_int[1]; 181 | // if( c == 1795 ) 182 | // { 183 | // Message(" LINSEG (4) %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 184 | // } 185 | } 186 | 187 | 188 | 189 | /* ====== test left ======= */ 190 | if ( nint == 2 ) 191 | { 192 | goto Hello; 193 | } 194 | xtest = xl ; 195 | ytest = slope*( xtest - xi ) + yi; 196 | // Message("left nx, ny, slope, slopi, xtest, ytest = %u %f %f %f %f %f %f \n ", c, nx, ny, slope, slopi, xtest, ytest); 197 | if( ( ytest >= ya ) && ( ytest <= yf ) ) 198 | { 199 | // Message("5 \n"); 200 | nint = nint + 1; 201 | xint[nint - 1] = xtest; 202 | yint[nint - 1] = ytest; 203 | iface_int[nint - 1] = 4; 204 | *xint1 = xint[0]; 205 | *yint1 = yint[0]; 206 | *xint2 = xint[1]; 207 | *yint2 = yint[1]; 208 | *iface_int1 = iface_int[0]; 209 | *iface_int2 = iface_int[1]; 210 | 211 | // if( c == 1795 ) 212 | // { 213 | // Message(" LINSEG (5) %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 214 | // } 215 | 216 | if( nint == 2 ) 217 | { 218 | dot_prod_old = ( (xint[0])- xi )*tx + ( (yint[0])- yi )*ty; 219 | dot_prod_new = ( xtest - xi )*tx + ( ytest - yi )*ty; 220 | if ( dot_prod_new*dot_prod_old > 0.0 ) 221 | { 222 | nint = nint - 1; 223 | } 224 | } 225 | } 226 | /* ====== test right ====== */ 227 | if ( nint == 2 ) 228 | { 229 | goto Hello; 230 | } 231 | xtest = xr ; 232 | ytest = slope*( xtest - xi ) + yi; 233 | // Message(" right nx, ny, slope, slopi, ytest, xtest = %u %f %f %f %f %f %f \n ", c, nx, ny, slope, slopi, xtest, ytest); 234 | if( ( ytest >= ya ) && ( ytest <= yf ) ) 235 | { 236 | // Message("6 \n"); 237 | nint = nint + 1; 238 | xint[nint - 1] = xtest; 239 | yint[nint - 1] = ytest; 240 | iface_int[nint - 1] = 2; 241 | *xint1 = xint[0]; 242 | *yint1 = yint[0]; 243 | *xint2 = xint[1]; 244 | *yint2 = yint[1]; 245 | *iface_int1 = iface_int[0]; 246 | *iface_int2 = iface_int[1]; 247 | // if( c == 1795 ) 248 | // { 249 | // Message(" LINSEG (6) %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 250 | // } 251 | } 252 | /* ===== end of end-point switch statements ===== */ 253 | Hello: ; 254 | } 255 | // Message(" LINSEG %u %.15f %.15f %.15f %.15f \n", c, *xint1,*xint2,*yint1,*yint2 ); 256 | 257 | // Message(" c, (*xint1), (*xint2), (*yint1), (*yint2), len, nx, ny, nint, iface_int[0] , iface_int[1] = %u %.15f %.15f %.15f %.15f %.15f %f %f %d %d %d \n " , c, (*xint1), (*xint2), (*yint1), (*yint2), len, nx, ny, nint, iface_int[0] , iface_int[1] ); 258 | // Message(" c, nint, iface_int[0] , iface_int[1] = %u %d %d %d \n " , c, nint, iface_int[0] , iface_int[1] ); 259 | 260 | 261 | 262 | } 263 | -------------------------------------------------------------------------------- /liq_vol: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | /*--------- lgvol function ----------- */ 8 | /* This function Computes the liquid volume in the rectangle 9 | bounded by the four lines xl, xr, ya, and yf 10 | (xleft, xright, yaft, yfront) 11 | The liquid-gas interface plane cuts through the rectangle at 12 | a distance slen from the point (xc,yc). slen is measured such 13 | that slen*(nx,ny) + (xbase,ybase) = (xc,yc). 14 | The normal to the interface plane (into the liquid phase) 15 | is (nx,ny). */ 16 | 17 | extern void 18 | lgvol( cell_t c, Thread *t, real xl, real xr, real ya, real yf, real *voll ) 19 | { 20 | cell_t cr, cf, cl, ca, crf, cra, clf, cla ; 21 | Thread *tf, *ta, *tr, *tl, *trf, *tra, *tlf, *tla ; 22 | 23 | int n, nvert; 24 | real xc[ND_ND]; 25 | real xi, yi; 26 | real xv1, xv2, yv1, yv2; 27 | real tx, ty, eps; 28 | real xvert[5], yvert[5], slope , slopi; 29 | real xint1, xint2, yint1, yint2; 30 | real xtest, ytest, dot_prod; 31 | real dot_prod_new, dot_prod_old; 32 | real lenm1; 33 | real len, nx, ny; 34 | real voll_old, voll_new; 35 | real var; 36 | int iface_int1, iface_int2; 37 | int iphs; 38 | 39 | /* iface_int = 1 - bottom edge 40 | 2 - right edge 41 | 3 - top edge 42 | 4 - left edge */ 43 | iface_int1 = 0; 44 | iface_int2 = 0; 45 | 46 | eps = 0.000001;// any lower value 10-6 47 | 48 | 49 | C_CENTROID(xc,c,t); 50 | 51 | iphs = C_UDMI(c,t,1); 52 | nx = C_UDMI(c,t,2); 53 | ny = C_UDMI(c,t,3); 54 | len = C_UDMI(c,t,4); 55 | 56 | // Message(" lgvol c, nx, ny = %u %f %f \n ", c, nx, ny); 57 | 58 | tx = -ny; 59 | ty = nx; 60 | 61 | xi = xc[0] - len * nx; 62 | yi = xc[1] - len * ny; 63 | 64 | linseg( c, t, xl, xr, ya, yf, &xint1, &xint2, &yint1, &yint2, &iface_int1, &iface_int2 ); 65 | if( c == 1795 ) 66 | { 67 | // Message(" c, t, xl, xr, ya, yf,xint1,xint2,yint1,yint2 = %u %u %.15f %.15f %.15f %.15f %.15f %.15f %.15f %.15f \n", c, t, xl, xr, ya, yf, xint1,xint2,yint1,yint2); 68 | } 69 | 70 | /* if( iface_int1 == 0 && iface_int2 == 0 ) 71 | { 72 | return ; 73 | } */ 74 | 75 | // Message(" c, xint1, xint2, yint1, yint2, iface_int1, iface_int2 = %u %f %f %f %f %d %d \n" , c, xint1, xint2, yint1, yint2, iface_int1, iface_int2); 76 | 77 | /* find cell corners that are vertices */ 78 | 79 | nvert = 0; 80 | 81 | /* bottom left corner */ 82 | xtest = xl - xi ; 83 | ytest = ya - yi ; 84 | dot_prod = xtest*nx + ytest*ny; 85 | 86 | if (dot_prod >= 0.0 ) 87 | { 88 | nvert = nvert + 1; 89 | xvert[nvert-1] = xl; 90 | yvert[nvert-1] = ya; 91 | } 92 | 93 | /* interface intersects bottom */ 94 | if (iface_int1 == 1 ) 95 | { 96 | nvert = nvert + 1; 97 | xvert[nvert-1] = xint1; 98 | yvert[nvert-1] = yint1; 99 | } 100 | else if (iface_int2 == 1 ) 101 | { 102 | nvert = nvert + 1; 103 | xvert[nvert-1] = xint2; 104 | yvert[nvert-1] = yint2; 105 | } 106 | /* bottom right corner */ 107 | xtest = xr - xi; 108 | ytest = ya - yi; 109 | dot_prod = xtest*nx + ytest*ny; 110 | if (dot_prod >= 0.0 ) 111 | { 112 | nvert = nvert + 1; 113 | xvert[nvert-1] = xr; 114 | yvert[nvert-1] = ya; 115 | } 116 | 117 | /* interface intersects right */ 118 | 119 | if (iface_int1 == 2 ) 120 | { 121 | nvert = nvert + 1; 122 | xvert[nvert-1] = xint1; 123 | yvert[nvert-1] = yint1; 124 | } 125 | else if (iface_int2 == 2 ) 126 | { 127 | nvert = nvert + 1; 128 | xvert[nvert-1] = xint2; 129 | yvert[nvert-1] = yint2; 130 | } 131 | 132 | /* top right corner */ 133 | 134 | xtest = xr - xi ; 135 | ytest = yf - yi ; 136 | dot_prod = xtest*nx + ytest*ny; 137 | if (dot_prod >= 0.0 ) 138 | { 139 | // Message(" dot_prod2 = %f \n" , dot_prod); 140 | nvert = nvert + 1; 141 | xvert[nvert-1] = xr; 142 | yvert[nvert-1] = yf; 143 | } 144 | 145 | /* interface intersects top */ 146 | 147 | if (iface_int1 == 3 ) 148 | { 149 | nvert = nvert + 1; 150 | xvert[nvert-1] = xint1; 151 | yvert[nvert-1] = yint1; 152 | } 153 | else if (iface_int2 == 3 ) 154 | { 155 | nvert = nvert + 1; 156 | xvert[nvert-1] = xint2; 157 | yvert[nvert-1] = yint2; 158 | } 159 | 160 | 161 | /* top left corner */ 162 | 163 | xtest = xl - xi ; 164 | ytest = yf - yi; 165 | dot_prod = xtest*nx + ytest*ny; 166 | if (dot_prod >= 0.0 ) 167 | { 168 | // Message(" dot_prod3 = %f \n" , dot_prod); 169 | nvert = nvert + 1; 170 | xvert[nvert-1] = xl; 171 | yvert[nvert-1] = yf; 172 | } 173 | 174 | /* interface intersects left */ 175 | 176 | if (iface_int1 == 4 ) 177 | { 178 | nvert = nvert + 1; 179 | xvert[nvert-1] = xint1; 180 | yvert[nvert-1] = yint1; 181 | } 182 | else if (iface_int2 == 4 ) 183 | { 184 | nvert = nvert + 1; 185 | xvert[nvert-1] = xint2; 186 | yvert[nvert-1] = yint2; 187 | } 188 | 189 | // Message("xvert = %.15f %.15f %.15f %.15f %.15f \n", xvert[0], xvert[1], xvert[2], xvert[3], xvert[4] ); 190 | // Message("yvert = %.15f %.15f %.15f %.15f %.15f \n", yvert[0], yvert[1], yvert[2], yvert[3], yvert[4] ); 191 | (*voll) = 0.0; 192 | 193 | for( n = 0; n <= (nvert-1); n++) // ( n = 1; n < nvert; n++) CHANGE FROM FORTRAN STYLE TO C STYLE. 194 | { 195 | xv1 = xvert[n]; 196 | yv1 = yvert[n]; 197 | 198 | if ( n == (nvert-1) ) 199 | { 200 | xv2 = xvert[0]; 201 | yv2 = yvert[0]; 202 | } 203 | else 204 | { 205 | xv2 = xvert[n+1]; 206 | yv2 = yvert[n+1]; 207 | } 208 | 209 | 210 | // Message("nvert, xv1 ,xv2, yv1, yv2 = %d %.20f %.20f %.20f %.20f \n", nvert, xv1 ,xv2, yv1, yv2 ); 211 | // var = (xv1*yv2 - xv2*yv1);// no use 212 | 213 | // Message(" n , (*voll) , var = %d %f %.30f \n \n \n ", n , (*voll) , var ); 214 | (*voll) = (*voll) + xv1*yv2 - xv2*yv1; 215 | } 216 | 217 | (*voll) = 0.5*(*voll); // why multiplied by 0.5? 218 | // Message(" c, voll = %u %g \n ", c, (*voll) ); 219 | return; 220 | } 221 | -------------------------------------------------------------------------------- /mass_transfer_rate: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | 8 | /* This part calculates mass transfer rate due to evaporation. Refer G. Biswas NOTES and FORTRAN code */ 9 | 10 | // IMPORTANT NOTE: 11 | 12 | // THIS PART DEPENDS ON GRID GEOMETRY. This code is written for Rectangular grid of size 1.135mm width and 2.27 mm height. 13 | // Please change it if you wish to alter geometry. 14 | DEFINE_MASS_TRANSFER(GTM_Mass_Transfer_MODEL,c,t,from_index,from_species_index, to_index, to_species_index) 15 | { 16 | Domain *d = Get_Domain(1); 17 | Thread *t_liquid = THREAD_SUB_THREAD(t,from_index); 18 | Thread *t_vapour = THREAD_SUB_THREAD(t,to_index); 19 | cell_t cs; 20 | Thread *ts; 21 | 22 | /* =============== DECLARATION OF NEIGHBOURING CELL ID'S AND THREAD'S ================= */ 23 | cell_t cr, cf, cl, ca, crf, cra, clf, cla ; 24 | Thread *tf, *ta, *tr, *tl, *trf, *tra, *tlf, *tla ; 25 | 26 | face_t fr,ff,fl,fa,ffr,far,ffl,fal,frp,flp,frm,flm; 27 | Thread *tfr, *tff, *tfl, *tfa, *tffr, *tfar, *tffl, *tfal, *tfrp, *tflp, *tfrm, *tflm; 28 | 29 | face_t f; 30 | Thread *t_f; 31 | Thread *t_fr, *t_ff, *t_fl, *t_fa; 32 | Node *node; 33 | int a; 34 | /* ------------------------------------------------------------------------------------ */ 35 | cell_t CELL[3][3]; 36 | Thread *THREAD[3][3]; 37 | float NV_VEC(S11), NV_VEC(S12), NV_VEC(S13), NV_VEC(S21), NV_VEC(S22), NV_VEC(S23), NV_VEC(S31), NV_VEC(S32), NV_VEC(S33); 38 | 39 | float SX[3][3], SY[3][3], DS[3][3]; 40 | 41 | float source; 42 | 43 | float NV_VEC(n), NV_VEC(s), NV_VEC(sr), NV_VEC(sf), NV_VEC(sl), NV_VEC(sa), NV_VEC(srf), NV_VEC(slf), NV_VEC(sla), NV_VEC(sra), sx , sy ; 44 | real xl , xr , ya , yf; 45 | float XR[ND_ND], XF[ND_ND], XL[ND_ND], XA[ND_ND] , xi , yi , xis , yis; 46 | real nx,ny,xint1, xint2 , yint1, yint2; 47 | float X[ND_ND], Xr[ND_ND], Xf[ND_ND], Xl[ND_ND], Xa[ND_ND], Xrf[ND_ND], Xlf[ND_ND], Xla[ND_ND], Xra[ND_ND], XC[ND_ND], XCS[ND_ND]; 48 | real xcf[ND_ND],xca[ND_ND], xcr[ND_ND], xcl[ND_ND] ; 49 | real *ptl, *ptr, *pta, *ptf ; 50 | real xci[ND_ND]; 51 | int N; 52 | int iface_int1, iface_int2; 53 | int iphs; 54 | float NV_VEC(q_s), q_n , ds , kl , kg, keff, liq_vof_grad, latent_heat; 55 | float XS[ND_ND]; 56 | int ii,jj; 57 | int rr, cc, n_row, n_col ; 58 | float dot_prod[3][3] , S[3][3] ; 59 | float big; 60 | real ax, ay, bx, by; 61 | FILE *fp; 62 | char name[50]; 63 | 64 | real dx,dy; 65 | real len, voll ; 66 | real sourcl, sourcv, tempn; 67 | 68 | real distance; 69 | 70 | cxboolean check_r ; 71 | cxboolean check_f ; 72 | cxboolean check_l ; 73 | cxboolean check_a ; 74 | cxboolean boundary; 75 | 76 | check_r = FALSE; 77 | check_f = FALSE; 78 | check_l = FALSE; 79 | check_a = FALSE; 80 | 81 | iphs = C_UDMI(c,t,1); //iphase[c]; 82 | n[0] = C_UDMI(c,t,2); //nx; 83 | n[1] = C_UDMI(c,t,3); //ny; 84 | 85 | // 86 | 87 | if (iphs == 2 ) 88 | { 89 | // Message(" c, iphs, nx, ny = %u %f %f %f \n", c, C_UDMI(c,t,1), C_UDMI(c,t,2), C_UDMI(c,t,3) ); 90 | // Message(" MASS c,0,1,2,3,4,5 = %u %g %g %g %g %g %g \n", c, C_UDMI(c,t,0), C_UDMI(c,t,1), C_UDMI(c,t,2), C_UDMI(c,t,3), C_UDMI(c,t,4), C_UDMI(c,t,5)); 91 | // t_f = C_FACE_THREAD(c,t,0); 92 | /* 93 | boundary = FALSE; 94 | c_face_loop(c,t,a) 95 | { 96 | 97 | t_f = C_FACE_THREAD(c,t,a); 98 | if(BOUNDARY_FACE_THREAD_P(t_f)) 99 | { 100 | boundary = TRUE; 101 | } 102 | 103 | } */ 104 | t_f = C_FACE_THREAD(c,t,0); 105 | 106 | C_CENTROID(XC,c,t); 107 | // Message(" iphs, n[0], n[1] = %d %f %f \n ", iphs, n[0], n[1] ); 108 | 109 | if(BOUNDARY_FACE_THREAD_P(t_f)) 110 | { 111 | 112 | 113 | // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to left boundary.) 114 | if( fequal(XC[0], 0.00001135) && (XC[1] > 0.00003405) && (XC[1] < 0.0022473) ) 115 | { 116 | ff = C_FACE(c,t,3); 117 | tff = C_FACE_THREAD(c,t,3); 118 | fa = C_FACE(c,t,1); 119 | tfa = C_FACE_THREAD(c,t,1); 120 | fr = C_FACE(c,t,2); 121 | tfr = C_FACE_THREAD(c,t,2); 122 | fl = C_FACE(c,t,0); 123 | tfl = C_FACE_THREAD(c,t,0); 124 | 125 | //===================================================================================================================================== 126 | F_CENTROID(XR,fr,tfr); 127 | F_CENTROID(XF,ff,tff); 128 | F_CENTROID(XL,fl,tfl); 129 | F_CENTROID(XA,fa,tfa); 130 | 131 | xr = XR[0] ; 132 | yf = XF[1] ; 133 | xl = XL[0] ; 134 | ya = XA[1] ; 135 | 136 | // ================ GTM FUNCTION CALL =================== 137 | 138 | delta(c,t, &dx, &dy); 139 | nx = C_UDMI(c,t,2); 140 | ny = C_UDMI(c,t,3); 141 | 142 | linseg(c, t_liquid, xl, xr, ya, yf, &xint1, &xint2, &yint1, &yint2, &iface_int1, &iface_int2); 143 | lgvol( c, t_liquid, xl, xr, ya, yf, &voll ); 144 | 145 | // =============== DEFINITION OF N-VECTOR ================ 146 | 147 | // n[0] = nx; 148 | // n[1] = ny; 149 | 150 | // =============== MODIFIED DEFINITION OF S-VECTOR ================ 151 | 152 | 153 | if(xint1 > xint2) 154 | { 155 | xi = xint2 + fabs((xint1 - xint2)/2.0) ; 156 | } 157 | else 158 | { 159 | xi = xint1 + fabs((xint1 - xint2)/2.0) ; 160 | } 161 | 162 | if(yint1 > yint2) 163 | { 164 | yi = yint2 + fabs((yint1 - yint2)/2.0) ; 165 | } 166 | else 167 | { 168 | yi = yint1 + fabs((yint1 - yint2)/2.0) ; 169 | } 170 | 171 | //============================================================================================================================================ 172 | 173 | 174 | // ----------- FRONT FACE ------------ 175 | 176 | cf = F_C0(ff,tff); 177 | if(cf == c) 178 | { 179 | cf = F_C1(ff,tff); 180 | tf = F_C1_THREAD(ff,tff); 181 | } 182 | else 183 | { 184 | tf = F_C0_THREAD(ff,tff); 185 | } 186 | 187 | // ----------- RIGHT FACE ----------- 188 | 189 | cr = F_C0(fr,tfr); 190 | if(cr == c) 191 | { 192 | cr = F_C1(fr,tfr); 193 | tr = F_C1_THREAD(fr,tfr); 194 | } 195 | else 196 | { 197 | tr = F_C0_THREAD(fr,tfr); 198 | } 199 | 200 | // ------------ AFTER FACE ------------ 201 | 202 | ca = F_C0(fa,tfa); 203 | if(ca == c) 204 | { 205 | ca = F_C1(fa,tfa); 206 | ta = F_C1_THREAD(fa,tfa); 207 | } 208 | else 209 | { 210 | ta = F_C0_THREAD(fa,tfa); 211 | } 212 | 213 | C_CENTROID(xcf,cf,tf); 214 | C_CENTROID(xca,ca,ta); 215 | 216 | if ( fequal( xcf[1], 0.00225865 ) ) 217 | { 218 | return 0.0; 219 | } 220 | else if ( fequal(xca[1],0.00001135) ) 221 | { 222 | return 0.0; 223 | } 224 | else 225 | { 226 | frm = C_FACE(ca,ta,2); 227 | tfrm = C_FACE_THREAD(ca,ta,2); 228 | 229 | frp = C_FACE(cf,tf,2); 230 | tfrp = C_FACE_THREAD(cf,tf,2); 231 | 232 | // ======================== (crf,trf) ============================= 233 | 234 | crf = F_C0(frp,tfrp); 235 | if(crf == cr) 236 | { 237 | crf = F_C1(frp,tfrp); 238 | trf = F_C1_THREAD(frp,tfrp); 239 | } 240 | else 241 | { 242 | trf = F_C0_THREAD(frp,tfrp); 243 | } 244 | 245 | 246 | // ======================== (cra,tra) ============================= 247 | 248 | cra = F_C0(frm,tfrm); 249 | if(cra == cr) 250 | { 251 | cra = F_C1(frm,tfrm); 252 | tra = F_C1_THREAD(frm,tfrm); 253 | } 254 | else 255 | { 256 | tra = F_C0_THREAD(frm,tfrm); 257 | } 258 | } 259 | // Message(" cf = %u \t crf = %u \n ", cf, crf); 260 | // Message(" c = %u \t cr = %u \n ", c, cr ); 261 | // Message(" ca = %u \t cra = %u \n ", ca, cra); 262 | 263 | } 264 | 265 | // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to right boundary.) 266 | else if( fequal(XC[0], 0.00112365) && (XC[1] > 0.00003405) && (XC[1] < 0.0022473) ) 267 | { 268 | ff = C_FACE(c,t,1); 269 | tff = C_FACE_THREAD(c,t,1); 270 | fa = C_FACE(c,t,3); 271 | tfa = C_FACE_THREAD(c,t,3); 272 | fl = C_FACE(c,t,2); 273 | tfl = C_FACE_THREAD(c,t,2); 274 | fr = C_FACE(c,t,0); 275 | tfr = C_FACE_THREAD(c,t,0); 276 | 277 | // Message(" HI I am Right \n"); 278 | 279 | //========================================================================================================================================= 280 | F_CENTROID(XR,fr,tfr); 281 | F_CENTROID(XF,ff,tff); 282 | F_CENTROID(XL,fl,tfl); 283 | F_CENTROID(XA,fa,tfa); 284 | 285 | xr = XR[0] ; 286 | yf = XF[1] ; 287 | xl = XL[0] ; 288 | ya = XA[1] ; 289 | 290 | // ================ GTM FUNCTION CALL =================== 291 | 292 | delta(c,t, &dx, &dy); 293 | nx = C_UDMI(c,t,2); 294 | ny = C_UDMI(c,t,3); 295 | 296 | linseg(c, t_liquid, xl, xr, ya, yf, &xint1, &xint2, &yint1, &yint2, &iface_int1, &iface_int2); 297 | lgvol( c, t_liquid, xl, xr, ya, yf, &voll ); 298 | 299 | // =============== DEFINITION OF N-VECTOR ================ 300 | 301 | // n[0] = nx; 302 | // n[1] = ny; 303 | 304 | // =============== MODIFIED DEFINITION OF S-VECTOR ================ 305 | 306 | 307 | if(xint1 > xint2) 308 | { 309 | xi = xint2 + fabs((xint1 - xint2)/2.0) ; 310 | } 311 | else 312 | { 313 | xi = xint1 + fabs((xint1 - xint2)/2.0) ; 314 | } 315 | 316 | if(yint1 > yint2) 317 | { 318 | yi = yint2 + fabs((yint1 - yint2)/2.0) ; 319 | } 320 | else 321 | { 322 | yi = yint1 + fabs((yint1 - yint2)/2.0) ; 323 | } 324 | 325 | //============================================================================================================================================ 326 | 327 | // ----------- FRONT FACE ------------ 328 | 329 | cf = F_C0(ff,tff); 330 | if(cf == c) 331 | { 332 | cf = F_C1(ff,tff); 333 | tf = F_C1_THREAD(ff,tff); 334 | } 335 | else 336 | { 337 | tf = F_C0_THREAD(ff,tff); 338 | } 339 | 340 | // ----------- LEFT FACE ------------ 341 | 342 | cl = F_C0(fl,tfl); 343 | if(cl == c) 344 | { 345 | cl = F_C1(fl,tfl); 346 | tl = F_C1_THREAD(fl,tfl); 347 | } 348 | else 349 | { 350 | tl = F_C0_THREAD(fl,tfl); 351 | } 352 | 353 | 354 | // ------------ AFTER FACE ------------ 355 | 356 | ca = F_C0(fa,tfa); 357 | if(ca == c) 358 | { 359 | ca = F_C1(fa,tfa); 360 | ta = F_C1_THREAD(fa,tfa); 361 | } 362 | else 363 | { 364 | ta = F_C0_THREAD(fa,tfa); 365 | } 366 | 367 | C_CENTROID(xcf,cf,tf); 368 | C_CENTROID(xca,ca,ta); 369 | 370 | if ( fequal( xcf[1], 0.00225865 ) ) 371 | { 372 | return 0.0; 373 | } 374 | else if ( fequal(xca[1],0.00001135) ) 375 | { 376 | return 0.0; 377 | } 378 | else 379 | { 380 | flp = C_FACE(cf,tf,2); 381 | tflp = C_FACE_THREAD(cf,tf,2); 382 | 383 | flm = C_FACE(ca,ta,2); 384 | tflm = C_FACE_THREAD(ca,ta,2); 385 | 386 | 387 | // ======================== (crf,trf) ============================= 388 | 389 | clf = F_C0(flp,tflp); 390 | if(clf == cl) 391 | { 392 | clf = F_C1(flp,tflp); 393 | tlf = F_C1_THREAD(flp,tflp); 394 | } 395 | else 396 | { 397 | tlf = F_C0_THREAD(flp,tflp); 398 | } 399 | 400 | 401 | // ======================== (cra,tra) ============================= 402 | 403 | cla = F_C0(flm,tflm); 404 | if(cla == cl) 405 | { 406 | cla = F_C1(flm,tflm); 407 | tla = F_C1_THREAD(flm,tflm); 408 | } 409 | else 410 | { 411 | tla = F_C0_THREAD(flm,tflm); 412 | } 413 | } 414 | // Message(" clf = %u \t cf = %u \n ", clf, cf); 415 | // Message(" cl = %u \t c = %u \n ", cl, c ); 416 | // Message(" cla = %u \t ca = %u \n ", cla, ca); 417 | 418 | 419 | 420 | 421 | } 422 | 423 | // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to bottom boundary.) 424 | else if( fequal(XC[1], 0.00001135) && (XC[0] > 0.0000227) && (XC[0] < 0.00112365) ) 425 | { 426 | ff = C_FACE(c,t,2); 427 | tff = C_FACE_THREAD(c,t,2); 428 | fr = C_FACE(c,t,1); 429 | tfr = C_FACE_THREAD(c,t,1); 430 | fl = C_FACE(c,t,3); 431 | tfl = C_FACE_THREAD(c,t,3); 432 | fa = C_FACE(c,t,0); 433 | tfa = C_FACE_THREAD(c,t,0); 434 | 435 | 436 | //========================================================================================================================================= 437 | F_CENTROID(XR,fr,tfr); 438 | F_CENTROID(XF,ff,tff); 439 | F_CENTROID(XL,fl,tfl); 440 | F_CENTROID(XA,fa,tfa); 441 | 442 | xr = XR[0] ; 443 | yf = XF[1] ; 444 | xl = XL[0] ; 445 | ya = XA[1] ; 446 | 447 | // ================ GTM FUNCTION CALL =================== 448 | 449 | delta(c,t, &dx, &dy); 450 | nx = C_UDMI(c,t,2); 451 | ny = C_UDMI(c,t,3); 452 | 453 | linseg(c, t_liquid, xl, xr, ya, yf, &xint1, &xint2, &yint1, &yint2, &iface_int1, &iface_int2); 454 | lgvol( c, t_liquid, xl, xr, ya, yf, &voll ); 455 | 456 | // =============== DEFINITION OF N-VECTOR ================ 457 | 458 | // n[0] = nx; 459 | // n[1] = ny; 460 | 461 | // =============== MODIFIED DEFINITION OF S-VECTOR ================ 462 | 463 | 464 | if(xint1 > xint2) 465 | { 466 | xi = xint2 + fabs((xint1 - xint2)/2.0) ; 467 | } 468 | else 469 | { 470 | xi = xint1 + fabs((xint1 - xint2)/2.0) ; 471 | } 472 | 473 | if(yint1 > yint2) 474 | { 475 | yi = yint2 + fabs((yint1 - yint2)/2.0) ; 476 | } 477 | else 478 | { 479 | yi = yint1 + fabs((yint1 - yint2)/2.0) ; 480 | } 481 | 482 | //============================================================================================================================================ 483 | 484 | 485 | // ----------- RIGHT FACE ----------- 486 | 487 | cr = F_C0(fr,tfr); 488 | if(cr == c) 489 | { 490 | cr = F_C1(fr,tfr); 491 | tr = F_C1_THREAD(fr,tfr); 492 | } 493 | else 494 | { 495 | tr = F_C0_THREAD(fr,tfr); 496 | } 497 | 498 | // ----------- LEFT FACE ------------ = 499 | 500 | cl = F_C0(fl,tfl); 501 | if(cl == c) 502 | { 503 | cl = F_C1(fl,tfl); 504 | tl = F_C1_THREAD(fl,tfl); 505 | } 506 | else 507 | { 508 | tl = F_C0_THREAD(fl,tfl); 509 | } 510 | 511 | // ----------- FRONT FACE ------------ = 512 | 513 | cf = F_C0(ff,tff); 514 | if(cf == c) 515 | { 516 | cf = F_C1(ff,tff); 517 | tf = F_C1_THREAD(ff,tff); 518 | } 519 | else 520 | { 521 | tf = F_C0_THREAD(ff,tff); 522 | } 523 | 524 | c_face_loop(cr,tr,N) 525 | { 526 | t_fr = C_FACE_THREAD(cr,tr,N); 527 | if( BOUNDARY_FACE_THREAD_P(t_fr) ) 528 | { 529 | check_r = TRUE; 530 | } 531 | } 532 | 533 | C_CENTROID(xcr, cr, tr); 534 | C_CENTROID(xcl, cl, tl); 535 | 536 | if (fequal(xcr[0], 0.00112365) ) 537 | { 538 | return 0.0 ; 539 | 540 | } 541 | else if(fequal(xcl[0], 0.000011365) ) 542 | { 543 | return 0.0 ; 544 | } 545 | else 546 | { 547 | 548 | ffr = C_FACE(cr,tr,2); 549 | tffr = C_FACE_THREAD(cr,tr,2); 550 | 551 | ffl = C_FACE(cl,tl,2); 552 | tffl = C_FACE_THREAD(cl,tl,2); 553 | 554 | // ======================== (crf,trf) ============================= 555 | 556 | crf = F_C0(ffr,tffr); 557 | if(crf == cr) 558 | { 559 | crf = F_C1(ffr,tffr); 560 | trf = F_C1_THREAD(ffr,tffr); 561 | } 562 | else 563 | { 564 | trf = F_C0_THREAD(ffr,tffr); 565 | } 566 | // Message(" crf = %u \n ", crf); 567 | 568 | // ======================== (clf,tlf) ============================= 569 | 570 | clf = F_C0(ffl,tffl); 571 | if(clf == cl) 572 | { 573 | clf = F_C1(ffl,tffl); 574 | tlf = F_C1_THREAD(ffl,tffl); 575 | } 576 | else 577 | { 578 | tlf = F_C0_THREAD(ffl,tffl); 579 | } 580 | // Message(" clf = %u \n ", clf); 581 | 582 | } 583 | 584 | // Message(" clf = %u \t cf = %u \t crf = %u \n ", clf, cf, crf); 585 | // Message(" cl = %u \t c = %u \t cr = %u \n ", cl, c, cr ); 586 | 587 | } 588 | 589 | // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to top boundary.) 590 | else if( fequal(XC[1], 0.00225865) && (XC[0] > 0.0000227) && (XC[0] < 0.00112365) ) 591 | { 592 | fa = C_FACE(c,t,2); 593 | tfa = C_FACE_THREAD(c,t,2); 594 | fr = C_FACE(c,t,3); 595 | tfr = C_FACE_THREAD(c,t,3); 596 | fl = C_FACE(c,t,1); 597 | tfl = C_FACE_THREAD(c,t,1); 598 | ff = C_FACE(c,t,0); 599 | tff = C_FACE_THREAD(c,t,0); 600 | 601 | // Message(" HI I am TOP \n"); 602 | 603 | //========================================================================================================================================= 604 | F_CENTROID(XR,fr,tfr); 605 | F_CENTROID(XF,ff,tff); 606 | F_CENTROID(XL,fl,tfl); 607 | F_CENTROID(XA,fa,tfa); 608 | 609 | xr = XR[0] ; 610 | yf = XF[1] ; 611 | xl = XL[0] ; 612 | ya = XA[1] ; 613 | 614 | // ================ GTM FUNCTION CALL =================== 615 | 616 | delta(c,t, &dx, &dy); 617 | nx = C_UDMI(c,t,2); 618 | ny = C_UDMI(c,t,3); 619 | 620 | linseg(c, t_liquid, xl, xr, ya, yf, &xint1, &xint2, &yint1, &yint2, &iface_int1, &iface_int2); 621 | lgvol( c, t_liquid, xl, xr, ya, yf, &voll ); 622 | 623 | // =============== DEFINITION OF N-VECTOR ================ 624 | 625 | // n[0] = nx; 626 | // n[1] = ny; 627 | 628 | // =============== MODIFIED DEFINITION OF S-VECTOR ================ 629 | 630 | 631 | if(xint1 > xint2) 632 | { 633 | xi = xint2 + fabs((xint1 - xint2)/2.0) ; 634 | } 635 | else 636 | { 637 | xi = xint1 + fabs((xint1 - xint2)/2.0) ; 638 | } 639 | 640 | if(yint1 > yint2) 641 | { 642 | yi = yint2 + fabs((yint1 - yint2)/2.0) ; 643 | } 644 | else 645 | { 646 | yi = yint1 + fabs((yint1 - yint2)/2.0) ; 647 | } 648 | 649 | //============================================================================================================================================ 650 | 651 | // ----------- RIGHT FACE ----------- 652 | 653 | cr = F_C0(fr,tfr); 654 | if(cr == c) 655 | { 656 | cr = F_C1(fr,tfr); 657 | tr = F_C1_THREAD(fr,tfr); 658 | } 659 | else 660 | { 661 | tr = F_C0_THREAD(fr,tfr); 662 | } 663 | 664 | // ----------- LEFT FACE ------------ 665 | 666 | cl = F_C0(fl,tfl); 667 | if(cl == c) 668 | { 669 | cl = F_C1(fl,tfl); 670 | tl = F_C1_THREAD(fl,tfl); 671 | } 672 | else 673 | { 674 | tl = F_C0_THREAD(fl,tfl); 675 | } 676 | 677 | // ----------- AFTER FACE ------------ 678 | 679 | ca = F_C0(fa,tfa); 680 | if(ca == c) 681 | { 682 | ca = F_C1(fa,tfa); 683 | ta = F_C1_THREAD(fa,tfa); 684 | } 685 | else 686 | { 687 | ta = F_C0_THREAD(fa,tfa); 688 | } 689 | 690 | 691 | 692 | C_CENTROID(xcr,cr,tr); 693 | C_CENTROID(xcl,cl,tl); 694 | 695 | if (fequal(xcr[0] , 0.00112365)) 696 | { 697 | return 0.0 ; 698 | } 699 | else if(fequal(xcl[0], 0.00001135)) 700 | { 701 | return 0.0 ; 702 | } 703 | else 704 | { 705 | far = C_FACE(cr,tr,2); 706 | tfar = C_FACE_THREAD(cr,tr,2); 707 | 708 | fal = C_FACE(cl,tl,2); 709 | tfal = C_FACE_THREAD(cl,tl,2); 710 | 711 | // ======================== (cra,tra) ============================= 712 | 713 | cra = F_C0(far,tfar); 714 | if(cra == cr) 715 | { 716 | cra = F_C1(far,tfar); 717 | tra = F_C1_THREAD(far,tfar); 718 | } 719 | else 720 | { 721 | tra = F_C0_THREAD(far,tfar); 722 | } 723 | // Message(" crf = %u \n ", crf); 724 | 725 | // ======================== (cla,tla) ============================= 726 | 727 | cla = F_C0(fal,tfal); 728 | if(cla == cl) 729 | { 730 | cla = F_C1(fal,tfal); 731 | tla = F_C1_THREAD(fal,tfal); 732 | } 733 | else 734 | { 735 | tla = F_C0_THREAD(fal,tfal); 736 | } 737 | // Message(" clf = %u \n ", clf); 738 | 739 | } 740 | // Message(" cl = %u \t c = %u \t cr = %u \n ", cl, c, cr ); 741 | // Message(" cla = %u \t ca = %u \t cra = %u \n ", cla, ca, cra); 742 | } 743 | else 744 | { 745 | return 0.0; 746 | 747 | } 748 | 749 | } 750 | else 751 | { 752 | 753 | fr = C_FACE(c,t,1); 754 | tfr = C_FACE_THREAD(c,t,1); 755 | fl = C_FACE(c,t,3); 756 | tfl = C_FACE_THREAD(c,t,3); 757 | ff = C_FACE(c,t,2); 758 | tff = C_FACE_THREAD(c,t,2); 759 | fa = C_FACE(c,t,0); 760 | tfa = C_FACE_THREAD(c,t,0); 761 | 762 | 763 | 764 | 765 | // ----------- RIGHT FACE ----------- = 766 | 767 | cr = F_C0(fr,tfr); 768 | if(cr == c) 769 | { 770 | cr = F_C1(fr,tfr); 771 | tr = F_C1_THREAD(fr,tfr); 772 | } 773 | else 774 | { 775 | tr = F_C0_THREAD(fr,tfr); 776 | } 777 | 778 | // ----------- LEFT FACE ------------ = 779 | 780 | cl = F_C0(fl,tfl); 781 | if(cl == c) 782 | { 783 | cl = F_C1(fl,tfl); 784 | tl = F_C1_THREAD(fl,tfl); 785 | } 786 | else 787 | { 788 | tl = F_C0_THREAD(fl,tfl); 789 | } 790 | 791 | // ----------- FRONT FACE ------------ = 792 | 793 | cf = F_C0(ff,tff); 794 | if(cf == c) 795 | { 796 | cf = F_C1(ff,tff); 797 | tf = F_C1_THREAD(ff,tff); 798 | } 799 | else 800 | { 801 | tf = F_C0_THREAD(ff,tff); 802 | } 803 | 804 | // ------------ AFTER FACE ------------ = 805 | 806 | ca = F_C0(fa,tfa); 807 | if(ca == c) 808 | { 809 | ca = F_C1(fa,tfa); 810 | ta = F_C1_THREAD(fa,tfa); 811 | } 812 | else 813 | { 814 | ta = F_C0_THREAD(fa,tfa); 815 | } 816 | // Message(" cf = \t \t %u \t \t \n ", cf ); 817 | // Message(" cl , c, cr = %u \t %u \t %u \n ", cl, c, cr ); 818 | // Message(" ca = \t \t %u \t \t \n ", ca ); 819 | 820 | //========================================================================================================================================= 821 | F_CENTROID(XR,fr,tfr); 822 | F_CENTROID(XF,ff,tff); 823 | F_CENTROID(XL,fl,tfl); 824 | F_CENTROID(XA,fa,tfa); 825 | 826 | xr = XR[0] ; 827 | yf = XF[1] ; 828 | xl = XL[0] ; 829 | ya = XA[1] ; 830 | 831 | // ================ GTM FUNCTION CALL =================== 832 | 833 | delta(c,t, &dx, &dy); 834 | nx = C_UDMI(c,t,2); 835 | ny = C_UDMI(c,t,3); 836 | 837 | linseg(c, t_liquid, xl, xr, ya, yf, &xint1, &xint2, &yint1, &yint2, &iface_int1, &iface_int2); 838 | lgvol( c, t_liquid, xl, xr, ya, yf, &voll ); 839 | 840 | // =============== DEFINITION OF N-VECTOR ================ 841 | 842 | // n[0] = nx; 843 | // n[1] = ny; 844 | 845 | // =============== MODIFIED DEFINITION OF S-VECTOR ================ 846 | 847 | 848 | if(xint1 > xint2) 849 | { 850 | xi = xint2 + fabs((xint1 - xint2)/2.0) ; 851 | } 852 | else 853 | { 854 | xi = xint1 + fabs((xint1 - xint2)/2.0) ; 855 | } 856 | 857 | if(yint1 > yint2) 858 | { 859 | yi = yint2 + fabs((yint1 - yint2)/2.0) ; 860 | } 861 | else 862 | { 863 | yi = yint1 + fabs((yint1 - yint2)/2.0) ; 864 | } 865 | 866 | //============================================================================================================================================ 867 | 868 | 869 | c_face_loop(cr,tr,N) 870 | { 871 | t_fr = C_FACE_THREAD(cr,tr,N); 872 | if( BOUNDARY_FACE_THREAD_P(t_fr) ) 873 | { 874 | check_r = TRUE; 875 | } 876 | } 877 | 878 | c_face_loop(cf,tf,N) 879 | { 880 | t_ff = C_FACE_THREAD(cf,tf,N); 881 | if( BOUNDARY_FACE_THREAD_P(t_ff) ) 882 | { 883 | check_f = TRUE; 884 | } 885 | } 886 | 887 | c_face_loop(cl,tl,N) 888 | { 889 | t_fl = C_FACE_THREAD(cl,tl,N); 890 | if( BOUNDARY_FACE_THREAD_P(t_fl) ) 891 | { 892 | check_l = TRUE; 893 | } 894 | } 895 | 896 | c_face_loop(ca,ta,N) 897 | { 898 | t_fa = C_FACE_THREAD(ca,ta,N); 899 | if( BOUNDARY_FACE_THREAD_P(t_fa) ) 900 | { 901 | check_a = TRUE; 902 | } 903 | } 904 | 905 | if( check_r ) 906 | { 907 | // Message(" BOUNDARY CELL ENCOUNTERED \n "); 908 | 909 | 910 | ffr = C_FACE(cr,tr,1); 911 | tffr = C_FACE_THREAD(cr,tr,1); 912 | 913 | far = C_FACE(cr,tr,3); 914 | tfar = C_FACE_THREAD(cr,tr,3); 915 | 916 | ffl = C_FACE(cl,tl,2); 917 | tffl = C_FACE_THREAD(cl,tl,2); 918 | 919 | fal = C_FACE(cl,tl,0); 920 | tfal = C_FACE_THREAD(cl,tl,0); 921 | 922 | // ======================== (crf,trf) ============================= = 923 | 924 | crf = F_C0(ffr,tffr); 925 | if(crf == cr) 926 | { 927 | crf = F_C1(ffr,tffr); 928 | trf = F_C1_THREAD(ffr,tffr); 929 | } 930 | else 931 | { 932 | trf = F_C0_THREAD(ffr,tffr); 933 | } 934 | // Message(" crf = %u \n ", crf); 935 | // ======================== (cra,tra) ============================= = 936 | 937 | cra = F_C0(far,tfar); 938 | if(cra == cr) 939 | { 940 | cra = F_C1(far,tfar); 941 | tra = F_C1_THREAD(far,tfar); 942 | } 943 | else 944 | { 945 | tra = F_C0_THREAD(far,tfar); 946 | } 947 | // Message(" cra = %u \n ", cra); 948 | // ======================== (clf,tlf) ============================= = 949 | 950 | clf = F_C0(ffl,tffl); 951 | if(clf == cl) 952 | { 953 | clf = F_C1(ffl,tffl); 954 | tlf = F_C1_THREAD(ffl,tffl); 955 | } 956 | else 957 | { 958 | tlf = F_C0_THREAD(ffl,tffl); 959 | } 960 | // Message(" clf = %u \n ", clf); 961 | // ======================== (cla,tla) ============================= = 962 | 963 | cla = F_C0(fal,tfal); 964 | if(cla == cl) 965 | { 966 | cla = F_C1(fal,tfal); 967 | tla = F_C1_THREAD(fal,tfal); 968 | } 969 | else 970 | { 971 | tla = F_C0_THREAD(fal,tfal); 972 | } 973 | // Message(" cla = %u \n ", cla); 974 | 975 | } 976 | else if ( check_f ) 977 | { 978 | 979 | frp = C_FACE(cf,tf,3); 980 | tfrp = C_FACE_THREAD(cf,tf,3); 981 | 982 | flp = C_FACE(cf,tf,1); 983 | tflp = C_FACE_THREAD(cf,tf,1); 984 | 985 | frm = C_FACE(ca,ta,1); 986 | tfrm = C_FACE_THREAD(ca,ta,1); 987 | 988 | flm = C_FACE(ca,ta,3); 989 | tflm = C_FACE_THREAD(ca,ta,3); 990 | 991 | // ======================== (crf,trf) ============================= = 992 | 993 | crf = F_C0(frp,tfrp); 994 | if(crf == cr) 995 | { 996 | crf = F_C1(frp,tfrp); 997 | trf = F_C1_THREAD(frp,tfrp); 998 | } 999 | else 1000 | { 1001 | trf = F_C0_THREAD(frp,tfrp); 1002 | } 1003 | 1004 | // ======================== (clf,tlf) ============================= = 1005 | 1006 | clf = F_C0(flp,tflp); 1007 | if(clf == cl) 1008 | { 1009 | clf = F_C1(flp,tflp); 1010 | tlf = F_C1_THREAD(flp,tflp); 1011 | } 1012 | else 1013 | { 1014 | tlf = F_C0_THREAD(flp,tflp); 1015 | } 1016 | 1017 | // ======================== (cra,tra) ============================= = 1018 | 1019 | cra = F_C0(frm,tfrm); 1020 | if(cra == cr) 1021 | { 1022 | cra = F_C1(frm,tfrm); 1023 | tra = F_C1_THREAD(frm,tfrm); 1024 | } 1025 | else 1026 | { 1027 | tra = F_C0_THREAD(frm,tfrm); 1028 | } 1029 | 1030 | // ======================== (cla,tla) ============================= = 1031 | 1032 | cla = F_C0(flm,tflm); 1033 | if(cla == cl) 1034 | { 1035 | cla = F_C1(flm,tflm); 1036 | tla = F_C1_THREAD(flm,tflm); 1037 | } 1038 | else 1039 | { 1040 | tla = F_C0_THREAD(flm,tflm); 1041 | } 1042 | 1043 | } 1044 | else if ( check_l ) 1045 | { 1046 | 1047 | ffl = C_FACE(cl,tl,3); 1048 | tffl = C_FACE_THREAD(cl,tl,3); 1049 | 1050 | fal = C_FACE(cl,tl,1); 1051 | tfal = C_FACE_THREAD(cl,tl,1); 1052 | 1053 | ffr = C_FACE(cr,tr,2); 1054 | tffr = C_FACE_THREAD(cr,tr,2); 1055 | 1056 | far = C_FACE(cr,tr,0); 1057 | tfar = C_FACE_THREAD(cr,tr,0); 1058 | 1059 | // ======================== (crf,trf) ============================= = 1060 | 1061 | crf = F_C0(ffr,tffr); 1062 | if(crf == cr) 1063 | { 1064 | crf = F_C1(ffr,tffr); 1065 | trf = F_C1_THREAD(ffr,tffr); 1066 | } 1067 | else 1068 | { 1069 | trf = F_C0_THREAD(ffr,tffr); 1070 | } 1071 | // Message(" crf = %u \n ", crf); 1072 | // ======================== (cra,tra) ============================= = 1073 | 1074 | cra = F_C0(far,tfar); 1075 | if(cra == cr) 1076 | { 1077 | cra = F_C1(far,tfar); 1078 | tra = F_C1_THREAD(far,tfar); 1079 | } 1080 | else 1081 | { 1082 | tra = F_C0_THREAD(far,tfar); 1083 | } 1084 | // Message(" cra = %u \n ", cra); 1085 | // ======================== (clf,tlf) ============================= = 1086 | 1087 | clf = F_C0(ffl,tffl); 1088 | if(clf == cl) 1089 | { 1090 | clf = F_C1(ffl,tffl); 1091 | tlf = F_C1_THREAD(ffl,tffl); 1092 | } 1093 | else 1094 | { 1095 | tlf = F_C0_THREAD(ffl,tffl); 1096 | } 1097 | // Message(" clf = %u \n ", clf); 1098 | // ======================== (cla,tla) ============================= = 1099 | 1100 | cla = F_C0(fal,tfal); 1101 | if(cla == cl) 1102 | { 1103 | cla = F_C1(fal,tfal); 1104 | tla = F_C1_THREAD(fal,tfal); 1105 | } 1106 | else 1107 | { 1108 | tla = F_C0_THREAD(fal,tfal); 1109 | } 1110 | // Message(" cla = %u \n ", cla); 1111 | 1112 | 1113 | } 1114 | else if ( check_a ) 1115 | { 1116 | 1117 | frm = C_FACE(ca,ta,1); 1118 | tfrm = C_FACE_THREAD(ca,ta,1); 1119 | 1120 | flm = C_FACE(ca,ta,3); 1121 | tflm = C_FACE_THREAD(ca,ta,3); 1122 | 1123 | frp = C_FACE(cf,tf,1); 1124 | tfrp = C_FACE_THREAD(cf,tf,1); 1125 | 1126 | flp = C_FACE(cf,tf,3); 1127 | tflp = C_FACE_THREAD(cf,tf,3); 1128 | 1129 | // ======================== (crf,trf) ============================= = 1130 | 1131 | crf = F_C0(frp,tfrp); 1132 | if(crf == cr) 1133 | { 1134 | crf = F_C1(frp,tfrp); 1135 | trf = F_C1_THREAD(frp,tfrp); 1136 | } 1137 | else 1138 | { 1139 | trf = F_C0_THREAD(frp,tfrp); 1140 | } 1141 | 1142 | // ======================== (clf,tlf) ============================= = 1143 | clf = F_C0(flp,tflp); 1144 | if(clf == cl) 1145 | { 1146 | clf = F_C1(flp,tflp); 1147 | tlf = F_C1_THREAD(flp,tflp); 1148 | } 1149 | else 1150 | { 1151 | tlf = F_C0_THREAD(flp,tflp); 1152 | } 1153 | 1154 | // ======================== (cra,tra) ============================= = 1155 | 1156 | cra = F_C0(frm,tfrm); 1157 | if(cra == cr) 1158 | { 1159 | cra = F_C1(frm,tfrm); 1160 | tra = F_C1_THREAD(frm,tfrm); 1161 | } 1162 | else 1163 | { 1164 | tra = F_C0_THREAD(frm,tfrm); 1165 | } 1166 | 1167 | // ======================== (cla,tla) ============================= = 1168 | 1169 | cla = F_C0(flm,tflm); 1170 | if(cla == cl) 1171 | { 1172 | cla = F_C1(flm,tflm); 1173 | tla = F_C1_THREAD(flm,tflm); 1174 | } 1175 | else 1176 | { 1177 | tla = F_C0_THREAD(flm,tflm); 1178 | } 1179 | } 1180 | else 1181 | { 1182 | // ============== DEFINITION OF SECONDARY NEIGHBOURS ============== = 1183 | 1184 | 1185 | ffr = C_FACE(cr,tr,2); 1186 | tffr = C_FACE_THREAD(cr,tr,2); 1187 | 1188 | far = C_FACE(cr,tr,0); 1189 | tfar = C_FACE_THREAD(cr,tr,0); 1190 | 1191 | ffl = C_FACE(cl,tl,2); 1192 | tffl = C_FACE_THREAD(cl,tl,2); 1193 | 1194 | fal = C_FACE(cl,tl,0); 1195 | tfal = C_FACE_THREAD(cl,tl,0); 1196 | 1197 | // Message(" far, tfar, ffl, tffl, fal, tfal = %u %u %u %u %u %u \n ", far, tfar, ffl, tffl, fal, tfal); 1198 | 1199 | 1200 | 1201 | // ======================== (crf,trf) ============================= = 1202 | 1203 | crf = F_C0(ffr,tffr); 1204 | if(crf == cr) 1205 | { 1206 | crf = F_C1(ffr,tffr); 1207 | trf = F_C1_THREAD(ffr,tffr); 1208 | } 1209 | else 1210 | { 1211 | trf = F_C0_THREAD(ffr,tffr); 1212 | } 1213 | // Message(" crf = %u \n ", crf); 1214 | // ======================== (cra,tra) ============================= = 1215 | 1216 | cra = F_C0(far,tfar); 1217 | if(cra == cr) 1218 | { 1219 | cra = F_C1(far,tfar); 1220 | tra = F_C1_THREAD(far,tfar); 1221 | } 1222 | else 1223 | { 1224 | tra = F_C0_THREAD(far,tfar); 1225 | } 1226 | // Message(" cra = %u \n ", cra); 1227 | // ======================== (clf,tlf) ============================= = 1228 | 1229 | clf = F_C0(ffl,tffl); 1230 | if(clf == cl) 1231 | { 1232 | clf = F_C1(ffl,tffl); 1233 | tlf = F_C1_THREAD(ffl,tffl); 1234 | } 1235 | else 1236 | { 1237 | tlf = F_C0_THREAD(ffl,tffl); 1238 | } 1239 | // Message(" clf = %u \n ", clf); 1240 | // ======================== (cla,tla) ============================= = 1241 | 1242 | cla = F_C0(fal,tfal); 1243 | if(cla == cl) 1244 | { 1245 | cla = F_C1(fal,tfal); 1246 | tla = F_C1_THREAD(fal,tfal); 1247 | } 1248 | else 1249 | { 1250 | tla = F_C0_THREAD(fal,tfal); 1251 | } 1252 | // Message(" cla = %u \n ", cla); 1253 | 1254 | } 1255 | 1256 | // Message(" clf = %u \t cf = %u \t crf = %u \n ", clf, cf, crf); 1257 | // Message(" cl = %u \t c = %u \t cr = %u \n ", cl, c, cr ); 1258 | // Message(" cla = %u \t ca = %u \t cra = %u \n ", cla, ca, cra); 1259 | // Message(" tlf = %u \t tf = %u \t trf = %u \n ", tlf, tf, trf); 1260 | // Message(" tl = %u \t t = %u \t tr = %u \n ", tl, t, tr ); 1261 | // Message(" tla = %u \t ta = %u \t tra = %u \n ", tla, ta, tra); 1262 | 1263 | 1264 | } 1265 | 1266 | 1267 | 1268 | 1269 | 1270 | 1271 | // Message(" X[ND_ND] , Xr[ND_ND] = \n %g %g \n %g %g \n ", xi, X[1], Xr[0], Xr[1]); 1272 | 1273 | 1274 | 1275 | t_f = C_FACE_THREAD(c,t,0); 1276 | 1277 | C_CENTROID(XC,c,t); 1278 | 1279 | 1280 | if(BOUNDARY_FACE_THREAD_P(t_f)) 1281 | { 1282 | 1283 | 1284 | if( fequal(XC[0], 0.00001135) && (XC[1] > 0.00003405) && (XC[1] < 0.0022473) ) // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to left boundary.) 1285 | { 1286 | C_CENTROID(X,c,t); 1287 | C_CENTROID(Xr,cr,tr); 1288 | C_CENTROID(Xf,cf,tf); 1289 | C_CENTROID(Xa,ca,ta); 1290 | C_CENTROID(Xrf,crf,trf); 1291 | C_CENTROID(Xra,cra,tra); 1292 | 1293 | NV_D(S11 , = , (Xf[0] - xi) , (Xf[1] - yi) , 0.0 ); 1294 | NV_D(S12 , = , (Xrf[0] - xi) , (Xrf[1] - yi) , 0.0 ); 1295 | NV_D(S21 , = , (X[0] - xi) , (X[1] - yi) , 0.0 ); 1296 | NV_D(S22 , = , (Xr[0] - xi) , (Xr[1] - yi) , 0.0 ); 1297 | NV_D(S31 , = , (Xa[0] - xi) , (Xa[1] - yi) , 0.0 ); 1298 | NV_D(S32 , = , (Xra[0] - xi) , (Xra[1] - yi) , 0.0 ); 1299 | 1300 | SX[1][1] = (Xf[0] - xi); 1301 | SX[1][2] = (Xrf[0] - xi); 1302 | SX[2][1] = (X[0] - xi); 1303 | SX[2][2] = (Xr[0] - xi); 1304 | SX[3][1] = (Xa[0] - xi); 1305 | SX[3][2] = (Xra[0] - xi); 1306 | 1307 | SY[1][1] = (Xf[1] - yi); 1308 | SY[1][2] = (Xrf[1] - yi); 1309 | SY[2][1] = (X[1] - yi); 1310 | SY[2][2] = (Xr[1] - yi); 1311 | SY[3][1] = (Xa[1] - yi); 1312 | SY[3][2] = (Xra[1] - yi); 1313 | 1314 | DS[1][1] = sqrt(SX[1][1]*SX[1][1] + SY[1][1]*SY[1][1]) ; 1315 | DS[1][2] = sqrt(SX[1][2]*SX[1][2] + SY[1][2]*SY[1][2]) ; 1316 | // DS[1][3] = sqrt(SX[1][3]*SX[1][3] + SY[1][3]*SY[1][3]) ; 1317 | DS[2][1] = sqrt(SX[2][1]*SX[2][1] + SY[2][1]*SY[2][1]) ; 1318 | DS[2][2] = sqrt(SX[2][2]*SX[2][2] + SY[2][2]*SY[2][2]) ; 1319 | // DS[2][3] = sqrt(SX[2][3]*SX[2][3] + SY[2][3]*SY[2][3]) ; 1320 | DS[3][1] = sqrt(SX[3][1]*SX[3][1] + SY[3][1]*SY[3][1]) ; 1321 | DS[3][2] = sqrt(SX[3][2]*SX[3][2] + SY[3][2]*SY[3][2]) ; 1322 | // DS[3][3] = sqrt(SX[3][3]*SX[3][3] + SY[3][3]*SY[3][3]) ; 1323 | 1324 | SX[1][1] /= DS[1][1]; 1325 | SX[1][2] /= DS[1][2]; 1326 | SX[2][1] /= DS[2][1]; 1327 | SX[2][2] /= DS[2][2]; 1328 | SX[3][1] /= DS[3][1]; 1329 | SX[3][2] /= DS[3][2]; 1330 | 1331 | SY[1][1] /= DS[1][1]; 1332 | SY[1][2] /= DS[1][2]; 1333 | SY[2][1] /= DS[2][1]; 1334 | SY[2][2] /= DS[2][2]; 1335 | SY[3][1] /= DS[3][1]; 1336 | SY[3][2] /= DS[3][2]; 1337 | 1338 | dot_prod[1][1] = -( SX[1][1]*n[0] + SY[1][1]*n[1] ) ;//NV_DOT( S[1][1] , n ); 1339 | dot_prod[1][2] = -( SX[1][2]*n[0] + SY[1][2]*n[1] ) ;//NV_DOT( S[1][2] , n ); 1340 | dot_prod[2][1] = -( SX[2][1]*n[0] + SY[2][1]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1341 | dot_prod[2][2] = -( SX[2][2]*n[0] + SY[2][2]*n[1] ) ;//NV_DOT( S[2][2] , n ); 1342 | dot_prod[3][1] = -( SX[3][1]*n[0] + SY[3][1]*n[1] ) ;//NV_DOT( S[3][1] , n ); 1343 | dot_prod[3][2] = -( SX[3][2]*n[0] + SY[3][2]*n[1] ) ;//NV_DOT( S[3][2] , n ); 1344 | 1345 | big = -1.0; 1346 | for( rr = 1; rr <= 3; rr++) 1347 | for( cc = 1; cc <= 2; cc++) 1348 | { 1349 | if (dot_prod[rr][cc] > dot_prod[rr + 1][cc + 1]) 1350 | { 1351 | big = dot_prod[rr][cc] *100000.0 ; 1352 | n_row = rr; 1353 | n_col = cc; 1354 | 1355 | if(big != 0) 1356 | { 1357 | // Message( " big, rr, cc = %g %d %d \n ", big, rr, cc); 1358 | } 1359 | 1360 | if(rr == 1 && cc == 1) 1361 | { 1362 | cs = cf; 1363 | ts = tf; 1364 | } 1365 | else if(rr == 1 && cc == 2) 1366 | { 1367 | cs = crf; 1368 | ts = trf; 1369 | } 1370 | else if(rr == 2 && cc == 1) 1371 | { 1372 | cs = c; 1373 | ts = t; 1374 | } 1375 | else if(rr == 2 && cc == 2) 1376 | { 1377 | cs = cr; 1378 | ts = tr; 1379 | } 1380 | else if(rr == 3 && cc == 1) 1381 | { 1382 | cs = ca; 1383 | ts = ta; 1384 | } 1385 | else if(rr == 3 && cc == 2) 1386 | { 1387 | cs = cra; 1388 | ts = tra; 1389 | } 1390 | 1391 | } 1392 | else 1393 | { 1394 | big = big; 1395 | n_row = n_row ; 1396 | n_col = n_col ; 1397 | cs = cs; 1398 | ts = ts; 1399 | 1400 | 1401 | } 1402 | } 1403 | Message(" LHS n_row, n_col = %d %d \n ", n_row, n_col ); 1404 | } 1405 | else if( fequal(XC[0], 0.00112365) && (XC[1] > 0.00003405) && (XC[1] < 0.0022473) ) // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to right boundary.) 1406 | { 1407 | C_CENTROID(X,c,t); 1408 | C_CENTROID(Xf,cf,tf); 1409 | C_CENTROID(Xl,cl,tl); 1410 | C_CENTROID(Xa,ca,ta); 1411 | C_CENTROID(Xlf,clf,tlf); 1412 | C_CENTROID(Xla,cla,tla); 1413 | 1414 | SX[1][1] = (X[0] - xi); 1415 | SX[1][2] = (Xf[0] - xi); 1416 | SX[2][1] = (Xl[0] - xi); 1417 | SX[2][2] = (Xa[0] - xi); 1418 | SX[3][1] = (Xlf[0] - xi); 1419 | SX[3][2] = (Xla[0] - xi); 1420 | 1421 | SY[1][1] = (X[1] - yi); 1422 | SY[1][2] = (Xf[1] - yi); 1423 | SY[2][1] = (Xl[1] - yi); 1424 | SY[2][2] = (Xa[1] - yi); 1425 | SY[3][1] = (Xlf[1] - yi); 1426 | SY[3][2] = (Xla[1] - yi); 1427 | 1428 | DS[1][1] = sqrt(SX[1][1]*SX[1][1] + SY[1][1]*SY[1][1]) ; 1429 | DS[1][2] = sqrt(SX[1][2]*SX[1][2] + SY[1][2]*SY[1][2]) ; 1430 | // DS[1][3] = sqrt(SX[1][3]*SX[1][3] + SY[1][3]*SY[1][3]) ; 1431 | DS[2][1] = sqrt(SX[2][1]*SX[2][1] + SY[2][1]*SY[2][1]) ; 1432 | DS[2][2] = sqrt(SX[2][2]*SX[2][2] + SY[2][2]*SY[2][2]) ; 1433 | // DS[2][3] = sqrt(SX[2][3]*SX[2][3] + SY[2][3]*SY[2][3]) ; 1434 | DS[3][1] = sqrt(SX[3][1]*SX[3][1] + SY[3][1]*SY[3][1]) ; 1435 | DS[3][2] = sqrt(SX[3][2]*SX[3][2] + SY[3][2]*SY[3][2]) ; 1436 | // DS[3][3] = sqrt(SX[3][3]*SX[3][3] + SY[3][3]*SY[3][3]) ; 1437 | 1438 | SX[1][1] /= DS[1][1]; 1439 | SX[1][2] /= DS[1][2]; 1440 | SX[2][1] /= DS[2][1]; 1441 | SX[2][2] /= DS[2][2]; 1442 | SX[3][1] /= DS[3][1]; 1443 | SX[3][2] /= DS[3][2]; 1444 | 1445 | SY[1][1] /= DS[1][1]; 1446 | SY[1][2] /= DS[1][2]; 1447 | SY[2][1] /= DS[2][1]; 1448 | SY[2][2] /= DS[2][2]; 1449 | SY[3][1] /= DS[3][1]; 1450 | SY[3][2] /= DS[3][2]; 1451 | 1452 | dot_prod[1][1] = -( SX[1][1]*n[0] + SY[1][1]*n[1] ) ;//NV_DOT( S[1][1] , n ); 1453 | dot_prod[1][2] = -( SX[1][2]*n[0] + SY[1][2]*n[1] ) ;//NV_DOT( S[1][2] , n ); 1454 | dot_prod[2][1] = -( SX[2][1]*n[0] + SY[2][1]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1455 | dot_prod[2][2] = -( SX[2][2]*n[0] + SY[2][2]*n[1] ) ;//NV_DOT( S[2][2] , n ); 1456 | dot_prod[3][1] = -( SX[3][1]*n[0] + SY[3][1]*n[1] ) ;//NV_DOT( S[3][1] , n ); 1457 | dot_prod[3][2] = -( SX[3][2]*n[0] + SY[3][2]*n[1] ) ;//NV_DOT( S[3][2] , n ); 1458 | 1459 | big = 0.0; 1460 | 1461 | for( rr = 1; rr <= 3; rr++) 1462 | for( cc = 1; cc <= 2; cc++) 1463 | { 1464 | if (dot_prod[rr][cc] > big ) 1465 | { 1466 | big = dot_prod[rr][cc] ; 1467 | n_row = rr; 1468 | n_col = cc; 1469 | 1470 | if(big != 0) 1471 | { 1472 | // Message( " big, rr, cc = %g %d %d \n ", big, rr, cc); 1473 | } 1474 | 1475 | if(rr == 1 && cc == 1) 1476 | { 1477 | cs = clf; 1478 | ts = tlf; 1479 | } 1480 | else if(rr == 1 && cc == 2) 1481 | { 1482 | cs = cf; 1483 | ts = tf; 1484 | } 1485 | else if(rr == 2 && cc == 1) 1486 | { 1487 | cs = cl; 1488 | ts = tl; 1489 | } 1490 | else if(rr == 2 && cc == 2) 1491 | { 1492 | cs = c; 1493 | ts = t; 1494 | } 1495 | else if(rr == 3 && cc == 1) 1496 | { 1497 | cs = cla; 1498 | ts = tla; 1499 | } 1500 | else if(rr == 3 && cc == 2) 1501 | { 1502 | cs = ca; 1503 | ts = ta; 1504 | } 1505 | 1506 | } 1507 | else 1508 | { 1509 | big = big; 1510 | n_row = n_row ; 1511 | n_col = n_col ; 1512 | cs = cs; 1513 | ts = ts; 1514 | 1515 | 1516 | } 1517 | } 1518 | Message(" RHS n_row, n_col = %d %d \n ", n_row, n_col ); 1519 | 1520 | } 1521 | else if( fequal(XC[1], 0.00001135) && (XC[0] > 0.0000227) && (XC[0] < 0.00112365) )// PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to bottom boundary.) 1522 | { 1523 | C_CENTROID(X,c,t); 1524 | C_CENTROID(Xr,cr,tr); 1525 | C_CENTROID(Xf,cf,tf); 1526 | C_CENTROID(Xl,cl,tl); 1527 | C_CENTROID(Xrf,crf,trf); 1528 | C_CENTROID(Xlf,clf,tlf); 1529 | 1530 | SX[1][1] = (Xlf[0] - xi); 1531 | SX[1][2] = (Xf[0] - xi); 1532 | SX[1][3] = (Xrf[0] - xi); 1533 | SX[2][1] = (Xl[0] - xi); 1534 | SX[2][2] = (X[0] - xi); 1535 | SX[2][3] = (Xr[0] - xi); 1536 | 1537 | SY[1][1] = (Xlf[1] - yi); 1538 | SY[1][2] = (Xf[1] - yi); 1539 | SY[1][3] = (Xrf[1] - yi); 1540 | SY[2][1] = (Xl[1] - yi); 1541 | SY[2][2] = (X[1] - yi); 1542 | SY[2][3] = (Xr[1] - yi); 1543 | 1544 | 1545 | DS[1][1] = sqrt(SX[1][1]*SX[1][1] + SY[1][1]*SY[1][1]) ; 1546 | DS[1][2] = sqrt(SX[1][2]*SX[1][2] + SY[1][2]*SY[1][2]) ; 1547 | DS[1][3] = sqrt(SX[1][3]*SX[1][3] + SY[1][3]*SY[1][3]) ; 1548 | DS[2][1] = sqrt(SX[2][1]*SX[2][1] + SY[2][1]*SY[2][1]) ; 1549 | DS[2][2] = sqrt(SX[2][2]*SX[2][2] + SY[2][2]*SY[2][2]) ; 1550 | DS[2][3] = sqrt(SX[2][3]*SX[2][3] + SY[2][3]*SY[2][3]) ; 1551 | // DS[3][1] = sqrt(SX[3][1]*SX[3][1] + SY[3][1]*SY[3][1]) ; 1552 | // DS[3][2] = sqrt(SX[3][2]*SX[3][2] + SY[3][2]*SY[3][2]) ; 1553 | // DS[3][3] = sqrt(SX[3][3]*SX[3][3] + SY[3][3]*SY[3][3]) ; 1554 | 1555 | SX[1][1] /= DS[1][1]; 1556 | SX[1][2] /= DS[1][2]; 1557 | SX[1][3] /= DS[1][3]; 1558 | SX[2][1] /= DS[2][1]; 1559 | SX[2][2] /= DS[2][2]; 1560 | SX[2][3] /= DS[2][3]; 1561 | 1562 | 1563 | SY[1][1] /= DS[1][1]; 1564 | SY[1][2] /= DS[1][2]; 1565 | SY[1][3] /= DS[1][3]; 1566 | SY[2][1] /= DS[2][1]; 1567 | SY[2][2] /= DS[2][2]; 1568 | SY[2][3] /= DS[2][3]; 1569 | 1570 | dot_prod[1][1] = -( SX[1][1]*n[0] + SY[1][1]*n[1] ) ;//NV_DOT( S[1][1] , n ); 1571 | dot_prod[1][2] = -( SX[1][2]*n[0] + SY[1][2]*n[1] ) ;//NV_DOT( S[1][2] , n ); 1572 | dot_prod[1][3] = -( SX[1][3]*n[0] + SY[1][3]*n[1] ) ;//NV_DOT( S[3][1] , n ); 1573 | dot_prod[2][1] = -( SX[2][1]*n[0] + SY[2][1]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1574 | dot_prod[2][2] = -( SX[2][2]*n[0] + SY[2][2]*n[1] ) ;//NV_DOT( S[2][2] , n ); 1575 | dot_prod[2][3] = -( SX[2][3]*n[0] + SY[2][3]*n[1] ) ;//NV_DOT( S[3][2] , n ); 1576 | 1577 | 1578 | 1579 | big = -1.0; 1580 | for( rr = 1; rr <= 2; rr++) 1581 | for( cc = 1; cc <= 3; cc++) 1582 | { 1583 | if (dot_prod[rr][cc] > big) 1584 | { 1585 | big = dot_prod[rr][cc] ; 1586 | n_row = rr; 1587 | n_col = cc; 1588 | 1589 | if(big != 0) 1590 | { 1591 | // Message( " big, rr, cc = %g %d %d \n ", big, rr, cc); 1592 | } 1593 | 1594 | if(rr == 1 && cc == 1) 1595 | { 1596 | cs = clf; 1597 | ts = tlf; 1598 | } 1599 | else if(rr == 1 && cc == 2) 1600 | { 1601 | cs = cf; 1602 | ts = tf; 1603 | } 1604 | else if(rr == 1 && cc == 3) 1605 | { 1606 | cs = crf; 1607 | ts = trf; 1608 | } 1609 | else if(rr == 2 && cc == 1) 1610 | { 1611 | cs = cl; 1612 | ts = tl; 1613 | } 1614 | else if(rr == 2 && cc == 2) 1615 | { 1616 | cs = c; 1617 | ts = t; 1618 | } 1619 | else if(rr == 2 && cc == 3) 1620 | { 1621 | cs = cr; 1622 | ts = tr; 1623 | } 1624 | 1625 | } 1626 | else 1627 | { 1628 | big = big; 1629 | n_row = n_row; 1630 | n_col = n_col; 1631 | cs = cs; 1632 | ts = ts; 1633 | 1634 | } 1635 | } 1636 | Message(" B.B n_row, n_col = %d %d \n ", n_row, n_col ); 1637 | } 1638 | else if( fequal(XC[1], 0.00225865) && (XC[0] > 0.0000227) && (XC[0] < 0.00112365) ) // PLEASE NOTE : THIS WILL CHANGE IN CASE GEOMETRY OF DOMAIN IS DIFFERENT FROM RECTANGULAR ONE(This refers to top boundary.) 1639 | { 1640 | C_CENTROID(X,c,t); 1641 | C_CENTROID(Xr,cr,tr); 1642 | C_CENTROID(Xl,cl,tl); 1643 | C_CENTROID(Xa,ca,ta); 1644 | C_CENTROID(Xla,cla,tla); 1645 | C_CENTROID(Xra,cra,tra); 1646 | 1647 | SX[1][1] = (Xl[0] - xi); 1648 | SX[1][2] = (X[0] - xi); 1649 | SX[1][3] = (Xr[0] - xi); 1650 | SX[2][1] = (Xla[0] - xi); 1651 | SX[2][2] = (Xa[0] - xi); 1652 | SX[2][3] = (Xra[0] - xi); 1653 | 1654 | SY[1][1] = (Xl[1] - yi); 1655 | SY[1][2] = (X[1] - yi); 1656 | SY[1][3] = (Xr[1] - yi); 1657 | SY[2][1] = (Xla[1] - yi); 1658 | SY[2][2] = (Xa[1] - yi); 1659 | SY[2][3] = (Xra[1] - yi); 1660 | 1661 | 1662 | DS[1][1] = sqrt(SX[1][1]*SX[1][1] + SY[1][1]*SY[1][1]) ; 1663 | DS[1][2] = sqrt(SX[1][2]*SX[1][2] + SY[1][2]*SY[1][2]) ; 1664 | DS[1][3] = sqrt(SX[1][3]*SX[1][3] + SY[1][3]*SY[1][3]) ; 1665 | DS[2][1] = sqrt(SX[2][1]*SX[2][1] + SY[2][1]*SY[2][1]) ; 1666 | DS[2][2] = sqrt(SX[2][2]*SX[2][2] + SY[2][2]*SY[2][2]) ; 1667 | DS[2][3] = sqrt(SX[2][3]*SX[2][3] + SY[2][3]*SY[2][3]) ; 1668 | // DS[3][1] = sqrt(SX[3][1]*SX[3][1] + SY[3][1]*SY[3][1]) ; 1669 | // DS[3][2] = sqrt(SX[3][2]*SX[3][2] + SY[3][2]*SY[3][2]) ; 1670 | // DS[3][3] = sqrt(SX[3][3]*SX[3][3] + SY[3][3]*SY[3][3]) ; 1671 | 1672 | SX[1][1] /= DS[1][1]; 1673 | SX[1][2] /= DS[1][2]; 1674 | SX[1][3] /= DS[1][3]; 1675 | SX[2][1] /= DS[2][1]; 1676 | SX[2][2] /= DS[2][2]; 1677 | SX[2][3] /= DS[2][3]; 1678 | 1679 | 1680 | SY[1][1] /= DS[1][1]; 1681 | SY[1][2] /= DS[1][2]; 1682 | SY[1][3] /= DS[1][3]; 1683 | SY[2][1] /= DS[2][1]; 1684 | SY[2][2] /= DS[2][2]; 1685 | SY[2][3] /= DS[2][3]; 1686 | 1687 | dot_prod[1][1] = -( SX[1][1]*n[0] + SY[1][1]*n[1] ) ;//NV_DOT( S[1][1] , n ); 1688 | dot_prod[1][2] = -( SX[1][2]*n[0] + SY[1][2]*n[1] ) ;//NV_DOT( S[1][2] , n ); 1689 | dot_prod[1][3] = -( SX[1][3]*n[0] + SY[1][3]*n[1] ) ;//NV_DOT( S[3][1] , n ); 1690 | dot_prod[2][1] = -( SX[2][1]*n[0] + SY[2][1]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1691 | dot_prod[2][2] = -( SX[2][2]*n[0] + SY[2][2]*n[1] ) ;//NV_DOT( S[2][2] , n ); 1692 | dot_prod[2][3] = -( SX[2][3]*n[0] + SY[2][3]*n[1] ) ;//NV_DOT( S[3][2] , n ); 1693 | 1694 | big = -1.0; 1695 | 1696 | for( rr = 1; rr <= 2; rr++) 1697 | for( cc = 1; cc <= 3; cc++) 1698 | { 1699 | if (dot_prod[rr][cc] > big) 1700 | { 1701 | big = dot_prod[rr][cc] ; 1702 | n_row = rr; 1703 | n_col = cc; 1704 | 1705 | if(big != 0) 1706 | { 1707 | // Message( " big, rr, cc = %g %d %d \n ", big, rr, cc); 1708 | } 1709 | 1710 | if(rr == 1 && cc == 1) 1711 | { 1712 | cs = cl; 1713 | ts = tl; 1714 | } 1715 | else if(rr == 1 && cc == 2) 1716 | { 1717 | cs = c; 1718 | ts = t; 1719 | } 1720 | else if(rr == 1 && cc == 3) 1721 | { 1722 | cs = cr; 1723 | ts = tr; 1724 | } 1725 | else if(rr == 2 && cc == 1) 1726 | { 1727 | cs = cla; 1728 | ts = tla; 1729 | } 1730 | else if(rr == 2 && cc == 2) 1731 | { 1732 | cs = ca; 1733 | ts = ta; 1734 | } 1735 | else if(rr == 2 && cc == 3) 1736 | { 1737 | cs = cra; 1738 | ts = tra; 1739 | } 1740 | 1741 | } 1742 | else 1743 | { 1744 | big = big ; 1745 | n_row = n_row; 1746 | n_col = n_col; 1747 | cs = cs; 1748 | ts = ts; 1749 | 1750 | } 1751 | } 1752 | Message(" T.B n_row, n_col = %d %d \n ", n_row, n_col ); 1753 | } 1754 | // else 1755 | // { 1756 | // return 0.0; 1757 | // } 1758 | 1759 | 1760 | } 1761 | else // PLEASE NOTE : THIS WILL REMAIN SAME FOR ALL GEOMETRIES. This part is for interior cells other than cells at boundaries. 1762 | { 1763 | C_CENTROID(X,c,t); 1764 | C_CENTROID(Xr,cr,tr); 1765 | C_CENTROID(Xf,cf,tf); 1766 | C_CENTROID(Xl,cl,tl); 1767 | C_CENTROID(Xa,ca,ta); 1768 | C_CENTROID(Xrf,crf,trf); 1769 | C_CENTROID(Xlf,clf,tlf); 1770 | C_CENTROID(Xla,cla,tla); 1771 | C_CENTROID(Xra,cra,tra); 1772 | 1773 | // Message(" X (clf, cf, crf, cl, c, cr, cla, ca, cra) = %.10f %.10f %.10f \n %.10f %.10f %.10f \n %.10f %.10f %.10f \n ", Xlf[0], Xf[0], Xrf[0], Xl[0], X[0], Xr[0], Xla[0], Xa[0], Xra[0]); 1774 | // Message(" Y (clf, cf, crf, cl, c, cr, cla, ca, cra) = %.10f %.10f %.10f \n %.10f %.10f %.10f \n %.10f %.10f %.10f \n ", Xlf[1], Xf[1], Xrf[1], Xl[1], X[1], Xr[1], Xla[1], Xa[1], Xra[1]); 1775 | // Message(" xi, yi = %.10f %.10f \n ", xi, yi ); 1776 | // Message(" iphase = \n %f %f %f \n %f %f %f \n %f %f %f \n ", C_UDMI(clf,tlf,1),C_UDMI(cf,tf,1),C_UDMI(crf,trf,1),C_UDMI(cl,tl,1),C_UDMI(c,t,1),C_UDMI(cr,tr,1),C_UDMI(cla,tla,1),C_UDMI(ca,ta,1),C_UDMI(cra,tra,1)); 1777 | 1778 | SX[1][1] = (Xlf[0] - xi); 1779 | SX[1][2] = (Xf[0] - xi); 1780 | SX[1][3] = (Xrf[0] - xi); 1781 | SX[2][1] = (Xl[0] - xi); 1782 | SX[2][2] = 0.0 ; // (X[0] -xi); // 0.0; 1783 | SX[2][3] = (Xr[0] - xi); 1784 | SX[3][1] = (Xla[0] - xi); 1785 | SX[3][2] = (Xa[0] - xi); 1786 | SX[3][3] = (Xra[0] - xi); 1787 | 1788 | // Message(" SX Matrix = \n %g %g %g \n %g %g %g \n %g %g %g \n ", SX[1][1],SX[1][2],SX[1][3],SX[2][1],SX[2][2],SX[2][3],SX[3][1],SX[3][2],SX[3][3]); 1789 | 1790 | SY[1][1] = (Xlf[1] - yi); 1791 | SY[1][2] = (Xf[1] - yi); 1792 | SY[1][3] = (Xrf[1] - yi); 1793 | SY[2][1] = (Xl[1] - yi); 1794 | SY[2][2] = 0.0; // (X[1] - yi); // 0.0; 1795 | SY[2][3] = (Xr[1] - yi); 1796 | SY[3][1] = (Xla[1] - yi); 1797 | SY[3][2] = (Xa[1] - yi); 1798 | SY[3][3] = (Xra[1] - yi); 1799 | 1800 | // Message(" SY Matrix = \n %g %g %g \n %g %g %g \n %g %g %g \n ", SY[1][1],SY[1][2],SY[1][3],SY[2][1],SY[2][2],SY[2][3],SY[3][1],SY[3][2],SY[3][3]); 1801 | 1802 | DS[1][1] = sqrt(SX[1][1]*SX[1][1] + SY[1][1]*SY[1][1]) ; 1803 | DS[1][2] = sqrt(SX[1][2]*SX[1][2] + SY[1][2]*SY[1][2]) ; 1804 | DS[1][3] = sqrt(SX[1][3]*SX[1][3] + SY[1][3]*SY[1][3]) ; 1805 | DS[2][1] = sqrt(SX[2][1]*SX[2][1] + SY[2][1]*SY[2][1]) ; 1806 | DS[2][2] = 0.0 ; // sqrt(SX[2][2]*SX[2][2] + SY[2][2]*SY[2][2]) ; 1807 | DS[2][3] = sqrt(SX[2][3]*SX[2][3] + SY[2][3]*SY[2][3]) ; 1808 | DS[3][1] = sqrt(SX[3][1]*SX[3][1] + SY[3][1]*SY[3][1]) ; 1809 | DS[3][2] = sqrt(SX[3][2]*SX[3][2] + SY[3][2]*SY[3][2]) ; 1810 | DS[3][3] = sqrt(SX[3][3]*SX[3][3] + SY[3][3]*SY[3][3]) ; 1811 | 1812 | SX[1][1] /= DS[1][1]; 1813 | SX[1][2] /= DS[1][2]; 1814 | SX[1][3] /= DS[1][3]; 1815 | SX[2][1] /= DS[2][1]; 1816 | SX[2][2] = 0.0; 1817 | SX[2][3] /= DS[2][3]; 1818 | SX[3][1] /= DS[3][1]; 1819 | SX[3][2] /= DS[3][2]; 1820 | SX[3][3] /= DS[3][3]; 1821 | 1822 | SY[1][1] /= DS[1][1]; 1823 | SY[1][2] /= DS[1][2]; 1824 | SY[1][3] /= DS[1][3]; 1825 | SY[2][1] /= DS[2][1]; 1826 | SY[2][2] = 0.0; 1827 | SY[2][3] /= DS[2][3]; 1828 | SY[3][1] /= DS[3][1]; 1829 | SY[3][2] /= DS[3][2]; 1830 | SY[3][3] /= DS[3][3]; 1831 | 1832 | 1833 | 1834 | dot_prod[1][1] = -( SX[1][1]*n[0] + SY[1][1]*n[1] ) ;//NV_DOT( S[1][1] , n ); 1835 | dot_prod[1][2] = -( SX[1][2]*n[0] + SY[1][2]*n[1] ) ;//NV_DOT( S[1][2] , n ); 1836 | dot_prod[1][3] = -( SX[1][3]*n[0] + SY[1][3]*n[1] ) ;//NV_DOT( S[3][1] , n ); 1837 | dot_prod[2][1] = -( SX[2][1]*n[0] + SY[2][1]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1838 | dot_prod[2][2] = 0.0; //-( SX[2][2]*n[0] + SY[2][2]*n[1] ) ;//NV_DOT( S[2][2] , n ); 1839 | dot_prod[2][3] = -( SX[2][3]*n[0] + SY[2][3]*n[1] ) ;//NV_DOT( S[3][2] , n ); 1840 | dot_prod[3][1] = -( SX[3][1]*n[0] + SY[3][1]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1841 | dot_prod[3][2] = -( SX[3][2]*n[0] + SY[3][2]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1842 | dot_prod[3][3] = -( SX[3][3]*n[0] + SY[3][3]*n[1] ) ;//NV_DOT( S[2][1] , n ); 1843 | 1844 | // Message(" c, C_UDMI(c,t,1), n[0], n[1], DOT PROD = %u %f %.15f %.15f \n %g %g %g \n %g %g %g \n %g %g %g \n ", c, C_UDMI(c,t,1), n[0], n[1], dot_prod[1][1],dot_prod[1][2],dot_prod[1][3],dot_prod[2][1],dot_prod[2][2],dot_prod[2][3],dot_prod[3][1],dot_prod[3][2],dot_prod[3][3]); 1845 | 1846 | 1847 | // big = 0.0; 1848 | 1849 | big = -1.0; 1850 | 1851 | for( rr = 1; rr <= 3; rr++) 1852 | for( cc = 1; cc <= 3; cc++) 1853 | { 1854 | // Message("rr,cc= %d %d \n", rr, cc); 1855 | 1856 | if (dot_prod[rr][cc] > big) 1857 | { 1858 | big = dot_prod[rr][cc] ; 1859 | n_row = rr; 1860 | n_col = cc; 1861 | 1862 | if(big != 0.0) 1863 | { 1864 | // Message( " big, rr, cc = %g %d %d \n ", big, rr, cc); 1865 | } 1866 | 1867 | if(rr == 1 && cc == 1) 1868 | { 1869 | cs = clf; 1870 | ts = tlf; 1871 | } 1872 | else if(rr == 1 && cc == 2) 1873 | { 1874 | cs = cf; 1875 | ts = tf; 1876 | } 1877 | else if(rr == 1 && cc == 3) 1878 | { 1879 | cs = crf; 1880 | ts = trf; 1881 | } 1882 | else if(rr == 2 && cc == 1) 1883 | { 1884 | cs = cl; 1885 | ts = tl; 1886 | } 1887 | else if(rr == 2 && cc == 2) 1888 | { 1889 | cs = c; 1890 | ts = t; 1891 | } 1892 | else if(rr == 2 && cc == 3) 1893 | { 1894 | cs = cr; 1895 | ts = tr; 1896 | } 1897 | else if(rr == 3 && cc == 1) 1898 | { 1899 | cs = cla; 1900 | ts = tla; 1901 | } 1902 | else if(rr == 3 && cc == 2) 1903 | { 1904 | cs = ca; 1905 | ts = ta; 1906 | } 1907 | else if(rr == 3 && cc == 3) 1908 | { 1909 | cs = cra; 1910 | ts = tra; 1911 | } 1912 | } 1913 | else 1914 | { 1915 | big = big; 1916 | n_row = n_row; 1917 | n_col = n_col; 1918 | cs = cs; 1919 | ts = ts; 1920 | 1921 | } 1922 | 1923 | 1924 | } 1925 | // Message(" c, n_row, n_col = %u %d %d \n ", c, n_row, n_col ); 1926 | 1927 | } 1928 | 1929 | // Message(" c, n_row, n_col = %u %d %d \n ", c, n_row, n_col ); 1930 | 1931 | if( n_row == 0 || n_col == 0 || n_row > 3 || n_col > 3 ) 1932 | { 1933 | return 0.0; 1934 | } 1935 | else 1936 | { 1937 | sx = SX[n_row][n_col]; 1938 | sy = SY[n_row][n_col]; 1939 | ds = DS[n_row][n_col]; // sqrt(sx*sx + sy*sy); 1940 | // sx = sx/ds; 1941 | // sy = sy/ds; 1942 | 1943 | // NV_D(s , = , SX[n_row][n_col] , SY[n_row][n_col] , 0.0 ); 1944 | 1945 | kl = 0.5454; 1946 | kg = 0.5383; 1947 | keff = kl*C_VOF(c,t_liquid) + kg*C_VOF(c,t_vapour); 1948 | 1949 | latent_heat = 276400.0; 1950 | 1951 | // ds = NV_MAG(s); 1952 | 1953 | 1954 | 1955 | if ( fequal(ds , 0.0) ) 1956 | { 1957 | source = 0.0; 1958 | } 1959 | else 1960 | { 1961 | // NV_VS(q_s, = , s , * , (kl*(TSAT - C_T(cs,ts))/ds) ); 1962 | 1963 | // q_n = NV_DOT(q_s , n); 1964 | // C_CENTROID(XCS, cs, ts); 1965 | // C_CENTROID(XC,c,t); 1966 | // Message(" c, cs, C_UDMI(cs,ts,1) , C_UDMI(c,t,1) = %u %u %f %f \n ", c, cs, C_UDMI(cs,t,1) , C_UDMI(c,t,1) ); 1967 | q_n = sx*(keff*(TSAT - C_T(cs,t))/ds)*nx + sy*(keff*(TSAT - C_T(cs,t))/ds)*ny ; 1968 | source = fabs(q_n / latent_heat ) ; 1969 | 1970 | // Message("c, ds, C_T(cs,t), source = %u %f %f %g \n ", c, ds, C_T(cs,t), source ); 1971 | // C_UDMI(c,t,6) = source; 1972 | } 1973 | // Message(" c, source = %u %g \n ", c, source ); 1974 | // Message("last = %f %f %g %g %g %.20f \n ", SX[n_row][n_col], SY[n_row][n_col] , q_n, ((kl*(TSAT - C_T(cs,ts))/ds)/latent_heat) , ds , source ); 1975 | return source; 1976 | } 1977 | 1978 | 1979 | 1980 | } 1981 | else 1982 | { 1983 | return 0.0; 1984 | } 1985 | } 1986 | -------------------------------------------------------------------------------- /neighbour: -------------------------------------------------------------------------------- 1 | 2 | #include "udf.h" 3 | #include "sg.h" 4 | #include "sg_vof.h" 5 | #include "cxbool.h" 6 | 7 | /*--------- chk_neighb() function ----------- */ 8 | /* This function checks whether for a given cell( i.e c,t) 9 | its neighbours in 3*3 matrix are liquid or vapour. It retruns TRUE or FALSE value. 10 | */ 11 | // IMPORTANT NOTE: In This Macro Boundary cells are not considered. SO if we are not considering boundary cells then this part becomes grid geometry independent. 12 | // But if in future we include boundary cells as well then This part needs to be changed for different geometry. 13 | extern void 14 | chk_neighb(cell_t c,Thread *t,int iphs,cxboolean *chk_phs ) 15 | { 16 | Thread *t_vapour = THREAD_SUB_THREAD(t,1); 17 | /* =============== DECLARATION FOR NEIGHBOURING CELL ================= */ 18 | cell_t cnb; 19 | cell_t cr, cf, cl, ca, crf, cra, clf, cla ; 20 | Thread *tf, *ta, *tr, *tl, *trf, *tra, *tlf, *tla ; 21 | 22 | face_t fr,ff,fl,fa,ffr,far,ffl,fal,frp,flp,frm,flm; 23 | Thread *tfr, *tff, *tfl, *tfa, *tffr, *tfar, *tffl, *tfal, *tfrp, *tflp, *tfrm, *tflm; 24 | Thread *t_f; 25 | Thread *t_fr, *t_ff, *t_fl, *t_fa; 26 | Node *node; 27 | int rr, cc, N,r,l,f,a, n; 28 | real toll, tolg; 29 | cxboolean check_r ; 30 | cxboolean check_f ; 31 | cxboolean check_l ; 32 | cxboolean check_a ; 33 | 34 | check_r = FALSE; 35 | check_f = FALSE; 36 | check_l = FALSE; 37 | check_a = FALSE; 38 | *chk_phs = TRUE; 39 | /* ------------------------------------------------------------------------------------ */ 40 | 41 | 42 | // chek_neighb(c, t, iphs) = TRUE; 43 | 44 | /* ============================ NEIGHBOUR SEARCH PROGRAM ============================= */ 45 | 46 | t_f = C_FACE_THREAD(c,t,0); 47 | 48 | if(BOUNDARY_FACE_THREAD_P(t_f)) 49 | { 50 | /* 51 | c_node_loop(c,t,n) 52 | { 53 | node = C_NODE(c,t,n); 54 | 55 | 56 | if( NODE_X(node) == 0 ) 57 | { 58 | fr = C_FACE(c,t,2); 59 | tfr = C_FACE_THREAD(c,t,2); 60 | fl = C_FACE(c,t,0); 61 | tfl = C_FACE_THREAD(c,t,0); 62 | ff = C_FACE(c,t,3); 63 | tff = C_FACE_THREAD(c,t,3); 64 | fa = C_FACE(c,t,1); 65 | tfa = C_FACE_THREAD(c,t,1); 66 | } 67 | 68 | if( NODE_X(node)*1000000 == 1135 ) 69 | { 70 | fr = C_FACE(c,t,0); 71 | tfr = C_FACE_THREAD(c,t,0); 72 | fl = C_FACE(c,t,2); 73 | tfl = C_FACE_THREAD(c,t,2); 74 | ff = C_FACE(c,t,1); 75 | tff = C_FACE_THREAD(c,t,1); 76 | fa = C_FACE(c,t,3); 77 | tfa = C_FACE_THREAD(c,t,3); 78 | } 79 | 80 | if( NODE_Y(node) == 0 ) 81 | { 82 | fr = C_FACE(c,t,1); 83 | tfr = C_FACE_THREAD(c,t,1); 84 | fl = C_FACE(c,t,3); 85 | tfl = C_FACE_THREAD(c,t,3); 86 | ff = C_FACE(c,t,2); 87 | tff = C_FACE_THREAD(c,t,2); 88 | fa = C_FACE(c,t,0); 89 | tfa = C_FACE_THREAD(c,t,0); 90 | } 91 | 92 | if( NODE_Y(node)*100000 == 227 ) 93 | { 94 | fr = C_FACE(c,t,3); 95 | tfr = C_FACE_THREAD(c,t,3); 96 | fl = C_FACE(c,t,1); 97 | tfl = C_FACE_THREAD(c,t,1); 98 | ff = C_FACE(c,t,0); 99 | tff = C_FACE_THREAD(c,t,0); 100 | fa = C_FACE(c,t,2); 101 | tfa = C_FACE_THREAD(c,t,2); 102 | } 103 | } 104 | */ 105 | } 106 | else 107 | { 108 | fr = C_FACE(c,t,1); 109 | tfr = C_FACE_THREAD(c,t,1); 110 | fl = C_FACE(c,t,3); /* --------------------- FOR ---------------------- */ 111 | tfl = C_FACE_THREAD(c,t,3); /* ------------------ INTERIOR -------------------- */ 112 | ff = C_FACE(c,t,2); /* -------------------- CELLS --------------------- */ 113 | tff = C_FACE_THREAD(c,t,2); 114 | fa = C_FACE(c,t,0); 115 | tfa = C_FACE_THREAD(c,t,0); 116 | 117 | 118 | /* ----------- RIGHT FACE ----------- */ 119 | 120 | cr = F_C0(fr,tfr); 121 | if(cr == c) 122 | { 123 | cr = F_C1(fr,tfr); 124 | tr = F_C1_THREAD(fr,tfr); 125 | } 126 | else 127 | { 128 | tr = F_C0_THREAD(fr,tfr); 129 | } 130 | 131 | /* ----------- LEFT FACE ------------ */ 132 | 133 | cl = F_C0(fl,tfl); 134 | if(cl == c) 135 | { 136 | cl = F_C1(fl,tfl); 137 | tl = F_C1_THREAD(fl,tfl); 138 | } 139 | else 140 | { 141 | tl = F_C0_THREAD(fl,tfl); 142 | } 143 | 144 | /* ----------- FRONT FACE ------------ */ 145 | 146 | cf = F_C0(ff,tff); 147 | if(cf == c) 148 | { 149 | cf = F_C1(ff,tff); 150 | tf = F_C1_THREAD(ff,tff); 151 | } 152 | else 153 | { 154 | tf = F_C0_THREAD(ff,tff); 155 | } 156 | 157 | /* ------------ AFTER FACE ------------ */ 158 | 159 | ca = F_C0(fa,tfa); 160 | if(ca == c) 161 | { 162 | ca = F_C1(fa,tfa); 163 | ta = F_C1_THREAD(fa,tfa); 164 | } 165 | else 166 | { 167 | ta = F_C0_THREAD(fa,tfa); 168 | } 169 | // Message(" ca = %u \n ", ca); 170 | // } 171 | 172 | c_face_loop(cr,tr,N) 173 | { 174 | t_fr = C_FACE_THREAD(cr,tr,N); 175 | if( BOUNDARY_FACE_THREAD_P(t_fr) ) 176 | { 177 | check_r = TRUE; 178 | } 179 | } 180 | 181 | c_face_loop(cf,tf,N) 182 | { 183 | t_ff = C_FACE_THREAD(cf,tf,N); 184 | if( BOUNDARY_FACE_THREAD_P(t_ff) ) 185 | { 186 | check_f = TRUE; 187 | } 188 | } 189 | 190 | c_face_loop(cl,tl,N) 191 | { 192 | t_fl = C_FACE_THREAD(cl,tl,N); 193 | if( BOUNDARY_FACE_THREAD_P(t_fl) ) 194 | { 195 | check_l = TRUE; 196 | } 197 | } 198 | 199 | c_face_loop(ca,ta,N) 200 | { 201 | t_fa = C_FACE_THREAD(ca,ta,N); 202 | if( BOUNDARY_FACE_THREAD_P(t_fa) ) 203 | { 204 | check_a = TRUE; 205 | } 206 | } 207 | 208 | if( check_r ) 209 | { 210 | // Message(" BOUNDARY CELL ENCOUNTERED \n "); 211 | 212 | 213 | ffr = C_FACE(cr,tr,1); 214 | tffr = C_FACE_THREAD(cr,tr,1); 215 | 216 | far = C_FACE(cr,tr,3); 217 | tfar = C_FACE_THREAD(cr,tr,3); 218 | 219 | ffl = C_FACE(cl,tl,2); 220 | tffl = C_FACE_THREAD(cl,tl,2); 221 | 222 | fal = C_FACE(cl,tl,0); 223 | tfal = C_FACE_THREAD(cl,tl,0); 224 | 225 | /* ======================== (crf,trf) ============================= */ 226 | 227 | crf = F_C0(ffr,tffr); 228 | if(crf == cr) 229 | { 230 | crf = F_C1(ffr,tffr); 231 | trf = F_C1_THREAD(ffr,tffr); 232 | } 233 | else 234 | { 235 | trf = F_C0_THREAD(ffr,tffr); 236 | } 237 | // Message(" crf = %u \n ", crf); 238 | /* ======================== (cra,tra) ============================= */ 239 | 240 | cra = F_C0(far,tfar); 241 | if(cra == cr) 242 | { 243 | cra = F_C1(far,tfar); 244 | tra = F_C1_THREAD(far,tfar); 245 | } 246 | else 247 | { 248 | tra = F_C0_THREAD(far,tfar); 249 | } 250 | // Message(" cra = %u \n ", cra); 251 | /* ======================== (clf,tlf) ============================= */ 252 | 253 | clf = F_C0(ffl,tffl); 254 | if(clf == cl) 255 | { 256 | clf = F_C1(ffl,tffl); 257 | tlf = F_C1_THREAD(ffl,tffl); 258 | } 259 | else 260 | { 261 | tlf = F_C0_THREAD(ffl,tffl); 262 | } 263 | // Message(" clf = %u \n ", clf); 264 | /* ======================== (cla,tla) ============================= */ 265 | 266 | cla = F_C0(fal,tfal); 267 | if(cla == cl) 268 | { 269 | cla = F_C1(fal,tfal); 270 | tla = F_C1_THREAD(fal,tfal); 271 | } 272 | else 273 | { 274 | tla = F_C0_THREAD(fal,tfal); 275 | } 276 | // Message(" cla = %u \n ", cla); 277 | 278 | } 279 | else if ( check_f ) 280 | { 281 | 282 | frp = C_FACE(cf,tf,3); 283 | tfrp = C_FACE_THREAD(cf,tf,3); 284 | 285 | flp = C_FACE(cf,tf,1); 286 | tflp = C_FACE_THREAD(cf,tf,1); 287 | 288 | frm = C_FACE(ca,ta,1); 289 | tfrm = C_FACE_THREAD(ca,ta,1); 290 | 291 | flm = C_FACE(ca,ta,3); 292 | tflm = C_FACE_THREAD(ca,ta,3); 293 | 294 | /* ======================== (crf,trf) ============================= */ 295 | 296 | crf = F_C0(frp,tfrp); 297 | if(crf == cr) 298 | { 299 | crf = F_C1(frp,tfrp); 300 | trf = F_C1_THREAD(frp,tfrp); 301 | } 302 | else 303 | { 304 | trf = F_C0_THREAD(frp,tfrp); 305 | } 306 | 307 | /* ======================== (clf,tlf) ============================= */ 308 | 309 | clf = F_C0(flp,tflp); 310 | if(clf == cl) 311 | { 312 | clf = F_C1(flp,tflp); 313 | tlf = F_C1_THREAD(flp,tflp); 314 | } 315 | else 316 | { 317 | tlf = F_C0_THREAD(flp,tflp); 318 | } 319 | 320 | /* ======================== (cra,tra) ============================= */ 321 | 322 | cra = F_C0(frm,tfrm); 323 | if(cra == cr) 324 | { 325 | cra = F_C1(frm,tfrm); 326 | tra = F_C1_THREAD(frm,tfrm); 327 | } 328 | else 329 | { 330 | tra = F_C0_THREAD(frm,tfrm); 331 | } 332 | 333 | /* ======================== (cla,tla) ============================= */ 334 | 335 | cla = F_C0(flm,tflm); 336 | if(cla == cl) 337 | { 338 | cla = F_C1(flm,tflm); 339 | tla = F_C1_THREAD(flm,tflm); 340 | } 341 | else 342 | { 343 | tla = F_C0_THREAD(flm,tflm); 344 | } 345 | 346 | } 347 | else if ( check_l ) 348 | { 349 | 350 | ffl = C_FACE(cl,tl,3); 351 | tffl = C_FACE_THREAD(cl,tl,3); 352 | 353 | fal = C_FACE(cl,tl,1); 354 | tfal = C_FACE_THREAD(cl,tl,1); 355 | 356 | ffr = C_FACE(cr,tr,2); 357 | tffr = C_FACE_THREAD(cr,tr,2); 358 | 359 | far = C_FACE(cr,tr,0); 360 | tfar = C_FACE_THREAD(cr,tr,0); 361 | 362 | /* ======================== (crf,trf) ============================= */ 363 | 364 | crf = F_C0(ffr,tffr); 365 | if(crf == cr) 366 | { 367 | crf = F_C1(ffr,tffr); 368 | trf = F_C1_THREAD(ffr,tffr); 369 | } 370 | else 371 | { 372 | trf = F_C0_THREAD(ffr,tffr); 373 | } 374 | // Message(" crf = %u \n ", crf); 375 | /* ======================== (cra,tra) ============================= */ 376 | 377 | cra = F_C0(far,tfar); 378 | if(cra == cr) 379 | { 380 | cra = F_C1(far,tfar); 381 | tra = F_C1_THREAD(far,tfar); 382 | } 383 | else 384 | { 385 | tra = F_C0_THREAD(far,tfar); 386 | } 387 | // Message(" cra = %u \n ", cra); 388 | /* ======================== (clf,tlf) ============================= */ 389 | 390 | clf = F_C0(ffl,tffl); 391 | if(clf == cl) 392 | { 393 | clf = F_C1(ffl,tffl); 394 | tlf = F_C1_THREAD(ffl,tffl); 395 | } 396 | else 397 | { 398 | tlf = F_C0_THREAD(ffl,tffl); 399 | } 400 | // Message(" clf = %u \n ", clf); 401 | /* ======================== (cla,tla) ============================= */ 402 | 403 | cla = F_C0(fal,tfal); 404 | if(cla == cl) 405 | { 406 | cla = F_C1(fal,tfal); 407 | tla = F_C1_THREAD(fal,tfal); 408 | } 409 | else 410 | { 411 | tla = F_C0_THREAD(fal,tfal); 412 | } 413 | // Message(" cla = %u \n ", cla); 414 | 415 | 416 | } 417 | else if ( check_a ) 418 | { 419 | 420 | frm = C_FACE(ca,ta,1); 421 | tfrm = C_FACE_THREAD(ca,ta,1); 422 | 423 | flm = C_FACE(ca,ta,3); 424 | tflm = C_FACE_THREAD(ca,ta,3); 425 | 426 | frp = C_FACE(cf,tf,1); 427 | tfrp = C_FACE_THREAD(cf,tf,1); 428 | 429 | flp = C_FACE(cf,tf,3); 430 | tflp = C_FACE_THREAD(cf,tf,3); 431 | 432 | /* ======================== (crf,trf) ============================= */ 433 | 434 | crf = F_C0(frp,tfrp); 435 | if(crf == cr) 436 | { 437 | crf = F_C1(frp,tfrp); 438 | trf = F_C1_THREAD(frp,tfrp); 439 | } 440 | else 441 | { 442 | trf = F_C0_THREAD(frp,tfrp); 443 | } 444 | 445 | /* ======================== (clf,tlf) ============================= */ 446 | 447 | clf = F_C0(flp,tflp); 448 | if(clf == cl) 449 | { 450 | clf = F_C1(flp,tflp); 451 | tlf = F_C1_THREAD(flp,tflp); 452 | } 453 | else 454 | { 455 | tlf = F_C0_THREAD(flp,tflp); 456 | } 457 | 458 | /* ======================== (cra,tra) ============================= */ 459 | 460 | cra = F_C0(frm,tfrm); 461 | if(cra == cr) 462 | { 463 | cra = F_C1(frm,tfrm); 464 | tra = F_C1_THREAD(frm,tfrm); 465 | } 466 | else 467 | { 468 | tra = F_C0_THREAD(frm,tfrm); 469 | } 470 | 471 | /* ======================== (cla,tla) ============================= */ 472 | 473 | cla = F_C0(flm,tflm); 474 | if(cla == cl) 475 | { 476 | cla = F_C1(flm,tflm); 477 | tla = F_C1_THREAD(flm,tflm); 478 | } 479 | else 480 | { 481 | tla = F_C0_THREAD(flm,tflm); 482 | } 483 | } 484 | else 485 | { 486 | /* ============== DEFINITION OF SECONDARY NEIGHBOURS ============== */ 487 | 488 | 489 | ffr = C_FACE(cr,tr,2); 490 | tffr = C_FACE_THREAD(cr,tr,2); 491 | 492 | far = C_FACE(cr,tr,0); 493 | tfar = C_FACE_THREAD(cr,tr,0); 494 | 495 | ffl = C_FACE(cl,tl,2); 496 | tffl = C_FACE_THREAD(cl,tl,2); 497 | 498 | fal = C_FACE(cl,tl,0); 499 | tfal = C_FACE_THREAD(cl,tl,0); 500 | 501 | // Message(" far, tfar, ffl, tffl, fal, tfal = %u %u %u %u %u %u \n ", far, tfar, ffl, tffl, fal, tfal); 502 | 503 | 504 | 505 | /* ======================== (crf,trf) ============================= */ 506 | 507 | crf = F_C0(ffr,tffr); 508 | if(crf == cr) 509 | { 510 | crf = F_C1(ffr,tffr); 511 | trf = F_C1_THREAD(ffr,tffr); 512 | } 513 | else 514 | { 515 | trf = F_C0_THREAD(ffr,tffr); 516 | } 517 | // Message(" crf = %u \n ", crf); 518 | /* ======================== (cra,tra) ============================= */ 519 | 520 | cra = F_C0(far,tfar); 521 | if(cra == cr) 522 | { 523 | cra = F_C1(far,tfar); 524 | tra = F_C1_THREAD(far,tfar); 525 | } 526 | else 527 | { 528 | tra = F_C0_THREAD(far,tfar); 529 | } 530 | // Message(" cra = %u \n ", cra); 531 | /* ======================== (clf,tlf) ============================= */ 532 | 533 | clf = F_C0(ffl,tffl); 534 | if(clf == cl) 535 | { 536 | clf = F_C1(ffl,tffl); 537 | tlf = F_C1_THREAD(ffl,tffl); 538 | } 539 | else 540 | { 541 | tlf = F_C0_THREAD(ffl,tffl); 542 | } 543 | // Message(" clf = %u \n ", clf); 544 | /* ======================== (cla,tla) ============================= */ 545 | 546 | cla = F_C0(fal,tfal); 547 | if(cla == cl) 548 | { 549 | cla = F_C1(fal,tfal); 550 | tla = F_C1_THREAD(fal,tfal); 551 | } 552 | else 553 | { 554 | tla = F_C0_THREAD(fal,tfal); 555 | } 556 | // Message(" cla = %u \n ", cla); 557 | 558 | } 559 | /* ------------------------ END OF NEIGHBOUR SEARCH PROGRAM ------------------------ */ 560 | 561 | if (iphs == 3) 562 | { 563 | for (rr = -1; rr < 1; rr++) 564 | for (cc = -1; cc < 1; cc++) 565 | { 566 | if( rr == - 1 && cc == -1 ) 567 | { 568 | cnb = clf; 569 | } 570 | else if( rr == - 1 && cc == 0 ) 571 | { 572 | cnb = cf; 573 | } 574 | else if( rr == - 1 && cc == 1 ) 575 | { 576 | cnb = crf; 577 | } 578 | else if( rr == 0 && cc == -1 ) 579 | { 580 | cnb = cl; 581 | } 582 | else if( rr == 0 && cc == 0 ) 583 | { 584 | goto chkphs1; 585 | } 586 | else if( rr == 0 && cc == 1 ) 587 | { 588 | cnb = cr; 589 | } 590 | else if( rr == 1 && cc == -1 ) 591 | { 592 | cnb = cla; 593 | } 594 | else if( rr == 1 && cc == 0 ) 595 | { 596 | cnb = ca; 597 | } 598 | else if( rr == 1 && cc == 1 ) 599 | { 600 | cnb = cra; 601 | } 602 | 603 | if (C_VOF(cnb,t_vapour) < 0.5) 604 | { 605 | *chk_phs = FALSE; 606 | 607 | } 608 | 609 | chkphs1: ; 610 | 611 | } 612 | } 613 | else if (iphs == 1) 614 | { 615 | for (rr = -1; rr < 1; rr++) 616 | for (cc = -1; cc < 1; cc++) 617 | { 618 | if( rr == - 1 && cc == -1 ) 619 | { 620 | cnb = clf; 621 | } 622 | else if( rr == - 1 && cc == 0 ) 623 | { 624 | cnb = cf; 625 | } 626 | else if( rr == - 1 && cc == 1 ) 627 | { 628 | cnb = crf; 629 | } 630 | else if( rr == 0 && cc == -1 ) 631 | { 632 | cnb = cl; 633 | } 634 | else if( rr == 0 && cc == 0 ) 635 | { 636 | goto chkphs2; 637 | } 638 | else if( rr == 0 && cc == 1 ) 639 | { 640 | cnb = cr; 641 | } 642 | else if( rr == 1 && cc == -1 ) 643 | { 644 | cnb = cla; 645 | } 646 | else if( rr == 1 && cc == 0 ) 647 | { 648 | cnb = ca; 649 | } 650 | else if( rr == 1 && cc == 1 ) 651 | { 652 | cnb = cra; 653 | } 654 | 655 | if (C_VOF(cnb,t_vapour) > 0.5) 656 | { 657 | *chk_phs = FALSE; 658 | 659 | } 660 | 661 | chkphs2: ; 662 | 663 | } 664 | } 665 | // else 666 | // { 667 | // *chk_phs = TRUE; 668 | // return; 669 | // } 670 | return; 671 | } 672 | 673 | 674 | } 675 | -------------------------------------------------------------------------------- /puckkets_algo: -------------------------------------------------------------------------------- 1 | #include "udf.h" 2 | #include "sg.h" 3 | #include "sg_vof.h" 4 | #include "cxbool.h" 5 | 6 | 7 | extern void 8 | lvira(cell_t c, Thread *t, real theta, real dtheta, real *Gfunp) 9 | { 10 | /* constructs approximation to interface shape. Interface is 11 | plane surface in each cell. Unit normal is constructed 12 | from liquid volume fraction profile. */ 13 | Thread *t_liquid = THREAD_SUB_THREAD(t,0); 14 | real Gfun, Gfunr, Gfunl, thetar, thetal ; 15 | real ssave, nx, ny; 16 | real len; 17 | 18 | ssave = C_UDMI(c,t,4); // slen[c]; 19 | 20 | thetar = theta + dtheta; 21 | nx = cos(thetar); 22 | ny = sin(thetar); 23 | 24 | // C_UDMI(c,t,7) = 6; 25 | get_len(c, t_liquid, nx, ny ); 26 | G_fun(c, t, thetar, &Gfunr); 27 | // if(C_UDMI(c,t,5) < 0.0001 ) 28 | // { 29 | // Message(" I am in 3 %u \n", c); 30 | // (*Gfunp) = 0.0; 31 | // C_UDMI(c,t,2) = nx; 32 | // C_UDMI(c,t,3) = ny; 33 | // Message(" 1 nx, ny = %u %f %f \n", c, nx, ny ); 34 | // goto LVIRA_END; 35 | // } 36 | 37 | thetal = theta - dtheta; 38 | nx = cos(thetal); 39 | ny = sin(thetal); 40 | 41 | // C_UDMI(c,t,7) = 7; 42 | get_len(c, t_liquid, nx, ny ); 43 | G_fun(c, t, thetal, &Gfunl); 44 | // if(C_UDMI(c,t,5) < 0.0001 ) 45 | // { 46 | // Message(" I am in 3 %u \n", c); 47 | // (*Gfunp) = 0.0; 48 | // C_UDMI(c,t,2) = nx; 49 | // C_UDMI(c,t,3) = ny; 50 | // Message(" 2 nx, ny = %u %f %f \n", c, nx, ny ); 51 | // goto LVIRA_END; 52 | // } 53 | 54 | (*Gfunp) = ( Gfunr - Gfunl )/(2.0*dtheta); 55 | 56 | C_UDMI(c,t,4) = ssave; 57 | 58 | //LVIRA_END:; 59 | return; 60 | 61 | } 62 | --------------------------------------------------------------------------------