Download solvVF.procedur

Back to the list

   1 : * SOLVVF    PROCEDUR  GOUNAND   10/10/13    21:15:43     6779           
   2 : **********************************************************************
   3 : 'DEBP'  SOLVVF MoDARCY*'MMODEL' ChPSour*'CHPOINT' 
   4 :                  matk/'MATRIK' SMTR*'CHPOINT' cini*'CHPOINT' 
   5 :                  Mctot*'MCHAML' Mdiff*'MCHAML' Difftot*'CHPOINT'
   6 :                  RESID*'CHPOINT' TetaDiff*'FLOTTANT' 
   7 :                  QFACE/'CHPOINT' nomespec*'LISTMOTS'
   8 :                  nbespece*'ENTIER' nbsource*'ENTIER' TABRES*'TABLE' 
   9 :                  CHCLIM*'TABLE' NOUVMAT*'LOGIQUE' LCONV*'LOGIQUE'
  10 :                  CHTR*'LOGIQUE' ;
  11 : *  |-----------------------------------------------------------------|
  12 : *  | Phrase d'appel (en GIBIANE)                                     |
  13 : *  |-----------------------------------------------------------------|
  14 : *  |                                                                 |
  15 : *                matsor TABRES cfin cflu cfluco = SOLVVF MoDARCY
  16 : *                ChPSour Mattt Smtr Cini Mctot Mdiff Difftot
  17 : *                Qface nomespec nbespece
  18 : *                nbsource OPTRES CHCLIM  Nouvmat            
  19 : *  |                                                                 |
  20 : *  |                                                                 |
  21 : *  |-----------------------------------------------------------------|
  22 : *  | Généralités : MATTVF construit la matrice de discrétisation   |
  23 : *  |               du problème de transport convection-diffusion pour|
  24 : *  |               le premier pas de tps d'un algorithme transitoire.|
  25 : *  |               Le second membre et les Conditions limites de flux|
  26 : *  |               sont pris en compte.                              |
  27 : *  |            RESTE TCINI, DECENTR et TERME LIN                    |
  28 : *  |-----------------------------------------------------------------|
  29 : *  |                                                                 |
  30 : *  |-----------------------------------------------------------------|
  31 : *  |                         ENTREES                                 |
  32 : *  |-----------------------------------------------------------------|
  33 : *  | MoDARCY  : modele Darcy.                                        |
  34 : *  |                                                                 |
  35 : *  | ChPSour  : Champ par points des sources volumiques par unité de |
  36 : *  |            temps (support maillage centre). Composante associées|
  37 : *  |            aux especes                                          |
  38 : *  |                                                                 |
  39 : *  | Mattt : matrice discretisation  VF                              |
  40 : *  |                                                                 |
  41 : *  | SMTr     : second membre sur les traces                         |
  42 : *  |                                                                 |
  43 : *  | nomespec : liste des noms de composante des espèces dans Cini   |
  44 : *  |                                                                 |
  45 : *  | nbespece : nombre de composante de Cini, soit nombre d'especes  |
  46 : *  |                                                                 |
  47 : *  | nbsource : nombre de composantes du terme source qd X especes   |
  48 : *  |                                                                 |
  49 : *  | TABRES   : Table complète définissant les options de résolution |    
  50 : *  |            pour 'KRES'.                                         |
  51 : *  |                                                                 |
  52 : *  |                                                                 |
  53 : *  | CHCLIM   : table d'indice 'NEUMANN' et 'DIRICHLET' contenant les|
  54 : *  |            Chpoint à n composantes contenant les conditions aux |
  55 : *  |            limites de Neumann et Dirichlet par espece.          |
  56 : *
  57 : *  | NOUVMAT   : Logique affecté à VRAI lorsque que Matot vient
  58 : *  |             d'etre calculée
  59 : *  |                                                                 |
  60 : *  |-----------------------------------------------------------------|
  61 : *  |                         SORTIES                                 |
  62 : *  |-----------------------------------------------------------------|
  63 : 
  64 : *  | Matk     : matrice globale VF   
  65 : *  |                                                                 |
  66 : *  | cfin     : concentration apres calcul pour toutes les especes   |
  67 : *  |                                                                 |
  68 : *  | TABSORT  : Table complète définissant les options de résolution |    
  69 : *  |            pour 'KRES'.                                         |
  70 : *  |                                                                 |
  71 : *  |-----------------------------------------------------------------|
  72 : *  |                  VARIABLES INTERNES                             |
  73 : *  |-----------------------------------------------------------------|
  74 : *  |                                                                 |
  75 : *  |                                                                 |
  76 : *  | CChpsour : Source aux centre (une composante)                   |
  77 : *  |                                                                 |
  78 : *  | CCfin    : concentration aux centres (une composante)           |
  79 : *  |                                                                 |
  80 : *  | SSMTr    : second membre sur les traces pour une espèce         |
  81 : *  |                                                                 |
  82 : *  | Nouvmatr : Logique, si VRAI on transforme la matrice rigidité   |
  83 : *  |            en matrik                                            |
  84 : *  |                                                                 |
  85 : *  | DIRCLI   : logique valant VRAI si conditions aux                |
  86 : *  |            limites de Dirichlet                                 | 
  87 : *  |                                                                 |
  88 : *  | CLDIRI   : Chpoint à n composantes contenant les conditions aux |
  89 : *  |            limites de Dirichlet par espece.                     |
  90 : *  |            il faudra en faire un nuage si supports géométriques |
  91 : *  |            différents par espece. OPTIONNEL                     |
  92 : *  |                                                                 |
  93 : **********************************************************************
  94 : 
  95 : 
  96 : 
  97 : *---------------------------------------------------------------------
  98 : *---------- On récupere les conditions limites      ------------------
  99 : *---------------------------------------------------------------------
 100 : 
 101 : 
 102 : 
 103 : *
 104 : * On recopie la table de résolution TABRES dans TABSORT
 105 : * Attention si une valeur contenue dans la table a le
 106 : * debut d'un nom d'opérateur de castem, il y a probleme
 107 : * d'ou démarrage apres l'indice soustype de valeur
 108 : * METHINV, identique à opérateur METHode.
 109 : *
 110 : 
 111 : FLUNEU = FAUX;
 112 : DIRCLI = FAUX;
 113 : FLUTOT = FAUX;
 114 : FLUMIX = FAUX;
 115 : CLFLUX MA = 'KOPS' 'MATRIK';
 116 : CLDIRI MA = 'KOPS' 'MATRIK';
 117 : CLFLUT MA = 'KOPS' 'MATRIK';
 118 : EXFLU = CLFLUX;
 119 : EXDIR = CLDIRI;
 120 : EXFLUT = CLFLUT;
 121 :  
 122 : * Neumann
 123 : 'SI' ('EXISTE' CHCLIM 'NEUMANN') ;
 124 :    CLFLUX = CHCLIM . 'NEUMANN';
 125 :    FLUNEU = VRAI;
 126 : 'FINSI';
 127 :  
 128 : 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ;
 129 :    CLDIRI = CHCLIM . 'DIRICHLET';
 130 :    DIRCLI = VRAI;
 131 : 'FINSI';
 132 :  
 133 : 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ;
 134 :    CLFLT = CHCLIM . 'FLUTOTAL';
 135 :    FLUTOT = VRAI;
 136 : 'FINSI';
 137 : 
 138 : 'SI' ('EXISTE' CHCLIM 'FLUMIXTE')                                     ;
 139 : *  comme on impose A Dgrad C + B C = flumix, on le traite sous
 140 : * la forme D grad C + (B/A) C = flumix/A plus naturelle en EFMH car
 141 : * D grad C est le flux diffusif
 142 :    COFA   = -1.D0 * CHCLIM . 'FLUMIXTE' . 'COEFA'                     ;
 143 :    CLFLUX3 = CHCLIM . 'FLUMIXTE' . 'VAL' '/' COFA                     ;
 144 :    CLFLUX3 = CHAN 'ATTRIBUT' CLFLUX3 NATURE DISCRET                   ;
 145 :    FLUMIX = VRAI                                                      ;
 146 :    mayage = 'EXTRAIRE' CHCLIM . 'FLUMIXTE' . 'VAL' maillage           ;
 147 :    cofb   = (doma modarcy SURFACE) * CHCLIM . 'FLUMIXTE' . 'COEFB'    ;
 148 : *   cofb   =  CHCLIM . 'FLUMIXTE' . 'COEFB'    ;
 149 :    cofa   = 'REDU' (CHCLIM . 'FLUMIXTE' . 'COEFA')  mayage            ;
 150 :    cofb   = 'REDU' cofb  mayage                                       ;
 151 :    coefm  = (1.D0 * cofb) '/' cofa                                   ;
 152 :    CLFLUX3   = 'REDU' CLFLUX3  mayage                                 ;
 153 :    'OUBLIER' cofa                                                     ;
 154 :    'OUBLIER' cofb                                                     ;
 155 : 'FINSI'                                                               ;
 156 : 
 157 : dumm = 'INDEX' TABRES                                                  ;
 158 : TABSORT = 'TABLE' METHINV                                              ;
 159 : 'REPETER' bou1 (('DIME' dumm) '-' 1)                                   ;
 160 :    TABSORT . (mot dumm . (&bou1 '+' 1)) = TABRES . (mot dumm . (&bou1
 161 :    '+' 1))                                                             ;
 162 : 'FIN' bou1                                                             ;
 163 : 
 164 : 
 165 : 'SI' (NOUVMAT)                                                        ;
 166 :    TABSORT . 'MATASS' = Matk                                          ;
 167 :    TABSORT . 'MAPREC' = Matk                                          ;
 168 : 'FINSI'                                                               ;
 169 : 
 170 : 
 171 : 
 172 : *---------------------------------------------------------------------
 173 : *-------------- RESOLUTION  -----------------
 174 : *---------------------------------------------------------------------
 175 : * boucle sur les espèces.
 176 :   SURF = 'DOMA' MoDarcy 'SURFACE'                                     ;
 177 : 'REPETER' bloc1 nbespece                                              ;
 178 : 
 179 :    espc =  ('EXTRAIRE' &bloc1 nomespec)                               ;
 180 : 
 181 : 
 182 : *  préparation solution initiale - ie trace initiale
 183 :    TABSORT . 'XINIT' = 'NOMC' 'RETN' 
 184 :              ('EXCO' espc Cini)                                       ;
 185 :    hh = TABSORT . 'XINIT'                                             ; 
 186 : 
 187 : 
 188 : 
 189 : *  préparation du terme source
 190 :    'SI' (nbsource 'EGA' 1)                                            ;
 191 :       CChpsour = 'NOMC' 'RETN' Chpsour                                ;
 192 :    'SINON'                                                            ;
 193 :       CChpsour = 'NOMC' 'RETN' ('EXCO' espc
 194 :                                Chpsour)                               ;
 195 :    'FINSI'                                                            ;
 196 : 
 197 : *  préparation second membre
 198 :    'SI' ('NON' CHTR) ;
 199 : * VERRUE
 200 :       Smaux = ((1.D0 - Tetadiff)*RESID) + (Tetadiff*Smtr) ;
 201 :       Smaux = Smtr;  
 202 :       SSmtr = 'NOMC' 'RETN' ('EXCO' espc Smaux) 
 203 :               '+'   CChpsour ;
 204 :     'SINON' ;
 205 :       SSmtr = 'NOMC' 'RETN' ('EXCO' espc Smtr) 
 206 :               '+'   CChpsour ;
 207 :     'FINSI' ;
 208 : 
 209 : 
 210 : *LIST CCHPsour;
 211 : *   Calcul du résidu
 212 : 
 213 :    res = KRES matk 'TYPI' TABSORT
 214 :             'SMBR' ('NOMC' 'RETN' SSMTr)
 215 :             'IMPR' 0                                                  ;
 216 :             
 217 : 
 218 :    TABSORT . 'MATASS' = matk                                          ;
 219 :    TABSORT . 'MAPREC' = matk                                          ;
 220 :    
 221 :    CCfin = 'CHAN' 'ATTRIBUT' ( hh '+' ('EXCO' res 'RETN' 'RETN') )
 222 :             'NATU' 'DISCRET' ;
 223 :             
 224 :    HHS = 'NOMC' CCfin 'SCAL' ;
 225 :                                            
 226 :      'SI' (FLUNEU)                                                   ;
 227 :              EXFLU =  
 228 :               ('NOMC' 'FLUX' ('EXCO' espc
 229 :               CLFLUX))                                                ;
 230 :      'FINSI'                                                          ;
 231 :      'SI' (DIRCLI) ;
 232 :              EXDIR =  
 233 :              ('NOMC' 'SCAL' ('EXCO' espc
 234 :              CLDIRI))                                                 ;
 235 :      'FINSI'                                                          ;
 236 : 
 237 :      'SI' (FLUTOT) ;
 238 :                EXFLUT =
 239 :                ('NOMC' 'FLUX' ('EXCO' espc
 240 :                CLFLT ))                                               ;
 241 :                QLIM = NOMC(EXFLUT) 'FLUX'                             ;
 242 :                SUP = 'EXTR' EXFLUT  'MAIL'                            ;
 243 :                XPAR1 = 1.D0 + (0.0*CLFLT)                             ;
 244 :                XPAR1  = 'NOMC' XPAR1 'PAR1'                           ;
 245 :                'SI' LCONV                                             ;
 246 :                USCNR = 'REDU' QFACE SUP                               ;
 247 :                MUSCN = USCNR*(-1.D0)                                  ;
 248 :                'SINON'                                                ;
 249 :                 MUSCN =  (0.D0*CLFLT)                                 ;
 250 :                'FINSI'                                                ;
 251 :                XPAR2  = 'NOMC' MUSCN 'PAR2'                           ;
 252 :                EXFLUT = XPAR1 + XPAR2 + QLIM                          ;
 253 :               EXFLUT = CHAN 'ATTRIBUT' EXFLUT NATURE DISCRET         ;
 254 :       'FINSI'                                                         ;
 255 : 
 256 :        'SI' (FLUMIX) ;
 257 :                EXFLUM =
 258 :                ('NOMC' 'FLUX' ('EXCO' espc
 259 :                CLFLUX3 ))                                             ;
 260 :                QLIM = NOMC(EXFLUM) 'FLUX'                             ;
 261 :                SUP = 'EXTR' EXFLUM  'MAIL'                            ;
 262 :                XPAR1 = 1.D0 + (0.0*CLFLUX3)                           ;
 263 :                XPAR1  = 'NOMC' XPAR1 'PAR1'                           ;
 264 :                MUSCN = coefm                                          ;
 265 :                XPAR2  = 'NOMC' MUSCN 'PAR2'                           ;
 266 :                EXFLUM = XPAR1 + XPAR2 + QLIM                          ;
 267 :               EXFLUM = CHAN 'ATTRIBUT' EXFLUM NATURE DISCRET         ;
 268 :                EXFLUT = EXFLUT 'ET' EXFLUM                            ;
 269 :        'FINSI'                                                        ;
 270 : 
 271 :        
 272 :       'SI' ('NON' CHTR) ;
 273 : * On reconstruit le flux diffusif aux faces
 274 :          CCFLU  = 'PENT'  MoDARCY 'FACE' 'MPFA'
 275 :              HHS 'DISPDIF' difftot
 276 :             'TIMP' EXDIR 'QIMP' EXFLU  'MIXT' EXFLUT 
 277 :             'UPWICENT' QFace 'GRADGEO' Mdiff      ;
 278 :          CCFLU = (-1.D0)*CCFLU*SURF;
 279 :          CCFLU = 'CHAN' 'ATTRIBUT' CCFLU 'NATU' 'DISCRET' ;
 280 :          
 281 : * On reconstruit le flux convectif aux faces  A PATIR DU FLUX TOTAL 
 282 :          CCFLUTO  = 'PENT'  MoDARCY 'FACE' 'MPFA'
 283 :               HHS 'DISPDIF' difftot
 284 :             'TIMP' EXDIR 'QIMP' EXFLU  'MIXT' EXFLUT 'UPWICENT' QFace 
 285 :              'GRADGEO' Mctot      ;
 286 :             
 287 : * CALCUL DU RESIDU POUR LA PAS DE TEMPS SUIVANT 
 288 :           JACO CHPRES DT = 'LAPN' 'VF' 'CLAUDEIS'  'EXPL'
 289 :                    MoDARCY HHS CCFLUTO ;  
 290 : 
 291 :          'SI' ((&bloc1) 'EGA' 1) ;
 292 :             SSMTr = 'NOMC' espc CHPRES ;
 293 :             RESI =  SSMTr ;
 294 :          'SINON' ;
 295 :             CHPRES = 'NOMC' espc ('COPIER' CHPRES) ;
 296 :             RESI = CHPRES 'ET'  RESI;
 297 :          'FINSI' ;
 298 : 
 299 :          CCFLUTO = (-1.D0)*CCFLUTO*SURF;
 300 :          CCFLUTO = 'CHAN' 'ATTRIBUT' CCFLUTO 'NATU' 'DISCRET' ;
 301 :          CCFLUCO = CCFLUTO - CCFLU; 
 302 :       'SINON' ;
 303 :          CCFLU = 0.*SURF ;
 304 :          CCFLUCO = 0.*SURF ;
 305 : * PHM : ATTENTION : est ce ok de mettre cela ?      
 306 :          RESI = RESID  ;
 307 :       'FINSI'   ;
 308 :  
 309 :        
 310 : * On reconstitue les champoints à plusieurs composante
 311 : 
 312 :   'SI' (&bloc1 'EGA' 1)                                               ;
 313 :      CCfin  = 'NOMC' espc  CCfin              ;
 314 :      CCflu  = 'NOMC' espc CCFLU               ;
 315 :      CCFLUCO = 'NOMC' espc CCFLUCO
 316 :                NATU DISCRET           ;
 317 :      cfin   = ccfin                                                   ;
 318 :      cflu   = ccflu                                                   ;
 319 :      cfluco  = ccfluco                                                ;
 320 :    'SINON'                                                            ;
 321 :      CCfin  = 'NOMC' espc  ('COPIER' CCfin)   
 322 :                NATU DISCRET                                           ;
 323 :      ccflu  = 'NOMC' espc ('COPIER' CCflu)    
 324 :                NATU DISCRET                                           ;
 325 :      CCFLUCO = 'NOMC' espc ('COPIER' CCFLUCO) 
 326 :                NATU DISCRET                                           ;
 327 :      cfin   = cfin 'ET' ccfin                                         ;
 328 :      cflu   = cflu 'ET' ccflu                                         ;
 329 :      cfluco = cfluco 'ET' ccfluco                                     ;
 330 :    'FINSI'                                                            ;
 331 : 
 332 : 'FIN' bloc1                                                           ;   
 333 : 
 334 : 'FINP' matk TABSORT cfin cflu cfluco RESI                             ;
 335 : 
 336 : 
 337 : 
 338 : 
 339 : 
 340 :  
 341 :  

© Cast3M 2003 - All rights reserved.
Disclaimer