Download trangeol.procedur

Back to the list

   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