* fichier : tube_multi_ther.dgibi ****************************************************************** * Calcul du tube a choc; CAS MULTIESPECE * * GAZ multi-especes "calorically perfect", * * avec le modele "thermally perfect" * * * * * * FORMULATION VF COMPRESSIBLE EXPLICITE * * SOLVEUR: Van Leer - Hanel * * * * A. BECCANTINI TTMF DECEMBRE 1998 * ****************************************************************** 'MESSAGE' 'A mettre à jour' ; 'FIN' ; 'OPTION' 'DIME' 2 ; 'OPTION' 'ELEM' 'QUA4' ; 'OPTION' 'ISOV' 'SULI' ; 'OPTION' 'ECHO' 0 ; 'OPTION' 'TRAC' 'X'; * GRAPH = VRAI ; GRAPH = FAUX ; * *** Methodes possibles : * * 'VLH ' * METO = 'VLH' ; * METO = 'CG' ; ***************************************************** ***************************************************** ** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE ** ** CAS MULTIESPECES "THERMALLY PERFECT" ** ***************************************************** ***************************************************** 'DEBPROC' EXEX ; 'ARGUMENT' RV*TABLE ; ******************************************* **** Recherche de RV . *KONV . IDEUL **** ******************************************* * **** Nom de la table RV . *'KONV' -> NOMT * NBOP = 'DIME' (RV . 'LISTOPER' ) ; 'REPETER' BL1 NBOP; MCEL = 'EXTRAIRE' &BL1 RV . 'LISTOPER'; 'SI' ( 'EGA' MCEL 'KONV '); NOMT = 'MOT' ('TEXTE' ('CHAINE' &BL1 MCEL)); 'QUITTER' BL1; 'FINSI' ; 'FIN' BL1; IEUL = RV . NOMT . 'KOPT' . 'IDEUL'; 'SI' ('NON' (IEUL 'EGA' 3)); 'MESSAGE' 'EULERMST ???'; 'ERREUR' 21; 'FINSI' ; * Mono-espece ou multi-especes 'SI' ('EXISTE' (RV . NOMT) 'ARG5') ; LOGMUL = VRAI ; 'SINON' ; LOGMUL = FAUX ; 'FINSI' ; * **** CL * LOGLIM = RV . 'INCO' . 'CLIM' ; ****************************************** **** Ordre en espace, ordre en temps **** ****************************************** ORD_ESP = RV . 'ORDREESP' ; ORD_TPS = RV . 'ORDRETPS' ; 'MESSAGE' '--------------------------'; 'MESSAGE' 'Ordre en Espace :' ord_esp; 'MESSAGE' 'Ordre en Temps :' ord_tps; 'MESSAGE' '--------------------------'; 'SI' ((ORD_ESP 'EGA' 1) 'ET' (ORD_TPS 'EGA' 2)); 'MESSAGE' ; 'MESSAGE' (CHAINE 'Ordre en Espace doit etre 2'); 'MESSAGE' (CHAINE 'On impose ça.'); 'MESSAGE' ; RV . 'ORDREESP' = 2 ; 'MESSAGE' ; 'MESSAGE' '--------------------------'; 'MESSAGE' 'Ordre en Espace :' ord_esp; 'MESSAGE' 'Ordre en Temps :' ord_tps; 'MESSAGE' '--------------------------'; 'FINSI' ; ****************************** **** La table 'PASDETPS' **** ****************************** TPSI = RV . 'TPSI' ; TFIN = RV . 'TFINAL'; RV . 'PASDETPS' . 'TPS' = TPSI; * **** DELTAT-1 est un argument de PRET (prediction) * Donc on doit l'initialiser. * RV . 'PASDETPS' . 'DELTAT-1' = 0.0D0; CFL = rv.'ALFA' ; ********************* **** Les TABLES ***** ********************* * **** RV . 'INCO' * RV . 'DOMAINE' * RV . 'KIZD' * RV . 'KIZG' * **** RV . 'INCO' -> KINCO * KINCO = (RV . 'INCO') ; * **** RV . 'DOMAINE' -> KDOMA * *KDOMA = (RV . 'DOMAINE') ; KDOMA = (RV . 'MODTOT') ; KDOMA2 = (RV . 'DOMAINE') ; * **** RV . 'KIZD' contient les volumes des ELTs * 'SI' ('NON' ('EXISTE' RV 'KIZD')) ; 'KDIA' RV ; 'FINSI' ; * ***** RV . 'KIZG' contient les flux aux interfaces. * 'SI' ('NON' ('EXISTE' RV 'KIZG')) ; RV . 'KIZG' = 'TABLE' 'KIZG' ; 'FINSI' ; 'SI' LOGMUL ; ********************************************************* **** Multi-especes, boucle Sur les Pas de Temps **** ********************************************************* * **** Evaluation de coeff pour le calcule des pentes * KINCO . 'V' KINCO . 'P' KINCO . 'T' KINCO . 'Y' KINCO . 'GAMMA' = 'PRIM' 'PERFTEMP' (KINCO . 'IPGAZ') (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI') (KINCO. 'RYNI'); GRADR ALR COEFR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'RNI'); GRADP ALP COEFP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'P'); GRADV ALV COEFV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR' (KINCO . 'V'); GRADY ALY COEFY = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'Y'); I = 0 ; 'REPETER' BLOC1 (RV . 'ITMA') ; I = I + 1 ; * ***** Les variables primitives * KINCO . 'V' KINCO . 'P' KINCO . 'T' KINCO . 'Y' KINCO . 'GAMMA' = 'PRIM' 'PERFTEMP' (KINCO . 'IPGAZ') (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI') (KINCO. 'RYNI'); 'SI' (ORD_ESP 'EGA' 1) ; ROF VITF PF YF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI') (KINCO . 'V') (KINCO . 'P') (KINCO . 'Y') ; 'SINON'; * ***** Ordre 2 en espace => calcul des pentes * GRADR ALR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'RNI') 'GRADGEO' COEFR ; GRADP ALP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'P') 'GRADGEO' COEFP ; GRADV ALV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR' (KINCO . 'V') 'GRADGEO' COEFV ; GRADY ALY = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'Y') 'GRADGEO' COEFY ; 'SI' (ORD_TPS 'EGA' 1); ROF VITF PF YF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI') GRADR ALR (KINCO . 'V') GRADV ALV (KINCO . 'P') GRADP ALP (KINCO . 'Y') GRADY ALY ; 'SINON' ; * ********* Ordre 2 en temps * ROF VITF PF YF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI') GRADR ALR (KINCO . 'V') GRADV ALV (KINCO . 'P') GRADP ALP (KINCO . 'Y') GRADY ALY (KINCO . 'GAMMA') ((RV . 'PASDETPS' . 'DELTAT-1')/2.0); 'FINSI' ; 'FINSI' ; * *********** Creation de MCHAML de type 'FACEL' pour les * calcul de flux aux interfaces KINCO . 'RNF' = ROF ; KINCO . 'VITNF' = VITF ; KINCO . 'PNF' = PF ; KINCO . 'YF' = YF ; * ********* Boucle sur les operateurs * 'REPETER' BLOC2 NBOP ; NOMPER = 'EXTRAIRE' &BLOC2 (RV . 'LISTOPER'); NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOC2 NOMPER) ) ; ('TEXTE' NOMPER) (RV . NOTABLE) ; 'FIN' BLOC2 ; * ********* Mise a jour de la table RV . 'PASDETPS' * 'SI' ('EXISTE' RV 'DTI'); DTI = 'MINIMUM' ('PROG' ((RV . 'DTI') '/' CFL) (RV . 'PASDETPS' . 'DTCONV') ); 'SINON'; DTI = (RV . 'PASDETPS' . 'DTCONV'); 'FINSI'; RV . 'PASDETPS' . 'DELTAT' = DTI ; TMPS = RV . 'PASDETPS' . 'TPS'; DTI0 = TFIN '-' TMPS; DTI0 = DTI0 '/' CFL; 'SI' (DTI0 ' calcul des pentes * GRADR ALR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'RNI') 'GRADGEO' COEFR ; GRADP ALP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR' (KINCO . 'P') 'GRADGEO' COEFP ; GRADV ALV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR' (KINCO . 'V') 'GRADGEO' COEFV ; 'SI' (ORD_TPS 'EGA' 1); ROF VITF PF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI') GRADR ALR (KINCO . 'V') GRADV ALV (KINCO . 'P') GRADP ALP ; 'SINON' ; * ********* Ordre 2 en temps * ROF VITF PF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI') GRADR ALR (KINCO . 'V') GRADV ALV (KINCO . 'P') GRADP ALP (KINCO . 'GAMMA') ((RV . 'PASDETPS' . 'DELTAT-1')/2.0); 'FINSI' ; 'FINSI' ; * *********** Creation de MCHAML de type 'FACEL' pour les * calcul de flux aux interfaces KINCO . 'RNF' = ROF ; KINCO . 'VITNF' = VITF ; KINCO . 'PNF' = PF ; * ********* Boucle sur les operateurs * 'REPETER' BLOC2 NBOP ; NOMPER = 'EXTRAIRE' &BLOC2 (RV . 'LISTOPER'); NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOC2 NOMPER) ) ; ('TEXTE' NOMPER) (RV . NOTABLE) ; 'FIN' BLOC2 ; * ********* Mise a jour de la table RV . 'PASDETPS' * 'SI' ('EXISTE' RV 'DTI'); DTI = 'MINIMUM' ('PROG' ((RV . 'DTI') '/' CFL) (RV . 'PASDETPS' . 'DTCONV') ); 'SINON'; DTI = (RV . 'PASDETPS' . 'DTCONV'); 'FINSI'; RV . 'PASDETPS' . 'DELTAT' = DTI ; TMPS = RV . 'PASDETPS' . 'TPS'; DTI0 = TFIN '-' TMPS; DTI0 = DTI0 '/' CFL; 'SI' (DTI0 ' 5.0D-2); 'ERREUR' 5 ; 'FINSI' ; 'SI' (L1P > 1.0D-2); 'ERREUR' 5 ; 'FINSI' ; 'SI' (L1U > 5.0D-2); 'ERREUR' 5 ; 'FINSI' ; 'SI' (L1S > 5.0D-2); 'ERREUR' 5 ; 'FINSI' ; 'FIN' ;