Download chitrnsp.procedur

Back to the list

   1 : * CHITRNSP  PROCEDUR  JC220346  12/09/12    21:15:01     7501           
   2 :  'DEBPROC' CHITRNSP TRANSI*'TABLE' ;
   3 : *----------------------------------------------------------------------
   4 : *   Transport geochimie
   5 : *----------------------------------------------------------------------
   6 : *
   7 : *------------------------------
   8 : * Phrase d'appel (en GIBIANE) :
   9 : *------------------------------
  10 : *
  11 : *  CHITRNSP TABLE ;
  12 : *
  13 : *----------------------------------
  14 : * Opérandes (à mettre dans TABLE) :
  15 : *----------------------------------
  16 : *
  17 : *  ___________________________________________________________________
  18 : *  |                                                                 |
  19 : *  | Indice      Contenu                                             |
  20 : *  |                                                                 |
  21 : *  -------------------------------------------------------------------
  22 : *  |                                                                 |
  23 : *  |------------------------------------------------                 |
  24 : *  |Données physiques, géométriques et materielles :                 |
  25 : *  |------------------------------------------------                 |
  26 : *  |                                                                 |
  27 : *  |'MODELE'      Objet modèle (MMODEL créé par MODE)                |
  28 : *  |                                                                 |
  29 : *  |'DIFFUSION' Données physiques et materielles :                   |
  30 : *  |              conductivité hydraulique (MCHAML créé par MATE)    |
  31 : *  |                                                                 |
  32 : *  |'POROSITE' Contient pour chaque élément la valeur moyenne de la  |
  33 : *  |            porosité (défaut 1 ) nom CK                          |
  34 : *  |                                                                 |
  35 : *  |'DOMAINE'     Références géométriques (TABLE créée par KDOM)     |
  36 : *  |                                                                 |
  37 : *  |'CONVECTION'  Flux de la vitesse convective (CHAMPOIN de support |
  38 : *  |              DOMAINE.FACE)                                      |
  39 : *  |                                                                 |
  40 : *  |                                                                 |
  41 : *  | 'CHIMI1'  Table issue de CHI1                                   |
  42 : *  |                                                                 |
  43 : *  | 'TAQU' concentration des aqueux au centre des faces             |
  44 : *  |           CHAMPOIN possedant une composante par composant       |
  45 : *  |            chimique.                                            |
  46 : *  |                                                                 |
  47 : *  |  'ITERC' nombre max d'itérations de couplage (défaut 100)       |
  48 : *  |                                                                 |
  49 : *  |  'PRECISION' précision critère de convergence pour le couplage  |
  50 : *  |             valeur par défaut  1.E-3                            |
  51 : *  |                                                                 |
  52 : *  | 'LOGC'     parametres de calcul de CHI2                         |
  53 : *  |  'TOT'                                                          |
  54 : *  | <'EPS'>  <'ITMAX'> <'ITERSOLI'> <'PRECPE'>                      |
  55 : *  |  <'NITERPE'> <'DELPE'> <'NFI'> <'FIONI'> <'NTY4'> <'TEMPE'>     |
  56 : *  |       <'CLIM'> <'SORTIE'> <'IMPRIM'>                            |
  57 : *  |                                                                 |
  58 : *  |--------------------------------------                           |
  59 : *  |Conditions aux limites / chargements :                           |
  60 : *  |--------------------------------------                           |
  61 : *  |                                                                 |
  62 : *  |'BLOCAGE'     Contient les matrices de blocage (RIGIDITE)        |
  63 : *  |                                                                 |
  64 : *  |'TRACE_IMPOSE' Valeurs des traces de concentrations imposées     |
  65 : *  |             chargement de CHPOIN au centre des faces            |
  66 : *  |                                                                 |
  67 : *  |'FLUX_IMPOSE' Valeurs des flux de concentrations imposées        |
  68 : *  |             chargement de CHPOIN au centre des faces            |
  69 : *  |                                                                 |
  70 : *  |'SOURCE'      Valeurs de la source                               |
  71 : *  |              Chargement relatifs aux CHPOIN centre              |
  72 : *  |              ( défaut  CHPOIN centre 0.)                        |
  73 : *  |                                                                 |
  74 : *  |---------------------                                            |
  75 : *  |Algorithme en temps :                                            |
  76 : *  |---------------------                                            |
  77 : *  |                                                                 |
  78 : *  |'PAS_DE_TEMPS' Valeur du pas de temps de calcul (FLOTTANT)       |
  79 : *  |                                                                 |
  80 : *  | 'TEMPS_FINAL' Valeur du temps final (FLOTTANT)                  |
  81 : *  |                                                                 |
  82 : *  |'TEMPS_SAUVES' Valeur des temps sauvegardés (LISTREEL - défaut   |
  83 : *  |              on sauve tous les pas de temps)                    |
  84 : *  |                                                                 |
  85 : *  |'THETA'       Coefficient de relaxation du terme de diffusion    |
  86 : *  |              compris entre 0. et 1.                             |
  87 : *  |              (theta-méthode) (FLOTTANT - défaut 1.)             |
  88 : *  |              Possibilité de non-convergence lorsque theta<1/2   |
  89 : *  |              Valeurs de theta généralement utilisées :          |
  90 : *  |                   Schéma de Euler explicite : 0.                |
  91 : *  |                   Schéma de Crank-Nicholson : 1/2               |
  92 : *  |                   Schéma de Euler implicite : 1.                |
  93 : *  |                                                                 |
  94 : *  |                                                                 |
  95 : *  | 'SORTIE' listmots liste des élèments à conserver (cf CHI2)      |
  96 : *  |_________________________________________________________________|
  97 : *
  98 : *
  99 : *
 100 : *---------------------------------
 101 : * Résultats (stockés dans TABLE) :
 102 : *---------------------------------
 103 : *
 104 : *  ___________________________________________________________________
 105 : *  |                                                                 |
 106 : *  | Indice      Contenu                                             |
 107 : *  |                                                                 |
 108 : *  -------------------------------------------------------------------
 109 : *  |                                                                 |
 110 : *  |'SOUSTYPE'   'GEOCHIMIE' (type MOT)                              |
 111 : *  |                                                                 |
 112 : *  |'TEMPS'        TABLE contenant les temps sauvegardés (FLOTTANT)  |
 113 : *  |                                                                 |
 114 : *  |'TOT' TABLE contenant les concentrations totales aux centres     |
 115 : *  |      CHPOIN centre ayant une composante par composant chimique  |
 116 : *  |                                                                 |
 117 : *  |'AQUE' TABLE contenant les concentrations des aqueux             |
 118 : *  |      CHPOIN centre ayant une composante par composant chimique  |
 119 : *  |                                                                 |
 120 : *  |'FIXE' TABLE contenant les concentrations des fixés              |
 121 : *  |      CHPOIN centre ayant une composante par composant chimique  |
 122 : *  |                                                                 |
 123 : *  |'TAQU' TABLE contenant les traces de concentrations des aqueux   |
 124 : *  |      CHPOIN face ayant une composante par composant chimique    |
 125 : *  | on aura en plus une table pour chacun des éléments de la liste  |
 126 : *  | SORTIE. Les sauvegardes des CHPOIN centre issus du calcul CHI2  |
 127 : *  |                                                                 |
 128 : *  |_________________________________________________________________|
 129 : *
 130 : *
 131 : *  ___________________________________________________________________
 132 : *  |                                                                 |
 133 : *  | Les tables résultats sont indicés par des entiers variant de 0  |
 134 : *  | à N .                                                           |
 135 : *  | A l'indice 0 on stocke les valeurs initiales, aux indices       |
 136 : *  | suivants les champs correspondant au temps de sortie TEMPS.I .  |
 137 : *  | Les champs servant en cas de reprise sont stockés à l'indice N .|
 138 : *  |_________________________________________________________________|
 139 : *
 140 : *
 141 : *
 142 : *--------------------------------------------------------------------*
 143 : * RECUPERATION DES DONNEES PHYSIQUES, GEOMETRIQUES ET MATERIELLES    *
 144 : *--------------------------------------------------------------------*
 145 : *
 146 : *                                                            SOUSTYPE
 147 :  'SI' ( 'NON' ('EXIS' TRANSI  'SOUSTYPE') ) ;
 148 :      'ERREUR' 'indice SOUSTYPE absent de la table des données ' ;
 149 :       'QUITTER' CHITRNSP ;
 150 :  'FINSI' ;
 151 :  'SI' ( 'NEG' ( TRANSI. 'SOUSTYPE') 'GEOCHIMIE' ) ;
 152 :      'ERREUR' 'indice SOUSTYPE incorrect dans la table des données ' ;
 153 :       'QUITTER' CHITRNSP ;
 154 :  'FINSI' ;
 155 : *                                                               MODELE
 156 : 'SI' ( 'EXISTE' TRANSI 'MODELE' )   ;
 157 :      MODHYB = TRANSI . 'MODELE'     ;
 158 :      MCHYB = 'DOMA' MODHYB 'ORIENTAT'       ;
 159 :      XVOLU = 'DOMA' MODHYB 'VOLUME'       ;
 160 :      CEHYTOT = 'DOMA' MODHYB 'CENTRE'       ;
 161 :      FACHYTOT = 'DOMA' MODHYB 'FACE'       ;
 162 : 'SINON'                             ;
 163 :      'ERREUR' 'Il manque le modele' ;
 164 :      'QUITTER' CHITRNSP             ;
 165 : 'FINSI'                             ;
 166 : *                                                     DIFFUSION
 167 : 'SI' ( 'EXISTE' TRANSI 'DIFFUSION' )                   ;
 168 :      MAT1 = TRANSI . 'DIFFUSION'                       ;
 169 : 'SINON'                                                       ;
 170 :      'ERREUR'
 171 :      'Indice DIFFUSION absent de la table de données.' ;
 172 :      'QUITTER' CHITRNSP                                       ;
 173 : 'FINSI'                                                       ;
 174 : *                                                       POROSITE
 175 : 'SI' ( 'EXISTE' TRANSI 'POROSITE' )           ;
 176 :      COEMK = TRANSI . 'POROSITE'              ;
 177 : 'SINON'                                             ;
 178 :      COEMK = 'MANU' 'CHPO' CEHYTOT 1 'CK' 1.D0 ;
 179 : 'FINSI'                                             ;
 180 :      COEMM= 'KCHA' MODHYB 'CHAM' COEMK ;
 181 :      COEMC= 'NOMC' 'SCAL' COEMK ;
 182 :      EMSURF = 'INTG' 'ELEM' MODHYB COEMM              ;
 183 : *                                                           CONVECTION
 184 : 'SI' ( 'EXISTE' TRANSI 'CONVECTION' ) ;
 185 :      QFACE = TRANSI . 'CONVECTION'    ;
 186 : 'SINON'                                                       ;
 187 :      'ERREUR'
 188 :      'Indice CONVECTION absent de la table de données.' ;
 189 :      'QUITTER' CHITRNSP                                       ;
 190 : 'FINSI'                               ;
 191 : *                                                       CHIMI1
 192 : 'SI' ( 'EXISTE' TRANSI 'CHIMI1' )                             ;
 193 :      TB1 = TRANSI . 'CHIMI1'                       ;
 194 :       'SI' ( 'NON' ('EXISTE' TB1 'SOUSTYPE' ) )               ;
 195 :            'ERREUR'
 196 :            'Indice CHIMI1 ne convient pas.'      ;
 197 :            'QUITTER' CHITRNSP                                    ;
 198 :       'FINSI'                                                    ;
 199 :       'SI' ( 'NEG' ( TB1.'SOUSTYPE' ) 'CHIMI1' )                 ;
 200 :           'ERREUR' 'Le sous-typage de la table CHIMI1 est incorrect';
 201 :            'QUITTER' CHITRNSP                                    ;
 202 :       FINSI                                                      ;
 203 :      NBCOMP= DIME ( TB1 . 'DESCHI' .'IDX' ) ;
 204 :      'MESS' ' NOMBRE DE COMPOSANTS ' NBCOMP ;
 205 : 'SINON'                                                          ;
 206 :      'ERREUR'
 207 :      'Indice CHIMI1 absent de la table de données.'              ;
 208 :      'QUITTER' CHITRNSP                                          ;
 209 : 'FINSI'                                                          ;
 210 : *                                                     PRECISION
 211 : 'SI' ( 'EXISTE' TRANSI 'PRECISION' )                          ;
 212 :      EPSS = TRANSI . 'PRECISION'                             ;
 213 : 'SINON'                                                          ;
 214 :      EPSS = 1.D-3                                                ;
 215 : 'FINSI'                                                          ;
 216 : *                                                         ITERC
 217 : 'SI' ( 'EXISTE' TRANSI 'ITERC' )                                 ;
 218 :      ITERC = TRANSI . 'ITERC'                                    ;
 219 : 'SINON'                                                          ;
 220 :      ITERC= 100                                                  ;
 221 : 'FINSI'                                                          ;
 222 : *--------------------------------------------------------------------*
 223 : * RECUPERATION DES DONNEES POUR LE SCHEMA EN TEMPS                   *
 224 : *--------------------------------------------------------------------*
 225 : *
 226 : *                                                                THETA
 227 : 'SI' ( 'EXISTE' TRANSI 'THETA' )                ;
 228 :      TETA = TRANSI . 'THETA'                    ;
 229 : 'SINON'                                         ;
 230 :      TETA  = 1.D0                               ;
 231 : 'FINSI'                                         ;
 232 : *                                                       PAS_DE_TEMPS
 233 : 'SI' ( 'EXISTE' TRANSI 'PAS_DE_TEMPS' ) ;
 234 :      DELTAT = TRANSI . 'PAS_DE_TEMPS'   ;
 235 : 'SINON'                                                      ;
 236 :      'ERREUR'
 237 :      'Indice PAS_DE_TEMPS absent de la table de données.'  ;
 238 :      'QUITTER' CHITRNSP                                      ;
 239 : 'FINSI'                                                      ;
 240 : *                                                      TEMPS INITIAL
 241 : 'SI' ( 'EXISTE' TRANSI 'TEMPS') ;
 242 :      IND1= 'INDE' (TRANSI. 'TEMPS')   ;
 243 :      LN1= 'DIME' IND1 ;
 244 :      ISOR0 = IND1 . LN1 ;
 245 :      TINIT= TRANSI.'TEMPS' . ISOR0 ;
 246 : 'SINON' ;
 247 :      TRANSI. 'TEMPS' = TABLE ;
 248 :      TINIT=0.D0 ;
 249 :      TRANSI. 'TEMPS'.  0 =  TINIT ;
 250 :      ISOR0= 0 ;
 251 :      LN1=1 ;
 252 : 'FINSI'                                                      ;
 253 : *                                                       TEMPS_FINAL
 254 : 'SI' ( 'EXISTE' TRANSI 'TEMPS_FINAL' ) ;
 255 :      TFINAL = TRANSI . 'TEMPS_FINAL'   ;
 256 :      SI (  TFINAL <EG TINIT ) ;
 257 :      'ERREUR'
 258 :      ('CHAI' ' TEMPS_FINAL  incorrect   TEMPS INITIAL=' TINIT ) ;
 259 :      'QUITTER' CHITRNSP                                      ;
 260 :      'FINSI'                                                 ;
 261 :      EPS0=  DELTAT*0.1 ;
 262 :      NBTPS= 'ENTI' ((TFINAL -TINIT + EPS0 )/ DELTAT) ;
 263 :      SI (  'NEG' (NBTPS*DELTAT) (TFINAL - TINIT)  EPS0 ) ;
 264 :      'ERREUR'
 265 :      ' TEMPS_FINAL n est pas un multiple du PAS_DE_TEMPS'  ;
 266 :      'QUITTER' CHITRNSP                                      ;
 267 :      'FINSI'                                                 ;
 268 : 'SINON'                                                      ;
 269 :      'ERREUR'
 270 :      'Indice TEMPS_FINAL absent de la table de données.'  ;
 271 :      'QUITTER' CHITRNSP                                      ;
 272 : 'FINSI'                                                      ;
 273 : *                                                         TEMPS_SAUVES
 274 : 'SI' ( 'EXISTE' TRANSI 'TEMPS_SAUVES' )  ;
 275 :      TPSINI= TINIT ;
 276 :      ISOR= 1 ;
 277 :      TPSOR = ORDO (TRANSI . 'TEMPS_SAUVES')     ;
 278 :      TEMS = 'EXTR' TPSOR 1                              ;
 279 :      'SI' ( TINIT 'EGA' TEMS EPS0 )                     ;
 280 : *                 SI LE TEMPS D'INITIALISATION EST DANS LA LISTE
 281 : *          ON L'ENLEVE CAR CE TEMPS LA EST SAUVE DE TOUTE  MANIERE
 282 :       TPSOR= ENLE TPSOR 1 ;
 283 :      'FINSI' ;
 284 :      LTPSOR= LECT ;
 285 :      DSOR   = 'DIME' TPSOR               ;
 286 :      'REPETER' BOU3 NBTPS                                         ;
 287 :           TEMS = 'EXTR' TPSOR ISOR                               ;
 288 :           TPSINI= TPSINI +DELTAT ;                                ;
 289 :               'SI' ( TPSINI 'EGA' TEMS EPS0 )                     ;
 290 :                    LTPSOR = 'INSE' LTPSOR ISOR &BOU3  ;
 291 :                    ISOR = ISOR+1                      ;
 292 :              'SI' ( ISOR > DSOR )                                ;
 293 :              'QUITTER' BOU3 ;
 294 :              'FINSI'                                              ;
 295 :               'FINSI'                                             ;
 296 :      'FIN' BOU3                                                   ;
 297 :       DLSOR = DIME LTPSOR ;
 298 :       'SI' ((EXTR LTPSOR DLSOR) NEG NBTPS ) ;
 299 :       DLSOR= DLSOR+1 ;
 300 :       LTPSOR = 'INSE' LTPSOR DLSOR NBTPS ;
 301 :       'MESS' ' LA LISTE TEMPS_SAUVES EST INCORRECTE' ;
 302 :       MESS 'indices des temps sauvegardés' ;
 303 :       list ltpsor ;
 304 :       'FINSI' ;
 305 : 'SINON' ;
 306 : *   MESS 'NBTPS  ' NBTPS ;
 307 :     'SI'( NBTPS 'EGA' 1 ) ;
 308 :     LTPSOR= 'LECT' 1  ;
 309 :     'SINON' ;
 310 :     LTPSOR= 'LECT' 1 'PAS' 1 NBTPS ;
 311 :     'FINSI'                                  ;
 312 : 'FINSI'                                  ;
 313 : *      IL FAUT CONTROLER LES LONGUEURS DES TABLES
 314 : *                                                     TAQU
 315 : 'SI' ( 'EXISTE' TRANSI 'TAQU' )                          ;
 316 :      LNN='DIME' (TRANSI. 'TAQU' ) ;
 317 :      'SI' ('NEG' LN1 LNN) ;
 318 :      'ERREUR' 'dimensions incohérentes entre TEMPS et TAQU ' ;
 319 :      'QUITTER' CHITRNSP ;
 320 :      'FINSI' ;
 321 :      TAQU0 = TRANSI . 'TAQU' . ISOR0                     ;
 322 :      TAQU  = TRANSI . 'TAQU' . ISOR0                             ;
 323 : 'SINON'                                                          ;
 324 :      'ERREUR'
 325 :      'Indice TAQU absent de la table de données.'        ;
 326 :      'QUITTER' CHITRNSP                                          ;
 327 : 'FINSI'                                                          ;
 328 : *                                                     AQUE
 329 : 'SI' ( 'EXISTE' TRANSI 'AQUE' )                          ;
 330 :      LNN='DIME' (TRANSI. 'AQUE' ) ;
 331 :      'SI' ('NEG' LN1 LNN) ;
 332 :      'ERREUR' 'dimensions incohérentes entre TEMPS et AQUE ' ;
 333 :      'QUITTER' CHITRNSP ;
 334 :      'FINSI' ;
 335 : 'SINON'                                                          ;
 336 :      'SI' ( EGA ISOR0 0) ;
 337 :       TRANSI. 'AQUE'= TABLE ;
 338 :      'SINON' ;
 339 :      'ERREUR'
 340 :      'Indice AQUE absent de la table de données.'        ;
 341 :      'QUITTER' CHITRNSP                                          ;
 342 :      'FINSI';
 343 : 'FINSI'                                                          ;
 344 : *                                                       FIXE
 345 : 'SI' ( 'EXISTE' TRANSI 'FIXE' )                          ;
 346 :      LNN='DIME' (TRANSI. 'FIXE' ) ;
 347 :      'SI' ('NEG' LN1 LNN) ;
 348 :      'ERREUR' 'dimensions incohérentes entre TEMPS et FIXE ' ;
 349 :      'QUITTER' CHITRNSP ;
 350 :      'FINSI' ;
 351 : 'SINON'                                                          ;
 352 :      'SI' ( EGA ISOR0 0) ;
 353 :       TRANSI. 'FIXE'= TABLE ;
 354 :      'SINON' ;
 355 :      'ERREUR'
 356 :      'Indice FIXE absent de la table de données.'        ;
 357 :      'QUITTER' CHITRNSP                                          ;
 358 :      'FINSI';
 359 : 'FINSI'                                                          ;
 360 : *                                                FLUX
 361 : 'SI' ( 'EXISTE' TRANSI 'FLUX' )                          ;
 362 :      LNN='DIME' (TRANSI. 'FLUX' ) ;
 363 :      'SI' ('NEG' LN1 LNN) ;
 364 :      'ERREUR' 'dimensions incohérentes entre TEMPS et FLUX ' ;
 365 :      'QUITTER' CHITRNSP ;
 366 :      'FINSI' ;
 367 : 'SINON'                                                          ;
 368 :      'SI' ( EGA ISOR0 0) ;
 369 :       TRANSI. 'FLUX'= TABLE ;
 370 : *     TRANSI. 'FLU2'= TABLE ;
 371 :      'FINSI';
 372 : 'FINSI'                                                          ;
 373 : *                                     parametres de   CHIMI2
 374 :  TBPARM= TABLE                                                   ;
 375 :  TBPAR2= TABLE                                                   ;
 376 :  TBPAR2.'SOUSTYPE'='DONNEES_CHIMIQUES' ;
 377 : *
 378 : 'SI' ( 'EXISTE' TRANSI 'LOGC' )                                  ;
 379 :      LNN='DIME' (TRANSI. 'LOGC' ) ;
 380 :      'SI' ('NEG' LN1 LNN) ;
 381 :      'ERREUR' 'dimensions incohérentes entre TEMPS et LOGC ' ;
 382 :      'QUITTER' CHITRNSP ;
 383 :      'FINSI' ;
 384 :      TBPAR2.'LOGC' = TRANSI . 'LOGC' . ISOR0                     ;
 385 :             CLOGC  = TRANSI . 'LOGC' . ISOR0                     ;
 386 : 'SINON'                                                          ;
 387 :      'ERREUR'
 388 :      'Indice LOGC absent de la table de données.'                ;
 389 :      'QUITTER' CHITRNSP                                          ;
 390 : 'FINSI'                                                          ;
 391 : 'SI' ( 'EXISTE' TRANSI 'TOT' )                                   ;
 392 :      LNN='DIME' (TRANSI. 'TOT' ) ;
 393 :      'SI' ('NEG' LN1 LNN) ;
 394 :      'ERREUR' 'dimensions incohérentes entre TEMPS et TOT ' ;
 395 :      'QUITTER' CHITRNSP ;
 396 :      'FINSI' ;
 397 :      TBPAR2.'TOT' = TRANSI . 'TOT'  . ISOR0                     ;
 398 :       TNC        = TRANSI . 'TOT'   . ISOR0                      ;
 399 :   TT1= 'EXTR' TNC 'COMP' ;
 400 : 'SINON'                                                       ;
 401 :      'ERREUR'
 402 :      'Indice TOT absent de la table de données.'              ;
 403 :      'QUITTER' CHITRNSP                                       ;
 404 : 'FINSI'                                                       ;
 405 : 'SI' ( 'EXISTE' TRANSI 'EPS' )                                ;
 406 :      TBPARM.'EPS' = TRANSI . 'EPS'                            ;
 407 : 'FINSI'                                                       ;
 408 : 'SI' ( 'EXISTE' TRANSI 'ITMAX' )                              ;
 409 :      TBPARM.'ITMAX' = TRANSI . 'ITMAX'                        ;
 410 : 'FINSI'                                                       ;
 411 : 'SI' ( 'EXISTE' TRANSI 'ITERSOLI' )                           ;
 412 :      TBPARM.'ITERSOLI' = TRANSI . 'ITERSOLI'                  ;
 413 : 'FINSI'                                                       ;
 414 : 'SI' ( 'EXISTE' TRANSI 'PRECPE' )                             ;
 415 :      TBPARM.'PRECPE' = TRANSI . 'PRECPE'                      ;
 416 : 'FINSI'                                                       ;
 417 : 'SI' ( 'EXISTE' TRANSI 'NITERPE' )                            ;
 418 :      TBPARM.'NITERPE' = TRANSI . 'NITERPE'                    ;
 419 : 'FINSI'                                                       ;
 420 : 'SI' ( 'EXISTE' TRANSI 'DELPE' )                              ;
 421 :      TBPARM.'DELPE' = TRANSI . 'DELPE'                        ;
 422 : 'FINSI'                                                       ;
 423 : 'SI' ( 'EXISTE' TRANSI 'MDELPE' )                             ;
 424 :      TBPARM.'MDELPE' = TRANSI . 'MDELPE'                      ;
 425 : 'FINSI'                                                       ;
 426 : 'SI' ( 'EXISTE' TRANSI 'NFI' )                                ;
 427 :      TBPARM.'NFI' = TRANSI . 'NFI'                            ;
 428 : 'FINSI'                                                       ;
 429 : 'SI' ( 'EXISTE' TRANSI 'FION' )                              ;
 430 :      LNN='DIME' (TRANSI. 'FION' ) ;
 431 :      'SI' ('NEG' LN1 LNN) ;
 432 :      'ERREUR' 'dimensions incohérentes entre TEMPS et FION ' ;
 433 :      'QUITTER' CHITRNSP ;
 434 :      'FINSI' ;
 435 :      TBPAR2.'FIONI' = TRANSI . 'FION' . ISOR0                ;
 436 :      CFIONI= TRANSI . 'FION' ;
 437 :  'SINO'                                                       ;
 438 :      CFIONI= TNC -TNC ;
 439 : 'FINSI'                                                       ;
 440 : 'SI' ( 'EXISTE' TRANSI 'NTY4' )                              ;
 441 :      LNN='DIME' (TRANSI. 'NTY4' ) ;
 442 :      'SI' ('NEG' LN1 LNN) ;
 443 :      'ERREUR' 'dimensions incohérentes entre TEMPS et NTY4 ' ;
 444 :      'QUITTER' CHITRNSP ;
 445 :      'FINSI' ;
 446 :      TBPAR2.'NTY4' = TRANSI . 'NTY4' . ISOR0                ;
 447 :              CNTY4  = TRANSI . 'NTY4' . ISOR0                ;
 448 :              ICTY4= 1    ;
 449 : 'SINON' ;
 450 :              ICTY4= 0    ;
 451 : 'FINSI'                                                       ;
 452 : 'SI' ( 'EXISTE' TRANSI 'TEMPE' )                              ;
 453 :      TBPAR2.'TEMPE' = TRANSI . 'TEMPE'                         ;
 454 :      TEMPERAT      = TRANSI . 'TEMPE'                         ;
 455 : 'FINSI'                                                       ;
 456 : 'SI' ( 'EXISTE' TRANSI 'CLIM' )                               ;
 457 :      TBPAR2.'CLIM' = TRANSI . 'CLIM'                          ;
 458 :      CCLIM= TRANSI . 'CLIM' ;
 459 : 'FINSI'                                                       ;
 460 : 'SI' ( 'EXISTE' TRANSI 'SORTIE' )                             ;
 461 :      TBPARM.'SORTIE' = TRANSI . 'SORTIE'                      ;
 462 : 'FINSI'                                                       ;
 463 : 'SI' ( 'EXISTE' TRANSI 'IMPRIM' )                             ;
 464 :      TBPARM.'IMPRIM' = TRANSI . 'IMPRIM'                      ;
 465 : 'FINSI'                                                       ;
 466 : *
 467 : * ------------------------------------------------------------
 468 : *   DECROISSANCE
 469 : * ------------------------------------------------------------
 470 : *
 471 : 'SI' ( 'EXISTE' TRANSI 'DECROISSANCE')                        ;
 472 :      TETDEC= TRANSI.'DECROISSANCE'.TETA                       ;
 473 : *    MESS ' TDEC ' ;
 474 :      TDEC= INDEX ( TRANSI. 'DECROISSANCE'  )                  ;
 475 :      NBDEC= DIME TDEC ;
 476 : *    MESS 'NBDEC  '       ;
 477 : *list nbdec ;
 478 :       NBDEC= NBDEC-1 ;
 479 : *list nbdec ;
 480 : *LIST TDEC ;
 481 :      TBDEC= TRANSI.'DECROISSANCE'. 1 ;
 482 :      MO1PERE MOPERE NPERE = NOCOMCHI TB1 'NUMCOMP' (TBDEC.PERE) ;
 483 :      LAMP= EXCO (TNC -TNC) MOPERE MOPERE ;
 484 :      MALAMP= 'EXTR' LAMP 'MAIL' ;
 485 : *    MESS 'LAMP ' ;
 486 : *    LIST LAMP ;
 487 :      LISMPERE= MOTS ;
 488 :      LISMFILS= MOTS ;
 489 :      'REPE' BDECR NBDEC ;
 490 :          TBDEC= TRANSI.'DECROISSANCE'. &BDECR ;
 491 :          MO1PERE MOPERE NPERE = NOCOMCHI TB1 'NUMCOMP' (TBDEC.PERE) ;
 492 :          MO1FILS MOFILS NFILS = NOCOMCHI TB1 'NUMCOMP' (TBDEC.FILS) ;
 493 : *        LAMP=LAMP+( NOMC TBDEC.LAMBDA MOPERE ) ;
 494 :          LAMP= LAMP+('MANU' 'CHPO' MALAMP 1 MOPERE TBDEC.LAMBDA ) ;
 495 :          LISMPERE= 'INSE' LISMPERE &BDECR MOPERE ;
 496 :          LISMFILS= 'INSE' LISMFILS &BDECR MOFILS ;
 497 :      'FIN' BDECR ;
 498 : 'FINSI' ;
 499 : * MESS  ' LAMP  apres chargement ' ;
 500 : *    LIST LAMP ;
 501 : * MESS ' LISMPERE ' ;
 502 : * LIST LISMPERE  ;
 503 : * MESS ' LISMFILS ' ;
 504 : * LIST LISMFILS  ;
 505 : *
 506 : *--------------------------------------------------------------------*
 507 : * RECUPERATION DES CONDITIONS AUX LIMITES ET DES CHARGEMENTS         *
 508 : *--------------------------------------------------------------------*
 509 : *
 510 : *                                  CL de type Dirichlet :      BLOCAGE
 511 : *                                                         TRACE_IMPOSE
 512 : 'SI' ( 'EXISTE' TRANSI 'BLOCAGE' )                           ;
 513 :      MATBLOC = TRANSI . 'BLOCAGE'                            ;
 514 :      'SI' ( 'EXISTE' TRANSI 'TRACE_IMPOSE')                  ;
 515 :          CCHAIMP = TRANSI . 'TRACE_IMPOSE'                   ;
 516 :      'SINON'                                                 ;
 517 :      'ERREUR' 'Valeurs de traces de charge imposée absentes' ;
 518 :      'QUITTER' CHITRNSP                                      ;
 519 :      'FINSI'                                                 ;
 520 : 'FINSI'                                                      ;
 521 : *                                                        FLUX_IMPOSE
 522 : 'SI' ( 'EXISTE' TRANSI 'FLUX_IMPOSE')                  ;
 523 :          FLUIMPO = TRANSI . 'FLUX_IMPOSE'                   ;
 524 : 'FINSI'                                                 ;
 525 : *                                                               SOURCE
 526 : 'SI' ( 'EXISTE' TRANSI 'SOURCE' ) ;
 527 :      CHASOUR = TRANSI . 'SOURCE'   ;
 528 :      'SINON'                                                      ;
 529 :          MOCOMP= 'EXTR' TT1 1 ;
 530 :          SOURC0= 'MANU' 'CHPO' CEHYTOT 1  MOCOMP  0.D0       ;
 531 :          'REPE' BOU6  NBCOMP ;
 532 :          MOCOMP= 'EXTR' TT1 &BOU6 ;
 533 :           TERSC = 'MANU' 'CHPO' CEHYTOT 1 MOCOMP 0.D0       ;
 534 :          SOURC0= SOURC0 +TERSC ;
 535 :          'FIN' BOU6 ;
 536 : 'FINSI'                           ;
 537 : *   tersc1 source a utiliser dans le calcul de AF
 538 :           TERSC1 = 'MANU' 'CHPO' CEHYTOT 1 'SOUR' 0.D0       ;
 539 : *
 540 : *------------------------------------------- ------------------------*
 541 : *       INITIALISATION DE LA TABLE RESULTAT
 542 : *--------------------------------------------------------------------*
 543 : *
 544 : 'SI' ( 'EXISTE' TRANSI 'SORTIE' )                   ;
 545 :      NBSOR = DIME ( TRANSI . 'SORTIE' )                      ;
 546 :      SI  (EGA ISOR0 0) ;
 547 :      'REPETER' BOU1 NBSOR ;
 548 :       MOSOR= 'EXTR' (  TRANSI . 'SORTIE' )  &BOU1 ;
 549 :      TRANSI . MOSOR = TABLE ;
 550 :      'FIN' BOU1 ;
 551 :      'SINON' ;
 552 :      'REPETER' BOU2 NBSOR ;
 553 :       MOSOR= 'EXTR' (  TRANSI . 'SORTIE' )  &BOU2 ;
 554 :      'SI' ( 'EXIS' TRANSI MOSOR)  ;
 555 :      LNN='DIME' (TRANSI. MOSOR ) ;
 556 :      'SI' ('NEG' LN1 LNN) ;
 557 :      MESERR = 'CHAI' 'dimensions incohérentes entre TEMPS et' MOSOR ;
 558 :      'ERREUR'  MESERR ;
 559 :      'QUITTER' CHITRNSP ;
 560 :      'FINSI' ;
 561 :      'SINON' ;
 562 :      'ERREUR'
 563 :      ( CHAI 'Indice ' MOSOR ' absent de la table de données.' )     ;
 564 :      'QUITTER' CHITRNSP                                          ;
 565 :       FINSI ;
 566 :      'FIN' BOU2 ;
 567 :      'FINSI' ;
 568 : 'FINSI'                                                       ;
 569 : 
 570 : *--------------------------------------------------------------------*
 571 : *  CE QUI EST INDEPENDANT DU COMPOSANT ET DU TEMPS                   *
 572 : *--------------------------------------------------------------------*
 573 : *
 574 : *                      on récupère les noms des  reactifs
 575 : *
 576 :    NBREA= 0 ;
 577 :    SI ( EXIS TB1 'IDEN' 'REAC') ;
 578 :         NOMREAC= MOTS ;
 579 :         NBREA=DIME TB1.IDEN.REAC ;
 580 :         REPETER BOUREA NBREA ;
 581 :         NUNU= EXTR ( TB1.IDEN.REAC ) &BOUREA ;
 582 :      NNCH NOM2 NUNU = NOCOMCHI TB1 'NUMCOMP'  NUNU ;
 583 :         NOMREAC= NOMREAC ET ( MOTS NOM2 ) ;
 584 :         FIN BOUREA;
 585 : *       LIST NOMREAC ;
 586 :    FINSI ;
 587 : *
 588 : *                      on récupère les noms des non reactifs
 589 : *
 590 :    NBNR= 0 ;
 591 :    SI ( EXIS TB1 'IDEN' 'PARF') ;
 592 :         NOMPARF= MOTS ;
 593 :         NBNR=DIME TB1.IDEN.PARF ;
 594 :         NBNR1= NBNR ;
 595 :         REPETER BOUNR NBNR1;
 596 :         NUNU= EXTR ( TB1.IDEN.PARF ) &BOUNR ;
 597 :   NNCH  NOM2 NUNU = NOCOMCHI TB1 'NUMCOMP'  NUNU ;
 598 : *
 599 : *   les non reactifs intervenant dans les decroissances sont traités
 600 : *   comme des reactifs sinon les quantitées de matieres devenant non
 601 : *   reactives ne sont plus transportées
 602 :         'SI' ( 'EXISTE' TRANSI 'DECROISSANCE')     ;
 603 :          IREA= FAUX ;
 604 :         'REPE' B2DECR NBDEC ;
 605 :          TBDEC= TRANSI.'DECROISSANCE'.  &B2DECR ;
 606 :          'SI' ('EGA' (TBDEC.'PERE') NUNU) ;
 607 :           IREA= VRAI ;
 608 :           'QUITTER' B2DECR ;
 609 :           'SINON' ;
 610 :            'SI' ('EGA' (TBDEC.'FILS') NUNU) ;
 611 :             IREA= VRAI ;
 612 :             'QUITTER' B2DECR ;
 613 :            'FINSI' ;
 614 :           'FINSI' ;
 615 :           'FIN' B2DECR ;
 616 :           'SI' IREA ;
 617 :             NBREA=NBREA+1 ;
 618 :             NBNR= NBNR-1  ;
 619 :             NOMREAC= NOMREAC ET ( MOTS NOM2 ) ;
 620 :           'SINON' ;
 621 :             NOMPARF= NOMPARF ET ( MOTS NOM2 ) ;
 622 :            'FINSI' ;
 623 :         'SINON' ;
 624 :           NOMPARF= NOMPARF ET ( MOTS NOM2 ) ;
 625 :         'FINSI' ;
 626 :         FIN BOUNR ;
 627 : *       LIST NOMPARF ;
 628 :    FINSI ;
 629 : *
 630 : *
 631 : * Table utilisée par les operateurs MATP, SMTP, HYBP et HDEBI
 632 : *
 633 : TAB = 'TABLE'                        ;
 634 : TAB.'SOUSTYPE' = 'DARCY_TRANSITOIRE' ;
 635 : TAB.'THETA'    = TETA                ;
 636 : TAB.'THETA_CONVECTION'= TETA         ;
 637 : TAB.'SURF'     = EMSURF              ;
 638 : TAB.'PAS'     = DELTAT               ;
 639 : TAB.'TRACE'= MANU CHPO FACHYTOT 1 TH 0.D0 ;
 640 : TAB.'CHARGE'= MANU CHPO CEHYTOT 1 H 0.D0 ;
 641 : *
 642 : *                      Initialisations  du calcul
 643 : *
 644 : MASHYB = 'MHYB' MODHYB  MAT1 ;
 645 :           MC SMTR = 'SMTP' MODHYB  MASHYB  TAB TERSC1 QFACE ;
 646 :           MF = 'MATP' MODHYB  MASHYB  TAB      ;
 647 :           AF = MF ET MC ;
 648 : *
 649 : *
 650 :                             TB3= CHI2 TB1 TBPAR2 TBPARM ;
 651 : *
 652 : *
 653 :    CAQU=TB3.AQUE ;
 654 :    CAQU0=CAQU ;
 655 :    CFIX0=TB3.FIXE ;
 656 :    CFIXE=TB3.FIXE ;
 657 :    CLOGC= TB3.LOGC ;
 658 :      FLU00= TAQU -TAQU ;
 659 :      FLU01= FLU00 ;
 660 : *
 661 : *                        Les coefficients
 662 : *
 663 :      COEMC= COEMC * XVOLU ;
 664 :      PETID= DMTD MODHYB MASHYB ;
 665 :      ALFA= (TETA* PETID) +(COEMC/DELTAT ) ;
 666 :      ALFA= ALFA ** (-1) ;
 667 :      COEF1=ALFA*COEMC/DELTAT ;
 668 :      COEF2= ALFA* PETID*(1. - TETA) ;
 669 :      COEF3= ALFA*(1. - TETA) ;
 670 :      COEF4= 1. - (ALFA * TETA * PETID ) ;
 671 :      COEF5= ALFA*TETA*PETID ;
 672 : *
 673 : *                       Indice ISOR0 de la table resulat
 674 : *
 675 :      TMPS= TINIT ;
 676 :      TRANSI . 'TEMPS' . ISOR0 = TMPS ;
 677 :      TRANSI . 'TOT' . ISOR0 = TNC ;
 678 :      TRANSI . 'AQUE' . ISOR0 = CAQU ;
 679 :      TRANSI . 'FIXE' . ISOR0 = CFIXE ;
 680 :      TRANSI . 'TAQU' . ISOR0 = TAQU ;
 681 :      TRANSI . 'LOGC' . ISOR0 = CLOGC ;
 682 :      TRANSI . 'FLUX' . ISOR0 = 'HDEB' MODHYB  MASHYB CAQU TAQU
 683 :                                        QFACE ;
 684 : *    'MESS' ' FLUX 0' ;
 685 : *     LIST ( TRANSI . 'FLUX' . ISOR0  ) ;
 686 : 'SI' ( 'EXISTE' TRANSI 'SORTIE' )                   ;
 687 :      'REPETER' BOU4 NBSOR ;
 688 :       MOSOR= 'EXTR' (  TRANSI . 'SORTIE' )  &BOU4 ;
 689 :      TRANSI . MOSOR  . ISOR0 = TB3. MOSOR ;
 690 :       'FIN' BOU4 ;
 691 :      'SI' ( 'EXISTE' TRANSI 'PREC' ) ;
 692 :           CPRECIP= TB3.'PREC' ;
 693 :      'FINSI' ;
 694 :      'SI' ( 'EXISTE' TRANSI  'FION' ) ;
 695 :           CFIONI= TB3.'FION' ;
 696 :      'FINSI' ;
 697 :      'SI' ( 'EXISTE' TRANSI  'TYP6' ) ;
 698 :           CTYP6= TB3.'TYP6' ;
 699 :      'FINSI' ;
 700 :      'SI' ( 'EXISTE' TRANSI  'TYP5' ) ;
 701 :           CTYP5= TB3.'TYP5' ;
 702 :      'FINSI' ;
 703 :      'SI' ( 'EXISTE' TRANSI  'TYP3' ) ;
 704 :           CTYP3= TB3.'TYP3' ;
 705 :      'FINSI' ;
 706 :      'SI' ( 'EXISTE' TRANSI  'NTY4' ) ;
 707 :           CNTY4= TB3.'NTY4' ;
 708 :           ICTY4= 1 ;
 709 :      'FINSI' ;
 710 :      'SI' ( 'EXISTE' TRANSI  'SURF' ) ;
 711 :           CSURF= TB3.'SURF' ;
 712 :      'FINSI' ;
 713 :      'SI' ( 'EXISTE' TRANSI  'SOLU' ) ;
 714 :           CSOLU= TB3.'SOLU' ;
 715 :      'FINSI' ;
 716 : 'FINSI'                                                       ;
 717 : *
 718 : * -------------------------------------------------------------------
 719 : *                          Boucle sur le temps
 720 : * -------------------------------------------------------------------
 721 : *
 722 :   ISOR=1 ;
 723 :   ITERCUM= 0 ;
 724 :   NPAFLUX= 0 ;
 725 :  REPETER BOUTMP NBTPS ;
 726 :   NUSOR= 'EXTR' LTPSOR ISOR ;
 727 :   TMPS= TMPS+DELTAT ;
 728 :   TNC1= TNC ;
 729 :    'SI' ( 'EXISTE' TRANSI 'SOURCE' ) ;
 730 :        SOURC= TIRE CHASOUR TMPS ;
 731 :    'SINON' ;
 732 :        SOURC= SOURC0 ;
 733 :    'FINSI' ;
 734 :    'SI' ( 'EXISTE' TRANSI 'BLOCAGE' ) ;
 735 :        CHAIMP= TIRE CCHAIMP TMPS ;
 736 :        CHAIMP= 'CHAN' 'ATTRIBUT' CHAIMP 'NATURE' 'DISCRET' ;
 737 :    'FINSI' ;
 738 :    'SI' ( 'EXISTE' TRANSI 'FLUX_IMPOSE' ) ;
 739 :        FLUIMP= TIRE FLUIMPO TMPS ;
 740 :        FLUIMP= 'CHAN' 'ATTRIBUT' FLUIMP 'NATURE' 'DISCRET' ;
 741 :    'FINSI' ;
 742 :   TOTO= TAQU ;
 743 : * FLU2= TOTO - TOTO ;
 744 :    DOMERR= CEHYTOT ;
 745 : *
 746 : *                                  ---------------------------
 747 : *                                  Transport des non réactifs
 748 : *                                  ---------------------------
 749 : *
 750 :   SI (NBNR > 0 ) ;
 751 : *
 752 :    I=0 ;
 753 :    REPETER BLOC1 NBNR ;
 754 :    I= I + 1 ;
 755 :    MOCOMP= EXTR NOMPARF I ;
 756 :   CONC= EXCO MOCOMP TOTO MOCOMP ;
 757 :   CHA2= EXCO MOCOMP TNC  MOCOMP ;
 758 :   TSOUR= EXCO MOCOMP SOURC 'SOUR' ;
 759 :    TOTO= TOTO - CONC ;
 760 :    TNC = TNC - CHA2 ;
 761 : *
 762 : *                                            = Conditions initiales =
 763 : *
 764 : TFHYB =  NOMC 'TH' CONC  ;
 765 : TCHYB = 'HYBP' MODHYB  MASHYB TFHYB                         ;
 766 : TAB.'TRACE'  = TFHYB                          ;
 767 : TAB.'CHARGE' = TCHYB                          ;
 768 : *
 769 : *                                             =  VALEURS imposées  =
 770 : *
 771 : *
 772 :           RIGS SMTR = 'SMTP' MODHYB  MASHYB TAB TSOUR QFACE ;
 773 : *
 774 :   'SI' ('EXISTE' TRANSI 'BLOCAGE') ;
 775 :           CLIAB= EXCO MOCOMP CHAIMP 'H' ;
 776 :           EEBAS  = 'DEPI' MATBLOC CLIAB ;
 777 :              AFF = AF 'ET' MATBLOC                            ;
 778 :           SMTR     = SMTR 'ET' EEBAS                            ;
 779 :   'SINON' ;
 780 :            AFF =AF ;
 781 :   'FINSI' ;
 782 :   'SI' ('EXISTE' TRANSI 'FLUX_IMPOSE') ;
 783 :           FLUIMPC= EXCO MOCOMP FLUIMP 'FLUX' ;
 784 :           SMTR = SMTR ET FLUIMPC ;
 785 :   'FINSI' ;
 786 : 
 787 : TP1 = 'RESO' AFF SMTR    ;
 788 : TP2 = 'EXCO' TP1 'TH' 'TH' ;
 789 :       CONC0  = 'NOMC' 'SCAL' TP2                                  ;
 790 :       CONC1  = 'NOMC' 'SCAL' TFHYB                                ;
 791 :       CONC2  = TETA *CONC0 + ((1.D0-TETA )*CONC1)                 ;
 792 :       CONC3  = (-1.D0) * CONC2 * QFACE                            ;
 793 :       TERSC2 = 'DIVU' MODHYB  CONC3 MCHYB                    ;
 794 :       TERSC2 = 'NOMC' 'SOUR' TERSC2                               ;
 795 :       TERSCE = TSOUR + TERSC2                                    ;
 796 :       CHA2   = 'HYBP' MODHYB  MASHYB TP2 TAB TERSCE          ;
 797 :   CONC= NOMC MOCOMP TP2 ;
 798 :   CHA2= NOMC MOCOMP CHA2 ;
 799 :   TOTO= TOTO+CONC ;
 800 :   TNC = TNC + CHA2 ;
 801 :    FIN BLOC1 ;
 802 :    TAQU= TOTO ;
 803 :    TAQU0=TAQU ;
 804 :    FINSI ;
 805 : *
 806 : *
 807 : *                                  ---------------------------
 808 : *                                     Transport des réactifs
 809 : *                                  ---------------------------
 810 : *
 811 :    AAS1= BMTD MODHYB MASHYB (COEF1*TNC) ;
 812 :    ABS1= BMTD MODHYB MASHYB (ALFA*SOURC) ;
 813 :    ACS1= BMTD MODHYB MASHYB ( COEF2 * CAQU0) ;
 814 :    ADS1=DMMU MODHYB MASHYB QFACE TAQU0 ;
 815 :    AES1= BMTD MODHYB MASHYB (COEF3*ADS1) ;
 816 :    AS1 =  ACS1 - ABS1 -  AAS1 -  AES1 ;
 817 :    AT1=(COEF1*TNC) - (ALFA*(1.-TETA)*PETID*CAQU0) +(COEF3*ADS1) ;
 818 :    AT1=AT1+ (ALFA * SOURC ) ;
 819 :    CFION2=CFIONI;
 820 :    CLOGC2=CLOGC ;
 821 :    CAQU2=CAQU ;
 822 : 'SI' ( 'EXISTE' TRANSI 'CLIM' )                               ;
 823 :    CCLIM2=CCLIM ;
 824 :  'FINSI' ;
 825 : 'SI' ( 'EXISTE' TRANSI 'TEMPE' )                               ;
 826 :    TEMPERA2=TEMPERAT ;
 827 :  'FINSI' ;
 828 :    CFIXE= CFIX0 ;
 829 :    CFIX2=CFIXE ;
 830 :    TAQU = TAQU0 ;
 831 : *                                             -------------
 832 : *                                                Couplage
 833 : *                                             -------------
 834 :   ITECO= 0 ;
 835 :   REPETER BLOC2 ITERC ;
 836 :   ITECO= ITECO+ 1 ;
 837 :  AS2 = BMTD MODHYB MASHYB ( COEF4 * CFIXE) ;
 838 :   AS = AS1 +AS2 ;
 839 :   ABT2= COEF5*CFIXE ;
 840 : *
 841 : *
 842 : *                            Résolution composante par composante
 843 : *
 844 :     TNC0=TNC ;
 845 :    REPETER BLOC4 NBREA ;
 846 :    MOCOMP= EXTR NOMREAC &BLOC4 ;
 847 : *  LIST MOCOMP ;
 848 : *
 849 :      CONC0= EXCO MOCOMP TAQU MOCOMP ;
 850 :      TAQU = TAQU - CONC0 ;
 851 :      ASI = EXCO MOCOMP AS 'FLUX' ;
 852 :      'SI' ('EXISTE' TRANSI 'BLOCAGE' ) ;
 853 :           CLIAB= EXCO MOCOMP CHAIMP 'H' ;
 854 :            EEBAS  = 'DEPI' MATBLOC CLIAB      ;
 855 :            AFF     = AF 'ET' MATBLOC         ;
 856 :            ASS    = ASI ET EEBAS ;
 857 :      'SINON' ;
 858 :           ASS = ASI ;
 859 :           AFF=  AF ;
 860 :      'FINSI' ;
 861 :      'SI' ('EXISTE' TRANSI 'FLUX_IMPOSE' ) ;
 862 :           FLUIMPC=EXCO MOCOMP FLUIMP 'FLUX' ;
 863 :           ASS = ASS ET FLUIMPC ;
 864 :      'FINSI' ;
 865 :      CONC1= 'RESOU' AFF ASS ;
 866 :      CONC0= EXCO  CONC1 'TH' MOCOMP ;
 867 :      TAQU = TAQU + CONC0 ;
 868 :      LAT1=EXCOM MOCOMP AT1 MOCOMP ;
 869 :      EABT2=EXCO MOCOMP ABT2 MOCOMP ;
 870 :      AAT2= DMMU MODHYB MASHYB QFACE CONC0 ;
 871 :       AT2= EABT2 + (ALFA*TETA*AAT2 );
 872 :      TNL=EXCO MOCOMP TNC MOCOMP ;
 873 :      TNC=TNC -TNL ;
 874 :      TNC= TNC +AT2 +LAT1 ;
 875 :    FIN BLOC4 ;
 876 : *
 877 : *                      Prise en compte de la décroissance
 878 : *
 879 : 'SI' ( 'EXISTE' TRANSI 'DECROISSANCE')                        ;
 880 : *   mess  ' avant  decroissance ' ;
 881 : *   list tnc ;
 882 :     TNDEC=(TETDEC*TNC)+((1.-TETDEC)*TNC1) ;
 883 :     TNDEC= EXCO TNDEC LISMPERE LISMPERE ;
 884 :     TTPERE= LAMP*TNDEC LISMPERE LISMPERE LISMPERE ;
 885 :     TTFILS=NOMC TTPERE LISMPERE LISMFILS 'NATU' 'DISCRET' ;
 886 :     TNC=TNC+(DELTAT*(TTFILS-TTPERE)) ;
 887 : *   mess  ' apres  decroissance ' ;
 888 : *   list tnc ;
 889 :  'FINSI' ;
 890 : *
 891 : *                   Convergence sur TNC
 892 : *
 893 : * NBCOMP nombre de composantes de CTOT
 894 :    DIFTN=ABS(TNC-TNC0) ;
 895 :    EPSTN0=EPSS*((ABS TNC )+(MASQ TNC EGALE 0. ) ) ;
 896 :    MAMA0= MASQ DIFTN SUPERIEUR 'SOMME' EPSTN0 ;
 897 : *  MESS 'mama0 '   ; LIST MAMA0 ;
 898 :    SI ( MAMA0 EGA 0  ) ;
 899 :       MESS ' on a convergé ' ;
 900 :        QUITTER BLOC2 ;
 901 :    FINSI ;
 902 :    EPSTN=EPSS*0.001*((ABS TNC )+(MASQ TNC EGALE 0. ) ) ;
 903 :    MAMA= MASQ DIFTN SUPERIEUR EPSTN ;
 904 :    II=1 ;
 905 :    MOCOMP= EXTR TT1 II ;
 906 :    BB= EXCO MOCOMP MAMA ;
 907 :    NBC1= NBCOMP-1 ;
 908 :    SI ( NBC1 NEG 0 ) ;
 909 :    REPETER BLOC3 NBC1 ;
 910 :    II=II+1 ;
 911 :    MOCOMP= EXTR TT1 II ;
 912 :    CC= EXCO MOCOMP MAMA ;
 913 :    BB=BB+CC ;
 914 :    FIN BLOC3 ;
 915 :    FINSI ;
 916 :    DOMERR= BB POIN SUPERIEUR 0. ;
 917 : *  OPTION DONN 5 ;
 918 :    CFION2= REDU DOMERR CFIONI ;
 919 :    CLOGC2= REDU DOMERR CLOGC ;
 920 :    CAQU2= REDU DOMERR CAQU ;
 921 :    CFIX2= REDU DOMERR CFIXE ;
 922 :  TTNC= REDU DOMERR TNC ;
 923 :  TBPAR2.FIONI= CFION2 ;
 924 :  TBPAR2.LOGC= CLOGC2 ;
 925 :  TBPAR2.TOT= TTNC ;
 926 : 'SI' ( 'EXISTE' TRANSI 'CLIM' )                               ;
 927 :    CCLIM2= REDU DOMERR CCLIM ;
 928 :  TBPAR2.CLIM= CCLIM2 ;
 929 :  'FINSI'  ;
 930 : 'SI' ( 'EXISTE' TRANSI 'TEMPE' )                               ;
 931 :    TEMPERA2= REDU DOMERR TEMPERAT ;
 932 :  TBPAR2.'TEMPE'= TEMPERA2 ;
 933 :  'FINSI'  ;
 934 : 'SI' ( ICTY4  'EGA'  1 )                 ;
 935 :    CPPP    = REDU DOMERR CNTY4 ;
 936 :  TBPAR2.'NTY4'= CPPP ;
 937 :  'FINSI'  ;
 938 : *   on va calculer chimi2 sur un sous maillage et on garde dans CCAQU
 939 : *           ce qui ne bougera pas
 940 :   CCFIXE= CFIXE -CFIX2 ;
 941 :   CCAQU= CAQU -CAQU2 ;
 942 :   CCLOGC= CLOGC -CLOGC2 ;
 943 : *
 944 : *
 945 :                             TB3= CHI2 TB1 TBPAR2 TBPARM ;
 946 : *
 947 : *
 948 :    CAQU= CCAQU + TB3.AQUE ;
 949 :    CFIXE= CCFIXE + TB3.FIXE ;
 950 :    CLOGC= CCLOGC+TB3.LOGC ;
 951 :      'SI' ( 'EXISTE' TRANSI 'PREC' ) ;
 952 :           CPPP='REDU' DOMERR  CPRECIP ;
 953 :           CPRECIP= CPRECIP -CPPP + TB3.'PREC' ;
 954 :      'FINSI' ;
 955 :      'SI' ( 'EXISTE' TRANSI 'FION' ) ;
 956 :           CPPP='REDU' DOMERR  CFIONI ;
 957 :           CFIONI= CFIONI - CPPP + TB3.'FION' ;
 958 :      'FINSI' ;
 959 :      'SI' ( 'EXISTE' TRANSI 'TYP6' ) ;
 960 :           CPPP='REDU' DOMERR  CTYP6 ;
 961 :           CTYP6= CTYP6 - CPPP + TB3.'TYP6' ;
 962 :      'FINSI' ;
 963 :      'SI' ( 'EXISTE' TRANSI 'TYP5' ) ;
 964 :           CPPP='REDU' DOMERR  CTYP5 ;
 965 :           CTYP5= CTYP5 -CPPP + TB3.'TYP5' ;
 966 :      'FINSI' ;
 967 :      'SI' ( 'EXISTE' TRANSI 'TYP3' ) ;
 968 :           CPPP='REDU' DOMERR  CTYP3 ;
 969 :           CTYP3=  CTYP3 -CPPP +TB3.'TYP3' ;
 970 :      'FINSI' ;
 971 :      'SI' ( 'EXISTE' TRANSI 'NTY4' ) ;
 972 :           CPPP='REDU' DOMERR  CNTY4 ;
 973 :           CNTY4=  CNTY4 -CPPP + TB3.'NTY4' ;
 974 :      'FINSI' ;
 975 :      'SI' ( 'EXISTE' TRANSI 'SURF' ) ;
 976 :           CPPP='REDU' DOMERR  CSURF ;
 977 :           CSURF=  CSURF -CPPP +TB3.'SURF' ;
 978 :      'FINSI' ;
 979 :      'SI' ( 'EXISTE' TRANSI 'SOLU' ) ;
 980 :           CPPP='REDU' DOMERR  CSOLU ;
 981 :           CSOLU=  CSOLU -CPPP +TB3.'SOLU' ;
 982 :      'FINSI' ;
 983 :    CAQU0=CAQU ;
 984 :    CFIX0= CFIXE ;
 985 : *
 986 :                                                   FIN BLOC2 ;
 987 : *                                                ------------
 988 : *
 989 :    CAQU0=CAQU ;
 990 :    CFIX0= CFIXE ;
 991 :   ITERCUM=ITERCUM+ ITECO ;
 992 :    MESS ' Iterations ' ITECO ITERCUM ;
 993 :   TAQU0=TAQU ;
 994 : *                         Calcul du flux
 995 :    NPAFLUX= NPAFLUX+1 ;
 996 :    FLUPA= FLU01+('HDEB' MODHYB  MASHYB CAQU TAQU  QFACE ) ;
 997 :   'OUBL'  FLU01 ;
 998 :   SI( EXIS TB1 'IDEN' 'IMMO') ;
 999 :       NBIMMO=DIME TB1.IDEN.IMMO ;
