Télécharger stationary_shock.dgibi
* fichier : stationary_shock.dgibi *********************************************************************** *********************************************************************** *********************************************************************** *** CALCUL DU TUBE A CHOC; CAS MULTIESPECE **** *** GAZ mono-especes "THERMALLY PERFECT" **** *** **** *** FORMULATION VF COMPRESSIBLE EXPLICITE **** *** DIFFERENTS SOLVEURS **** *** **** *** Choc stationnaire **** *** A. BECCANTINI DRN/DMT/SEMT/LTMF FEVRIER 2000 **** *********************************************************************** *********************************************************************** *********************************************************************** 'MESSAGE' 'A mettre a jours' ; 'FIN' ; 'OPTION' 'ELEM' 'QUA4' ; 'OPTION' 'ISOV' 'SULI' ; 'OPTION' 'ECHO' 0 ; 'OPTION' 'TRAC' 'X'; GRAPH = FAUX ; * GRAPH = VRAI ; * *** Methodes possibles : * * 'VLH' * 'CG' METO = 'CG' ; *********************** **** LA TABLE PGAZ **** *********************** PGAZ = 'TABLE' ; * **** Ordre des polynoms cv_i * PGAZ . 'NORD' = 4 ; * **** La seul espece * PGAZ . 'ESPNEULE' = 'H2 '; * PGAZ . 'H2 ' = 'TABLE' ; * **** R (J/Kg/K) * PGAZ . 'H2 ' . 'R' = 4130.0 ; * **** Regressions polynomials * -2.37281455E-07 1.84701105E-11 ; * **** "Enthalpies" (ou energies) de formations a OK (J/Kg) * Note: ce sont des entites numeriques * PGAZ . 'H2 ' . 'H0K' = -4.195D6 ; * *** Fin PGAZ * * **** Choc stationnaire * pg = 1.0D5 ; rog = 1.0 ; Tg = (pg '*' rog) '/' (PGAZ . 'H2 ' . 'R') ; * sstren > 1.0 sstren = 4.01 ; Td = sstren '*' Tg ; * Det. ug, rod, ud A0H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 1 ; A1H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 2 ; A2H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 3 ; A3H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 4 ; A4H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 5 ; R = PGAZ . 'H2 ' . 'R' ; T2 = Tg '*' Tg ; T3 = T2 '*' Tg ; T4 = T3 '*' Tg ; T5 = T4 '*' Tg ; ETHERg = ((A0H2 * Tg) '+' ((A1H2 '/' 2.0) * T2) '+' ((A2H2 '/' 3.0) * T3) '+' ((A3H2 '/' 4.0) * T4) '+' ((A4H2 '/' 5.0) * T5)) ; T2 = Td '*' Td ; T3 = T2 '*' Td ; T4 = T3 '*' Td ; T5 = T4 '*' Td ; ETHERd = ((A0H2 * Td) '+' ((A1H2 '/' 2.0) * T2) '+' ((A2H2 '/' 3.0) * T3) '+' ((A3H2 '/' 4.0) * T4) '+' ((A4H2 '/' 5.0) * T5)) ; RTg = R '*' Tg ; RTd = R '*' Td ; * x = rog '/' rod `in (0,1] NDEF = 100 ; DX = 1.0 /NDEF ; X = 0.0 ; AEQ2 = RTg ; AEQ1 = (2.0 '*' (ETHERd '-' ETHERg)) '+' RTd '-' RTg ; AEQ0 = -1.0 '*' RTd ; 'REPETER' BL1 NDEF ; X = X '+' DX ; X2 = X '*' X ; FUN = (AEQ2 '*' X2) '+' (AEQ1 '*' X) '+' AEQ0 ; 'FIN' BL1 ; 'SI' FAUX ; 'DESSIN' EVFUN 'MIMA' ; 'FINSI' ; * Selection de la racine: * XSOL \in (0,1] XSOL = ((((AEQ1 '**' 2) '-' (4.0 '*' AEQ0 * AEQ2)) '**' 0.5) '-' AEQ1) '/' (2.0 * AEQ2) ; * rod = rog '/' XSOL ; pd = RTd '*' rod; RC1 = 2.0 '*' (ETHERd '+' (R '*' Td) '-' (ETHERg '+' (R '*' Tg))) ; ud = RC1 '*' (XSOL '**' 2) '/' (1.0 '-' (XSOL '**' 2)) ; ud = ud '**' 0.5 ; ug = (ud '*' rod) '/' rog ; * Control de Rankine-Hugoniot err1 = 'ABS' (((rog '*' ug) '-' (rod '*' ud)) '/' (rog '*' ug)) ; err2 = 'ABS' (((rog '*' ug '*' ug) '+' pg '-' (rod '*' ud '*' ud) '-' pd) '/' ((rog '*' ug '*' ug) '+' pg)) ; err3 = 'ABS' (((ETHERg '+' RTg '+' (0.5 '*' ug '*' ug)) '-' (ETHERd '+' RTd '+' (0.5 '*' ud '*' ud))) '/' (ETHERd '+' RTd '+' (0.5 '*' ud '*' ud))) ; 'SI' (ERMAX > 1.0d-10); 'ERREUR' 'No Rankine-Hugoniot'; 'FINSI' ; ******************************************************* ***** PROCEDURE POUR TESTER CONVERGENCE ***** ******************************************************* 'DEBPROC' CALCUL ; 'ARGUMENT' RVX*'TABLE' ; *KDOMA = RV . 'DOMAINE' ; KDOMA = RV . 'MODTOT' ; RNi = RV . 'INCO' . 'RNI' ; RN0 = RV . 'INCO' . 'RN0' ; * *** RN0 = solution à t = tn_M1; * DD = RV . 'PASDETPS' . 'NUPASDT' ; NINTE = 5; NN = DD/NINTE ; LO = (DD-(NINTE*NN)) EGA 0 ; 'SI' ( LO ) ; ELI = 'MAXIMUM' ERR 'ABS' ; 'MESSAGE' eli ; ELI = ('LOG' (ELI + 1.0E-10))/('LOG' 10.) ; 'MESSAGE' ('CHAINE' 'ITER ' DD ' ERREUR LINF ' ELI ); RV . 'INCO' . 'IT' = (RV . 'INCO' . 'IT') 'ET' IT ; RV . 'INCO' . 'ER' = (RV . 'INCO' . 'ER') 'ET' ER ; 'FINSI' ; RV . 'INCO' . 'RN0' = 'COPIER' RNi; 'FINPROC' ; ***************************************************** ***************************************************** ** 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 * 'REPETER' BL1 NBOP; MCEL = 'EXTRAIRE' &BL1 RV . 'LISTOPER'; '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; ********************* **** 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 . '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 . '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'); ('TEXTE' NOMPER) (RV . NOTABLE) ; 'FIN' BLOC2 ; * ********* Mise a jour de la table RV . 'PASDETPS' * 'SI' ('EXISTE' RV 'DTI'); DTI = 'MINIMUM' (RV . 'PASDETPS' . 'DTCONV') ); 'SINON'; DTI = (RV . 'PASDETPS' . 'DTCONV'); 'FINSI'; RV . 'PASDETPS' . 'DELTAT' = DTI ; TMPS = RV . 'PASDETPS' . 'TPS'; DTI0 = TFIN '-' TMPS; 'SI' (DTI0 '<EG' DTI); DTI = DTI0; RV . 'PASDETPS' . 'DELTAT' = DTI ; LOGQUIT = VRAI; 'SINON' ; LOGQUIT = FAUX ; 'FINSI' ; * ******** On avance au pas de temps suivant * * N.B. Tn+1 = Tn + (CFL * RV . 'PASDETPS' . 'DELTAT'); * * ******** On detrui les choses qui ne servent plus * * * Les variables primitives * 'OUBL' KINCO 'V'; 'OUBL' KINCO 'P'; 'OUBL' KINCO 'T'; 'OUBL' KINCO 'Y'; 'OUBL' KINCO 'GAMMA'; * * Les MCHAML faces * 'DETR' ROF ; 'DETR' VITF ; 'DETR' PF ; 'DETR' YF; 'OUBL' KINCO 'RNF'; 'OUBL' KINCO 'VITNF'; 'OUBL' KINCO 'PNF'; 'OUBL' KINCO 'YF'; * * Les pentes 'ET' les limiteurs * 'SI' (ORD_ESP 'EGA' 2); 'DETR' GRADR; 'DETR' GRADP; 'DETR' GRADV; 'DETR' GRADY; 'DETR' ALR; 'DETR' ALP; 'DETR' ALV; 'DETR' ALY; 'FINSI' ; * ******** On impose le CL * * 'SI' LOGLIM; PROLIM RV ; 'FINSI' ; 'SI' LOGQUIT; 'QUITTER' BLOC1; 'FINSI'; 'MENAGE' ; 'FIN' BLOC1 ; ******************************************** **** FIN de Boucle Sur les Pas de Temps *** ******************************************** 'SINON' ; ********************************************************* **** Mono-espece, boucle sur les pas de temps **** ********************************************************* KINCO . 'V' KINCO . 'P' KINCO . 'T' (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI') ; 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'); I = 0 ; 'REPETER' BLOC1 (RV . 'ITMA') ; I = I + 1 ; * ***** Les variables primitives * KINCO . 'V' KINCO . 'P' KINCO . 'T' (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI') ; 'SI' (ORD_ESP 'EGA' 1) ; ROF VITF PF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI') (KINCO . 'V') (KINCO . 'P') ; '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 ; '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'); ('TEXTE' NOMPER) (RV . NOTABLE) ; 'FIN' BLOC2 ; * ********* Mise a jour de la table RV . 'PASDETPS' * 'SI' ('EXISTE' RV 'DTI'); DTI = 'MINIMUM' (RV . 'PASDETPS' . 'DTCONV') ); 'SINON'; DTI = (RV . 'PASDETPS' . 'DTCONV'); 'FINSI'; RV . 'PASDETPS' . 'DELTAT' = DTI ; TMPS = RV . 'PASDETPS' . 'TPS'; DTI0 = TFIN '-' TMPS; 'SI' (DTI0 '<EG' DTI); DTI = DTI0; RV . 'PASDETPS' . 'DELTAT' = DTI ; LOGQUIT = VRAI; 'SINON' ; LOGQUIT = FAUX ; 'FINSI' ; * ******** On avance au pas de temps suivant * * N.B. Tn+1 = Tn + (CFL * RV . 'PASDETPS' . 'DELTAT'); * * ******** On detrui les choses qui ne servent plus * * * Les variables primitives * 'OUBL' KINCO 'V'; 'OUBL' KINCO 'P'; 'OUBL' KINCO 'T'; 'OUBL' KINCO 'GAMMA'; * * Les MCHAML faces * 'DETR' ROF ; 'DETR' VITF ; 'DETR' PF ; 'OUBL' KINCO 'RNF'; 'OUBL' KINCO 'VITNF'; 'OUBL' KINCO 'PNF'; * * Les pentes 'ET' les limiteurs * 'SI' (ORD_ESP 'EGA' 2); 'DETR' GRADR; 'DETR' GRADP; 'DETR' GRADV; 'DETR' ALR; 'DETR' ALP; 'DETR' ALV; 'FINSI' ; * ******** On impose le CL * * 'SI' LOGLIM; PROLIM RV ; 'FINSI' ; 'SI' LOGQUIT; 'QUITTER' BLOC1; 'FINSI'; 'MENAGE' ; 'FIN' BLOC1 ; ******************************************** **** FIN de Boucle Sur les Pas de Temps *** ******************************************** 'FINSI' ; 'FINPROC' ; ***************************************************** ***************************************************** ** FIN PROCEDURE EXEX ** ***************************************************** ***************************************************** ***************************************************** ***************************************************** ***** PROCEDURE PROLIM ***** ***************************************************** ***************************************************** * **** Cas Euler mono-espece * 'DEBPROC' PROLIM ; 'ARGUMENT' RV*TABLE ; * **** RV . 'DOMAINE' -> KDOMA * *KDOMA = RV . 'DOMAINE' ; KDOMA = RV . 'MODTOT' ; KDOMA2 = RV . 'DOMAINE' ; KINCO = RV . 'INCO' ; KINCO . 'RNI' = 'KCHT' KDOMA 'SCAL' 'CENTRE' (KINCO . 'RNI') (KINCO . 'RNLIM'); (KINCO . 'GNI') (KINCO . 'GNLIM'); KINCO . 'ENI' = 'KCHT' KDOMA 'SCAL' 'CENTRE' (KINCO . 'ENI') (KINCO . 'ENLIM'); 'FINPROC' ; ***************************************************** ***************************************************** ***** FIN PROCEDURE PROLIM ***** ***************************************************** ***************************************************** ************ * MAILLAGE * ************ RAF = 4 ; NY = RAF ; NX = 6 '*' RAF ; L = 1.0D0 ; DX = L '/' NX '/' 2.0D0; H = NY '*' DX ; xD = 0.5D0 '*' L ; xG = -1.0D0 '*' xD ; yH = 0.5D0 '*' H ; yB = -1.0D0 '*' yH ; A1 = xG yB ; A2 = 0.0D0 yB ; A3 = xD yB ; A4 = xD yH ; A5 = 0.0D0 yH ; A6 = xG yH ; VECTG = XG 0.0D0 ; VECTD = XD 0.0D0 ; xBG = xG '-' DX; XBD = xD '+' DX; B1 = xBG yB; B2 = xBG yH; B3 = xBD yB; B4 = xBD yH; DOM1 = LAT12 'TRANSLATION' NX VECTG ; DOM2 = LAT12 'TRANSLATION' NX VECTD ; VECTFG = (-2.0D0 '*' DX) 0.0D0; VECTFD = (2.0 '*' DX) 0.0D0; FRONTG = LAT1 'TRANSLATION' 2 VECTFG; FRONTD = LAT2 'TRANSLATION' 2 VECTFD; * *** Rotation * ANGLE = 30.0D0; ORIG = 0.0D0 0.0D0; 'MESSAGE'; 'MESSAGE' (CHAIN 'ANGLE = ' ANGLE); 'MESSAGE'; DOM1 = DOM1 'TOURNER' ANGLE ORIG; DOM2 = DOM2 'TOURNER' ANGLE ORIG; FRONTG = FRONTG 'TOURNER' ANGLE ORIG; FRONTD = FRONTD 'TOURNER' ANGLE ORIG; DOMINT = DOM1 'ET' DOM2 ; 'ELIMINATION' DOMINT 1D-6; FRONT = FRONTG 'ET' FRONTD ; 'ELIMINATION' FRONT 1D-6; DOMTOT = DOMINT 'ET' FRONT; 'ELIMINATION' DOMTOT 1D-6; ********************** *** OBJETS MODELES *** ********************** MDOMTOT = 'CHANGER' DOMTOT 'QUAF' ; MDOMINT = 'CHANGER' DOMINT 'QUAF' ; MDOM1 = 'CHANGER' DOM1 'QUAF' ; MDOM2 = 'CHANGER' DOM2 'QUAF' ; MFRONTG = 'CHANGER' FRONTG 'QUAF' ; MFRONTD = 'CHANGER' FRONTD 'QUAF' ; MFRONT = 'CHANGER' FRONT 'QUAF' ; MFRONTG 'ET' MFRONTD 'ET' MFRONT) 1.E-5; MDNS = 'EULER' ; * ******* Creation de la ligne Utilisée pour le Post-Traitement * reliant les points centres * XINIT = XG '+' (0.5D0 '*' DX) ; YINIT = YB '+' (0.5D0 '*' DX) ; XFIN = XD '-' (0.5D0 '*' DX) ; YFIN = YINIT ; PINI = XINIT YINIT; PFIN = XFIN YFIN ; IAUX = (2 '*' NX) '-' 1 ; COURB = PINI 'DROIT' IAUX PFIN; COURB = COURB 'TOURNER' ANGLE ORIG; COURB = COURB 'COULEUR' 'VERT'; 'SI' GRAPH ; 'TITRE' ('CHAINE' 'Maillage '); 'FINSI' ; * *** Etats exacte * ro1 = rog ; u1 = ug ; p1 = pg ; ETHER1 = ETHERg ; T1 = Tg ; ro2 = rod ; u2 = ud ; p2 = pd ; ETHER2 = ETHERd ; T2 = Td ; * **** On inverse les etats, pour controller qu'on a le meme resultats * 'SI' VRAI ; rog = ro2 ; ug = -1.0 '*' u2 ; pg = p2 ; ETHERg = ETHER2 ; Tg = T2 ; rod = ro1 ; ud = -1.0 '*' u1 ; pd = p1 ; ETHERd = ETHER1 ; Td = T1 ; 'FINSI' ; * *** Etat gauche (rog, ug, ETHERg, Tg , Pg deja definis) * ung = ug ; utg = 0.0 ; retg = rog '*' (ETHERg '+' (0.5 '*' ung '*' ung)) ; * rouxg = ((ung '*' ('COS' ANGLE)) '-' (utg '*' ('SIN' ANGLE))) '*' rog ; rouyg = ((ung '*' ('SIN' ANGLE)) '+' (utg '*' ('COS' ANGLE))) '*' rog; * *** Etat droite * und = ud ; utd = 0.0D0 ; retd = rod '*' (ETHERd '+' (0.5 '*' und '*' und)) ; rouxd = ((und '*' ('COS' ANGLE)) '-' (utd '*' ('SIN' ANGLE))) '*' rod; rouyd = ((und '*' ('SIN' ANGLE)) '+' (utd '*' ('COS' ANGLE))) '*' rod; * *** ro * * *** ro u, ro v * * *** ro e * ******************************************************** *** CREATION DE 'MODE' POUR GRAPHIQUER LE CHAMELEM *** ******************************************************** * **** Les variables primitives * * **** Enthalpie totale * HTN = ((REN '+' PN) '/' RN) ; * **** Les vitesses dans le repaire tube * VNN = (VX * ('COS' ANGLE)) '+' (VY * ('SIN' ANGLE)) ; VNT = (VY * ('COS' ANGLE)) '-' (VX * ('SIN' ANGLE)) ; * *** GRAPHIQUE DES C.I. * 'SI' GRAPH ; * 'SI' FAUX ; * *** CREATION DE CHAMELEM * 'FINSI' ; *********************** **** La table EQEX **** *********************** NITER = 50 ; TFIN = 10000 ; 'TPSI' 0. 'TFINAL' TFIN * ***** Option VF = volumes finis * CONS = conservative * EULER = euler monoespece * VANLEER = methode * 'OPTI' 'VF' 'CONS' 'EULERMST' METO * ***** Procedure CALCUL * 'ZONE' $DOMTOT 'OPER' 'CALCUL' * ***** Operateur 'KONV' * 'ZONE' $DOMTOT 'OPER' 'KONV' * ***** Arguments de 'KONV' (maximum 8 chatacters) * 'IPGAZ' 'RNF' 'VITNF' 'PNF' * ***** LIST des inconnues * 'INCO' 'RNI' 'GNI' 'ENI' ; * *** La table RV . INCO (de soustype INCO); * RV . 'INCO' = TABLE 'INCO' ; * *** Stokage des inconnues des equations d'Euler. * RV . 'INCO' . 'RNI' = 'COPIER' RN ; RV . 'INCO' . 'GNI' = 'COPIER' GN ; RV . 'INCO' . 'ENI' = 'COPIER' REN ; * *** Le gaz * RV . 'INCO' . 'IPGAZ' = PGAZ ; * *** CONDITIONS LIMITS * RV . 'INCO' . 'CLIM' = VRAI ; RV . 'INCO' . 'RNLIM' = 'COPIER' RO_f ; RV . 'INCO' . 'GNLIM' = 'COPIER' GN_f ; RV . 'INCO' . 'ENLIM' = 'COPIER' RE_f ; * **** Ordre en espace * Ordre en temps * IE = 2 ; IT = 2 ; RV . 'ORDREESP' = IE ; RV . 'ORDRETPS' = IT ; * **** Test de la convergence * RN0 = 'COPIER' RN ; RV . 'INCO' . 'RN0' = 'COPIER' RN ; *??? RV . 'MODTOT' = $DOMTOT ; * *********************************** *** Execution EXEX *** *********************************** * 'MESSAGE' ; 'MESSAGE' '**************************'; 'MESSAGE' ('CHAINE' 'METHODE : ' METO) ; 'MESSAGE' '**************************'; 'MESSAGE' ; 'TEMPS' ; EXEX RV ; 'TEMPS' ; TFIN = RV. 'PASDETPS'. 'TPS'; * **** SOLUTIONS * * **** Les variables conservatives * RN = 'COPIER' (RV . 'INCO' . 'RNI'); GN = 'COPIER' (RV . 'INCO'. 'GNI'); REN = 'COPIER' (RV . 'INCO'. 'ENI'); * **** Les variables primitives * * **** Enthalpie totale * HTN = ((REN '+' PN) '/' RN) ; * **** Les vitesses dans le repaire tube * VNN = (VX * ('COS' ANGLE)) '+' (VY * ('SIN' ANGLE)) ; VNT = (VY * ('COS' ANGLE)) '-' (VX * ('SIN' ANGLE)) ; * *** GRAPHIQUE DES SOLUTIONS * 'SI' GRAPH ; * 'SI' FAUX ; * *** CREATION DE CHAMELEM * 'FINSI' ; * *** Objects evolutions * xx yy = 'COORDONNEE' Courb; x0 = 'MINIMUM' lxx; x1 = 'MAXIMUM' lxx ; * ro tro = CHAINE '1D ' METO ' : RO IT ' IT ' IE ' IE ' tmps ' TFIN ' elem ' 'QUA4' ; * u tu = CHAINE '1D ' METO ' : U IT ' IT ' IE ' IE ' tmps ' TFIN ' elem ' 'QUA4' ; * v tv = CHAINE '1D ' METO ' : V IT ' IT ' IE ' IE ' tmps ' TFIN ' elem ' 'QUA4' ; 'SI' GRAPH ; 'DESSIN' evv 'TITRE' tv 'XBOR' x0 x1; 'FINSI' ; * p tp = CHAINE '1D ' METO ' : P IT ' IT ' IE ' IE ' tmps ' TFIN ' elem ' 'QUA4' ; * ht tht = CHAINE '1D ' METO ' : ht IT ' IT ' IE ' IE ' tmps ' TFIN ' elem ' 'QUA4' ; * *** Solution analitique hg = ETHERg '+' (pg '/' rog) '+' (0.5 '*' ug '*' ug) ; x = 'EXTRAIRE' lxx &BLOC2; 'SI' (x < 0) ; 'SINON' ; 'FINSI' ; 'FIN' BLOC2; 'SI' GRAPH ; TAB1=TABLE; TAB1.'TITRE'= TABLE ; TAB1.1='MARQ TRIB REGU'; TAB1.2='MARQ CROI REGU'; 'DESSIN' (evro 'ET' evroa) 'TITRE' tro 'XBOR' x0 x1 'LEGE' TAB1; 'DESSIN' (evp 'ET' evpa) 'TITRE' tp 'XBOR' x0 x1 'LEGE' TAB1; 'DESSIN' (evu 'ET' evua) 'TITRE' tu 'XBOR' x0 x1 'LEGE' TAB1; 'DESSIN' (evht 'ET' evha) 'TITRE' tht 'XBOR' x0 x1 'LEGE' TAB1; 'FINSI' ; * **** Tests * * Convergence 'SI' (ERCON > -3) ; 'MESSAGE' 'Probleme de convergence' ; 'ERREUR' 5; 'FINSI' ; 'SI' GRAPH ; (RV.INCO.'ER') ; 'DESSIN' EVOL4 'XBOR' 0. (2. '*' niter) 'YBOR' -12.0 0.0 'TITRE' ('CHAINE' METO ' IE =' IE ' IT =' IT) ; 'FINSI' ; ERRO = 'ABS' (LRO '-' LROAN) ; ERP = 'ABS' (LP '-' LPAN) ; ERU = 'ABS' (LU '-' LUAN) ; ERH = 'ABS' (LHT '-' LHTAN) ; L1RO = 0.0 ; L1P = 0.0 ; L1U = 0.0 ; L1H = 0.0 ; 'REPETER' BL1 NDIM ; L1RO = L1RO '+' ('EXTRAIRE' &BL1 ERRO) ; L1P = L1P '+' ('EXTRAIRE' &BL1 ERP) ; L1U = L1U '+' ('EXTRAIRE' &BL1 ERU) ; L1H = L1H '+' ('EXTRAIRE' &BL1 ERH) ; 'FIN' BL1 ; L1RO = L1RO '/' (NDIM * ('MAXIMUM' lroan)) ; L1P = L1P '/' (NDIM * ('MAXIMUM' lpan)) ; L1U = L1U '/' (NDIM * ('MAXIMUM' luan 'ABS' )) ; L1H = L1H '/' (NDIM * ('MAXIMUM' lhtan)) ; 'SI' (ERRMAX > 1.0D-4); 'ERREUR' 5; 'FINSI' ; 'FIN' ;
© Cast3M 2003 - Tous droits réservés.
Mentions légales