1 : * TRANGEOL PROCEDUR GBM 07/08/08 21:15:06 5841 2 : * TRANGEOL PROCEDUR GBM 02/10/15 21:15:06 2149 3 : 'DEBPROC' TRANGEOL MoDARCY*'MMODEL' TRANS1*'TABLE' TRANS2/'TABLE' ; 4 : 5 : *--------------------------------------------------------------------- 6 : *------------------- Gestion de la réinitialisation ------------------ 7 : *--------------------------------------------------------------------- 8 : 9 : * on reinitialise les calculs en l'absence de la table trans2 10 : * qui contient tous les objets de préconditionnement, ou si 11 : * l'indice INITIALI dans trans1 est VRAI. 12 : * Il est mis à FAUX à la fin de la procédure. 13 : REINIT = VRAI ; 14 : 'SI' ('EXISTE' trans1 'INITIALI') ; 15 : REINIT = trans1 . 'INITIALI' ; 16 : 'FINSI' ; 17 : 18 : * En l'absence de table de préconditionnement 19 : * Il faut reinitialiser les calculs. On écrase la valeur donnée 20 : * éventuellement par l'indice INITIALI. 21 : 'SI' ('NON' (EXISTE trans2)) ; 22 : REINIT = VRAI ; 23 : 'FINSI' ; 24 : 25 : CHTR = FAUX ; 26 : 'SI' ('EXISTE' trans1 'CHIMIETRANSPORT') ; 27 : CHTR = trans1 . 'CHIMIETRANSPORT' ; 28 : 'FINSI' ; 29 : 30 : 31 : 32 : 33 : *--------------------------------------------------------------------- 34 : *------------------- Gestion des entrées obligatoires ---------------- 35 : *--------------------------------------------------------------------- 36 : 37 : 38 : Cini = TRANS1 . 'CONCENTRATION' ; 39 : LMLump = TRANS1 . 'LUMP' ; 40 : discreti = TRANS1 . 'TYPDISCRETISATION' ; 41 : TetaDiff = TRANS1 . 'THETA_DIFFUSION' ; 42 : TetaConv = TRANS1 . 'THETA_CONVECTION' ; 43 : DECENTR = TRANS1 . 'DECENTREMENT' ; 44 : DeltaT = TRANS1 . 'DELTAT' ; 45 : MateDiff = TRANS1 . 'DIFFUSIVITE' ; 46 : Porosite = TRANS1 . 'POROSITE' ; 47 : 48 : tetalin = tetadiff ; 49 : 50 : 51 : *--------------------------------------------------------------------- 52 : *------------------- Gestion des entrées optionnelles ---------------- 53 : *--------------------------------------------------------------------- 54 : 55 : 56 : ************* relcalcul général des discrétisations *********** 57 : 58 : 59 : 'SI' ('EXISTE' TRANS1 'RECALCUL') ; 60 : recalc = TRANS1 . 'RECALCUL' ; 61 : 'SI' (recalc) ; 62 : TABMODI = TABLE ; 63 : TABMODI . 'POROSITE' = VRAI ; 64 : TABMODI . 'CONVECTI' = VRAI ; 65 : TABMODI . 'DELTAT' = VRAI ; 66 : TABMODI . 'COEF_LIN' = VRAI ; 67 : TABMODI . 'DIFFUSIV' = VRAI ; 68 : 'SINON' ; 69 : TABMODI = TABLE ; 70 : TABMODI . 'POROSITE' = FAUX ; 71 : TABMODI . 'CONVECTI' = FAUX ; 72 : TABMODI . 'DELTAT' = FAUX ; 73 : TABMODI . 'COEF_LIN' = FAUX ; 74 : TABMODI . 'DIFFUSIV' = FAUX ; 75 : 'FINSI' ; 76 : 'SINON' ; 77 : 'SI' ('EXISTE' TRANS1 'MODIFICATI') ; 78 : * table plus détaillée de modification, n'est pas lue si RECALCUL 79 : * est donné 80 : TABMODI = TRANS1 . 'MODIFICATI' ; 81 : 'SINON' ; 82 : TABMODI = TABLE ; 83 : TABMODI . 'POROSITE' = FAUX ; 84 : TABMODI . 'CONVECTI' = FAUX ; 85 : TABMODI . 'DELTAT' = FAUX ; 86 : TABMODI . 'COEF_LIN' = FAUX ; 87 : TABMODI . 'DIFFUSIV' = FAUX ; 88 : 'FINSI' ; 89 : 'FINSI' ; 90 : 91 : 92 : 93 : 94 : **************** solveur **************** 95 : 96 : 'SI' (REINIT) ; 97 : * IL faut initialiser la matrice des options de résolution 98 : 'SI' ('EXISTE' TRANS1 'METHINV') ; 99 : dumm = 'INDEX' (TRANS1 . 'METHINV') ; 100 : OPTRES = 'TABLE' METHINV ; 101 : 'REPETER' bou1 (('DIME' dumm) '-' 1) ; 102 : OPTRES . (mot dumm . (&bou1 '+' 1)) 103 : = TRANS1 . 'METHINV' . (mot dumm . (&bou1 '+' 1)) ; 104 : 'FIN' bou1 ; 105 : 'SINON' ; 106 : OPTRES = TABLE 'METHINV' ; 107 : 'FINSI' ; 108 : * On surcharges les options de résolution 109 : 'SI' ('EXISTE' TRANS1 'SOLVEUR') ; 110 : OPTRES . 'TYPINV' = TRANS1 . 'SOLVEUR' ; 111 : 'FINSI' ; 112 : 'SI' ('EXISTE' TRANS1 'PRECONDITIONNEUR') ; 113 : OPTRES . 'PRECOND' = TRANS1 . 'PRECONDITIONNEUR' ; 114 : 'FINSI' ; 115 : 'SI' ('EXISTE' TRANS1 'MAXITER') ; 116 : OPTRES . 'NITMAX' = TRANS1 . 'MAXITER' ; 117 : 'FINSI' ; 118 : 'SI' ('EXISTE' TRANS1 'EPSILON') ; 119 : OPTRES . 'RESID' = TRANS1 . 'EPSILON' ; 120 : 'FINSI' ; 121 : 122 : 123 : 'SINON' ; 124 : 'SI' ('EXISTE' TRANS2) ; 125 : * obligatoires 126 : OPTRES = TRANS2 . 'METHINV' ; 127 : 'FINSI' ; 128 : 'FINSI' ; 129 : 130 : 131 : * On stocke le peclet dans optresol , a changer + tard 132 : 133 : SI (EXISTE TRANS1 'NUM_PECLET') ; 134 : OPTRES . 'PECLET' = TRANS1 . 'NUM_PECLET' ; 135 : SINON ; 136 : OPTRES . 'PECLET' = 2.D0 ; 137 : FINSI ; 138 : 139 : 140 : 141 : *************** source ****************** 142 : 143 : 'SI' ('EXISTE' TRANS1 'SOURCE') ; 144 : chpsour = 'COPIER' TRANS1 . 'SOURCE' ; 145 : 'SINON' ; 146 : * source mise à 0 sur le domaine avec les noms de composantes de 147 : * l'inconnue cini. Il vaut mieux faire cette opération en amont 148 : * et transmettre un terme source nul à l'indice SOURCE. Moins cher. 149 : ChPSour = 0.D0 * cini ; 150 : 'FINSI' ; 151 : 152 : 153 : ************** convection *************** 154 : 155 : 'SI' ('EXISTE' TRANS1 'CONVECTION') ; 156 : vitesse = TRANS1 . 'CONVECTION' ; 157 : LCONV = VRAI ; 158 : * Calcul du flux de vitesse pour les EFMH 159 : 'SI' (('NON' REINIT) 'ET' ('EGA' discreti 'EFMH')) ; 160 : * utilisation des préconditionnements 161 : 'SI' ('EXISTE' TRANS2) ; 162 : * On cherche l'existance d'un préconditionnement sur le flux 163 : * convectif 164 : 'SI' ('EXISTE' TRANS2 'DEBITFACE') ; 165 : QFACE = TRANS2 . 'DEBITFACE' ; 166 : 'SINON' ; 167 : * Le préconditionnement est absent. Cela peut être dû à 168 : * un calcul où l'on fait apparaître pour la première fois 169 : * une vitesse après plusieurs appels à transgeol 170 : * On calcule le flux 171 : QFACE = ('DOMA' Modarcy 'SURFACE') * vitesse ; 172 : NORMALES = 'DOMA' Modarcy 'NORMALE' ; 173 : QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP') 174 : ('EXTRAIRE' NORMALES 'COMP') ; 175 : 'DETRUIT' QFACE ; 176 : QFACE = 'NOMC' 'FLUX' QFACE1 ; 177 : 'DETRUIT' QFACE1 ; 178 : 'FINSI' ; 179 : 'SINON' ; 180 : QFACE = ('DOMA' Modarcy 'SURFACE') * vitesse ; 181 : NORMALES = 'DOMA' Modarcy 'NORMALE' ; 182 : QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP') 183 : ('EXTRAIRE' NORMALES 'COMP') ; 184 : 'DETRUIT' QFACE ; 185 : QFACE = 'NOMC' 'FLUX' QFACE1 ; 186 : 'DETRUIT' QFACE1 ; 187 : 'FINSI' ; 188 : 'FINSI' ; 189 : 'SI' (('NON' REINIT) 'ET' ('EGA' discreti 'VF')) ; 190 : * utilisation des préconditionnements 191 : 'SI' ('EXISTE' TRANS2) ; 192 : * On cherche l'existance d'un préconditionnement sur le flux 193 : * convectif 194 : 'SI' ('EXISTE' TRANS2 'DEBITFACE') ; 195 : QFACE = TRANS2 . 'DEBITFACE' ; 196 : 'SINON' ; 197 : * Le préconditionnement est absent. Cela peut être dû à 198 : * un calcul où l'on fait apparaître pour la première fois 199 : * une vitesse après plusieurs appels à transgeol 200 : * On calcule le flux 201 : QFACE = vitesse ; 202 : NORMALES = 'DOMA' Modarcy 'NORMALE' ; 203 : QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP') 204 : ('EXTRAIRE' NORMALES 'COMP') ; 205 : QFACE = 'NOMC' 'FLUX' QFACE1 ; 206 : 'DETRUIT' QFACE1 ; 207 : 'FINSI' ; 208 : 'SINON' ; 209 : QFACE = vitesse ; 210 : NORMALES = 'DOMA' Modarcy 'NORMALE' ; 211 : QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP') 212 : ('EXTRAIRE' NORMALES 'COMP') ; 213 : QFACE = 'NOMC' 'FLUX' QFACE1 ; 214 : 'DETRUIT' QFACE1 ; 215 : 'FINSI' ; 216 : 'FINSI' ; 217 : 'SI' (REINIT 'ET' ('EGA' discreti 'EFMH')) ; 218 : * réinitialisation, cela signifie possibilité d'une nouvelle vitesse 219 : QFACE = ('DOMA' Modarcy 'SURFACE') * vitesse ; 220 : NORMALES = 'DOMA' Modarcy 'NORMALE' ; 221 : QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP') 222 : ('EXTRAIRE' NORMALES 'COMP') ; 223 : 'DETRUIT' QFACE ; 224 : QFACE = 'NOMC' 'FLUX' QFACE1 ; 225 : 'DETRUIT' QFACE1 ; 226 : 'FINSI' ; 227 : 'SI' (REINIT 'ET' ('EGA' discreti 'VF')) ; 228 : * réinitialisation, cela signifie possibilité d'une nouvelle vitesse 229 : QFACE = vitesse ; 230 : NORMALES = 'DOMA' Modarcy 'NORMALE' ; 231 : QFACE1 = 'PSCAL' QFACE NORMALES ('EXTRAIRE' QFACE 'COMP') 232 : ('EXTRAIRE' NORMALES 'COMP') ; 233 : QFACE = 'NOMC' 'FLUX' QFACE1 ; 234 : 'DETRUIT' QFACE1 ; 235 : 'FINSI' ; 236 : 'SINON' ; 237 : LCONV = FAUX ; 238 : 'FINSI' ; 239 : 240 : 241 : * Si il y a une convection, on attend également une 242 : * vitesse aux centres pour le calcul de la dispersivité ou du decentrt 243 : 244 : LDISPERS = FAUX ; 245 : 'SI' (LCONV) ; 246 : 'SI' (DECENTR) ; 247 : vitelem = TRANS1 . 'VITELEM' ; 248 : 'FINSI' ; 249 : 'SI' ('EXISTE' TRANS1 'ALPHAL') ; 250 : DISPL = TRANS1 . 'ALPHAL' ; 251 : DISPT = TRANS1 . 'ALPHAT' ; 252 : vitelem = TRANS1 . 'VITELEM' ; 253 : LDISPERS = VRAI ; 254 : 'FINSI' ; 255 : 'FINSI' ; 256 : 257 : 258 : * On charge les conditions aux limites 259 : 260 : 261 : CHCLIM = TRANS1 . 'CLIMITES' ; 262 : 263 : 264 : *--------------------------------------------------------------------- 265 : *-------- On teste la nécessité de faire un calcul ------------------- 266 : *--------------------------------------------------------------------- 267 : 268 : ************* OPtion d'abandon des calculs ********************* 269 : 270 : 'SI' ('EXISTE' TRANS1 'ABANDON') ; 271 : * si limcalc VRAI on teste si la concentration, les sources et flux 272 : * * deltat sont inférieurs à 10**-15. Si oui on ne calcule plus 273 : * les opérateurs de convections diffusion. Les résultats sont donc 274 : * éventuellement erronés (mais là ou les valeurs sont sans intéret) 275 : * âr contre on conserve la masse (bien que négligeable). Ce point 276 : * est peut etre inutile. 277 : limcalc = TRANS1 . 'ABANDON' ; 278 : seuilc = TRANS1 . 'SEUILCALC' ; 279 : SINON ; 280 : limcalc = FAUX ; 281 : FINSI ; 282 : 283 : SIMPLIF = FAUX ; 284 : * modif depuis le dernier appel 285 : ilyamod = TABMODI . 'POROSITE' 'OU' TABMODI . 'CONVECTI' 'OU' 286 : TABMODI . 'DELTAT' 'OU' TABMODI . 'COEF_LIN' 'OU' 287 : TABMODI . 'DIFFUSIV' ; 288 : * simplification uniquement si pas de modif depuis dernier appel 289 : 'SI' (limcalc 'ET' ('NON' ilyamod)) ; 290 : * on souhaite faire un calcul avec éventuelle simplification 291 : SIMPLIF = VRAI ; 292 : 293 : lim1 = 'MAXIMUM' ('ABS' cini) ; 294 : 'SI' (lim1 < seuilc) ; 295 : * le terme source n'engendre pas de variations de concentration > 1.D-16 296 : * par pas de temps 297 : VOLL = 'KOPS' (DOMA modarcy VOLUME) * porosite ; 298 : VOL1 = VOLL '/' deltat ; 299 : 'DETRUIT' VOLL ; 300 : VOL2 = 'KOPS' chpsour / VOL1 ; 301 : limmm = 'ABS' VOL2 ; 302 : 'DETRUIT' VOL2 ; 303 : lim1 = 'MAXIMUM' limmm ; 304 : 'DETRUIT' limmm ; 305 : VOL2 = 'MINIMUM' VOL1 ; 306 : 'DETRUIT' VOL1 ; 307 : * 'MESSAGE' 'maxsour' lim1 ; 308 : 'SI' (lim1 < (seuilc / 10.D0)) ; 309 : * idem flux diffusif on le teste là car on ne va pas plus loin 310 : * si le test précédent est faux 311 : 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; 312 : CLFLUX = CHCLIM . 'NEUMANN' ; 313 : limm = clflux '/' VOL2 ; 314 : limmm = 'ABS' limm ; 315 : 'DETRUIT' limm ; 316 : lim1 = 'MAXIMUM' limmm ; 317 : 'DETRUIT' limmm ; 318 : * 'MESSAGE' 'maxfluneum' lim1 ; 319 : 'SI' (lim1 > (seuilc / 10.D0)) ; 320 : SIMPLIF = FAUX ; 321 : 'FINSI' ; 322 : 'FINSI' ; 323 : 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; 324 : CLFLUX = CHCLIM . 'FLUTOTAL' ; 325 : limm = clflux '/' VOL2 ; 326 : limmm = 'ABS' limm ; 327 : 'DETRUIT' limm ; 328 : lim1 = 'MAXIMUM' limmm ; 329 : 'DETRUIT' limmm ; 330 : * 'MESSAGE' 'maxflutot' lim1 ; 331 : 'SI' (lim1 > (seuilc / 10.D0)) ; 332 : SIMPLIF = FAUX ; 333 : 'FINSI' ; 334 : 'FINSI' ; 335 : 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; 336 : CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ; 337 : limm = clflux '/' VOL2 ; 338 : limmm = 'ABS' limm ; 339 : 'DETRUIT' limm ; 340 : lim1 = 'MAXIMUM' limmm ; 341 : 'DETRUIT' limmm ; 342 : * 'MESSAGE' 'maxflutot' lim1 ; 343 : 'SI' (lim1 > (seuilc / 10.D0)) ; 344 : SIMPLIF = FAUX ; 345 : 'FINSI' ; 346 : 'FINSI' ; 347 : 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ; 348 : lim1 = 'MAXIMUM' ('ABS' CHCLIM . 'DIRICHLET') ; 349 : 'SI' (lim1 > (seuilc / 10.D0)) ; 350 : SIMPLIF = FAUX ; 351 : 'FINSI' ; 352 : 'FINSI' ; 353 : 'SINON' ; 354 : SIMPLIF = FAUX ; 355 : 'FINSI' ; 356 : 'SINON' ; 357 : SIMPLIF = FAUX ; 358 : 'FINSI' ; 359 : 'FINSI' ; 360 : 361 : * on ne procede pas aux simplification en cas de reinitialisation 362 : * car les objets preconditionnés ne seraient pas crées 363 : SIMPLIF = SIMPLIF 'ET' ('NON' reinit) ; 364 : *'MESSAGE' 'SIMPLIF'; list simplif; 365 : 366 : * Calcul simplifié - on sort 0 pour l'instant 367 : 'SI' (SIMPLIF) ; 368 : cfin = 0.D0 * cini ; 369 : ncompo = dime ('EXTRAIRE' cini 'COMP') ; 370 : cflu = 'MANU' 'CHPO' ('DOMA' modarcy 'FACE') 371 : ('EXTRAIRE' ('EXTRAIRE' cini 'COMP') 1) 0.D0 ; 372 : 'SI' (ncompo > 1) ; 373 : repe blocc (ncompo-1) ; 374 : cflu = cflu et 'MANU' 'CHPO' ('DOMA' modarcy 'FACE') 375 : ('EXTRAIRE' ('EXTRAIRE' cini 'COMP') 376 : (&blocc + 1)) 0.D0 ; 377 : fin blocc ; 378 : 'FINSI' ; 379 : cfluco = cflu ; 380 : 'SINON' ; 381 : 382 : *--------------------------------------------------------------------- 383 : *-------------- Gestion des entrées PRECONDITIONNEMENT --------------- 384 : *--------------------------------------------------------------------- 385 : 386 : 387 : * 388 : * Lecture des indices de trans2 - exceptés debitface et solveur 389 : * 390 : 'SI' ('NON' REINIT) ; 391 : 'SI' ('EXISTE' TRANS2) ; 392 : * obligatoires 393 : mattt = TRANS2 . 'MATRITOTAL' ; 394 : nomespec = TRANS2 . 'NOM_ESPECE' ; 395 : nbespece = TRANS2 . 'NB_ESPECES' ; 396 : nbsource = TRANS2 . 'NB_SOURCES' ; 397 : Diffdisp = TRANS2 . 'DIFFDISP' ; 398 : * optionnel EFMH dep 399 : 'SI' ('EGA' discreti 'EFMH') ; 400 : TbDarTra = TRANS2 . 'TABDARCYTR' ; 401 : MatMaEFM = TRANS2 . 'MATMASEFMH' ; 402 : Tcini = TRANS2 . 'TRACE_CONC' ; 403 : 'FINSI' ; 404 : 'SI' ('EGA' discreti 'VF') ; 405 : Mctot = TRANS2 . 'COEFTOT' ; 406 : Mdiff = TRANS2 . 'COEFDIF' ; 407 : Jaco = TRANS2 . 'JACOBIEN' ; 408 : Matot = TRANS2 . 'MATDIS' ; 409 : Mpor = TRANS2 . 'MPOROS' ; 410 : RESIP = TRANS2 . 'RESIDU' ; 411 : 'FINSI' ; 412 : 'FINSI' ; 413 : 'FINSI' ; 414 : 415 : 416 : 417 : 418 : 419 : ******************************************************************** 420 : ************** traitement chargements VF *************************** 421 : ******************************************************************** 422 : 423 : 424 : *************** source ****************** 425 : 426 : 'SI' ('EXISTE' TRANS1 'SOURCE') ; 427 : 428 : * 'MESSAGE' 'maxisour' ('MAXIMUM' ('ABS' TRANS1 . 'SOURCE')) ; 429 : 430 : 'SI' ('EGA' discreti 'VF') ; 431 : zozo = ('REDU' ('DOMA' MODARCY VOLUME) 432 : ('EXTRAIRE' chpsour MAILLAGE)) ; 433 : zeze = 'NOMC' 'SCAL' zozo ; 434 : 'DETRUIT' zozo ; 435 : zaza = 'COPIER' chpsour ; 436 : 'DETRUIT' chpsour ; 437 : ChPSour = zaza '/' zeze ; 438 : 'DETRUIT' zaza ; 439 : 'DETRUIT' zeze ; 440 : 'FINSI' ; 441 : 'FINSI' ; 442 : 443 : ************ Conditions limites ************************************** 444 : 445 : 'SI' ('EGA' discreti 'VF') ; 446 : * flux diffusif 447 : 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; 448 : CLFLUX = CHCLIM . 'NEUMANN' ; 449 : zozo = 'REDU' ('DOMA' MODARCY SURFACE) 450 : ('EXTRAIRE' CLFLUX MAILLAGE) ; 451 : zuzu = 'NOMC' 'SCAL' zozo ; 452 : 'DETRUIT' zozo ; 453 : CLFLUX = CLFLUX '/' zuzu ; 454 : 'DETRUIT' zuzu ; 455 : 'DETRUIT' (CHCLIM . 'NEUMANN') ; 456 : CHCLIM . 'NEUMANN' = CLFLUX ; 457 : 'FINSI' ; 458 : * flux mixte 459 : 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; 460 : CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ; 461 : zozo = 'REDU' ('DOMA' MODARCY SURFACE) 462 : ('EXTRAIRE' CLFLUX MAILLAGE) ; 463 : zuzu = 'NOMC' 'SCAL' zozo ; 464 : 'DETRUIT' zozo ; 465 : CLFLUX = CLFLUX '/' zuzu ; 466 : 'DETRUIT' zuzu ; 467 : 'DETRUIT' (CHCLIM . 'FLUMIXTE' . 'VAL') ; 468 : CHCLIM . 'FLUMIXTE' . 'VAL' = CLFLUX ; 469 : 'FINSI' ; 470 : * Flux total 471 : 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; 472 : CLFLUX = CHCLIM . 'FLUTOTAL' ; 473 : * MESS 'CLFLUX' ; LIST CLFLUX; 474 : zozo = 'REDU' ('DOMA' MODARCY SURFACE) 475 : ('EXTRAIRE' CLFLUX MAILLAGE) ; 476 : zuzu = 'NOMC' 'SCAL' zozo ; 477 : 'DETRUIT' zozo ; 478 : CLFLUX = CLFLUX '/' zuzu ; 479 : 'DETRUIT' zuzu ; 480 : * VERRUE 481 : 'DETRUIT' (CHCLIM . 'FLUTOTAL') ; 482 : CHCLIM . 'FLUTOTAL' = CLFLUX ; 483 : * MESS 'CLFLUXTRA' ; LIST CLFLUX; 484 : 'FINSI' ; 485 : 'FINSI' ; 486 : 487 : 488 : * 'MESSAGE' 'DELTAT' deltat; 489 : * 'MESSAGE' 'chpsour' ('MAXIMUM' ('ABS' chpsour)); 490 : *--------------------------------------------------------------------- 491 : *-------- On initialise les calculs lors d'un premier appel ---------- 492 : *--------------------------------------------------------------------- 493 : 494 : 'SI' ('EGA' discreti 'EFMH') ; 495 : 'SI' (REINIT) ; 496 : 497 : * EFMH 498 : * On appelle la procédure d'initialisation 499 : 'SI' (LCONV) ; 500 : * présence de convection 501 : 502 : * virer le TABMODI DE SORTIE inutile ??????????????? 503 : 'SI' ('NON' LDISPERS) ; 504 : * pas de dispersivité 505 : 'SI' (DECENTR) ; 506 : smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource 507 : Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY 508 : Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv 509 : TetaLin QFACE vitelem LMLump DECENTR CHCLIM OPTRES ; 510 : 'SINON' ; 511 : smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource 512 : Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY 513 : Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv 514 : TetaLin QFACE LMLump DECENTR CHCLIM OPTRES ; 515 : 'FINSI' ; 516 : 'SINON' ; 517 : * présence de dispersivité 518 : smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource 519 : Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY 520 : Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv 521 : TetaLin QFACE vitelem displ dispt LMLump DECENTR CHCLIM OPTRES; 522 : 'FINSI' ; 523 : 'SINON' ; 524 : smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource 525 : Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY 526 : Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv 527 : TetaLin LMLump DECENTR CHCLIM OPTRES ; 528 : 'FINSI' ; 529 : 530 : 531 : *--------------------------------------------------------------------- 532 : *---------- On update les calculs lors d'appels suivants ------------- 533 : *--------------------------------------------------------------------- 534 : 535 : 536 : 'SINON' ; 537 : 538 : * GBM il faudra prendre en compte conv variable et sortir Diffdisp 539 : 540 : * On appelle la procédure d'update 541 : 'SI' (LCONV) ; 542 : SMTr Mattt TbDarTra MatMaEFM = UPDAEFMH 543 : * MoDARCY Porosite MateDiff difftot ChPSour 544 : MoDARCY Porosite Matediff diffdisp ChPSour 545 : cini tcini deltat Qface nomespec nbespece nbsource 546 : LMLump DECENTR MatMaEFM mattt tbdartra TABMODI CHCLIM ; 547 : 'SINON' ; 548 : SMTr Mattt TbDarTra MatMaEFM = UPDAEFMH 549 : * MoDARCY Porosite MateDiff difftot ChPSour 550 : MoDARCY Porosite Matediff diffdisp ChPSour 551 : cini tcini deltat nomespec nbespece nbsource 552 : LMLump DECENTR MatMaEFM mattt tbdartra TABMODI CHCLIM ; 553 : 'FINSI' ; 554 : 'FINSI' ; 555 : 556 : 557 : *--------------------------------------------------------------------- 558 : *------------- On appelle la procédure de résolution ---------------- 559 : *--------------------------------------------------------------------- 560 : 561 : 562 : 563 : 'SI' (LCONV) ; 564 : matsor TABRES cfin tcfin cflu cfluco = SOLVEFMH MoDARCY ChPSour MatMaEFM 565 : Mattt SMTR Tcini cini Qface nomespec nbespece nbsource OPTRES 566 : tbdartra CHCLIM ; 567 : 'SINON' ; 568 : matsor TABRES cfin tcfin cflu cfluco = SOLVEFMH MoDARCY ChPSour MatMaEFM 569 : Mattt SMTR Tcini cini nomespec nbespece nbsource OPTRES tbdartra 570 : CHCLIM ; 571 : 'FINSI' ; 572 : 573 : 574 : 'SINON' ; 575 : 'SI' ('EGA' discreti 'VF') ; 576 : 'SI' ('NON' LCONV) ; 577 : QFACE MA = 'KOPS' 'MATRIK' ; 578 : 'FINSI' ; 579 : 'SI' (REINIT) ; 580 : 581 : 'SI' ('NON' LDISPERS) ; 582 : 583 : SMTr Mattt JACO Mpor Mctot Mdiff diffdisp difftot 584 : nomespec nbespece nbsource OPTRES TABMODI Nouvmat = 585 : INITVF MoDARCY Porosite MateDiff ChPSour DeltaT Cini 586 : TetaDiff TetaConv TetaLin QFACE CHCLIM OPTRES LCONV ; 587 : 'SINON' ; 588 : SMtr Mattt JACO Mpor Mctot Mdiff diffdisp difftot 589 : nomespec nbespece nbsource OPTRES TABMODI Nouvmat = 590 : INITVF MoDARCY Porosite MateDiff ChPSour DeltaT Cini 591 : TetaDiff TetaConv TetaLin QFACE vitelem displ dispt 592 : CHCLIM OPTRES LCONV ; 593 : 'FINSI' ; 594 : * RESIDU INTERVENANT POUR ORDRE 2 ENTEMPS 595 : RESIP = SMtr ; 596 : *--------------------------------------------------------------------- 597 : *---------- On update les calculs lors d'appels suivants ------------- 598 : *--------------------------------------------------------------------- 599 : 600 : 601 : 'SINON' ; 602 : SMTr Mattt Difftot Mctot Mdiff Nouvmat = UPDAVF 603 : MoDARCY Porosite Matediff Diffdisp ChPSour 604 : DeltaT Cini TetaDiff TetaConv 605 : Qface nomespec nbespece nbsource 606 : Mattt Jaco Mctot Mdiff Mpor TABMODI CHCLIM LCONV ; 607 : 'FINSI' ; 608 : 609 : 610 : *--------------------------------------------------------------------- 611 : *------------- On appelle la procédure de résolution ---------------- 612 : *--------------------------------------------------------------------- 613 : 614 : matsor TABRES cfin cflu cfluco RESI = SOLVVF MoDARCY 615 : ChPSour Mattt Smtr Cini Mctot Mdiff Difftot 616 : RESIP Tetadiff Qface nomespec nbespece 617 : nbsource OPTRES CHCLIM Nouvmat LCONV CHTR ; 618 : 'FINSI' ; 619 : 620 : 'FINSI' ; 621 : 622 : 'SI' ('EGA' discreti 'VF') ; 623 : * flux diffusif 624 : 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; 625 : CLFLUX = CHCLIM . 'NEUMANN' ; 626 : zozo = 'REDU' ('DOMA' MODARCY SURFACE) 627 : ('EXTRAIRE' CLFLUX MAILLAGE) ; 628 : zuzu = 'NOMC' 'SCAL' zozo ; 629 : 'DETRUIT' zozo ; 630 : CLFLUX = CLFLUX '*' zuzu ; 631 : 'DETRUIT' zuzu ; 632 : 'DETRUIT' (CHCLIM . 'NEUMANN') ; 633 : CHCLIM . 'NEUMANN' = CLFLUX ; 634 : 'FINSI' ; 635 : * flux mixte 636 : 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; 637 : CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ; 638 : zozo = 'REDU' ('DOMA' MODARCY SURFACE) 639 : ('EXTRAIRE' CLFLUX MAILLAGE) ; 640 : zuzu = 'NOMC' 'SCAL' zozo ; 641 : 'DETRUIT' zozo ; 642 : CLFLUX = CLFLUX '*' zuzu ; 643 : 'DETRUIT' zuzu ; 644 : 'DETRUIT' (CHCLIM . 'FLUMIXTE' . 'VAL') ; 645 : CHCLIM . 'FLUMIXTE' . 'VAL' = CLFLUX ; 646 : 'FINSI' ; 647 : * Flux total 648 : 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; 649 : CLFLUX = CHCLIM . 'FLUTOTAL' ; 650 : * MESS 'CLFLUX' ; LIST CLFLUX ; 651 : zozo = 'REDU' ('DOMA' MODARCY SURFACE) 652 : ('EXTRAIRE' CLFLUX MAILLAGE) ; 653 : zuzu = 'NOMC' 'SCAL' zozo ; 654 : 'DETRUIT' zozo ; 655 : CLFLUX = CLFLUX '*' zuzu ; 656 : 'DETRUIT' zuzu ; 657 : * VERRUE 658 : 'DETRUIT' (CHCLIM . 'FLUTOTAL') ; 659 : CHCLIM . 'FLUTOTAL' = CLFLUX ; 660 : * MESS 'CLFLUXTRA' ; LIST CLFLUX; 661 : 'FINSI' ; 662 : 'FINSI' ; 663 : 'FINSI' ; 664 : 665 : *********************************************************************** 666 : * ON VIENT DE SORTIR DE LA BOUCLE DE 667 : * CALCULS NON SIMPLIFIES, IE DISCRETISES 668 : *********************************************************************** 669 : 670 : 671 : *--------------------------------------------------------------------- 672 : *---------- On gère les objets de préconditionnement sortant --------- 673 : *--------------------------------------------------------------------- 674 : 675 : * Ces objets ne sont pas censés être modifiés par l'utilisateurs. 676 : * Ce sont des objets intermédiaires permettant de réduire les temps 677 : * de calcul lors d'appels successifs de TRANSGEOL sur un meme probleme. 678 : * La trace de concentration est stockée ici car c'est également un 679 : * objet intermédiaire. 680 : 681 : SI (SIMPLIF) ; 682 : * Pas de modif de resé dans le cas d'un calcul simplifié 683 : RES2 = TRANS2 ; 684 : SINON ; 685 : 686 : RES2 = TABLE 'PRECONDI' ; 687 : RES2 . 'MATRITOTAL' = matsor ; 688 : RES2 . 'NOM_ESPECE' = nomespec ; 689 : RES2 . 'NB_ESPECES' = nbespece ; 690 : RES2 . 'NB_SOURCES' = nbsource ; 691 : RES2 . 'METHINV' = TABRES ; 692 : RES2 . 'DIFFDISP' = Diffdisp ; 693 : * optionnel phys dépendant ou EFMH dep 694 : 'SI' ('EGA' discreti 'EFMH') ; 695 : RES2 . 'MATMASEFMH' = MatMaEFM ; 696 : RES2 . 'TRACE_CONC' = Tcfin ; 697 : SI (LCONV) ; 698 : RES2 . 'DEBITFACE' = Qface ; 699 : FINSI ; 700 : RES2 . 'TABDARCYTR' = TbDarTra ; 701 : 'FINSI' ; 702 : 'SI' ('EGA' discreti 'VF') ; 703 : RES2 . 'COEFTOT' = Mctot ; 704 : RES2 . 'COEFDIF' = Mdiff ; 705 : RES2 . 'JACOBIEN' = Jaco ; 706 : RES2 . 'MATDIS' = Mattt ; 707 : RES2 . 'MPOROS' = Mpor ; 708 : RES2 . 'RESIDU' = RESI ; 709 : 'FINSI' ; 710 : 'FINSI' ; 711 : 712 : *--------------------------------------------------------------------- 713 : *---------------------- On crée la table de résultats --------------- 714 : *--------------------------------------------------------------------- 715 : 716 : *RES1 = TABLE 'TRANSPGEOL' ; 717 : RES1 = TABLE ; 718 : 719 : * 720 : * Recopie de la table trans1, Les valeurs modifiées par TRANSGEOL 721 : * seront écrasées dans RES1. TRANS1 n'est pas modifiée. Les objets 722 : * inchangés ne sont pas recopiés (seulement les pointeurs). 723 : * 724 : 725 : dumm = 'INDEX' TRANS1 ; 726 : *'REPETER' bou1 (('DIME' dumm) '-' 1) ; 727 : * RES1 . (mot dumm . (&bou1 '+' 1)) = TRANS1 . (mot dumm . (&bou1 728 : * '+' 1)) ; 729 : * list res1; 730 : *'FIN' bou1 ; 731 : 'REPETER' bou1 (('DIME' dumm)) ; 732 : RES1 . (mot dumm . (&bou1)) = TRANS1 . (mot dumm . (&bou1)) ; 733 : 'FIN' bou1 ; 734 : 735 : * On stocke la concentration calculée 736 : 737 : RES1 . 'CONCENTRATION' = CFIN ; 738 : *MESS 'CFIN'; LIST CFIN; 739 : *'MESSAGE' (cfin 'MINIMUM') '<'m_charge'<' (cfin 'MAXIMUM' ); 740 : * On stocke le flux diffusif aux faces 741 : RES1 . 'FLUXDIFF' = CFLU ; 742 : *'MESSAGE' (CFLU 'MINIMUM') '
© Cast3M 2003 - All rights reserved.
Disclaimer