1000 :       REPE BOUIMMO NBIMMO ;
1001 :       NUNU= EXTR( TB1.IDEN.IMMO) &BOUIMMO ;
1002 :       NNCH NOM2 NUNU = NOCOMCHI TB1 'NUMCOMP'  NUNU ;
1003 :       FLU03= EXCO NOM2 FLUPA NOM2 ;
1004 :       FLUPA = FLUPA- FLU03 ;
1005 :       FIN BOUIMMO ;
1006 :   FINSI ;
1007 :   FLU01= FLUPA ;
1008 :   SI( NUSOR 'EGA' &BOUTMP ) ;
1009 :      ISOR2=ISOR0+ISOR ;
1010 :      TRANSI. 'TEMPS' . ISOR2 = TMPS ;
1011 :      TRANSI.TOT . ISOR2 = TNC ;
1012 :      TRANSI.AQUE . ISOR2 = CAQU ;
1013 :      TRANSI.FIXE . ISOR2 = CFIXE;
1014 :      TRANSI.'TAQU' . ISOR2 = TAQU;
1015 :      TRANSI.'LOGC' . ISOR2 = CLOGC ;
1016 :      TRANSI . 'FLUX' . ISOR2 = FLUPA / NPAFLUX ;
1017 : *    TRANSI . 'FLU2' . ISOR2 = FLU2 ;
1018 :      'SI' ( 'EXISTE' TRANSI 'PREC' ) ;
1019 :           TRANSI.'PREC' . ISOR2 =  CPRECIP ;
1020 :      'FINSI' ;
1021 :      'SI' ( 'EXISTE' TRANSI 'FION' ) ;
1022 :           TRANSI.'FION' . ISOR2 =  CFIONI ;
1023 :      'FINSI' ;
1024 :      'SI' ( 'EXISTE' TRANSI 'TYP6' ) ;
1025 :           TRANSI.'TYP6' . ISOR2 =  CTYP6 ;
1026 :      'FINSI' ;
1027 :      'SI' ( 'EXISTE' TRANSI 'TYP5' ) ;
1028 :           TRANSI.'TYP5' . ISOR2 =  CTYP5 ;
1029 :      'FINSI' ;
1030 :      'SI' ( 'EXISTE' TRANSI 'TYP3' ) ;
1031 :           TRANSI.'TYP3' . ISOR2 =  CTYP3 ;
1032 :      'FINSI' ;
1033 :      'SI' ( 'EXISTE' TRANSI 'NTY4' ) ;
1034 :           TRANSI.'NTY4' . ISOR2 =   CNTY4 ;
1035 :      'FINSI' ;
1036 :      'SI' ( 'EXISTE' TRANSI 'SURF' ) ;
1037 :           TRANSI.'SURF' . ISOR2 =  CSURF ;
1038 :      'FINSI' ;
1039 :      'SI' ( 'EXISTE' TRANSI 'SOLU' ) ;
1040 :           TRANSI.'SOLU' . ISOR2 =CSOLU ;
1041 :      'FINSI' ;
1042 :  FLU01=FLU00 ;
1043 :  NPAFLUX= 0 ;
1044 :  ISOR=ISOR+1 ;
1045 : 'FINSI'                                                       ;
1046 :  MENAGE ;
1047 :  FIN BOUTMP ;
1048 : *
1049 : 'FINP' TRANSI ;
1050 : 
1051 : 
1052 :  

© Cast3M 2003 - All rights reserved.
Disclaimer