* CALCTRAC PROCEDUR GOUNAND 11/05/24 21:15:01 6976 nomespec*'LISTMOTS' nbespece*'ENTIER' LMLump*'LOGIQUE' matrtr/'MATRIK' TABRES*'TABLE' Tbdartra*'TABLE' CHCLIM*'TABLE'; * ATTENTION La matrice matrtr est optionnelle, L'ordre est important * et les types d'arguments qui se suivent aussi pour tester leur * présence * * |-----------------------------------------------------------------| * | Phrase d'appel (en GIBIANE) | * |-----------------------------------------------------------------| * | | * |tcfin MatrTr = CALCTRAC MoDARCY Difftot Cini | * | nomespec nbespece LMLump (matrtr) | * | TABRES Tbdartra CHCLIM; | * | | * |-----------------------------------------------------------------| * | Généralités : CALCTRAC calcule les traces de concentration | * | associées à la donnée de concentrations initiales | * | Les Conditions limites de flux et de concentration| * | sont pris en compte. | * |-----------------------------------------------------------------| * | | * |-----------------------------------------------------------------| * | ENTREES | * |-----------------------------------------------------------------| * | MoDARCY : modele Darcy. | * | | * | Difftot : Coefficient de diffusion totale, integre decentrement| * | | * | Cini : Concentration initiale, CHPOINT centre. | * | Composante 'H'. | * | | * | nomespec : liste des noms de composante des espèces dans Cini | * | | * | nbespece : nombre de composante de Cini, soit nombre d'especes | * | | * | LMLump : Logique. Si vrai on effectue une condensation de | * | masse de la matrice EFMH | * | | * | TABRES : table contenant les options de résolution pour KRES | * | | * | TbDarTra : Table Darcy transitoire utilisée par MHYB, SMTP ... | * | | * | CHCLIM : table d'indice 'NEUMANN' et 'DIRICHLET' contenant les| * | Chpoint à n composantes contenant les conditions aux | * | limites de Neumann et Dirichlet par espece. | * | | * |-----------------------------------------------------------------| * | ENTREES-SORTIES | * |-----------------------------------------------------------------| * | | * | MatrTr : matrice globale sur les traces. MATRIK en entrée | * | sort MATRIK si non modifiée, RIGIDITE sinon | * | | * | | * |-----------------------------------------------------------------| * | SORTIES | * |-----------------------------------------------------------------| * | | * | | * | Tcfin : Trace de concentration aux faces (une composante par | * | espece chimique) | * | | * |-----------------------------------------------------------------| * | VARIABLES INTERNES | * |-----------------------------------------------------------------| * | | * | CCini : concentration aux centres (une composante) | * | | * | LCALMATP : Logique, VRAI si on recalcule la matrice du systeme | * | avec diffusion produite par MATP | * | | * | TbDarTrb : table Darcy transitoire utilisée par MHYB, SMTP ... | * | | * | MassEFMH : matrice elementaire EFMH | * | | * | Tccini : Trace de concentration aux faces (une composante) | * | | * | SSMTr : second membre sur les traces pour une espèce | * | | * | SMTr : second membre sur les traces | * | | * | TABSORT : copie de TABRES | * | | * | dum1 : champoint vide | * | | * | matvide : matrice rigidité vide | * | | * | tccfin : trace de concentration aux faces | * | | * | DIRCLI : logique valant VRAI si conditions aux | * | limites de Dirichlet | * | | * | CLDIRI : Chpoint à n composantes contenant les conditions aux | * | limites de Dirichlet par espece. | * | il faudra en faire un nuage si supports géométriques | * | différents par espece. OPTIONNEL | * | | * | FLUNEU : LOGIQUE valant VRAI si conditions de Neumann | * | | * | CLFLUX : Chpoint à n composantes contenant les flux imposés | * | pour chaque espece chimique. nul si pas de flux | * | OPTIONNEL | * | | ********************************************************************** *--------------------------------------------------------------------- *---------- On récupere les conditions limites ------------------ *--------------------------------------------------------------------- * Flag sur conditions limites initialisés FLUNEU = FAUX ; FLUTOT = FAUX ; FLUCLI = FAUX ; DIRCLI = FAUX ; FTOCLI = FAUX ; * Conditions flux total 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; FTOCLI = VRAI ; 'FINSI' ; * Neumann 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; CLFLUX1 = CHCLIM . 'NEUMANN' ; FLUNEU = VRAI ; 'FINSI' ; * Flux total 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; CLFLUX2 = CHCLIM . 'FLUTOTAL' ; FLUTOT = VRAI ; 'FINSI' ; * On fabrique le terme de flux complet 'SI' (FLUNEU 'ET' FLUTOT) ; CLFLUX = CLFLUX1 'ET' CLFLUX2 ; FLUCLI = VRAI ; 'SINON' ; 'SI' (FLUNEU) ; CLFLUX = CLFLUX1 ; FLUCLI = VRAI ; 'FINSI' ; 'SI' (FLUTOT) ; CLFLUX = CLFLUX2 ; FLUCLI = VRAI ; 'FINSI' ; 'FINSI' ; * Dirichlet 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ; CLDIRI = CHCLIM . 'DIRICHLET' ; DIRCLI = VRAI ; 'FINSI' ; *--------------------------------------------------------------------- *---------- Initialisations de tables, coefficients ------------------ *--------------------------------------------------------------------- * On regarde si une matrice est présente. 'SI' ('EXISTE' matrtr) ; * On ne recalcule pas la matrice du probleme LCALMATP = FAUX; 'SINON' ; * On recalcule la matrice du probleme LCALMATP = VRAI; 'FINSI' ; * * On recopie la table de résolution TABRES dans TABSORT * Attention si une valeur contenue dans la table a le * debut d'un nom d'opérateur de castem, il y a probleme * d'ou démarrage apres l'indice soustype de valeur * METHINV, identique à opérateur METHode. * dumm = 'INDEX' TABRES; TABSORT = 'TABLE' METHINV; '+' 1)); 'FIN' bou1; * On impose un gradient conjugué pour la résolution (pour l'instant) TABSORT . 'TYPINV' = 2; * * on reconstruit une table darcy transitoire. * TbDarTrb = 'TABLE' 'DARCY_TRANSITOIRE'; * on prend un schéma Euler implicite car dt = 0. TbDarTrb . 'THETA' = 1.D0 ; * Pas non nul car test sur valeur négative pas terrible * dans SMTP TbDarTrb . 'PAS' = 1.D-90 ; * La valeur du terme suivant n'a pas d'influence car elle est * multipliée par le pas de temps nul TbDarTrb . 'PAS' . *--------------------------------------------------------------------- *-------------- Matrice masse inverse des EFMH ----------------------- *--------------------------------------------------------------------- * Calcul des matrices de masse elementaires inverses * affectées par un changement de la diffusivité totale. * Cela ce porduit si la diffusivité change ou, en présence * de décentrement, si la diffusivité numérique change. 'SI' (LCALMATP); 'SI' (LMLump) ; * masse lumping 'SINON' ; 'FINSI' ; 'FINSI' ; *---------------------------------------------------------------------- *---------- CALCUL DE LA MATRICE DE DIFFUSION DU PROBL ---------------- *---------------------------------------------------------------------- * Calcul de la matrice du probleme diffusion transitoire pour dt=0 'SI' (LCALMATP) ; 'FINSI' ; *---------------------------------------------------------------------- *--- CALCUL DE LA MATRICE DE CONVECTION ET DES SECONDS MEMBRES -------- *---------------------------------------------------------------------- * Nombres d'espèces à gérer est fixé et ne peut changer au cours d'une * simulation. Il sera d'ailleurs mis dans le modele 'SI' (nbespece > 0) ; * pour un schéma en temps non euler implicite, il faut * la trace à l'instant précédent pour le second membre * pour la convection ou la diffusion. Elle est issue * des calculs précédents en EFMH. C'est impératif. * On ne prévoit pas de la recalculer car c'est très cher. * * CALCUL DES SECONDS MEMBRES * 'REPETER' bloc1 nbespece; * On extrait la composante de Cini, Tcini et de la source * La trace de concentration initiale n'a pas de role et est mise à 0. * Conditions initiales TbDarTrb . 'CHARGE' = CCini ; TbDarTrb . 'TRACE'= TCCini ; * prend en compte uniquement la concentration initiale * On reconstitue un champ de second membre 'SI' ((&bloc1) 'EGA' 1) ; SMTR = SSMTr; 'SINON' ; SMTr = SSMTr 'ET' SMTr; 'FINSI' ; 'FIN' bloc1; 'FINSI' ; *--------------------------------------------------------------------- *------ Conditions aux limites de Flux (mixtes et Neumann) ----------- *--------------------------------------------------------------------- 'SI' (FLUCLI) ; SMTr = SMTR 'ET' CLFLUX ; 'FINSI' ; *--------------------------------------------------------------------- *------ Conditions aux limites de Dirichlet ----------- *--------------------------------------------------------------------- *'SI' (EXISTE CLDIRI) ; * On fera peut etre une matrice bloque pour les méthodes directes. *'FINSI' ; *--------------------------------------------------------------------- *------ Résolution ----------- *--------------------------------------------------------------------- 'SI' (LCALMATP) ; * On recalcule les conditions aux limites flux total si existent 'SI' (FTOCLI) ; 'SI' ('EXISTE' QFACE) ; mayage = 'EXTRAIRE' CHCLIM . 'FLUTOTAL' maillage ; 'FINSI' ; 'FINSI' ; 'FINSI' ; * Nouvelle matrice rigidité, on la transforme en Matrik matrtr = KOPS 'CHANINCO' matrtr * On rajoute les conditions aux limites de flux totale (matrice U tC) matrtr = matrtr 'ET' matcli ; 'FINSI' ; * On initialise les indices pointants sur les matrices * assembmées et préconditionnées TABSORT . 'MATASS' = Matrtr ; TABSORT . 'MAPREC' = Matrtr ; 'SINON' ; TABSORT . 'MATASS' = Matrtr ; TABSORT . 'MAPREC' = Matrtr ; 'FINSI' ; *--------------------------------------------------------------------- *-------------- RESOLUTION EN TRACE DE CONCENTRATION ----------------- *--------------------------------------------------------------------- * On fabrique un champoint vide et une matrice vide. * boucle sur les espèces. 'REPETER' bloc2 nbespece ; * préparation solution initiale nulle car non connue TABSORT . 'XINIT' = TCCINI; * préparation second membre * Solution en trace * Si conditions de Dirichlet 'SI' (DIRCLI) ; Tccfin = KRES matrtr 'TYPI' TABSORT CLDIRI)) 'IMPR' 0 ; 'SINON' ; Tccfin = KRES matrtr 'TYPI' TABSORT 'IMPR' 1 ; 'FINSI' ; * On reconstitue les champoints à plusieurs composante 'SI' (&bloc2 'EGA' 1); Tcfin = tccfin; 'SINON' ; Tcfin = tcfin 'ET' tccfin; 'FINSI' ; 'FIN' bloc2; 'FINP' tcfin MatrTr ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales