* SOLVVF PROCEDUR GOUNAND 10/10/13 21:15:43 6779 ********************************************************************** matk/'MATRIK' SMTR*'CHPOINT' cini*'CHPOINT' Mctot*'MCHAML' Mdiff*'MCHAML' Difftot*'CHPOINT' RESID*'CHPOINT' TetaDiff*'FLOTTANT' QFACE/'CHPOINT' nomespec*'LISTMOTS' nbespece*'ENTIER' nbsource*'ENTIER' TABRES*'TABLE' CHCLIM*'TABLE' NOUVMAT*'LOGIQUE' LCONV*'LOGIQUE' CHTR*'LOGIQUE' ; * |-----------------------------------------------------------------| * | Phrase d'appel (en GIBIANE) | * |-----------------------------------------------------------------| * | | * matsor TABRES cfin cflu cfluco = SOLVVF MoDARCY * ChPSour Mattt Smtr Cini Mctot Mdiff Difftot * Qface nomespec nbespece * nbsource OPTRES CHCLIM Nouvmat * | | * | | * |-----------------------------------------------------------------| * | Généralités : MATTVF 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. | * | | * | ChPSour : Champ par points des sources volumiques par unité de | * | temps (support maillage centre). Composante associées| * | aux especes | * | | * | Mattt : matrice discretisation VF | * | | * | SMTr : second membre sur les traces | * | | * | 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'. | * | | * | | * | CHCLIM : table d'indice 'NEUMANN' et 'DIRICHLET' contenant les| * | Chpoint à n composantes contenant les conditions aux | * | limites de Neumann et Dirichlet par espece. | * * | NOUVMAT : Logique affecté à VRAI lorsque que Matot vient * | d'etre calculée * | | * |-----------------------------------------------------------------| * | SORTIES | * |-----------------------------------------------------------------| * | Matk : matrice globale VF * | | * | cfin : concentration apres calcul pour toutes les especes | * | | * | TABSORT : Table complète définissant les options de résolution | * | pour 'KRES'. | * | | * |-----------------------------------------------------------------| * | VARIABLES INTERNES | * |-----------------------------------------------------------------| * | | * | | * | 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 ------------------ *--------------------------------------------------------------------- * * 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. * FLUNEU = FAUX; DIRCLI = FAUX; FLUTOT = FAUX; FLUMIX = FAUX; EXFLU = CLFLUX; EXDIR = CLDIRI; EXFLUT = CLFLUT; * Neumann 'SI' ('EXISTE' CHCLIM 'NEUMANN') ; CLFLUX = CHCLIM . 'NEUMANN'; FLUNEU = VRAI; 'FINSI'; 'SI' ('EXISTE' CHCLIM 'DIRICHLET') ; CLDIRI = CHCLIM . 'DIRICHLET'; DIRCLI = VRAI; 'FINSI'; 'SI' ('EXISTE' CHCLIM 'FLUTOTAL') ; CLFLT = CHCLIM . 'FLUTOTAL'; FLUTOT = VRAI; 'FINSI'; 'SI' ('EXISTE' CHCLIM 'FLUMIXTE') ; * comme on impose A Dgrad C + B C = flumix, on le traite sous * la forme D grad C + (B/A) C = flumix/A plus naturelle en EFMH car * D grad C est le flux diffusif COFA = -1.D0 * CHCLIM . 'FLUMIXTE' . 'COEFA' ; CLFLUX3 = CHCLIM . 'FLUMIXTE' . 'VAL' '/' COFA ; FLUMIX = VRAI ; mayage = 'EXTRAIRE' CHCLIM . 'FLUMIXTE' . 'VAL' maillage ; * cofb = CHCLIM . 'FLUMIXTE' . 'COEFB' ; coefm = (1.D0 * cofb) '/' cofa ; 'OUBLIER' cofa ; 'OUBLIER' cofb ; 'FINSI' ; dumm = 'INDEX' TABRES ; TABSORT = 'TABLE' METHINV ; '+' 1)) ; 'FIN' bou1 ; 'SI' (NOUVMAT) ; TABSORT . 'MATASS' = Matk ; TABSORT . 'MAPREC' = Matk ; 'FINSI' ; *--------------------------------------------------------------------- *-------------- RESOLUTION ----------------- *--------------------------------------------------------------------- * boucle sur les espèces. 'REPETER' bloc1 nbespece ; espc = ('EXTRAIRE' &bloc1 nomespec) ; * préparation solution initiale - ie trace initiale TABSORT . 'XINIT' = 'NOMC' 'RETN' hh = TABSORT . 'XINIT' ; * préparation du terme source 'SI' (nbsource 'EGA' 1) ; 'SINON' ; Chpsour) ; 'FINSI' ; * préparation second membre 'SI' ('NON' CHTR) ; * VERRUE Smaux = ((1.D0 - Tetadiff)*RESID) + (Tetadiff*Smtr) ; Smaux = Smtr; '+' CChpsour ; 'SINON' ; '+' CChpsour ; 'FINSI' ; *LIST CCHPsour; * Calcul du résidu res = KRES matk 'TYPI' TABSORT 'IMPR' 0 ; TABSORT . 'MATASS' = matk ; TABSORT . 'MAPREC' = matk ; 'NATU' 'DISCRET' ; 'SI' (FLUNEU) ; EXFLU = CLFLUX)) ; 'FINSI' ; 'SI' (DIRCLI) ; EXDIR = CLDIRI)) ; 'FINSI' ; 'SI' (FLUTOT) ; EXFLUT = CLFLT )) ; XPAR1 = 1.D0 + (0.0*CLFLT) ; 'SI' LCONV ; MUSCN = USCNR*(-1.D0) ; 'SINON' ; MUSCN = (0.D0*CLFLT) ; 'FINSI' ; EXFLUT = XPAR1 + XPAR2 + QLIM ; 'FINSI' ; 'SI' (FLUMIX) ; EXFLUM = CLFLUX3 )) ; XPAR1 = 1.D0 + (0.0*CLFLUX3) ; MUSCN = coefm ; EXFLUM = XPAR1 + XPAR2 + QLIM ; EXFLUT = EXFLUT 'ET' EXFLUM ; 'FINSI' ; 'SI' ('NON' CHTR) ; * On reconstruit le flux diffusif aux faces HHS 'DISPDIF' difftot 'TIMP' EXDIR 'QIMP' EXFLU 'MIXT' EXFLUT 'UPWICENT' QFace 'GRADGEO' Mdiff ; * On reconstruit le flux convectif aux faces A PATIR DU FLUX TOTAL HHS 'DISPDIF' difftot 'TIMP' EXDIR 'QIMP' EXFLU 'MIXT' EXFLUT 'UPWICENT' QFace 'GRADGEO' Mctot ; * CALCUL DU RESIDU POUR LA PAS DE TEMPS SUIVANT MoDARCY HHS CCFLUTO ; 'SI' ((&bloc1) 'EGA' 1) ; 'SINON' ; 'FINSI' ; CCFLUCO = CCFLUTO - CCFLU; 'SINON' ; * PHM : ATTENTION : est ce ok de mettre cela ? 'FINSI' ; * On reconstitue les champoints à plusieurs composante 'SI' (&bloc1 'EGA' 1) ; CCFLUCO = 'NOMC' espc CCFLUCO NATU DISCRET ; cfin = ccfin ; cflu = ccflu ; cfluco = ccfluco ; 'SINON' ; NATU DISCRET ; NATU DISCRET ; NATU DISCRET ; cfin = cfin 'ET' ccfin ; cflu = cflu 'ET' ccflu ; cfluco = cfluco 'ET' ccfluco ; 'FINSI' ; 'FIN' bloc1 ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales