* TRANGEOL PROCEDUR GBM 07/08/08 21:15:06 5841 *--------------------------------------------------------------------- *------------------- Gestion de la réinitialisation ------------------ *--------------------------------------------------------------------- * on reinitialise les calculs en l'absence de la table trans2 * qui contient tous les objets de préconditionnement, ou si * l'indice INITIALI dans trans1 est VRAI. * Il est mis à FAUX à la fin de la procédure. REINIT = VRAI ; 'SI' ('EXISTE' trans1 'INITIALI') ; REINIT = trans1 . 'INITIALI' ; 'FINSI' ; * En l'absence de table de préconditionnement * Il faut reinitialiser les calculs. On écrase la valeur donnée * éventuellement par l'indice INITIALI. 'SI' ('NON' (EXISTE trans2)) ; REINIT = VRAI ; 'FINSI' ; CHTR = FAUX ; 'SI' ('EXISTE' trans1 'CHIMIETRANSPORT') ; CHTR = trans1 . 'CHIMIETRANSPORT' ; 'FINSI' ; *--------------------------------------------------------------------- *------------------- Gestion des entrées obligatoires ---------------- *--------------------------------------------------------------------- Cini = TRANS1 . 'CONCENTRATION' ; discreti = TRANS1 . 'TYPDISCRETISATION' ; TetaDiff = TRANS1 . 'THETA_DIFFUSION' ; TetaConv = TRANS1 . 'THETA_CONVECTION' ; DECENTR = TRANS1 . 'DECENTREMENT' ; DeltaT = TRANS1 . 'DELTAT' ; MateDiff = TRANS1 . 'DIFFUSIVITE' ; Porosite = TRANS1 . 'POROSITE' ; tetalin = tetadiff ; *--------------------------------------------------------------------- *------------------- Gestion des entrées optionnelles ---------------- *--------------------------------------------------------------------- ************* relcalcul général des discrétisations *********** 'SI' ('EXISTE' TRANS1 'RECALCUL') ; recalc = TRANS1 . 'RECALCUL' ; 'SI' (recalc) ; TABMODI = TABLE ; TABMODI . 'POROSITE' = VRAI ; TABMODI . 'CONVECTI' = VRAI ; TABMODI . 'DELTAT' = VRAI ; TABMODI . 'COEF_LIN' = VRAI ; TABMODI . 'DIFFUSIV' = VRAI ; 'SINON' ; TABMODI = TABLE ; TABMODI . 'POROSITE' = FAUX ; TABMODI . 'CONVECTI' = FAUX ; TABMODI . 'DELTAT' = FAUX ; TABMODI . 'COEF_LIN' = FAUX ; TABMODI . 'DIFFUSIV' = FAUX ; 'FINSI' ; 'SINON' ; 'SI' ('EXISTE' TRANS1 'MODIFICATI') ; * table plus détaillée de modification, n'est pas lue si RECALCUL * est donné TABMODI = TRANS1 . 'MODIFICATI' ; 'SINON' ; TABMODI = TABLE ; TABMODI . 'POROSITE' = FAUX ; TABMODI . 'CONVECTI' = FAUX ; TABMODI . 'DELTAT' = FAUX ; TABMODI . 'COEF_LIN' = FAUX ; TABMODI . 'DIFFUSIV' = FAUX ; 'FINSI' ; 'FINSI' ; **************** solveur **************** 'SI' (REINIT) ; * IL faut initialiser la matrice des options de résolution 'SI' ('EXISTE' TRANS1 'METHINV') ; dumm = 'INDEX' (TRANS1 . 'METHINV') ; OPTRES = 'TABLE' METHINV ; 'FIN' bou1 ; 'SINON' ; OPTRES = TABLE 'METHINV' ; 'FINSI' ; * On surcharges les options de résolution 'SI' ('EXISTE' TRANS1 'SOLVEUR') ; OPTRES . 'TYPINV' = TRANS1 . 'SOLVEUR' ; 'FINSI' ; 'SI' ('EXISTE' TRANS1 'PRECONDITIONNEUR') ; OPTRES . 'PRECOND' = TRANS1 . 'PRECONDITIONNEUR' ; 'FINSI' ; 'SI' ('EXISTE' TRANS1 'MAXITER') ; OPTRES . 'NITMAX' = TRANS1 . 'MAXITER' ; 'FINSI' ; 'SI' ('EXISTE' TRANS1 'EPSILON') ; OPTRES . 'RESID' = TRANS1 . 'EPSILON' ; 'FINSI' ; 'SINON' ; 'SI' ('EXISTE' TRANS2) ; * obligatoires OPTRES = TRANS2 . 'METHINV' ; 'FINSI' ; 'FINSI' ; * On stocke le peclet dans optresol , a changer + tard SI (EXISTE TRANS1 'NUM_PECLET') ; OPTRES . 'PECLET' = TRANS1 . 'NUM_PECLET' ; SINON ; OPTRES . 'PECLET' = 2.D0 ; FINSI ; *************** source ****************** 'SI' ('EXISTE' TRANS1 'SOURCE') ; chpsour = 'COPIER' TRANS1 . 'SOURCE' ; 'SINON' ; * source mise à 0 sur le domaine avec les noms de composantes de * l'inconnue cini. Il vaut mieux faire cette opération en amont * et transmettre un terme source nul à l'indice SOURCE. Moins cher. ChPSour = 0.D0 * cini ; 'FINSI' ; ************** convection *************** 'SI' ('EXISTE' TRANS1 'CONVECTION') ; vitesse = TRANS1 . 'CONVECTION' ; LCONV = VRAI ; * Calcul du flux de vitesse pour les EFMH 'SI' (('NON' REINIT) 'ET' ('EGA' discreti 'EFMH')) ; * utilisation des préconditionnements 'SI' ('EXISTE' TRANS2) ; * On cherche l'existance d'un préconditionnement sur le flux * convectif 'SI' ('EXISTE' TRANS2 'DEBITFACE') ; QFACE = TRANS2 . 'DEBITFACE' ; 'SINON' ; * Le préconditionnement est absent. Cela peut être dû à * un calcul où l'on fait apparaître pour la première fois * une vitesse après plusieurs appels à transgeol * On calcule le flux 'DETRUIT' QFACE ; 'DETRUIT' QFACE1 ; 'FINSI' ; 'SINON' ; 'DETRUIT' QFACE ; 'DETRUIT' QFACE1 ; 'FINSI' ; 'FINSI' ; 'SI' (('NON' REINIT) 'ET' ('EGA' discreti 'VF')) ; * utilisation des préconditionnements 'SI' ('EXISTE' TRANS2) ; * On cherche l'existance d'un préconditionnement sur le flux * convectif 'SI' ('EXISTE' TRANS2 'DEBITFACE') ; QFACE = TRANS2 . 'DEBITFACE' ; 'SINON' ; * Le préconditionnement est absent. Cela peut être dû à * un calcul où l'on fait apparaître pour la première fois * une vitesse après plusieurs appels à transgeol * On calcule le flux QFACE = vitesse ; 'DETRUIT' QFACE1 ; 'FINSI' ; 'SINON' ; QFACE = vitesse ; 'DETRUIT' QFACE1 ; 'FINSI' ; 'FINSI' ; 'SI' (REINIT 'ET' ('EGA' discreti 'EFMH')) ; * réinitialisation, cela signifie possibilité d'une nouvelle vitesse 'DETRUIT' QFACE ; 'DETRUIT' QFACE1 ; 'FINSI' ; 'SI' (REINIT 'ET' ('EGA' discreti 'VF')) ; * réinitialisation, cela signifie possibilité d'une nouvelle vitesse QFACE = vitesse ; 'DETRUIT' QFACE1 ; 'FINSI' ; 'SINON' ; LCONV = FAUX ; 'FINSI' ; * Si il y a une convection, on attend également une * vitesse aux centres pour le calcul de la dispersivité ou du decentrt LDISPERS = FAUX ; 'SI' (LCONV) ; 'SI' (DECENTR) ; vitelem = TRANS1 . 'VITELEM' ; 'FINSI' ; 'SI' ('EXISTE' TRANS1 'ALPHAL') ; DISPL = TRANS1 . 'ALPHAL' ; DISPT = TRANS1 . 'ALPHAT' ; vitelem = TRANS1 . 'VITELEM' ; LDISPERS = VRAI ; 'FINSI' ; 'FINSI' ; * On charge les conditions aux limites CHCLIM = TRANS1 . 'CLIMITES' ; *--------------------------------------------------------------------- *-------- On teste la nécessité de faire un calcul ------------------- *--------------------------------------------------------------------- ************* OPtion d'abandon des calculs ********************* 'SI' ('EXISTE' TRANS1 'ABANDON') ; * si limcalc VRAI on teste si la concentration, les sources et flux * * deltat sont inférieurs à 10**-15. Si oui on ne calcule plus * les opérateurs de convections diffusion. Les résultats sont donc * éventuellement erronés (mais là ou les valeurs sont sans intéret) * âr contre on conserve la masse (bien que négligeable). Ce point * est peut etre inutile. limcalc = TRANS1 . 'ABANDON' ; seuilc = TRANS1 . 'SEUILCALC' ; SINON ; limcalc = FAUX ; FINSI ; SIMPLIF = FAUX ; * modif depuis le dernier appel ilyamod = TABMODI . 'POROSITE' 'OU' TABMODI . 'CONVECTI' 'OU' TABMODI . 'DELTAT' 'OU' TABMODI . 'COEF_LIN' 'OU' TABMODI . 'DIFFUSIV' ; * simplification uniquement si pas de modif depuis dernier appel 'SI' (limcalc 'ET' ('NON' ilyamod)) ; * on souhaite faire un calcul avec éventuelle simplification SIMPLIF = VRAI ; lim1 = 'MAXIMUM' ('ABS' cini) ; 'SI' (lim1 < seuilc) ; * le terme source n'engendre pas de variations de concentration > 1.D-16 * par pas de temps VOL1 = VOLL '/' deltat ; 'DETRUIT' VOLL ; limmm = 'ABS' VOL2 ; 'DETRUIT' VOL2 ; lim1 = 'MAXIMUM' limmm ; 'DETRUIT' limmm ; VOL2 = 'MINIMUM' VOL1 ; 'DETRUIT' VOL1 ; * 'MESSAGE' 'maxsour' lim1 ; 'SI' (lim1 < (seuilc / 10.D0)) ; * idem flux diffusif on le teste là car on ne va pas plus loin * si le test précédent est faux 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; CLFLUX = CHCLIM . 'NEUMANN' ; limm = clflux '/' VOL2 ; limmm = 'ABS' limm ; 'DETRUIT' limm ; lim1 = 'MAXIMUM' limmm ; 'DETRUIT' limmm ; * 'MESSAGE' 'maxfluneum' lim1 ; 'SI' (lim1 > (seuilc / 10.D0)) ; SIMPLIF = FAUX ; 'FINSI' ; 'FINSI' ; 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; CLFLUX = CHCLIM . 'FLUTOTAL' ; limm = clflux '/' VOL2 ; limmm = 'ABS' limm ; 'DETRUIT' limm ; lim1 = 'MAXIMUM' limmm ; 'DETRUIT' limmm ; * 'MESSAGE' 'maxflutot' lim1 ; 'SI' (lim1 > (seuilc / 10.D0)) ; SIMPLIF = FAUX ; 'FINSI' ; 'FINSI' ; 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ; limm = clflux '/' VOL2 ; limmm = 'ABS' limm ; 'DETRUIT' limm ; lim1 = 'MAXIMUM' limmm ; 'DETRUIT' limmm ; * 'MESSAGE' 'maxflutot' lim1 ; 'SI' (lim1 > (seuilc / 10.D0)) ; SIMPLIF = FAUX ; 'FINSI' ; 'FINSI' ; 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ; lim1 = 'MAXIMUM' ('ABS' CHCLIM . 'DIRICHLET') ; 'SI' (lim1 > (seuilc / 10.D0)) ; SIMPLIF = FAUX ; 'FINSI' ; 'FINSI' ; 'SINON' ; SIMPLIF = FAUX ; 'FINSI' ; 'SINON' ; SIMPLIF = FAUX ; 'FINSI' ; 'FINSI' ; * on ne procede pas aux simplification en cas de reinitialisation * car les objets preconditionnés ne seraient pas crées SIMPLIF = SIMPLIF 'ET' ('NON' reinit) ; *'MESSAGE' 'SIMPLIF'; list simplif; * Calcul simplifié - on sort 0 pour l'instant 'SI' (SIMPLIF) ; cfin = 0.D0 * cini ; 'SI' (ncompo > 1) ; repe blocc (ncompo-1) ; (&blocc + 1)) 0.D0 ; fin blocc ; 'FINSI' ; cfluco = cflu ; 'SINON' ; *--------------------------------------------------------------------- *-------------- Gestion des entrées PRECONDITIONNEMENT --------------- *--------------------------------------------------------------------- * * Lecture des indices de trans2 - exceptés debitface et solveur * 'SI' ('NON' REINIT) ; 'SI' ('EXISTE' TRANS2) ; * obligatoires mattt = TRANS2 . 'MATRITOTAL' ; nomespec = TRANS2 . 'NOM_ESPECE' ; nbespece = TRANS2 . 'NB_ESPECES' ; nbsource = TRANS2 . 'NB_SOURCES' ; Diffdisp = TRANS2 . 'DIFFDISP' ; * optionnel EFMH dep 'SI' ('EGA' discreti 'EFMH') ; TbDarTra = TRANS2 . 'TABDARCYTR' ; MatMaEFM = TRANS2 . 'MATMASEFMH' ; Tcini = TRANS2 . 'TRACE_CONC' ; 'FINSI' ; 'SI' ('EGA' discreti 'VF') ; Mctot = TRANS2 . 'COEFTOT' ; Mdiff = TRANS2 . 'COEFDIF' ; Matot = TRANS2 . 'MATDIS' ; Mpor = TRANS2 . 'MPOROS' ; RESIP = TRANS2 . 'RESIDU' ; 'FINSI' ; 'FINSI' ; 'FINSI' ; ******************************************************************** ************** traitement chargements VF *************************** ******************************************************************** *************** source ****************** 'SI' ('EXISTE' TRANS1 'SOURCE') ; * 'MESSAGE' 'maxisour' ('MAXIMUM' ('ABS' TRANS1 . 'SOURCE')) ; 'SI' ('EGA' discreti 'VF') ; ('EXTRAIRE' chpsour MAILLAGE)) ; 'DETRUIT' zozo ; zaza = 'COPIER' chpsour ; 'DETRUIT' chpsour ; ChPSour = zaza '/' zeze ; 'DETRUIT' zaza ; 'DETRUIT' zeze ; 'FINSI' ; 'FINSI' ; ************ Conditions limites ************************************** 'SI' ('EGA' discreti 'VF') ; * flux diffusif 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; CLFLUX = CHCLIM . 'NEUMANN' ; ('EXTRAIRE' CLFLUX MAILLAGE) ; 'DETRUIT' zozo ; CLFLUX = CLFLUX '/' zuzu ; 'DETRUIT' zuzu ; 'DETRUIT' (CHCLIM . 'NEUMANN') ; CHCLIM . 'NEUMANN' = CLFLUX ; 'FINSI' ; * flux mixte 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ; ('EXTRAIRE' CLFLUX MAILLAGE) ; 'DETRUIT' zozo ; CLFLUX = CLFLUX '/' zuzu ; 'DETRUIT' zuzu ; 'DETRUIT' (CHCLIM . 'FLUMIXTE' . 'VAL') ; CHCLIM . 'FLUMIXTE' . 'VAL' = CLFLUX ; 'FINSI' ; * Flux total 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; CLFLUX = CHCLIM . 'FLUTOTAL' ; * MESS 'CLFLUX' ; LIST CLFLUX; ('EXTRAIRE' CLFLUX MAILLAGE) ; 'DETRUIT' zozo ; CLFLUX = CLFLUX '/' zuzu ; 'DETRUIT' zuzu ; * VERRUE 'DETRUIT' (CHCLIM . 'FLUTOTAL') ; CHCLIM . 'FLUTOTAL' = CLFLUX ; * MESS 'CLFLUXTRA' ; LIST CLFLUX; 'FINSI' ; 'FINSI' ; * 'MESSAGE' 'DELTAT' deltat; * 'MESSAGE' 'chpsour' ('MAXIMUM' ('ABS' chpsour)); *--------------------------------------------------------------------- *-------- On initialise les calculs lors d'un premier appel ---------- *--------------------------------------------------------------------- 'SI' ('EGA' discreti 'EFMH') ; 'SI' (REINIT) ; * EFMH * On appelle la procédure d'initialisation 'SI' (LCONV) ; * présence de convection * virer le TABMODI DE SORTIE inutile ??????????????? 'SI' ('NON' LDISPERS) ; * pas de dispersivité 'SI' (DECENTR) ; smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv TetaLin QFACE vitelem LMLump DECENTR CHCLIM OPTRES ; 'SINON' ; smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv TetaLin QFACE LMLump DECENTR CHCLIM OPTRES ; 'FINSI' ; 'SINON' ; * présence de dispersivité smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv TetaLin QFACE vitelem displ dispt LMLump DECENTR CHCLIM OPTRES; 'FINSI' ; 'SINON' ; smtr mattt TbDarTra MatMaEFM nomespec nbespece nbsource Diffdisp Tcini OPTRES TABMODI = INITEFMH MoDARCY Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv TetaLin LMLump DECENTR CHCLIM OPTRES ; 'FINSI' ; *--------------------------------------------------------------------- *---------- On update les calculs lors d'appels suivants ------------- *--------------------------------------------------------------------- 'SINON' ; * GBM il faudra prendre en compte conv variable et sortir Diffdisp * On appelle la procédure d'update 'SI' (LCONV) ; SMTr Mattt TbDarTra MatMaEFM = UPDAEFMH * MoDARCY Porosite MateDiff difftot ChPSour MoDARCY Porosite Matediff diffdisp ChPSour cini tcini deltat Qface nomespec nbespece nbsource LMLump DECENTR MatMaEFM mattt tbdartra TABMODI CHCLIM ; 'SINON' ; SMTr Mattt TbDarTra MatMaEFM = UPDAEFMH * MoDARCY Porosite MateDiff difftot ChPSour MoDARCY Porosite Matediff diffdisp ChPSour cini tcini deltat nomespec nbespece nbsource LMLump DECENTR MatMaEFM mattt tbdartra TABMODI CHCLIM ; 'FINSI' ; 'FINSI' ; *--------------------------------------------------------------------- *------------- On appelle la procédure de résolution ---------------- *--------------------------------------------------------------------- 'SI' (LCONV) ; matsor TABRES cfin tcfin cflu cfluco = SOLVEFMH MoDARCY ChPSour MatMaEFM Mattt SMTR Tcini cini Qface nomespec nbespece nbsource OPTRES tbdartra CHCLIM ; 'SINON' ; matsor TABRES cfin tcfin cflu cfluco = SOLVEFMH MoDARCY ChPSour MatMaEFM Mattt SMTR Tcini cini nomespec nbespece nbsource OPTRES tbdartra CHCLIM ; 'FINSI' ; 'SINON' ; 'SI' ('EGA' discreti 'VF') ; 'SI' ('NON' LCONV) ; 'FINSI' ; 'SI' (REINIT) ; 'SI' ('NON' LDISPERS) ; SMTr Mattt JACO Mpor Mctot Mdiff diffdisp difftot nomespec nbespece nbsource OPTRES TABMODI Nouvmat = INITVF MoDARCY Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv TetaLin QFACE CHCLIM OPTRES LCONV ; 'SINON' ; SMtr Mattt JACO Mpor Mctot Mdiff diffdisp difftot nomespec nbespece nbsource OPTRES TABMODI Nouvmat = INITVF MoDARCY Porosite MateDiff ChPSour DeltaT Cini TetaDiff TetaConv TetaLin QFACE vitelem displ dispt CHCLIM OPTRES LCONV ; 'FINSI' ; * RESIDU INTERVENANT POUR ORDRE 2 ENTEMPS RESIP = SMtr ; *--------------------------------------------------------------------- *---------- On update les calculs lors d'appels suivants ------------- *--------------------------------------------------------------------- 'SINON' ; SMTr Mattt Difftot Mctot Mdiff Nouvmat = UPDAVF MoDARCY Porosite Matediff Diffdisp ChPSour DeltaT Cini TetaDiff TetaConv Qface nomespec nbespece nbsource Mattt Jaco Mctot Mdiff Mpor TABMODI CHCLIM LCONV ; 'FINSI' ; *--------------------------------------------------------------------- *------------- On appelle la procédure de résolution ---------------- *--------------------------------------------------------------------- ChPSour Mattt Smtr Cini Mctot Mdiff Difftot RESIP Tetadiff Qface nomespec nbespece nbsource OPTRES CHCLIM Nouvmat LCONV CHTR ; 'FINSI' ; 'FINSI' ; 'SI' ('EGA' discreti 'VF') ; * flux diffusif 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; CLFLUX = CHCLIM . 'NEUMANN' ; ('EXTRAIRE' CLFLUX MAILLAGE) ; 'DETRUIT' zozo ; CLFLUX = CLFLUX '*' zuzu ; 'DETRUIT' zuzu ; 'DETRUIT' (CHCLIM . 'NEUMANN') ; CHCLIM . 'NEUMANN' = CLFLUX ; 'FINSI' ; * flux mixte 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; CLFLUX = CHCLIM . 'FLUMIXTE' . 'VAL' ; ('EXTRAIRE' CLFLUX MAILLAGE) ; 'DETRUIT' zozo ; CLFLUX = CLFLUX '*' zuzu ; 'DETRUIT' zuzu ; 'DETRUIT' (CHCLIM . 'FLUMIXTE' . 'VAL') ; CHCLIM . 'FLUMIXTE' . 'VAL' = CLFLUX ; 'FINSI' ; * Flux total 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; CLFLUX = CHCLIM . 'FLUTOTAL' ; * MESS 'CLFLUX' ; LIST CLFLUX ; ('EXTRAIRE' CLFLUX MAILLAGE) ; 'DETRUIT' zozo ; CLFLUX = CLFLUX '*' zuzu ; 'DETRUIT' zuzu ; * VERRUE 'DETRUIT' (CHCLIM . 'FLUTOTAL') ; CHCLIM . 'FLUTOTAL' = CLFLUX ; * MESS 'CLFLUXTRA' ; LIST CLFLUX; 'FINSI' ; 'FINSI' ; 'FINSI' ; *********************************************************************** * ON VIENT DE SORTIR DE LA BOUCLE DE * CALCULS NON SIMPLIFIES, IE DISCRETISES *********************************************************************** *--------------------------------------------------------------------- *---------- On gère les objets de préconditionnement sortant --------- *--------------------------------------------------------------------- * Ces objets ne sont pas censés être modifiés par l'utilisateurs. * Ce sont des objets intermédiaires permettant de réduire les temps * de calcul lors d'appels successifs de TRANSGEOL sur un meme probleme. * La trace de concentration est stockée ici car c'est également un * objet intermédiaire. SI (SIMPLIF) ; * Pas de modif de resé dans le cas d'un calcul simplifié RES2 = TRANS2 ; SINON ; RES2 = TABLE 'PRECONDI' ; RES2 . 'MATRITOTAL' = matsor ; RES2 . 'NOM_ESPECE' = nomespec ; RES2 . 'NB_ESPECES' = nbespece ; RES2 . 'NB_SOURCES' = nbsource ; RES2 . 'METHINV' = TABRES ; RES2 . 'DIFFDISP' = Diffdisp ; * optionnel phys dépendant ou EFMH dep 'SI' ('EGA' discreti 'EFMH') ; RES2 . 'MATMASEFMH' = MatMaEFM ; RES2 . 'TRACE_CONC' = Tcfin ; SI (LCONV) ; RES2 . 'DEBITFACE' = Qface ; FINSI ; RES2 . 'TABDARCYTR' = TbDarTra ; 'FINSI' ; 'SI' ('EGA' discreti 'VF') ; RES2 . 'COEFTOT' = Mctot ; RES2 . 'COEFDIF' = Mdiff ; RES2 . 'MATDIS' = Mattt ; RES2 . 'MPOROS' = Mpor ; 'FINSI' ; 'FINSI' ; *--------------------------------------------------------------------- *---------------------- On crée la table de résultats --------------- *--------------------------------------------------------------------- *RES1 = TABLE 'TRANSPGEOL' ; RES1 = TABLE ; * * Recopie de la table trans1, Les valeurs modifiées par TRANSGEOL * seront écrasées dans RES1. TRANS1 n'est pas modifiée. Les objets * inchangés ne sont pas recopiés (seulement les pointeurs). * dumm = 'INDEX' TRANS1 ; *'REPETER' bou1 (('DIME' dumm) '-' 1) ; * RES1 . (mot dumm . (&bou1 '+' 1)) = TRANS1 . (mot dumm . (&bou1 * '+' 1)) ; * list res1; *'FIN' bou1 ; 'FIN' bou1 ; * On stocke la concentration calculée RES1 . 'CONCENTRATION' = CFIN ; *MESS 'CFIN'; LIST CFIN; *'MESSAGE' (cfin 'MINIMUM') '<'m_charge'<' (cfin 'MAXIMUM' ); * On stocke le flux diffusif aux faces RES1 . 'FLUXDIFF' = CFLU ; *'MESSAGE' (CFLU 'MINIMUM') '<CFLU<' (CFLU 'MAXIMUM' ); * On stocke le flux convectif aux faces RES1 . 'FLUXCONV' = CFLUCO ; *'MESSAGE' (CFLUCO 'MINIMUM') '<CFLUCO<' (CFLUCO 'MAXIMUM' ); * Par défaut pas de réinitialisation en cas d'appels suivants RES1 . 'INITIALI' = FAUX ; * Mettre un indice de recalcul des traces, cini modif ????????? * RES1 . 'CINIMODIF' = FAUX; 'DETRUIT' chpsour ; 'FINPROC' RES1 RES2 ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales