Télécharger stationary_shock.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : stationary_shock.dgibi
  2. ***********************************************************************
  3. ***********************************************************************
  4. ***********************************************************************
  5. *** CALCUL DU TUBE A CHOC; CAS MULTIESPECE ****
  6. *** GAZ mono-especes "THERMALLY PERFECT" ****
  7. *** ****
  8. *** FORMULATION VF COMPRESSIBLE EXPLICITE ****
  9. *** DIFFERENTS SOLVEURS ****
  10. *** ****
  11. *** Choc stationnaire ****
  12. *** A. BECCANTINI DRN/DMT/SEMT/LTMF FEVRIER 2000 ****
  13. ***********************************************************************
  14. ***********************************************************************
  15. ***********************************************************************
  16.  
  17. 'MESSAGE' 'A mettre a jours' ;
  18. 'FIN' ;
  19.  
  20. 'OPTION' 'DIME' 2 ;
  21. 'OPTION' 'ELEM' 'QUA4' ;
  22. 'OPTION' 'ISOV' 'SULI' ;
  23. 'OPTION' 'ECHO' 0 ;
  24. 'OPTION' 'TRAC' 'X';
  25.  
  26. GRAPH = FAUX ;
  27. * GRAPH = VRAI ;
  28.  
  29. *
  30. *** Methodes possibles :
  31. *
  32. * 'VLH'
  33. * 'CG'
  34.  
  35. METO = 'CG' ;
  36.  
  37.  
  38. ***********************
  39. **** LA TABLE PGAZ ****
  40. ***********************
  41.  
  42. PGAZ = 'TABLE' ;
  43.  
  44. *
  45. **** Ordre des polynoms cv_i
  46. *
  47.  
  48. PGAZ . 'NORD' = 4 ;
  49.  
  50. *
  51. **** La seul espece
  52. *
  53.  
  54. PGAZ . 'ESPNEULE' = 'H2 ';
  55.  
  56. *
  57.  
  58. PGAZ . 'H2 ' = 'TABLE' ;
  59.  
  60. *
  61. **** R (J/Kg/K)
  62. *
  63.  
  64. PGAZ . 'H2 ' . 'R' = 4130.0 ;
  65.  
  66. *
  67. **** Regressions polynomials
  68. *
  69.  
  70. PGAZ . 'H2 ' . 'A' = 'PROG' 9834.91866 0.54273926 0.000862203836
  71. -2.37281455E-07 1.84701105E-11 ;
  72.  
  73.  
  74. *
  75. **** "Enthalpies" (ou energies) de formations a OK (J/Kg)
  76. * Note: ce sont des entites numeriques
  77. *
  78.  
  79. PGAZ . 'H2 ' . 'H0K' = -4.195D6 ;
  80.  
  81. *
  82. *** Fin PGAZ
  83. *
  84.  
  85. *
  86. **** Choc stationnaire
  87. *
  88.  
  89. pg = 1.0D5 ;
  90. rog = 1.0 ;
  91. Tg = (pg '*' rog) '/' (PGAZ . 'H2 ' . 'R') ;
  92.  
  93. * sstren > 1.0
  94.  
  95. sstren = 4.01 ;
  96. Td = sstren '*' Tg ;
  97.  
  98. * Det. ug, rod, ud
  99.  
  100. A0H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 1 ;
  101. A1H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 2 ;
  102. A2H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 3 ;
  103. A3H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 4 ;
  104. A4H2 = 'EXTRAIRE' (PGAZ . 'H2 ' . 'A') 5 ;
  105.  
  106. R = PGAZ . 'H2 ' . 'R' ;
  107.  
  108. T2 = Tg '*' Tg ;
  109. T3 = T2 '*' Tg ;
  110. T4 = T3 '*' Tg ;
  111. T5 = T4 '*' Tg ;
  112.  
  113. ETHERg = ((A0H2 * Tg) '+' ((A1H2 '/' 2.0) * T2) '+'
  114. ((A2H2 '/' 3.0) * T3) '+' ((A3H2 '/' 4.0) * T4) '+'
  115. ((A4H2 '/' 5.0) * T5)) ;
  116.  
  117.  
  118. T2 = Td '*' Td ;
  119. T3 = T2 '*' Td ;
  120. T4 = T3 '*' Td ;
  121. T5 = T4 '*' Td ;
  122.  
  123. ETHERd = ((A0H2 * Td) '+' ((A1H2 '/' 2.0) * T2) '+'
  124. ((A2H2 '/' 3.0) * T3) '+' ((A3H2 '/' 4.0) * T4) '+'
  125. ((A4H2 '/' 5.0) * T5)) ;
  126.  
  127.  
  128. RTg = R '*' Tg ;
  129. RTd = R '*' Td ;
  130.  
  131. * x = rog '/' rod `in (0,1]
  132.  
  133. NDEF = 100 ;
  134. DX = 1.0 /NDEF ;
  135. X = 0.0 ;
  136. AEQ2 = RTg ;
  137. AEQ1 = (2.0 '*' (ETHERd '-' ETHERg)) '+' RTd '-' RTg ;
  138. AEQ0 = -1.0 '*' RTd ;
  139.  
  140. LIX = 'PROG' X ;
  141. LIF = 'PROG' AEQ0 ;
  142.  
  143. 'REPETER' BL1 NDEF ;
  144. X = X '+' DX ;
  145. X2 = X '*' X ;
  146. FUN = (AEQ2 '*' X2) '+' (AEQ1 '*' X) '+' AEQ0 ;
  147. LIX = LIX 'ET' ('PROG' X) ;
  148. LIF = LIF 'ET' ('PROG' FUN) ;
  149. 'FIN' BL1 ;
  150.  
  151. EVFUN = 'EVOL' 'MANU' 'rog/rod' LIX 'fun' LIF ;
  152.  
  153. 'SI' FAUX ;
  154. 'DESSIN' EVFUN 'MIMA' ;
  155. 'FINSI' ;
  156.  
  157. * Selection de la racine:
  158. * XSOL \in (0,1]
  159.  
  160. XSOL = ((((AEQ1 '**' 2) '-' (4.0 '*' AEQ0 * AEQ2)) '**' 0.5) '-' AEQ1)
  161. '/' (2.0 * AEQ2) ;
  162.  
  163. *
  164.  
  165. rod = rog '/' XSOL ;
  166.  
  167. pd = RTd '*' rod;
  168.  
  169. RC1 = 2.0 '*' (ETHERd '+' (R '*' Td) '-' (ETHERg '+' (R '*' Tg))) ;
  170. ud = RC1 '*' (XSOL '**' 2) '/' (1.0 '-' (XSOL '**' 2)) ;
  171. ud = ud '**' 0.5 ;
  172.  
  173. ug = (ud '*' rod) '/' rog ;
  174.  
  175.  
  176. * Control de Rankine-Hugoniot
  177.  
  178. err1 = 'ABS' (((rog '*' ug) '-' (rod '*' ud)) '/' (rog '*' ug)) ;
  179. err2 = 'ABS' (((rog '*' ug '*' ug) '+' pg '-'
  180. (rod '*' ud '*' ud) '-' pd)
  181. '/' ((rog '*' ug '*' ug) '+' pg)) ;
  182. err3 = 'ABS' (((ETHERg '+' RTg '+' (0.5 '*' ug '*' ug)) '-'
  183. (ETHERd '+' RTd '+' (0.5 '*' ud '*' ud))) '/'
  184. (ETHERd '+' RTd '+' (0.5 '*' ud '*' ud))) ;
  185.  
  186. ERMAX = 'MAXIMUM' ( 'PROG' err1 err2 err3) ;
  187.  
  188. 'SI' (ERMAX > 1.0d-10);
  189. 'ERREUR' 'No Rankine-Hugoniot';
  190. 'FINSI' ;
  191.  
  192.  
  193. *******************************************************
  194. ***** PROCEDURE POUR TESTER CONVERGENCE *****
  195. *******************************************************
  196.  
  197. 'DEBPROC' CALCUL ;
  198. 'ARGUMENT' RVX*'TABLE' ;
  199.  
  200. RV = RVX . 'EQEX' ;
  201.  
  202. *KDOMA = RV . 'DOMAINE' ;
  203. KDOMA = RV . 'MODTOT' ;
  204.  
  205. RNi = RV . 'INCO' . 'RNI' ;
  206. RN0 = RV . 'INCO' . 'RN0' ;
  207.  
  208. *
  209. *** RN0 = solution à t = tn_M1;
  210. *
  211.  
  212. DD = RV . 'PASDETPS' . 'NUPASDT' ;
  213. NINTE = 5;
  214. NN = DD/NINTE ;
  215. LO = (DD-(NINTE*NN)) EGA 0 ;
  216.  
  217. 'SI' ( LO ) ;
  218.  
  219. RNi = 'KCHT' KDOMA 'SCAL' 'CENTRE' RNi ;
  220. RN0 = 'KCHT' KDOMA 'SCAL' 'CENTRE' RN0 ;
  221.  
  222. ERR = 'KOPS' RNi '-' RN0 ;
  223.  
  224. ERR = 'KOPS' ERR '/' RN0;
  225.  
  226. ELI = 'MAXIMUM' ERR 'ABS' ;
  227. 'MESSAGE' eli ;
  228. ELI = ('LOG' (ELI + 1.0E-10))/('LOG' 10.) ;
  229. 'MESSAGE' ('CHAINE'
  230. 'ITER ' DD ' ERREUR LINF ' ELI );
  231. IT = 'PROG' DD ;
  232. ER = 'PROG' ELI ;
  233. RV . 'INCO' . 'IT' = (RV . 'INCO' . 'IT') 'ET' IT ;
  234. RV . 'INCO' . 'ER' = (RV . 'INCO' . 'ER') 'ET' ER ;
  235. 'FINSI' ;
  236.  
  237. RV . 'INCO' . 'RN0' = 'COPIER' RNi;
  238.  
  239. 'FINPROC' ;
  240.  
  241. *****************************************************
  242. *****************************************************
  243. ** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE **
  244. ** CAS MULTIESPECES "THERMALLY PERFECT" **
  245. *****************************************************
  246. *****************************************************
  247.  
  248. 'DEBPROC' EXEX ;
  249. 'ARGUMENT' RV*TABLE ;
  250.  
  251. *******************************************
  252. **** Recherche de RV . *KONV . IDEUL ****
  253. *******************************************
  254.  
  255. *
  256. **** Nom de la table RV . *'KONV' -> NOMT
  257. *
  258.  
  259. NBOP = 'DIME' (RV . 'LISTOPER' ) ;
  260.  
  261. 'REPETER' BL1 NBOP;
  262. MCEL = 'EXTRAIRE' &BL1 RV . 'LISTOPER';
  263. 'SI' ( 'EGA' MCEL 'KONV ');
  264. NOMT = 'MOT' ('TEXTE' ('CHAINE' &BL1 MCEL));
  265. 'QUITTER' BL1;
  266. 'FINSI' ;
  267. 'FIN' BL1;
  268.  
  269. IEUL = RV . NOMT . 'KOPT' . 'IDEUL';
  270. 'SI' ('NON' (IEUL 'EGA' 3));
  271. 'MESSAGE' 'EULERMST ???';
  272. 'ERREUR' 21;
  273. 'FINSI' ;
  274.  
  275. * Mono-espece ou multi-especes
  276.  
  277. 'SI' ('EXISTE' (RV . NOMT) 'ARG5') ;
  278. LOGMUL = VRAI ;
  279. 'SINON' ;
  280. LOGMUL = FAUX ;
  281. 'FINSI' ;
  282.  
  283. *
  284. **** CL
  285. *
  286.  
  287.  
  288. LOGLIM = RV . 'INCO' . 'CLIM' ;
  289.  
  290.  
  291. ******************************************
  292. **** Ordre en espace, ordre en temps ****
  293. ******************************************
  294.  
  295. ORD_ESP = RV . 'ORDREESP' ;
  296. ORD_TPS = RV . 'ORDRETPS' ;
  297.  
  298. 'MESSAGE' '--------------------------';
  299. 'MESSAGE' 'Ordre en Espace :' ord_esp;
  300. 'MESSAGE' 'Ordre en Temps :' ord_tps;
  301. 'MESSAGE' '--------------------------';
  302.  
  303. 'SI' ((ORD_ESP 'EGA' 1) 'ET' (ORD_TPS 'EGA' 2));
  304. 'MESSAGE' ;
  305. 'MESSAGE' (CHAINE 'Ordre en Espace doit etre 2');
  306. 'MESSAGE' (CHAINE 'On impose ça.');
  307. 'MESSAGE' ;
  308. RV . 'ORDREESP' = 2 ;
  309. 'MESSAGE' ;
  310. 'MESSAGE' '--------------------------';
  311. 'MESSAGE' 'Ordre en Espace :' ord_esp;
  312. 'MESSAGE' 'Ordre en Temps :' ord_tps;
  313. 'MESSAGE' '--------------------------';
  314. 'FINSI' ;
  315.  
  316.  
  317. ******************************
  318. **** La table 'PASDETPS' ****
  319. ******************************
  320.  
  321. TPSI = RV . 'TPSI' ;
  322. TFIN = RV . 'TFINAL';
  323. RV . 'PASDETPS' . 'TPS' = TPSI;
  324.  
  325. *
  326. **** DELTAT-1 est un argument de PRET (prediction)
  327. * Donc on doit l'initialiser.
  328. *
  329.  
  330. RV . 'PASDETPS' . 'DELTAT-1' = 0.0D0;
  331. CFL = rv.'ALFA' ;
  332.  
  333.  
  334. *********************
  335. **** Les TABLES *****
  336. *********************
  337.  
  338. *
  339. **** RV . 'INCO'
  340. * RV . 'DOMAINE'
  341. * RV . 'KIZD'
  342. * RV . 'KIZG'
  343.  
  344.  
  345. *
  346. **** RV . 'INCO' -> KINCO
  347. *
  348.  
  349. KINCO = (RV . 'INCO') ;
  350.  
  351.  
  352. *
  353. **** RV . 'DOMAINE' -> KDOMA
  354. *
  355.  
  356. *KDOMA = (RV . 'DOMAINE') ;
  357. KDOMA = (RV . 'MODTOT') ;
  358. KDOMA2 = (RV . 'DOMAINE') ;
  359.  
  360. *
  361. **** RV . 'KIZD' contient les volumes des ELTs
  362. *
  363.  
  364. 'SI' ('NON' ('EXISTE' RV 'KIZD')) ;
  365. 'KDIA' RV ;
  366. 'FINSI' ;
  367.  
  368. *
  369. ***** RV . 'KIZG' contient les flux aux interfaces.
  370. *
  371.  
  372. 'SI' ('NON' ('EXISTE' RV 'KIZG')) ;
  373. RV . 'KIZG' = 'TABLE' 'KIZG' ;
  374. 'FINSI' ;
  375.  
  376. 'SI' LOGMUL ;
  377.  
  378. *********************************************************
  379. **** Multi-especes, boucle Sur les Pas de Temps ****
  380. *********************************************************
  381.  
  382. *
  383. **** Evaluation de coeff pour le calcule des pentes
  384. *
  385.  
  386. KINCO . 'V' KINCO . 'P' KINCO . 'T' KINCO . 'Y'
  387. KINCO . 'GAMMA' = 'PRIM' 'PERFTEMP' (KINCO . 'IPGAZ')
  388. (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI')
  389. (KINCO. 'RYNI');
  390.  
  391. GRADR ALR COEFR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  392. (KINCO . 'RNI');
  393.  
  394. GRADP ALP COEFP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  395. (KINCO . 'P');
  396.  
  397. GRADV ALV COEFV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR'
  398. (KINCO . 'V');
  399.  
  400. GRADY ALY COEFY = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  401. (KINCO . 'Y');
  402.  
  403.  
  404. I = 0 ;
  405.  
  406. 'REPETER' BLOC1 (RV . 'ITMA') ;
  407.  
  408. I = I + 1 ;
  409.  
  410. *
  411. ***** Les variables primitives
  412. *
  413. KINCO . 'V' KINCO . 'P' KINCO . 'T' KINCO . 'Y'
  414. KINCO . 'GAMMA' = 'PRIM' 'PERFTEMP' (KINCO . 'IPGAZ')
  415. (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI')
  416. (KINCO. 'RYNI');
  417.  
  418. 'SI' (ORD_ESP 'EGA' 1) ;
  419.  
  420. ROF VITF PF YF = 'PRET' 'PERFTEMP'
  421. ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI')
  422. (KINCO . 'V') (KINCO . 'P') (KINCO . 'Y') ;
  423.  
  424. 'SINON';
  425.  
  426. *
  427. ***** Ordre 2 en espace => calcul des pentes
  428. *
  429.  
  430. GRADR ALR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  431. (KINCO . 'RNI') 'GRADGEO' COEFR ;
  432.  
  433. GRADP ALP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  434. (KINCO . 'P') 'GRADGEO' COEFP ;
  435.  
  436. GRADV ALV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR'
  437. (KINCO . 'V') 'GRADGEO' COEFV ;
  438.  
  439. GRADY ALY = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  440. (KINCO . 'Y') 'GRADGEO' COEFY ;
  441.  
  442. 'SI' (ORD_TPS 'EGA' 1);
  443.  
  444. ROF VITF PF YF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS
  445. KDOMA (KINCO . 'IPGAZ')
  446. (KINCO . 'RNI') GRADR ALR
  447. (KINCO . 'V') GRADV ALV
  448. (KINCO . 'P') GRADP ALP
  449. (KINCO . 'Y') GRADY ALY ;
  450.  
  451.  
  452. 'SINON' ;
  453. *
  454. ********* Ordre 2 en temps
  455. *
  456. ROF VITF PF YF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS
  457. KDOMA (KINCO . 'IPGAZ')
  458. (KINCO . 'RNI') GRADR ALR
  459. (KINCO . 'V') GRADV ALV
  460. (KINCO . 'P') GRADP ALP
  461. (KINCO . 'Y') GRADY ALY
  462. (KINCO . 'GAMMA')
  463. ((RV . 'PASDETPS' . 'DELTAT-1')/2.0);
  464. 'FINSI' ;
  465.  
  466. 'FINSI' ;
  467.  
  468. *
  469. *********** Creation de MCHAML de type 'FACEL' pour les
  470. * calcul de flux aux interfaces
  471.  
  472.  
  473.  
  474. KINCO . 'RNF' = ROF ;
  475. KINCO . 'VITNF' = VITF ;
  476. KINCO . 'PNF' = PF ;
  477. KINCO . 'YF' = YF ;
  478.  
  479.  
  480. *
  481. ********* Boucle sur les operateurs
  482. *
  483.  
  484. 'REPETER' BLOC2 NBOP ;
  485. NOMPER = 'EXTRAIRE' &BLOC2 (RV . 'LISTOPER');
  486. NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOC2 NOMPER) ) ;
  487. ('TEXTE' NOMPER) (RV . NOTABLE) ;
  488. 'FIN' BLOC2 ;
  489.  
  490. *
  491. ********* Mise a jour de la table RV . 'PASDETPS'
  492. *
  493.  
  494. 'SI' ('EXISTE' RV 'DTI');
  495. DTI = 'MINIMUM'
  496. ('PROG' ((RV . 'DTI') '/' CFL)
  497. (RV . 'PASDETPS' . 'DTCONV') );
  498. 'SINON';
  499. DTI = (RV . 'PASDETPS' . 'DTCONV');
  500. 'FINSI';
  501.  
  502. RV . 'PASDETPS' . 'DELTAT' = DTI ;
  503.  
  504. TMPS = RV . 'PASDETPS' . 'TPS';
  505. DTI0 = TFIN '-' TMPS;
  506. DTI0 = DTI0 '/' CFL;
  507.  
  508. 'SI' (DTI0 '<EG' DTI);
  509. DTI = DTI0;
  510. RV . 'PASDETPS' . 'DELTAT' = DTI ;
  511. LOGQUIT = VRAI;
  512. 'SINON' ;
  513. LOGQUIT = FAUX ;
  514. 'FINSI' ;
  515.  
  516.  
  517. *
  518. ******** On avance au pas de temps suivant
  519. *
  520. * N.B. Tn+1 = Tn + (CFL * RV . 'PASDETPS' . 'DELTAT');
  521. *
  522.  
  523. 'AVCT' RV CFL 'IMPR' (RV.'FIDT') ;
  524.  
  525. *
  526. ******** On detrui les choses qui ne servent plus
  527. *
  528. *
  529. * Les variables primitives
  530. *
  531. 'DETR' ( KINCO . 'V');
  532. 'DETR' ( KINCO . 'P');
  533. 'DETR' ( KINCO . 'T');
  534. 'DETR' ( KINCO . 'Y');
  535. 'DETR' ( KINCO . 'GAMMA');
  536. 'OUBL' KINCO 'V';
  537. 'OUBL' KINCO 'P';
  538. 'OUBL' KINCO 'T';
  539. 'OUBL' KINCO 'Y';
  540. 'OUBL' KINCO 'GAMMA';
  541. *
  542. * Les MCHAML faces
  543. *
  544. 'DETR' ROF ;
  545. 'DETR' VITF ;
  546. 'DETR' PF ;
  547. 'DETR' YF;
  548. 'OUBL' KINCO 'RNF';
  549. 'OUBL' KINCO 'VITNF';
  550. 'OUBL' KINCO 'PNF';
  551. 'OUBL' KINCO 'YF';
  552.  
  553. *
  554. * Les pentes 'ET' les limiteurs
  555. *
  556. 'SI' (ORD_ESP 'EGA' 2);
  557. 'DETR' GRADR;
  558. 'DETR' GRADP;
  559. 'DETR' GRADV;
  560. 'DETR' GRADY;
  561. 'DETR' ALR;
  562. 'DETR' ALP;
  563. 'DETR' ALV;
  564. 'DETR' ALY;
  565. 'FINSI' ;
  566.  
  567.  
  568. *
  569. ******** On impose le CL
  570. *
  571. *
  572. 'SI' LOGLIM;
  573. PROLIM RV ;
  574. 'FINSI' ;
  575.  
  576.  
  577. 'SI' LOGQUIT;
  578. 'QUITTER' BLOC1;
  579. 'FINSI';
  580.  
  581.  
  582. 'MENAGE' ;
  583.  
  584. 'FIN' BLOC1 ;
  585.  
  586. ********************************************
  587. **** FIN de Boucle Sur les Pas de Temps ***
  588. ********************************************
  589.  
  590. 'SINON' ;
  591.  
  592.  
  593. *********************************************************
  594. **** Mono-espece, boucle sur les pas de temps ****
  595. *********************************************************
  596.  
  597.  
  598. KINCO . 'V' KINCO . 'P' KINCO . 'T'
  599. KINCO . 'GAMMA' = 'PRIM' 'PERFTEMP' (KINCO . 'IPGAZ')
  600. (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI') ;
  601.  
  602.  
  603. GRADR ALR COEFR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  604. (KINCO . 'RNI');
  605.  
  606. GRADP ALP COEFP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  607. (KINCO . 'P');
  608.  
  609. GRADV ALV COEFV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR'
  610. (KINCO . 'V');
  611.  
  612.  
  613. I = 0 ;
  614.  
  615. 'REPETER' BLOC1 (RV . 'ITMA') ;
  616.  
  617. I = I + 1 ;
  618.  
  619. *
  620. ***** Les variables primitives
  621. *
  622. KINCO . 'V' KINCO . 'P' KINCO . 'T'
  623. KINCO . 'GAMMA' = 'PRIM' 'PERFTEMP' (KINCO . 'IPGAZ')
  624. (KINCO . 'RNI') (KINCO . 'GNI') (KINCO . 'ENI') ;
  625.  
  626. 'SI' (ORD_ESP 'EGA' 1) ;
  627.  
  628. ROF VITF PF = 'PRET' 'PERFTEMP'
  629. ORD_ESP ORD_TPS KDOMA (KINCO . 'IPGAZ') (KINCO . 'RNI')
  630. (KINCO . 'V') (KINCO . 'P') ;
  631.  
  632. 'SINON';
  633.  
  634. *
  635. ***** Ordre 2 en espace => calcul des pentes
  636. *
  637.  
  638. GRADR ALR = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  639. (KINCO . 'RNI') 'GRADGEO' COEFR ;
  640.  
  641. GRADP ALP = 'PENT' KDOMA 'CENTRE' 'EULESCAL' 'LIMITEUR'
  642. (KINCO . 'P') 'GRADGEO' COEFP ;
  643.  
  644. GRADV ALV = 'PENT' KDOMA 'CENTRE' 'EULEVECT' 'LIMITEUR'
  645. (KINCO . 'V') 'GRADGEO' COEFV ;
  646.  
  647.  
  648. 'SI' (ORD_TPS 'EGA' 1);
  649.  
  650. ROF VITF PF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS
  651. KDOMA (KINCO . 'IPGAZ')
  652. (KINCO . 'RNI') GRADR ALR
  653. (KINCO . 'V') GRADV ALV
  654. (KINCO . 'P') GRADP ALP ;
  655.  
  656. 'SINON' ;
  657. *
  658. ********* Ordre 2 en temps
  659. *
  660. ROF VITF PF = 'PRET' 'PERFTEMP' ORD_ESP ORD_TPS
  661. KDOMA (KINCO . 'IPGAZ')
  662. (KINCO . 'RNI') GRADR ALR
  663. (KINCO . 'V') GRADV ALV
  664. (KINCO . 'P') GRADP ALP
  665. (KINCO . 'GAMMA')
  666. ((RV . 'PASDETPS' . 'DELTAT-1')/2.0);
  667. 'FINSI' ;
  668.  
  669. 'FINSI' ;
  670.  
  671. *
  672. *********** Creation de MCHAML de type 'FACEL' pour les
  673. * calcul de flux aux interfaces
  674.  
  675.  
  676.  
  677. KINCO . 'RNF' = ROF ;
  678. KINCO . 'VITNF' = VITF ;
  679. KINCO . 'PNF' = PF ;
  680.  
  681. *
  682. ********* Boucle sur les operateurs
  683. *
  684.  
  685. 'REPETER' BLOC2 NBOP ;
  686. NOMPER = 'EXTRAIRE' &BLOC2 (RV . 'LISTOPER');
  687. NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOC2 NOMPER) ) ;
  688. ('TEXTE' NOMPER) (RV . NOTABLE) ;
  689. 'FIN' BLOC2 ;
  690.  
  691. *
  692. ********* Mise a jour de la table RV . 'PASDETPS'
  693. *
  694.  
  695. 'SI' ('EXISTE' RV 'DTI');
  696. DTI = 'MINIMUM'
  697. ('PROG' ((RV . 'DTI') '/' CFL)
  698. (RV . 'PASDETPS' . 'DTCONV') );
  699. 'SINON';
  700. DTI = (RV . 'PASDETPS' . 'DTCONV');
  701. 'FINSI';
  702.  
  703. RV . 'PASDETPS' . 'DELTAT' = DTI ;
  704.  
  705. TMPS = RV . 'PASDETPS' . 'TPS';
  706. DTI0 = TFIN '-' TMPS;
  707. DTI0 = DTI0 '/' CFL;
  708.  
  709. 'SI' (DTI0 '<EG' DTI);
  710. DTI = DTI0;
  711. RV . 'PASDETPS' . 'DELTAT' = DTI ;
  712. LOGQUIT = VRAI;
  713. 'SINON' ;
  714. LOGQUIT = FAUX ;
  715. 'FINSI' ;
  716.  
  717.  
  718. *
  719. ******** On avance au pas de temps suivant
  720. *
  721. * N.B. Tn+1 = Tn + (CFL * RV . 'PASDETPS' . 'DELTAT');
  722. *
  723.  
  724. 'AVCT' RV CFL 'IMPR' (RV.'FIDT') ;
  725.  
  726. *
  727. ******** On detrui les choses qui ne servent plus
  728. *
  729. *
  730. * Les variables primitives
  731. *
  732. 'DETR' ( KINCO . 'V');
  733. 'DETR' ( KINCO . 'P');
  734. 'DETR' ( KINCO . 'T');
  735. 'DETR' ( KINCO . 'GAMMA');
  736. 'OUBL' KINCO 'V';
  737. 'OUBL' KINCO 'P';
  738. 'OUBL' KINCO 'T';
  739. 'OUBL' KINCO 'GAMMA';
  740. *
  741. * Les MCHAML faces
  742. *
  743. 'DETR' ROF ;
  744. 'DETR' VITF ;
  745. 'DETR' PF ;
  746. 'OUBL' KINCO 'RNF';
  747. 'OUBL' KINCO 'VITNF';
  748. 'OUBL' KINCO 'PNF';
  749. *
  750. * Les pentes 'ET' les limiteurs
  751. *
  752. 'SI' (ORD_ESP 'EGA' 2);
  753. 'DETR' GRADR;
  754. 'DETR' GRADP;
  755. 'DETR' GRADV;
  756. 'DETR' ALR;
  757. 'DETR' ALP;
  758. 'DETR' ALV;
  759. 'FINSI' ;
  760.  
  761.  
  762. *
  763. ******** On impose le CL
  764. *
  765. *
  766. 'SI' LOGLIM;
  767. PROLIM RV ;
  768. 'FINSI' ;
  769.  
  770.  
  771. 'SI' LOGQUIT;
  772. 'QUITTER' BLOC1;
  773. 'FINSI';
  774.  
  775.  
  776. 'MENAGE' ;
  777.  
  778. 'FIN' BLOC1 ;
  779.  
  780. ********************************************
  781. **** FIN de Boucle Sur les Pas de Temps ***
  782. ********************************************
  783.  
  784. 'FINSI' ;
  785.  
  786. 'FINPROC' ;
  787.  
  788. *****************************************************
  789. *****************************************************
  790. ** FIN PROCEDURE EXEX **
  791. *****************************************************
  792. *****************************************************
  793.  
  794.  
  795. *****************************************************
  796. *****************************************************
  797. ***** PROCEDURE PROLIM *****
  798. *****************************************************
  799. *****************************************************
  800.  
  801. *
  802. **** Cas Euler mono-espece
  803. *
  804.  
  805.  
  806. 'DEBPROC' PROLIM ;
  807. 'ARGUMENT' RV*TABLE ;
  808.  
  809. *
  810. **** RV . 'DOMAINE' -> KDOMA
  811. *
  812.  
  813. *KDOMA = RV . 'DOMAINE' ;
  814. KDOMA = RV . 'MODTOT' ;
  815. KDOMA2 = RV . 'DOMAINE' ;
  816. KINCO = RV . 'INCO' ;
  817.  
  818. KINCO . 'RNI' = 'KCHT' KDOMA 'SCAL' 'CENTRE'
  819. (KINCO . 'RNI') (KINCO . 'RNLIM');
  820.  
  821. KINCO . 'GNI' = 'KCHT' KDOMA 'VECT' 'CENTRE'
  822. (KINCO . 'GNI') (KINCO . 'GNLIM');
  823.  
  824. KINCO . 'ENI' = 'KCHT' KDOMA 'SCAL' 'CENTRE'
  825. (KINCO . 'ENI') (KINCO . 'ENLIM');
  826.  
  827.  
  828. 'FINPROC' ;
  829.  
  830. *****************************************************
  831. *****************************************************
  832. ***** FIN PROCEDURE PROLIM *****
  833. *****************************************************
  834. *****************************************************
  835.  
  836.  
  837. ************
  838. * MAILLAGE *
  839. ************
  840.  
  841. RAF = 4 ;
  842. NY = RAF ;
  843. NX = 6 '*' RAF ;
  844.  
  845. L = 1.0D0 ;
  846. DX = L '/' NX '/' 2.0D0;
  847. H = NY '*' DX ;
  848.  
  849. xD = 0.5D0 '*' L ;
  850. xG = -1.0D0 '*' xD ;
  851. yH = 0.5D0 '*' H ;
  852. yB = -1.0D0 '*' yH ;
  853.  
  854. A1 = xG yB ;
  855. A2 = 0.0D0 yB ;
  856. A3 = xD yB ;
  857. A4 = xD yH ;
  858. A5 = 0.0D0 yH ;
  859. A6 = xG yH ;
  860. VECTG = XG 0.0D0 ;
  861. VECTD = XD 0.0D0 ;
  862.  
  863. xBG = xG '-' DX;
  864. XBD = xD '+' DX;
  865.  
  866. B1 = xBG yB;
  867. B2 = xBG yH;
  868. B3 = xBD yB;
  869. B4 = xBD yH;
  870.  
  871. BAS1 = A1 'DROI' NX A2 ;
  872. BAS2 = A2 'DROI' NX A3 ;
  873. HAU2 = A4 'DROI' NX A5 ;
  874. HAU1 = A5 'DROI' NX A6 ;
  875. LATG = B1 'DROI' NY B2 ;
  876. LAT1 = A1 'DROI' NY A6 ;
  877. LAT12 = A2 'DROI' NY A5 ;
  878. LAT2 = A3 'DROI' NY A4 ;
  879. LATD = B3 'DROI' NY B4 ;
  880.  
  881.  
  882. DOM1 = LAT12 'TRANSLATION' NX VECTG ;
  883.  
  884. DOM2 = LAT12 'TRANSLATION' NX VECTD ;
  885.  
  886. VECTFG = (-2.0D0 '*' DX) 0.0D0;
  887. VECTFD = (2.0 '*' DX) 0.0D0;
  888.  
  889. FRONTG = LAT1 'TRANSLATION' 2 VECTFG;
  890. FRONTG = FRONTG 'COUL' ROUG ;
  891.  
  892. FRONTD = LAT2 'TRANSLATION' 2 VECTFD;
  893. FRONTD = FRONTD 'COUL' VERT ;
  894.  
  895. *
  896. *** Rotation
  897. *
  898.  
  899. ANGLE = 30.0D0;
  900. ORIG = 0.0D0 0.0D0;
  901.  
  902. 'MESSAGE';
  903. 'MESSAGE' (CHAIN 'ANGLE = ' ANGLE);
  904. 'MESSAGE';
  905.  
  906. DOM1 = DOM1 'TOURNER' ANGLE ORIG;
  907. DOM2 = DOM2 'TOURNER' ANGLE ORIG;
  908. FRONTG = FRONTG 'TOURNER' ANGLE ORIG;
  909. FRONTD = FRONTD 'TOURNER' ANGLE ORIG;
  910.  
  911. DOMINT = DOM1 'ET' DOM2 ;
  912. 'ELIMINATION' DOMINT 1D-6;
  913.  
  914. FRONT = FRONTG 'ET' FRONTD ;
  915. 'ELIMINATION' FRONT 1D-6;
  916.  
  917. DOMTOT = DOMINT 'ET' FRONT;
  918. 'ELIMINATION' DOMTOT 1D-6;
  919.  
  920. **********************
  921. *** OBJETS MODELES ***
  922. **********************
  923. MDOMTOT = 'CHANGER' DOMTOT 'QUAF' ;
  924. MDOMINT = 'CHANGER' DOMINT 'QUAF' ;
  925. MDOM1 = 'CHANGER' DOM1 'QUAF' ;
  926. MDOM2 = 'CHANGER' DOM2 'QUAF' ;
  927. MFRONTG = 'CHANGER' FRONTG 'QUAF' ;
  928. MFRONTD = 'CHANGER' FRONTD 'QUAF' ;
  929. MFRONT = 'CHANGER' FRONT 'QUAF' ;
  930. 'ELIM' (MDOMTOT 'ET' MDOMINT 'ET' MDOM1 'ET' MDOM2 'ET'
  931. MFRONTG 'ET' MFRONTD 'ET' MFRONT) 1.E-5;
  932. MDNS = 'EULER' ;
  933. $DOMTOT = 'MODE' MDOMTOT MDNS ;
  934. $DOMINT = 'MODE' MDOMINT MDNS ;
  935. $DOM1 = 'MODE' MDOM1 MDNS ;
  936. $DOM2 = 'MODE' MDOM2 MDNS ;
  937. $FRONTG = 'MODE' MFRONTG MDNS ;
  938. $FRONTD = 'MODE' MFRONTD MDNS ;
  939. $FRONT = 'MODE' MFRONT MDNS ;
  940.  
  941. *
  942. ******* Creation de la ligne Utilisée pour le Post-Traitement
  943. * reliant les points centres
  944. *
  945.  
  946. XINIT = XG '+' (0.5D0 '*' DX) ;
  947. YINIT = YB '+' (0.5D0 '*' DX) ;
  948. XFIN = XD '-' (0.5D0 '*' DX) ;
  949. YFIN = YINIT ;
  950. PINI = XINIT YINIT;
  951. PFIN = XFIN YFIN ;
  952. IAUX = (2 '*' NX) '-' 1 ;
  953. COURB = PINI 'DROIT' IAUX PFIN;
  954. COURB = COURB 'TOURNER' ANGLE ORIG;
  955. COURB = COURB 'COULEUR' 'VERT';
  956. 'ELIMINATION' 0.001 Courb ('DOMA' $DOMTOT 'CENTRE') ;
  957.  
  958. 'SI' GRAPH ;
  959. 'TRACER' (('DOMA' $DOMTOT 'MAILLAGE') 'ET' COURB)
  960. 'TITRE' ('CHAINE' 'Maillage ');
  961. 'FINSI' ;
  962.  
  963. *
  964. *** Etats exacte
  965. *
  966.  
  967. ro1 = rog ;
  968. u1 = ug ;
  969. p1 = pg ;
  970. ETHER1 = ETHERg ;
  971. T1 = Tg ;
  972.  
  973. ro2 = rod ;
  974. u2 = ud ;
  975. p2 = pd ;
  976. ETHER2 = ETHERd ;
  977. T2 = Td ;
  978.  
  979. *
  980. **** On inverse les etats, pour controller qu'on a le meme resultats
  981. *
  982.  
  983. 'SI' VRAI ;
  984. rog = ro2 ;
  985. ug = -1.0 '*' u2 ;
  986. pg = p2 ;
  987. ETHERg = ETHER2 ;
  988. Tg = T2 ;
  989.  
  990. rod = ro1 ;
  991. ud = -1.0 '*' u1 ;
  992. pd = p1 ;
  993. ETHERd = ETHER1 ;
  994. Td = T1 ;
  995.  
  996. 'FINSI' ;
  997.  
  998. *
  999. *** Etat gauche (rog, ug, ETHERg, Tg , Pg deja definis)
  1000. *
  1001.  
  1002. ung = ug ;
  1003. utg = 0.0 ;
  1004. retg = rog '*' (ETHERg '+' (0.5 '*' ung '*' ung)) ;
  1005.  
  1006. *
  1007.  
  1008. rouxg = ((ung '*' ('COS' ANGLE)) '-'
  1009. (utg '*' ('SIN' ANGLE))) '*' rog ;
  1010.  
  1011. rouyg = ((ung '*' ('SIN' ANGLE)) '+'
  1012. (utg '*' ('COS' ANGLE))) '*' rog;
  1013.  
  1014.  
  1015. *
  1016. *** Etat droite
  1017. *
  1018.  
  1019. und = ud ;
  1020. utd = 0.0D0 ;
  1021. retd = rod '*' (ETHERd '+' (0.5 '*' und '*' und)) ;
  1022.  
  1023. rouxd = ((und '*' ('COS' ANGLE)) '-'
  1024. (utd '*' ('SIN' ANGLE))) '*' rod;
  1025. rouyd = ((und '*' ('SIN' ANGLE)) '+'
  1026. (utd '*' ('COS' ANGLE))) '*' rod;
  1027.  
  1028. *
  1029. *** ro
  1030. *
  1031.  
  1032. RO_f1 = 'KCHT' $FRONTG 'SCAL' 'CENTRE' rog ;
  1033. RO_f2 = 'KCHT' $FRONTD 'SCAL' 'CENTRE' rod ;
  1034. RO_f = 'KCHT' $FRONT 'SCAL' 'CENTRE' (RO_f1 'ET' RO_f2) ;
  1035.  
  1036. RO_i1 = 'KCHT' $DOM1 'SCAL' 'CENTRE' rog;
  1037. RO_i2 = 'KCHT' $DOM2 'SCAL' 'CENTRE' rod;
  1038. RO_i = 'KCHT' $DOMINT 'SCAL' 'CENTRE' (RO_i1 'ET' RO_i2);
  1039.  
  1040. RN = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' (RO_i 'ET' RO_f) ;
  1041.  
  1042. *
  1043. *** ro u, ro v
  1044. *
  1045.  
  1046. GN_f1 = 'KCHT' $FRONTG 'VECT' 'CENTRE' (rouxg rouyg);
  1047. GN_f2 = 'KCHT' $FRONTD 'VECT' 'CENTRE' (rouxd rouyd);
  1048. GN_f = 'KCHT' $FRONT 'VECT' 'CENTRE' (GN_f1 'ET' GN_f2);
  1049.  
  1050. GN_i1 = 'KCHT' $DOM1 'VECT' 'CENTRE' (rouxg rouyg);
  1051. GN_i2 = 'KCHT' $DOM2 'VECT' 'CENTRE' (rouxd rouyd);
  1052. GN_i = 'KCHT' $DOMINT 'VECT' 'CENTRE' (GN_i1 'ET' GN_i2);
  1053.  
  1054. GN = 'KCHT' $DOMTOT 'VECT' 'CENTRE' (GN_i 'ET' GN_f) ;
  1055.  
  1056. *
  1057. *** ro e
  1058. *
  1059.  
  1060. RE_f1 = 'KCHT' $FRONTG 'SCAL' 'CENTRE' retg ;
  1061. RE_f2 = 'KCHT' $FRONTD 'SCAL' 'CENTRE' retd ;
  1062. RE_f = 'KCHT' $FRONT 'SCAL' 'CENTRE' (RE_f1 'ET' RE_f2) ;
  1063.  
  1064. RE_i1 = 'KCHT' $DOM1 'SCAL' 'CENTRE' retg ;
  1065. RE_i2 = 'KCHT' $DOM2 'SCAL' 'CENTRE' retd ;
  1066. RE_i = 'KCHT' $DOMINT 'SCAL' 'CENTRE' (RE_i1 'ET' RE_i2);
  1067.  
  1068. REN = 'KCHT' $DOMTOT 'SCAL' 'CENTRE' (RE_i ET RE_f) ;
  1069.  
  1070.  
  1071. ********************************************************
  1072. *** CREATION DE 'MODE' POUR GRAPHIQUER LE CHAMELEM ***
  1073. ********************************************************
  1074.  
  1075. MOD1 = 'MODELISER' ('DOMA' $DOMTOT 'MAILLAGE') 'THERMIQUE' ;
  1076.  
  1077. *
  1078. **** Les variables primitives
  1079. *
  1080.  
  1081. VN PN TN GAMN = 'PRIM' 'PERFTEMP' PGAZ RN GN REN ;
  1082.  
  1083. *
  1084. **** Enthalpie totale
  1085. *
  1086.  
  1087.  
  1088. HTN = ((REN '+' PN) '/' RN) ;
  1089.  
  1090. *
  1091. **** Les vitesses dans le repaire tube
  1092. *
  1093.  
  1094.  
  1095. VX = 'EXCO' 'UX ' VN ;
  1096. VY = 'EXCO' 'UY ' VN ;
  1097.  
  1098. VNN = (VX * ('COS' ANGLE)) '+'
  1099. (VY * ('SIN' ANGLE)) ;
  1100.  
  1101. VNT = (VY * ('COS' ANGLE)) '-'
  1102. (VX * ('SIN' ANGLE)) ;
  1103.  
  1104. *
  1105. *** GRAPHIQUE DES C.I.
  1106. *
  1107.  
  1108. 'SI' GRAPH ;
  1109. * 'SI' FAUX ;
  1110.  
  1111. *
  1112. *** CREATION DE CHAMELEM
  1113. *
  1114. CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN ;
  1115. CHM_VNN = 'KCHA' $DOMTOT 'CHAM' VNN ;
  1116. CHM_VNT = 'KCHA' $DOMTOT 'CHAM' VNT ;
  1117. CHM_PN = 'KCHA' $DOMTOT 'CHAM' PN ;
  1118. CHM_TN = 'KCHA' $DOMTOT 'CHAM' TN ;
  1119. CHM_HTN = 'KCHA' $DOMTOT 'CHAM' HTN ;
  1120.  
  1121. TRAC CHM_RN MOD1 'TITR' ('CHAINE' 'RO at t=' 0.0);
  1122. TRAC CHM_PN MOD1 'TITR' ('CHAINE' 'P at t=' 0.0);
  1123. TRAC CHM_VNN MOD1 'TITR' ('CHAINE' 'VNN at t=' 0.0);
  1124. TRAC CHM_VNT MOD1 'TITR' ('CHAINE' 'VNT at t=' 0.0);
  1125. TRAC CHM_TN MOD1 'TITR' ('CHAINE' 'T at t=' 0.0);
  1126. TRAC CHM_HTN MOD1 'TITR' ('CHAINE' 'ht at t=' 0.0);
  1127. 'FINSI' ;
  1128.  
  1129.  
  1130. ***********************
  1131. **** La table EQEX ****
  1132. ***********************
  1133.  
  1134.  
  1135. CFL = 0.8D0 ;
  1136. NITER = 50 ;
  1137. TFIN = 10000 ;
  1138.  
  1139. RV = 'EQEX' ('DOMA' $DOMTOT 'TABLE') 'ITMA' NITER 'ALFA' CFL
  1140. 'TPSI' 0. 'TFINAL' TFIN
  1141. *
  1142. ***** Option VF = volumes finis
  1143. * CONS = conservative
  1144. * EULER = euler monoespece
  1145. * VANLEER = methode
  1146. *
  1147. 'OPTI' 'VF' 'CONS' 'EULERMST' METO
  1148. *
  1149. ***** Procedure CALCUL
  1150. *
  1151. 'ZONE' $DOMTOT 'OPER' 'CALCUL'
  1152. *
  1153. ***** Operateur 'KONV'
  1154. *
  1155. 'ZONE' $DOMTOT 'OPER' 'KONV'
  1156. *
  1157. ***** Arguments de 'KONV' (maximum 8 chatacters)
  1158. *
  1159. 'IPGAZ' 'RNF' 'VITNF' 'PNF'
  1160. *
  1161. ***** LIST des inconnues
  1162. *
  1163. 'INCO' 'RNI' 'GNI' 'ENI' ;
  1164.  
  1165.  
  1166. *
  1167. *** La table RV . INCO (de soustype INCO);
  1168. *
  1169.  
  1170. RV . 'INCO' = TABLE 'INCO' ;
  1171.  
  1172. *
  1173. *** Stokage des inconnues des equations d'Euler.
  1174. *
  1175.  
  1176. RV . 'INCO' . 'RNI' = 'COPIER' RN ;
  1177. RV . 'INCO' . 'GNI' = 'COPIER' GN ;
  1178. RV . 'INCO' . 'ENI' = 'COPIER' REN ;
  1179.  
  1180.  
  1181. *
  1182. *** Le gaz
  1183. *
  1184.  
  1185. RV . 'INCO' . 'IPGAZ' = PGAZ ;
  1186.  
  1187. *
  1188. *** CONDITIONS LIMITS
  1189. *
  1190.  
  1191. RV . 'INCO' . 'CLIM' = VRAI ;
  1192.  
  1193. RV . 'INCO' . 'RNLIM' = 'COPIER' RO_f ;
  1194. RV . 'INCO' . 'GNLIM' = 'COPIER' GN_f ;
  1195. RV . 'INCO' . 'ENLIM' = 'COPIER' RE_f ;
  1196.  
  1197. *
  1198. **** Ordre en espace
  1199. * Ordre en temps
  1200. *
  1201.  
  1202. IE = 2 ;
  1203. IT = 2 ;
  1204.  
  1205. RV . 'ORDREESP' = IE ;
  1206. RV . 'ORDRETPS' = IT ;
  1207.  
  1208. *
  1209. **** Test de la convergence
  1210. *
  1211.  
  1212. RN0 = 'COPIER' RN ;
  1213. RV . 'INCO' . 'RN0' = 'COPIER' RN ;
  1214. RV . 'INCO' . 'IT' = 'PROG' ;
  1215. RV . 'INCO' . 'ER' = 'PROG' ;
  1216.  
  1217. *???
  1218. RV . 'MODTOT' = $DOMTOT ;
  1219.  
  1220. *
  1221. ***********************************
  1222. *** Execution EXEX ***
  1223. ***********************************
  1224. *
  1225.  
  1226.  
  1227. 'MESSAGE' ;
  1228. 'MESSAGE' '**************************';
  1229. 'MESSAGE' ('CHAINE' 'METHODE : ' METO) ;
  1230. 'MESSAGE' '**************************';
  1231. 'MESSAGE' ;
  1232.  
  1233.  
  1234.  
  1235. 'TEMPS' ;
  1236. EXEX RV ;
  1237. 'TEMPS' ;
  1238.  
  1239.  
  1240. TFIN = RV. 'PASDETPS'. 'TPS';
  1241.  
  1242. *
  1243. **** SOLUTIONS
  1244. *
  1245.  
  1246. *
  1247. **** Les variables conservatives
  1248. *
  1249.  
  1250. RN = 'COPIER' (RV . 'INCO' . 'RNI');
  1251. GN = 'COPIER' (RV . 'INCO'. 'GNI');
  1252. REN = 'COPIER' (RV . 'INCO'. 'ENI');
  1253.  
  1254.  
  1255. *
  1256. **** Les variables primitives
  1257. *
  1258.  
  1259. VN PN TN GAMN = 'PRIM' 'PERFTEMP' PGAZ RN GN REN ;
  1260.  
  1261. *
  1262. **** Enthalpie totale
  1263. *
  1264.  
  1265. HTN = ((REN '+' PN) '/' RN) ;
  1266.  
  1267. *
  1268. **** Les vitesses dans le repaire tube
  1269. *
  1270.  
  1271. VX = 'EXCO' 'UX ' VN ;
  1272. VY = 'EXCO' 'UY ' VN ;
  1273.  
  1274. VNN = (VX * ('COS' ANGLE)) '+'
  1275. (VY * ('SIN' ANGLE)) ;
  1276.  
  1277. VNT = (VY * ('COS' ANGLE)) '-'
  1278. (VX * ('SIN' ANGLE)) ;
  1279.  
  1280. *
  1281. *** GRAPHIQUE DES SOLUTIONS
  1282.  
  1283. *
  1284.  
  1285. 'SI' GRAPH ;
  1286.  
  1287. * 'SI' FAUX ;
  1288. *
  1289. *** CREATION DE CHAMELEM
  1290. *
  1291. CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN ;
  1292. CHM_VNN = 'KCHA' $DOMTOT 'CHAM' VNN ;
  1293. CHM_VNT = 'KCHA' $DOMTOT 'CHAM' VNT ;
  1294. CHM_PN = 'KCHA' $DOMTOT 'CHAM' PN ;
  1295. CHM_TN = 'KCHA' $DOMTOT 'CHAM' TN ;
  1296. CHM_HTN = 'KCHA' $DOMTOT 'CHAM' HTN ;
  1297. TRAC CHM_RN MOD1 'TITR' ('CHAINE' 'RO at t=' TFIN);
  1298. TRAC CHM_PN MOD1 'TITR' ('CHAINE' 'P at t=' TFIN);
  1299. TRAC CHM_VNN MOD1 'TITR' ('CHAINE' 'VNN at t=' TFIN);
  1300. TRAC CHM_VNT MOD1 'TITR' ('CHAINE' 'VNT at t=' TFIN);
  1301. TRAC CHM_TN MOD1 'TITR' ('CHAINE' 'T at t=' TFIN);
  1302. TRAC CHM_HTN MOD1 'TITR' ('CHAINE' 'ht at t=' TFIN);
  1303. 'FINSI' ;
  1304.  
  1305.  
  1306. *
  1307. *** Objects evolutions
  1308. *
  1309.  
  1310. xx yy = 'COORDONNEE' Courb;
  1311. ss = 'KOPS' ('KOPS' ('COS' ANGLE) '*' xx) '+'
  1312. ('KOPS' ('SIN' ANGLE) '*' yy);
  1313.  
  1314. evxx = 'EVOL' 'CHPO' ss Courb ;
  1315. lxx = 'EXTRAIRE' evxx 'ORDO' ;
  1316.  
  1317. x0 = 'MINIMUM' lxx;
  1318. x1 = 'MAXIMUM' lxx ;
  1319.  
  1320. * ro
  1321.  
  1322. evro = 'EVOL' 'CHPO' RN Courb ;
  1323. lro = 'EXTRAIRE' evro 'ORDO' ;
  1324. evro = 'EVOL' 'MANU' 'x' lxx 'ro' lro;
  1325. tro = CHAINE '1D ' METO ' : RO IT ' IT ' IE ' IE
  1326. ' tmps ' TFIN ' elem ' 'QUA4' ;
  1327.  
  1328. * u
  1329.  
  1330. evu = 'EVOL' 'CHPO' VNN Courb ;
  1331. lu = 'EXTRAIRE' evu 'ORDO' ;
  1332. evu = 'EVOL' 'MANU' 'x' lxx 'u' lu ;
  1333. tu = CHAINE '1D ' METO ' : U IT ' IT ' IE ' IE
  1334. ' tmps ' TFIN ' elem ' 'QUA4' ;
  1335.  
  1336. * v
  1337.  
  1338. evv = 'EVOL' 'CHPO' VNT Courb ;
  1339. lv = 'EXTRAIRE' evv 'ORDO' ;
  1340. evv = 'EVOL' 'MANU' 'x' lxx 'v' lv ;
  1341. tv = CHAINE '1D ' METO ' : V IT ' IT ' IE ' IE
  1342. ' tmps ' TFIN ' elem ' 'QUA4' ;
  1343.  
  1344. 'SI' GRAPH ;
  1345. 'DESSIN' evv 'TITRE' tv 'XBOR' x0 x1;
  1346. 'FINSI' ;
  1347.  
  1348. * p
  1349.  
  1350. evp = 'EVOL' 'CHPO' PN Courb ;
  1351. lp = 'EXTRAIRE' evp 'ORDO' ;
  1352. evp = 'EVOL' 'MANU' 'x' lxx 'p' lp ;
  1353. tp = CHAINE '1D ' METO ' : P IT ' IT ' IE ' IE
  1354.  
  1355. ' tmps ' TFIN ' elem ' 'QUA4' ;
  1356.  
  1357.  
  1358. * ht
  1359.  
  1360. evht = 'EVOL' 'CHPO' HTN Courb ;
  1361. lht = 'EXTRAIRE' evht 'ORDO' ;
  1362. evht = 'EVOL' 'MANU' 'x' lxx 'ht' lht ;
  1363. tht = CHAINE '1D ' METO ' : ht IT ' IT ' IE ' IE
  1364.  
  1365. ' tmps ' TFIN ' elem ' 'QUA4' ;
  1366.  
  1367. *
  1368. *** Solution analitique
  1369.  
  1370. lpan = 'PROG' ;
  1371. lroan = 'PROG' ;
  1372. luan = 'PROG' ;
  1373. lhtan = 'PROG' ;
  1374.  
  1375. hg = ETHERg '+' (pg '/' rog) '+' (0.5 '*' ug '*' ug) ;
  1376.  
  1377. 'REPETER' BLOC2 ('DIME' lxx);
  1378. x = 'EXTRAIRE' lxx &BLOC2;
  1379. 'SI' (x < 0) ;
  1380. lroan = lroan 'ET' ('PROG' rog);
  1381. lpan = lpan 'ET' ('PROG' pg);
  1382. luan = luan 'ET' ('PROG' ug);
  1383. lhtan = lhtan 'ET' ('PROG' hg);
  1384. 'SINON' ;
  1385. lroan = lroan 'ET' ('PROG' rod);
  1386. lpan = lpan 'ET' ('PROG' pd);
  1387. luan = luan 'ET' ('PROG' ud);
  1388. lhtan = lhtan 'ET' ('PROG' hg);
  1389. 'FINSI' ;
  1390. 'FIN' BLOC2;
  1391.  
  1392.  
  1393. evroa = 'EVOL' 'MANU' 'x' lxx 'ro' lroan;
  1394. evpa = 'EVOL' 'MANU' 'x' lxx 'p' lpan;
  1395. evua = 'EVOL' 'MANU' 'x' lxx 'ua' luan;
  1396. evha = 'EVOL' 'MANU' 'x' lxx 'ht' lhtan;
  1397.  
  1398. 'SI' GRAPH ;
  1399. TAB1=TABLE;
  1400. TAB1.'TITRE'= TABLE ;
  1401. TAB1.1='MARQ TRIB REGU';
  1402. TAB1.'TITRE' . 1 = MOT 'Numerique' ;
  1403. TAB1.2='MARQ CROI REGU';
  1404. TAB1.'TITRE' . 2 = MOT 'Exacte' ;
  1405. 'DESSIN' (evro 'ET' evroa) 'TITRE' tro 'XBOR' x0 x1
  1406. 'LEGE' TAB1;
  1407. 'DESSIN' (evp 'ET' evpa) 'TITRE' tp 'XBOR' x0 x1
  1408. 'LEGE' TAB1;
  1409. 'DESSIN' (evu 'ET' evua) 'TITRE' tu 'XBOR' x0 x1
  1410. 'LEGE' TAB1;
  1411. 'DESSIN' (evht 'ET' evha) 'TITRE' tht 'XBOR' x0 x1
  1412. 'LEGE' TAB1;
  1413. 'FINSI' ;
  1414.  
  1415. *
  1416. **** Tests
  1417. *
  1418.  
  1419. * Convergence
  1420.  
  1421. ERCON = 'EXTRAIRE' ('DIME' (RV . 'INCO' . 'ER')) (RV . 'INCO' . 'ER') ;
  1422.  
  1423. 'SI' (ERCON > -3) ;
  1424. 'MESSAGE' 'Probleme de convergence' ;
  1425. 'ERREUR' 5;
  1426. 'FINSI' ;
  1427.  
  1428. 'SI' GRAPH ;
  1429. EVOL4 = EVOL 'MANU' 'ITERATIONS' (RV.INCO.'IT') 'LOG|E|inf'
  1430. (RV.INCO.'ER') ;
  1431. 'DESSIN' EVOL4 'XBOR' 0. (2. '*' niter) 'YBOR' -12.0 0.0
  1432. 'TITRE' ('CHAINE' METO ' IE =' IE ' IT =' IT) ;
  1433. 'FINSI' ;
  1434.  
  1435.  
  1436. ERRO = 'ABS' (LRO '-' LROAN) ;
  1437. ERP = 'ABS' (LP '-' LPAN) ;
  1438. ERU = 'ABS' (LU '-' LUAN) ;
  1439. ERH = 'ABS' (LHT '-' LHTAN) ;
  1440.  
  1441. L1RO = 0.0 ;
  1442. L1P = 0.0 ;
  1443. L1U = 0.0 ;
  1444. L1H = 0.0 ;
  1445.  
  1446. NDIM = 'DIME' erro ;
  1447.  
  1448. 'REPETER' BL1 NDIM ;
  1449. L1RO = L1RO '+' ('EXTRAIRE' &BL1 ERRO) ;
  1450. L1P = L1P '+' ('EXTRAIRE' &BL1 ERP) ;
  1451. L1U = L1U '+' ('EXTRAIRE' &BL1 ERU) ;
  1452. L1H = L1H '+' ('EXTRAIRE' &BL1 ERH) ;
  1453. 'FIN' BL1 ;
  1454.  
  1455. L1RO = L1RO '/' (NDIM * ('MAXIMUM' lroan)) ;
  1456.  
  1457.  
  1458. L1P = L1P '/' (NDIM * ('MAXIMUM' lpan)) ;
  1459.  
  1460. L1U = L1U '/' (NDIM * ('MAXIMUM' luan 'ABS' )) ;
  1461. L1H = L1H '/' (NDIM * ('MAXIMUM' lhtan)) ;
  1462.  
  1463.  
  1464. ERRMAX = 'MAXIMUM' ('PROG' L1RO L1P L1U L1H) ;
  1465.  
  1466.  
  1467. 'SI' (ERRMAX > 1.0D-4);
  1468. 'ERREUR' 5;
  1469. 'FINSI' ;
  1470.  
  1471. 'FIN' ;
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479.  
  1480.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales