* SOLVEFMH PROCEDUR GOUNAND 11/05/24 21:16:18 6976 ********************************************************************** MassEFMH*'RIGIDITE' MatTR/'RIGIDITE' matTM/'MATRIK' SMTR*'CHPOINT' Tcini*'CHPOINT' cini*'CHPOINT' QFACE/'CHPOINT' nomespec*'LISTMOTS' nbespece*'ENTIER' nbsource*'ENTIER' TABRES*'TABLE' tbdartra*'TABLE' CHCLIM*'TABLE'; * |-----------------------------------------------------------------| * | Phrase d'appel (en GIBIANE) | * |-----------------------------------------------------------------| * | | * | mattr TABRES tfin tcfin = SOLVEFMH MoDARCY ChPSour | * | MassEFMH (MatTR ou mattM) SMTR Tcini cini | * | nomespec nbespece nbsource TABRES tbdartra | * | CHCLIM ; | * | | * | | * |-----------------------------------------------------------------| * | Généralités : MATTEFMH construit la matrice de discrétisation | * | du problème de transport convection-diffusion pour| * | le premier pas de tps d'un algorithme transitoire.| * | Le second membre et les Conditions limites de flux| * | sont pris en compte. | * | RESTE TCINI, DECENTR et TERME LIN | * |-----------------------------------------------------------------| * | | * |-----------------------------------------------------------------| * | ENTREES | * |-----------------------------------------------------------------| * | MoDARCY : modele Darcy. | * | | * | Deltat : pas de temps utilisé pour calculer la concentration | * | | * | ChPSour : Champ par points des sources volumiques par unité de | * | temps (support maillage centre). Composante associées| * | aux especes | * | | * | MassEFMH : matrice elementaire EFMH | * | | * | MatTr : matrice globale sur les traces - rigidité | * | argument optionnel on donne alors martTM | * | | * | MatTM : matrice globale sur les traces - Matrik | * | argument optionnel on donne alors matrTR | * | | * | SMTr : second membre sur les traces | * | | * | Tcini : Trace de concentration aux faces (eventuellement à | * | plusieurs composantes (espèces) - sert a initialiser | * | le XINIT de KRES et à calculer la valeur de la | * | concentration au centre | * | | * | nomespec : liste des noms de composante des espèces dans Cini | * | | * | nbespece : nombre de composante de Cini, soit nombre d'especes | * | | * | nbsource : nombre de composantes du terme source qd X especes | * | | * | TABRES : Table complète définissant 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. | * | | * |-----------------------------------------------------------------| * | SORTIES | * |-----------------------------------------------------------------| * | | * | Tcfin : Trace de concentration aux faces (eventuellement à | * | plusieurs composantes (espèces) - état final apres | * | résolution | * | | * | cfin : concentration apres calcul pour toutes les especes | * | | * | TABSORT : Table complète définissant les options de résolution | * | pour 'KRES'. | * | | * | Matk : matrice globale sur les traces pour la convection | * | en format matrik. Elle diffère de la matrice entree | * | si cette derniere est une rigidité car traduite en | * | Matrik. Elle contient également les préconditionnemen| * | crée par l'opérateur de résolution KRES | * | | * |-----------------------------------------------------------------| * | VARIABLES INTERNES | * |-----------------------------------------------------------------| * | | * | Tccfin : Trace de concentration aux faces (une composante) | * | | * | CChpsour : Source aux centre (une composante) | * | | * | CCfin : concentration aux centres (une composante) | * | | * | SSMTr : second membre sur les traces pour une espèce | * | | * | Nouvmatr : Logique, si VRAI on transforme la matrice rigidité | * | en matrik | * | | * | 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 | * | | ********************************************************************** *--------------------------------------------------------------------- *---------- On récupere les conditions limites ------------------ *--------------------------------------------------------------------- * Flag sur conditions limites initialisés DIRCLI = FAUX ; FTOCLI = FAUX ; MIXCLI = FAUX ; * Dirichlet 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ; CLDIRI = CHCLIM . 'DIRICHLET' ; DIRCLI = VRAI ; 'FINSI' ; * Conditions flux total 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; FTOCLI = VRAI ; 'FINSI' ; * Conditions flux mixte 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; MIXCLI = 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 ; * idem avec tbdartra pour la preserver dumm = 'INDEX' TbDartra ; TbDartrb = 'TABLE' 'DARCY_TRANSITOIRE' ; '+' 1)) ; 'FIN' bou1 ; *--------------------------------------------------------------------- *-------------- TRANSFORMATION MATRIK RIGIDITE ----------------------- *--------------------------------------------------------------------- 'SI' ('EXISTE' mattr) ; * matrice rigidité donc vient d'etre calculée * il faudra la traduire en matrik. NOUVMATR = VRAI ; 'SINON' ; * matrice issue d'un précédent calcul * on la stocke dans mattr NOUVMATR = FAUX ; mattr = mattm ; 'FINSI' ; 'SI' (NOUVMATR) ; * On recalcule les conditions aux limites flux total si existent 'SI' (FTOCLI) ; 'SI' ('EXISTE' QFACE) ; mayage = 'EXTRAIRE' CHCLIM . 'FLUTOTAL' maillage ; 'FINSI' ; 'FINSI' ; 'FINSI' ; * On recalcule les conditions aux limites flux mixte si existent 'SI' (MIXCLI) ; mayage = 'EXTRAIRE' CHCLIM . 'FLUMIXTE' . 'VAL' maillage ; coefm = (-1.D0 * cofb) '/' cofa ; 'OUBLIER' cofa ; 'OUBLIER' cofb ; 'OUBLIER' coefm ; 'FINSI' ; * Nouvelle matrice rigidité, on la transforme en Matrik mattr = KOPS 'CHANINCO' mattr * On rajoute les conditions aux limites de flux totale (matrice U tC) mattr = mattr 'ET' matcli ; 'FINSI' ; * On rajoute les conditions aux limites de flux mixte mattr = mattr 'ET' matmix ; 'FINSI' ; * On initialise les indices pointants sur les matrices * assembmées et préconditionnées TABSORT . 'MATASS' = Mattr ; TABSORT . 'MAPREC' = Mattr ; 'FINSI' ; *--------------------------------------------------------------------- *-------------- RESOLUTION EN TRACE DE CONCENTRATION ----------------- *--------------------------------------------------------------------- * boucle sur les espèces. 'REPETER' bloc1 nbespece ; * préparation solution initiale - ie trace initiale Tcini) ; tccini = TABSORT . 'XINIT' ; * préparation second membre * Solution en trace * Si conditions de Dirichlet 'SI' (DIRCLI) ; Tccfin = KRES mattr 'TYPI' TABSORT 'SMBR' SSMTr CLDIRI)) 'IMPR' 0 ; 'SINON' ; Tccfin = KRES mattr 'TYPI' TABSORT 'SMBR' SSMTr 'IMPR' 0 ; 'FINSI' ; TABSORT . 'MATASS' = mattr ; TABSORT . 'MAPREC' = mattr ; * préparation du terme source 'SI' (nbsource 'EGA' 1) ; 'SINON' ; Chpsour) ; 'FINSI' ; cini) ; TbDartrb . 'TRACE' = TABSORT . 'XINIT' ; * 'SI' ('EXISTE' QFACE) ; TETAC = TbDartra . 'THETA_CONVECTION' ; * On ajoute au terme source total la contribution de la convection CONC1 = ((1.D0 - TETAC) * tccini) + (TETAC * tccfin) ; CChpsour = CChpsour + CONC1 ; oubli CONC1 ; 'FINSI' ; * on reconstruit la concentration au centre * On reconstruit le flux diffusif aux faces 'SI' ('EXISTE' QFACE) ; * On construit le flux convectif aux faces * CCFLUCO = ((1.D0 - TETAC) * tccini) + (TETAC * tccfin) ; * VERRUE CCFLUCO = tccfin ; 'SINON' ; * flux convectif nul CCFLUCO = 0.D0 * CCFLU ; 'FINSI' ; * On reconstitue les champoints à plusieurs composante 'SI' (&bloc1 'EGA' 1) ; NATU DISCRET ; Tcfin = tccfin ; cfin = ccfin ; cflu = ccflu ; cfluco = ccfluco ; 'SINON' ; * CCfin = 'NOMC' ('EXTRAIRE' &bloc1 nomespec) ('COPIER' CCfin) ; * Tccfin = 'NOMC' ('EXTRAIRE' &bloc1 nomespec) ('COPIER' TCCfin) ; * ccflu = 'NOMC' ('EXTRAIRE' &bloc1 nomespec) ('COPIER' CCflu) ; * CCFLUCO = 'NOMC' ('EXTRAIRE' &bloc1 nomespec) ('COPIER' CCFLUCO) * NATU DISCRET ; NATU DISCRET ; Tcfin = tcfin 'ET' tccfin ; cfin = cfin 'ET' ccfin ; cflu = cflu 'ET' ccflu ; cfluco = cfluco 'ET' ccfluco ; 'FINSI' ; 'FIN' bloc1 ; 'FINP' mattr TABSORT cfin tcfin cflu cfluco ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales