Télécharger sine_bumpBM.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : sine_bumpBM.dgibi
  2. ******************************************************************
  3. * CALCUL DE L'ECOULEMENT SUBSONIQUE STATIONNAIRE DANS UN CANAL *
  4. * AVEC SINE-SHAPED BUMP *
  5. * FORMULATION VF COMPRESSIBLE EXPLICITE/IMPLICIT *
  6. * *
  7. * H. PAILLERE/P. GALON TTMF AOUT 1997 *
  8. * *
  9. * MODIF BECCANTINI MARS 97 *
  10. * *
  11. * BECCANTINI NOVEMBRE 98 *
  12. * Low Mach AUSM+ scheme is used for computation *
  13. ******************************************************************
  14.  
  15. 'MESSAGE' 'A mettre a jours' ;
  16. 'FIN' ;
  17.  
  18. * GRAPH = VRAI ;
  19. GRAPH = FAUX ;
  20. COMPLET = FAUX ;
  21.  
  22. 'SI' complet ;
  23. NRAFF = 3 ;
  24. 'SINON' ;
  25. NRAFF = 1 ;
  26. 'FINSI' ;
  27.  
  28. ENTERR = 0.00001D0 ;
  29.  
  30. TYEL = 'QUA4' ;
  31.  
  32. 'OPTION' 'DIME' 2 'ELEM' TYEL 'ISOV' 'SULI'
  33. 'ECHO' 1 'TRAC' 'X';
  34.  
  35. *
  36. *** C.L. et initiales
  37. *
  38.  
  39. RO_INF = 1.4D0 ;
  40. P_INF = 1.0D0 ;
  41. U_INF = 0.001D0 ;
  42. GAMSCAL = 1.4D0;
  43.  
  44.  
  45. ************************************************************************
  46. ************************************************************************
  47. ***************** PARTIE PROCEDURES ************************************
  48. ************************************************************************
  49. ************************************************************************
  50. *******************************************************
  51. ***** PROCEDURE TO COMPUTE CONSERVATIVE VARIABLES *****
  52. *******************************************************
  53.  
  54. 'DEBPROC' CONS ;
  55. 'ARGUMENT' RN*'CHPOINT' VN* 'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT' ;
  56.  
  57. RVN = RN '*' VN ;
  58. LMOT = 'MOTS' 'UX' 'UY' ;
  59. RECIN = 0.5 '*' (RVN 'PSCA' VN LMOT LMOT) ;
  60. RETER = PN '/' (GAMN '-' 1.0) ;
  61. REN = RETER '+' RECIN ;
  62.  
  63. 'RESPRO' RVN REN ;
  64. 'FINPROC' ;
  65.  
  66. *****************************************************
  67. *****************************************************
  68. ** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE **
  69. *****************************************************
  70. *****************************************************
  71. *
  72. * RV . 'UN' = les inconnues
  73. *
  74. * RV . 'CLIM' = logique qui me dit si existe une procedure pour le
  75. * calcul de conditions limits
  76. *
  77. * RV . 'DOMINT' = (a definir si RV . 'CLIM')
  78. * spg des incunnues (sans les cellules fantomes)
  79. *
  80. * RV . 'MAIFAN' = (a definir si RV . 'CLIM')
  81. * les cellules fantomes
  82. *
  83. * RV . 'INST' = logique qui me dit si on fait un calcul stationaire
  84. * ou instationaire. Si FAUX, le temps n'est pas une
  85. * variable du probleme
  86. *
  87. * RV . 'CONS' = (à definir dans le cas d'un calcul instationaire)
  88. * logique qui me dit si on fait une correction
  89. * conservative à la fin des iterations internes
  90. *
  91. * RV . 'TFINAL' = (à definir dans le cas d'un calcul instationaire)
  92. * le temps final
  93. *
  94. * RV . 'NITMAEX' = (à definir dans le cas d'un calcul instationaire)
  95. * le numero d'iteration externes
  96. *
  97. * N.B. Si RV . 'TFINAL' et RV . 'NITMAEX' sont les deux specifiés, on
  98. * s'arrete quand un des deux criteres et satisfait
  99. *
  100. * RV . 'FEXT' = (à definir dans le cas d'un calcul instationaire)
  101. * indice de frequence d'impression pour les
  102. * iterations externes
  103. *
  104. * RV . 'MATIDE' = (à definir dans le cas d'un calcul instationaire)
  105. * MATRIK identité
  106. * N.B. (RV . 'MATIDE') '*' (RV . 'UN') =
  107. * (RV . 'UN')
  108. *
  109. * RV . 'LISTOPER' = liste des operateurs (ou des procedures) qui
  110. * interviennent dans le calcul (chaque operateur a un
  111. * table associée), qui s'appelle &NOMPER ou
  112. * & = position de l'operateur dedans cette liste
  113. * NOMPER = noms de l'operateur ou de la procedure
  114. *
  115. * RV . 'NITMAIN' = (à definir dans le cas d'un calcul implicite)
  116. * le numero max d'iteration internes
  117. * RV . 'NITMIIN' = (à definir dans le cas d'un calcul implicite)
  118. * le numero min d'iteration internes
  119. *
  120. * RV . 'EPSINT' = (à definir dans le cas d'un calcul implicite)
  121. * l'erreur pour le critere de convergence sur les
  122. * iterations internes
  123. *
  124. * RV . 'FINT' = (à definir dans le cas d'un calcul implicite)
  125. * indice de frequence d'impression pour les
  126. * iterations internes
  127. *
  128. * RV . 'MATHINV' = (a definir sans la cas d'un calcul implicite)
  129. * table de SOUSTYPE 'TYPINV' pour l'inversion de
  130. * MATRIK (pour l'operateur 'KRES')
  131. *
  132. * RV . 'PBASMACH' = (à definir si on veut faire du preconditionnement
  133. * BASMACH)
  134. * LOGIQUE = VRAI '/' FAUX
  135. * Dans le cas VRAI, il faut utiliser la procedure BMAC
  136. * et remplir la table 'BASMACH'.
  137. *
  138. *--------------------------------------------------------------------------
  139.  
  140.  
  141. 'DEBPROC' EXEXIM ;
  142. 'ARGUMENT' RV*TABLE ;
  143.  
  144. 'MESSAGE' ;
  145. 'MESSAGE' 'PROCEDURE EXEXIM' ;
  146.  
  147. *
  148. **** Initialisation d'un CHPOINT 'ET' d'une MATRIK vide
  149. *
  150.  
  151. CHPVID MATVID = 'KOPS' 'MATRIK' ;
  152.  
  153.  
  154. *
  155. **** Les inconnues
  156. *
  157.  
  158. 'SI' ('NON' ('EXISTE' RV 'UN')) ;
  159. 'MESSAGE' 'UN = ???' ;
  160. 'ERREUR' 21 ;
  161. 'FINSI' ;
  162.  
  163. *
  164. **** Existence d'une procédure pour imposer le conditions aux limites
  165. * à chaque iteration (interne ou externe)
  166. *
  167.  
  168. 'SI' ('NON' ('EXISTE' RV 'CLIM')) ;
  169. 'MESSAGE' 'CLIM = ???' ;
  170. 'ERREUR' 21 ;
  171. 'FINSI' ;
  172.  
  173. * Par securité, on les impose tout de suite
  174.  
  175. 'SI' (RV . 'CLIM') ;
  176. 'SI' ('NON' ('EXISTE' RV 'DOMINT')) ;
  177. 'MESSAGE' 'DOMINT = ???' ;
  178. 'ERREUR' 21 ;
  179. 'FINSI' ;
  180. 'SI' ('NON' ('EXISTE' RV 'MAIFAN')) ;
  181. 'MESSAGE' 'MAIFAN = ???' ;
  182. 'ERREUR' 21 ;
  183. 'FINSI' ;
  184. * On impose une variation de l'incrément nul sur les
  185. * cellules fantômes
  186. DUCLIM = 0.0 '*' ('REDU' (RV . 'UN') (RV . 'MAIFAN')) ;
  187. * 'MESS' 'PROLIM at the beginning' ;
  188. RV . 'UN' = PROLIM RV ;
  189. 'SINON' ;
  190. DUCLIM = 'COPIER' CHPVID ;
  191. 'FINSI' ;
  192.  
  193. *
  194. **** Stationnaire ou instationnaire ?
  195. *
  196.  
  197. 'SI' ('NON' ('EXISTE' RV 'INST')) ;
  198. 'MESSAGE' 'INST = ???' ;
  199. 'ERREUR' 21 ;
  200. 'SINON' ;
  201. 'SI' ('NEG' ('TYPE' (RV . 'INST')) 'LOGIQUE') ;
  202. 'MESSAGE' 'INST = ???' ;
  203. 'ERREUR' 21 ;
  204. 'FINSI' ;
  205. 'FINSI' ;
  206. LOGINS = RV . 'INST' ;
  207.  
  208. 'SI' LOGINS ;
  209. 'SI' ('NON' ('EXISTE' RV 'CONS')) ;
  210. 'MESSAGE' 'CONS = ???' ;
  211. 'ERREUR' 21 ;
  212. 'SINON' ;
  213. LOGCC = RV . 'CONS' ;
  214. 'FINSI' ;
  215. 'SINON' ;
  216. 'SI' ('EXISTE' RV 'CONS') ;
  217. 'SI' (RV . 'CONS') ;
  218. 'MESSAGE' 'Calcul stationnaire' ;
  219. 'MESSAGE' 'Correction conservative impossible !!!' ;
  220. 'MESSAGE' 'CONS = ???' ;
  221. 'ERREUR' 21 ;
  222. 'FINSI' ;
  223. 'FINSI' ;
  224. 'FINSI' ;
  225.  
  226. *
  227. **** BASMACH?
  228. *
  229.  
  230. 'SI' ('EXISTE' RV 'PBASMACH') ;
  231. LOGBM = RV . 'PBASMACH' ;
  232. 'SINON' ;
  233. LOGBM = FAUX ;
  234. 'FINSI' ;
  235. 'SI' ('EGA' LOGBM VRAI) ;
  236. 'MESSAGE' ;
  237. 'MESSAGE' 'Dual time stepping avec preconditionnement bas mach' ;
  238. 'MESSAGE' ;
  239. 'FINSI' ;
  240.  
  241. *
  242. **** Iterations externes et/ou temps final
  243. * La table 'PASDETPS'
  244. *
  245.  
  246. 'SI' LOGINS ;
  247.  
  248. 'MESSAGE' 'Calcul instationnaire' ;
  249. 'MESSAGE' ;
  250.  
  251. 'SI' ('NON'
  252. (('EXISTE' RV 'NITMAEX') 'OU' ('EXISTE' RV 'TFINAL'))) ;
  253. 'MESSAGE' 'NITMAEX = ???' ;
  254. 'MESSAGE' 'ou' ;
  255. 'MESSAGE' 'TFINAL = ???' ;
  256. 'ERREUR' 21 ;
  257. 'FINSI' ;
  258.  
  259.  
  260. 'SI' ('NON' ('EXISTE' RV 'MATIDE')) ;
  261. 'MESSAGE' 'MATIDE 1 = ???' ;
  262. 'ERREUR' 21 ;
  263. 'SINON' ;
  264. 'SI' ('NON' LOGBM) ;
  265. ****** Compatibilité matrice identité - vecteur des inconnues
  266. CELL = 'KOPS' (RV . 'MATIDE') 'MULT' (RV . 'UN') ;
  267. CELL = CELL '-' (RV . 'UN') ;
  268. CELL = 'MAXIMUM' CELL 'ABS' ;
  269. 'SI' (CELL > 1.0D-14) ;
  270. 'MESSAGE' 'MATIDE 2 = ???' ;
  271. 'ERREUR' 21 ;
  272. 'FINSI' ;
  273. 'FINSI' ;
  274. 'FINSI' ;
  275.  
  276. 'SI' ('NON' ('EXISTE' RV 'PASDETPS')) ;
  277. RV . 'PASDETPS' = 'TABLE' ;
  278. 'FINSI' ;
  279.  
  280. KTPS = RV . 'PASDETPS' ;
  281.  
  282. * Initialisation éventuelle de la table
  283.  
  284. 'SI' ('NON' ('EXISTE' KTPS 'NUPASDT')) ;
  285. KTPS . 'NUPASDT' = 0 ;
  286. KTPS . 'TPSM' = 0.0D0 ;
  287. KTPS . 'TPS' = 0.0D0 ;
  288. 'SINON' ;
  289. 'SI' ('EGA' ( KTPS . 'NUPASDT' ) 0) ;
  290. KTPS . 'TPSM' = 0.0D0 ;
  291. KTPS . 'TPS' = 0.0D0 ;
  292. 'FINSI' ;
  293. 'FINSI' ;
  294.  
  295. *
  296. * Dans le cas instationnaire, KTPS contient
  297. *
  298. * KTPS . 'NUPASDT' = numero de pas de TPS actuel dans les itérations
  299. * internes
  300. *
  301. * KTPS . 'TPSM' = le TPS aprés (KTPS . 'NUPASDT' '-' 2) itérations
  302. * KTPS . 'TPS' = le TPS aprés (KTPS . 'NUPASDT' '-' 1) itérations
  303. * KTPS . 'TPSP' = le TPS aprés (KTPS . 'NUPASDT') itérations, i.e. à
  304. * la fin de l'itération actuelle
  305. *
  306. *
  307. 'SINON' ;
  308.  
  309. 'MESSAGE' ;
  310. 'MESSAGE' 'Calcul stationnaire' ;
  311. 'MESSAGE' ;
  312.  
  313. 'FINSI' ;
  314.  
  315. *
  316. ****** Initialisation du CHPOINT DELTAU pour 'KRES'
  317. *
  318.  
  319. DELTAU = 'COPIER' CHPVID ;
  320.  
  321. **************************************************
  322. **************************************************
  323. **** Itérations externes ***********************
  324. **************************************************
  325. **************************************************
  326.  
  327. LOGEXP = VRAI ;
  328. * LOGEXP = variable logique qui me dit si on est en explicite ;
  329. * on l'initialise = VRAI
  330.  
  331. LOGQIE = FAUX 'OU' ('NON' LOGINS) ;
  332. *
  333. **** Boucle qui s'arrête quand LOGQIE = VRAI ; i.e.
  334. *
  335. * -dans le cas instationnaire, quand
  336. * (KTPS . NUPASDT) = (RV . 'NITMAEX')
  337. * ou
  338. * (KTPS . 'TPS') = (RV . 'TFINAL');
  339. *
  340. * -dans le cas stationnaire on ne fait que une itération
  341. * externe
  342. *
  343. ALPDT = 0.0 ;
  344.  
  345. 'REPETER' BLEX -1 ;
  346.  
  347. 'SI' LOGINS ;
  348. KTPS . 'NUPASDT' = (KTPS . 'NUPASDT') '+' 1 ;
  349. 'SI' ('EXISTE' RV 'NITMAEX') ;
  350. 'SI' ( (KTPS . 'NUPASDT') '>EG' (RV . 'NITMAEX')) ;
  351. LOGQIE = VRAI ;
  352. 'FINSI' ;
  353. 'FINSI' ;
  354. *
  355. ****** Impression evenctuelle
  356. *
  357.  
  358. ICEL = (KTPS . 'NUPASDT') '/' (RV . 'FEXT') ;
  359. LOGPRI = 'EGA' (ICEL '*' (RV . 'FEXT')) (KTPS . 'NUPASDT') ;
  360. 'SI' (LOGPRI) ;
  361. 'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
  362. ' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
  363. 'MESSAGE' ;
  364. 'FINSI' ;
  365. 'FINSI' ;
  366.  
  367. *
  368. *** Objets MATRIK et CHPOINTs vides
  369. * LISTREEL de DT_i * ALPHA_i
  370. * UNM = (RV . 'UN') à l'iteration precedente
  371. *
  372.  
  373. RESIMP = 'COPIER' CHPVID ;
  374. MATASS = 'KOPS' 'MULT' 0.0 MATVID ;
  375. RESEXP = 'COPIER' CHPVID ;
  376. UNM = ('COPIER' (RV . 'UN')) ;
  377. LREEDT = 'PROG' ;
  378. *
  379. ***********************************************
  380. ********* Boucle sur les operateurs ***********
  381. ***********************************************
  382. *** On calcule: LREEDT
  383. * RESEXP
  384. * (RESIMP)
  385. * (MATASS)
  386. *
  387.  
  388. 'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
  389. NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
  390. NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
  391. * 'MESSAGE' ('CHAINE' 'pervaya' NOMPER NOTABLE ) ;
  392. JACO RESIDU ALPHADT THETA = ('TEXTE' NOMPER) (RV . NOTABLE) ;
  393. * 'MESSAGE' ('CHAINE' 'vtoraya' NOMPER NOTABLE ) ;
  394. *
  395. * JACO = objet de type MATRIK (éventuellement vide)
  396. * RESIDU = " RESIDU "
  397. * ALPHADT = " LISTREEL "
  398. * THETA = " REEL
  399. *
  400. ******* On controlle la compatibilité E/S (pour chaque &BLEX)
  401. *
  402. NCOMP = 'DIME' ('EXTRAIRE' RESIDU 'COMP') ;
  403. * NCOMP = 0 si RESIDU = CHPOINT vide
  404. 'SI' (NCOMP > 0) ;
  405. LOGEXP = LOGEXP 'ET' ('EGA' THETA 0.0D0) ;
  406. 'SI' (('NON' LOGINS) 'ET' ('NEG' THETA 1.0D0)) ;
  407. 'MESSAGE' 'INST = FAUX ' ;
  408. 'MESSAGE' ('CHAINE' NOMPER ' . THETA != 1') ;
  409. 'ERREUR' 21 ;
  410. 'FINSI' ;
  411. 'FINSI' ;
  412. *
  413. ******* On calcule LREEDT
  414. *
  415. LREEDT = LREEDT 'ET' ALPHADT ;
  416. *
  417. ******* On calcule MATASS, RESEXP, RESIMP
  418. *
  419. MATASS = MATASS 'ET' ('KOPS' 'MULT' (-1.0D0 '*' THETA)
  420. JACO ) ;
  421. RESIMP = RESIMP 'ET' (RESIDU '*' THETA) ;
  422. RESEXP = RESEXP 'ET' ( RESIDU '*'(1.0D0 '-' THETA)) ;
  423.  
  424. 'FIN' BLOP ;
  425.  
  426. ***********************************************
  427. ***** Fin de la boucle sur les operateurs ****
  428. ***********************************************
  429.  
  430. *
  431. ******* On controlle la compatibilité E/S (si &BLEX = 1)
  432. *
  433. 'SI' ('EGA' &BLEX 1) ;
  434. *
  435. **** Dans le cas implicite, on verifie l'existence
  436. * des parametres pour les itérations internes
  437. *
  438. 'SI' ('NON' LOGEXP) ;
  439. 'SI' ('NON' (('EXISTE' RV 'NITMAIN') 'ET'
  440. ('EXISTE' RV 'EPSINT') 'ET' ('EXISTE' RV 'NITMIIN'))) ;
  441. 'MESSAGE' 'NITMAIN = ??? ' ;
  442. 'MESSAGE' 'NITMIIN = ??? ' ;
  443. 'MESSAGE' 'EPSINT = ??? ' ;
  444. 'ERREUR' 21 ;
  445. 'FINSI' ;
  446. 'FINSI' ;
  447.  
  448. 'FINSI' ;
  449. *
  450. ******* Fin contrôle compatibilité E/S
  451. *
  452. *
  453. *** Mise a jour de la table RV . 'PASDETPS' au debu du calcul
  454. *
  455.  
  456. 'SI' LOGINS ;
  457. ALPDT = 'MINIMUM' LREEDT ;
  458. ALPDT1 = (RV . 'TFINAL') '-' (KTPS . 'TPS') ;
  459. 'SI' (ALPDT < ALPDT1) ;
  460. KTPS . 'TPSP' = (KTPS . 'TPS') '+' ALPDT ;
  461. 'SINON' ;
  462. KTPS . 'TPSP' = (RV . 'TFINAL') ;
  463. ALPDT = ALPDT1 ;
  464. LOGQIE = VRAI ;
  465. 'FINSI' ;
  466. 'FINSI' ;
  467.  
  468. *
  469.  
  470. 'SI' LOGEXP ;
  471. *
  472. ****** Explicite
  473. *
  474. RV . 'UN' = UNM '+' (RESEXP '*' ALPDT) ;
  475. 'SI' (RV . 'CLIM') ;
  476. * 'MESSAGE' 'PROLIM after an explicit iteration' ;
  477. RV . 'UN' = PROLIM RV ;
  478. 'FINSI' ;
  479.  
  480. 'SINON' ;
  481. *
  482. ****** Implicite
  483. *
  484. 'SI' LOGINS ;
  485. UNEXP = UNM '+' (ALPDT '*' RESEXP) ;
  486. UNIMP = (ALPDT '*' RESIMP) '-' (RV . 'UN') ;
  487. 'SINON' ;
  488. UNEXP = RESEXP ;
  489. UNIMP = RESIMP ;
  490. 'FINSI' ;
  491.  
  492. **********************************************
  493. ****** Les iterations internes ***************
  494. **********************************************
  495.  
  496. 'REPETER' BLINT (RV . 'NITMAIN') ;
  497.  
  498. 'SI' LOGINS ;
  499. MATASS = ('KOPS' 'MULT' ALPDT MATASS)
  500. 'ET' (RV . 'MATIDE') ;
  501. 'FINSI' ;
  502.  
  503. DRESTOT = UNEXP '+' UNIMP ;
  504.  
  505. *
  506. ********* Pour l'inversion de MATRIK
  507. *
  508.  
  509. RV . 'MATINV' . 'MATASS' = MATASS ;
  510. RV . 'MATINV' . 'MAPREC' = MATASS ;
  511. RV . 'MATINV' . 'XINIT' = DELTAU ;
  512. RV . 'MATTOT' = 'KOPS' 'MULT' 1.0 MATASS ;
  513.  
  514. DELTAU = 'KRES' MATASS
  515. 'TYPI' (RV . 'MATINV')
  516. 'CLIM' DUCLIM
  517. 'SMBR' DRESTOT
  518. 'IMPR' 0 ;
  519.  
  520. RV . 'UN' = (RV . 'UN') '+' DELTAU ;
  521.  
  522. 'SI' (RV . 'CLIM') ;
  523. * 'MESSAGE' 'PROLIM after the matrix inversion' ;
  524. RV . 'UN' = PROLIM RV ;
  525. 'FINSI' ;
  526.  
  527. *
  528. ********* Boucle sur les operateurs implicites pour calculer RESIMP
  529. * et MATASS de RV . 'UN'
  530.  
  531. RESIMP = 'COPIER' CHPVID ;
  532. MATASS = 'KOPS' 'MULT' 0.0 MATVID ;
  533. 'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
  534. NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
  535. NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
  536. 'SI' (RV . NOTABLE . 'IMPL') ;
  537. JACO RESIDU ALPHADT THETA =
  538. ('TEXTE' NOMPER) (RV . NOTABLE) ;
  539. MATASS = MATASS 'ET' ('KOPS' 'MULT'
  540. (-1.0D0 '*' THETA)
  541. JACO ) ;
  542. RESIMP = RESIMP 'ET' (RESIDU '*' THETA) ;
  543. 'FINSI' ;
  544. 'FIN' BLOP ;
  545. *
  546. ********* Test de convergence
  547. *
  548. 'SI' LOGINS ;
  549. UNIMP = (ALPDT '*' RESIMP) '-' (RV . 'UN') ;
  550. 'SINON' ;
  551. UNIMP = RESIMP ;
  552. 'FINSI' ;
  553.  
  554. 'SI' (RV . 'CLIM') ;
  555. ERRN = 'REDU' (UNEXP '+' UNIMP) (RV . 'DOMINT') ;
  556. 'SINON' ;
  557. ERRN = UNEXP '+' UNIMP ;
  558. 'FINSI' ;
  559.  
  560. ERRO = 'MAXIMUM' ERRN 'ABS' ;
  561. *
  562. ********* Impression evenctuelle
  563. *
  564. ICEL = &BLINT '/' (RV . 'FINT') ;
  565. 'SI' ( 'EGA' (ICEL '*' (RV . 'FINT')) &BLINT );
  566. 'SI' LOGINS ;
  567. 'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
  568. ' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
  569. 'FINSI' ;
  570. 'MESSAGE'
  571. ('CHAINE' 'ITERIN = ' &BLINT ' ERREUR = ' ERRO) ;
  572. 'MESSAGE' ;
  573. 'FINSI' ;
  574. 'SI' ((ERRO '<' (RV . 'EPSINT')) 'ET'
  575. (&BLINT '>' (RV . 'NITMIIN'))) ;
  576. 'QUITTER' BLINT ;
  577. 'FINSI' ;
  578. 'FIN' BLINT ;
  579.  
  580. **********************************************
  581. ****** Fin boucle iterations internes ********
  582. **********************************************
  583.  
  584. *
  585. ****** Non convergence
  586. *
  587. 'SI' (ERRO > (RV . 'EPSINT')) ;
  588. 'MESSAGE' ;
  589. 'MESSAGE' 'Iteration internes: probleme de convergence' ;
  590. 'SI' LOGINS ;
  591. 'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
  592. ' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
  593. 'FINSI' ;
  594. 'MESSAGE' ('CHAINE' 'ITERIN = ' &BLINT ' ERRO = ' ERRO) ;
  595. 'MESSAGE' ;
  596. 'SINON' ;
  597. *
  598. ********* Correction conservative
  599. *
  600. 'SI' LOGINS ;
  601. 'SI' LOGCC ;
  602. RESIMP = 'COPIER' CHPVID ;
  603. 'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
  604. NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
  605. NOTABLE = 'MOT'
  606. ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
  607. 'SI' (RV . NOTABLE . 'IMPL') ;
  608. JACO RESIDU ALPHADT THETA =
  609. ('TEXTE' NOMPER) (RV . NOTABLE) ;
  610. RESIMP = RESIMP 'ET' (RESIDU '*' THETA) ;
  611. 'FINSI' ;
  612. 'FIN' BLOP ;
  613. *
  614. RV . 'UN' = UNEXP '+' (ALPDT '*' RESIMP) ;
  615. 'SI' (RV . 'CLIM') ;
  616. * 'MESSAGE' 'PROLIM after the conservative correction'
  617. ;
  618. RV . 'UN' = PROLIM RV ;
  619. 'FINSI' ;
  620. 'FINSI' ;
  621. 'FINSI' ;
  622.  
  623. *
  624. 'FINSI' ;
  625. *
  626. 'FINSI' ;
  627.  
  628. *
  629. *** Mise a jour de la table RV . 'PASDETPS' à la fin du calcul
  630. *
  631.  
  632. 'SI' LOGINS ;
  633. KTPS . 'TPSM' = KTPS . 'TPS' ;
  634. KTPS . 'TPS' = KTPS . 'TPSP' ;
  635.  
  636. 'FINSI' ;
  637.  
  638. *
  639. **** Dernier commande de BLEX
  640. *
  641. 'SI' LOGQIE ;
  642. 'QUITTER' BLEX ;
  643. 'FINSI' ;
  644.  
  645. 'FIN' BLEX ;
  646.  
  647. 'FINPROC' ;
  648.  
  649. *****************************************************
  650. *****************************************************
  651. ** FIN PROCEDURE EXEX **
  652. *****************************************************
  653. *****************************************************
  654.  
  655. *****************************************************
  656. *****************************************************
  657. ** PROCÉDURE PKON **
  658. *****************************************************
  659. *****************************************************
  660. * Il faut définir:
  661. *
  662. * *KKONV . 'EQEX' = table générale, qui contient toutes les
  663. * informations sur le calcul qu'on va faire.
  664. * Dans ce table, on ne prend que:
  665. * - l'information concernant le pas de temps pour
  666. * l'étape de prédiction (dans le cas de prédiction
  667. * correction à la van Leer - Hanel);
  668. * - les inconnues du problème
  669. * (KKONV . 'EQEX' . 'UN'
  670. *
  671. * *KKONV . 'GAZ' = le modelé de gaz qu'on considère
  672. * - si KKONV . 'GAZ' = 'PERFMONO', alors
  673. * on considère un gaz parfait mono-espèce
  674. * polytropique; dans se cas on doit définir le
  675. * gamma , i.e.
  676. * KKONV . 'GAMN'
  677. * -si KKONV . 'GAZ' = 'PERFTEMP', alors
  678. * on considère un gaz parfait; dans se cas on
  679. * doit définir la table de proprietés de gaz,
  680. * i.e. KKONV . 'PGAZ'
  681. *
  682. * *KKONV . 'DOMA' = table domaine
  683. *
  684. * *KKONV . 'LISTINCO' = les noms des inconnues
  685. * - en 2D (3D) 'PERFMONO'
  686. * la première composante est le nom de la densité;
  687. * la deuxième, la troisième (la quatrième) sont le
  688. * noms des composantes du momentum;
  689. * la quatrième (cinquième) est le nom de l'énergie
  690. * total.
  691. * - en 2D (3D) 'PERFTEMP' on peut avoir aussi:
  692. * les especes dans le meme ordre que en
  693. * KKONV . 'PGAZ' . 'ESPEULE'
  694. * les scalaires passifs dans le meme ordre que en
  695. * KKONV . 'PGAZ' . 'SCALPASS'
  696. *
  697. *
  698. * *KKONV . 'METHODE' = méthode pour le calcul du flux convectif
  699. *
  700. * *KKONV . 'ORDREESP' = ordre en espace (1 ou 2) ;
  701. *
  702. * *KKONV . 'LIMITEUR' = limiteur utilisé
  703. *
  704. * *KKONV . 'PREDCOR' = logique à définir dans le cas explicite. Si
  705. * égal à VRAI, on fait la prediction-correction
  706. * de van Leer - Hancock
  707. *
  708. * *KKONV . 'IMPL' = calcul implicite ou non ?
  709. *
  710. * *KKONV . 'TYPEJACO' = 'VLHJACO1', si implicitation of VLH (1er ordre)
  711. * 'AUSMJAC1', si implicitation of AUSM+ (1er ordre)
  712. * 'VLHJACO2', si implicitation of VLH (2em ordre)
  713. * 'AUSMJAC2', si implicitation of AUSM+ (2em ordre)
  714. * 'AUSMLMJ1', si implicitation of AUSM+(P)(1st ordre)
  715. * 'CENJACO1', si implicitation of VLH (1er ordre)*
  716. *
  717. * *KKONV . 'THETA' = paramètre entre 0 et 1 à définir dans le cas
  718. * de calcul implicite.
  719. * N.B.
  720. * a) Dans le cas explicite, il ne faut pas le
  721. * définir.
  722. * b) Dans les autre cas:
  723. * - si égal à 0, la méthode degenere au cas
  724. * explicite;
  725. * - si égal à 1, on a le cas implicite
  726. * - si égal à 0.5, on a Cranck-Nicholson
  727. *
  728. * *KKONV . 'ALPHA' = coefficient de securité pour le quel on
  729. * multiplie le pas de tps determiné par un
  730. * condition de type CFL.
  731. * Il peut etre:
  732. * - un flottant
  733. * - une mot que veut 'INF'
  734. *
  735. * *KKONV . 'GRADRN'
  736. * *KKONV . 'GRADVN'
  737. * *KKONV . 'GRADPN'
  738. * *KKONV . 'GRADYN'
  739. * *KKONV . 'GRADSN' = MCHAMLs pour calculer les gradients de densité,
  740. * vitesse, pression, fractions massiques,
  741. * scalaires passifs
  742. *
  743. * *KKON . 'FACELIM' = maillage de centres de face ou on compute pas
  744. * le flux convectif
  745.  
  746. 'DEBPROC' PKON ;
  747. 'ARGUMENT' KKONV * TABLE ;
  748.  
  749. METO = KKONV . 'METHODE' ;
  750. RV = KKONV . 'EQEX' ;
  751.  
  752. LOGIMP = KKONV . 'IMPL';
  753. LOGEXP = 'NON' LOGIMP ;
  754.  
  755. 'SI' LOGIMP ;
  756. THETA = KKONV . 'THETA' ;
  757. 'SINON' ;
  758. THETA = 0.0 ;
  759. 'FINSI' ;
  760.  
  761. 'SI' ((THETA > 1.0) 'OU' (THETA < 0.0)) ;
  762. 'MESSAGE' 'PKON . THETA = ???' ;
  763. 'ERREUR' 21 ;
  764. 'FINSI' ;
  765.  
  766. ORDESP = KKONV . 'ORDREESP' ;
  767. $DOMA = KKONV . 'DOMA' ;
  768.  
  769. *
  770. **** Si on ne fait pas de l'explicite, on ne peux
  771. * pas fair de predictor correcteur
  772. *
  773.  
  774. 'SI' (LOGEXP 'ET' ('EGA' ORDESP 2)) ;
  775. 'SI' (KKONV . 'PREDCOR') ;
  776. ORDTPS = 2 ;
  777. 'SINON' ;
  778. ORDTPS = 1 ;
  779. 'FINSI' ;
  780. 'SINON' ;
  781. ORDTPS = 1 ;
  782. 'FINSI' ;
  783.  
  784. 'SI' (('NEG' (KKONV . 'ALPHA') 'INF') 'ET'
  785. ('NEG' ('TYPE' (KKONV . 'ALPHA')) FLOTTANT)) ;
  786. 'MESSAGE' 'PKON . ALPHA = ???' ;
  787. 'ERREUR' 21 ;
  788. 'FINSI' ;
  789.  
  790. UN = 'REDU' (RV . 'UN') ($DOMA . 'CENTRE') ;
  791.  
  792. 'SI' ('EGA' (KKONV . 'GAZ') 'PERFMONO') ;
  793.  
  794. ***************************************************************************
  795. ******** EULER, monoespece, "calorically perfect" (cv = constant) *********
  796. ***************************************************************************
  797.  
  798. *
  799. **** Type de jacobien
  800. *
  801. 'SI' LOGIMP ;
  802.  
  803. ITJACO = 0 ;
  804.  
  805. 'SI' ('EGA' (KKONV . 'TYPEJACO') 'CENJACO1') ;
  806. ITJACO = 4 ;
  807. 'FINSI' ;
  808.  
  809. 'SI' ('EGA' (KKONV . 'TYPEJACO') 'VLHJACO1') ;
  810. ITJACO = 1 ;
  811. 'FINSI' ;
  812.  
  813. 'SI' ('EGA' (KKONV . 'TYPEJACO') 'VLHJACO2') ;
  814. ITJACO = -1 ;
  815. 'FINSI' ;
  816.  
  817. 'SI' ('EGA' (KKONV . 'TYPEJACO') 'AUSMJAC1') ;
  818. ITJACO = 2 ;
  819. 'FINSI' ;
  820.  
  821. 'SI' ('EGA' (KKONV . 'TYPEJACO') 'AUSMJAC2') ;
  822. ITJACO = -2 ;
  823. 'FINSI' ;
  824.  
  825. 'SI' ('EGA' (KKONV . 'TYPEJACO') 'AUSMLMJ1') ;
  826. ITJACO = 3 ;
  827. 'FINSI' ;
  828.  
  829. 'SI' (ITJACO 'EGA' 0) ;
  830. 'MESSAGE' 'KKONV . TYPEJACO ???' ;
  831. 'ERREUR' 21 ;
  832. 'FINSI' ;
  833.  
  834. 'SI' ((ITJACO '<' 0) 'ET' (ORDESP 'EGA' 1)) ;
  835. 'MESSAGE' 'KKONV . ORDREESP ???' ;
  836. 'MESSAGE' 'KKONV . TYPEJACO ???' ;
  837. 'ERREUR' 21 ;
  838. 'FINSI' ;
  839.  
  840. 'FINSI' ;
  841.  
  842. *
  843. ***** Les variables conservatives
  844. *
  845.  
  846. MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
  847.  
  848. 'SI' ('EGA' ('VALE' DIME) 2) ;
  849. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  850. ('LECT' 2 3 ) ;
  851. LMOT2 = 'MOTS' 'UX' 'UY' ;
  852. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
  853. 'SINON' ;
  854. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  855. ('LECT' 2 3 4) ;
  856. LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
  857. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
  858. 'FINSI' ;
  859.  
  860. RN = 'EXCO' MOT1 UN ;
  861. GN = 'EXCO' LMOT1 UN LMOT2 ;
  862. RETN = 'EXCO' MOT2 UN ;
  863.  
  864. *
  865. ***** On calcule les variables primitive
  866. *
  867.  
  868. GAMN = 'COPIER' (KKONV . 'GAMN') ;
  869. VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
  870.  
  871. *
  872. ***** On calcule les variables aux faces
  873. *
  874.  
  875. 'SI' (ORDESP 'EGA' 1) ;
  876.  
  877. *
  878. ********* Ordre 1 en espace
  879. *
  880.  
  881. ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS $DOMA
  882. RN VN PN GAMN ;
  883.  
  884. 'SINON' ;
  885.  
  886. *
  887. ********* Ordre 2 en espace
  888. *
  889.  
  890. GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
  891. RN 'GRADGEO' (KKONV . 'GRADRN') ;
  892.  
  893. GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
  894. PN 'GRADGEO' (KKONV . 'GRADPN') ;
  895.  
  896. GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT' (KKONV . 'LIMITEUR')
  897. VN 'CLIM' (KKONV . 'VLIM')
  898. 'GRADGEO' (KKONV . 'GRADVN') ;
  899.  
  900. 'SI' ('EXISTE' RV 'MAIFAN') ;
  901.  
  902. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  903. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  904. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  905.  
  906. CELL = ALR ;
  907. ALR = ALR '-' ALRLEV ;
  908. 'DETR' CELL ;
  909.  
  910. CELL = ALP ;
  911. ALP = ALP '-' ALPLEV ;
  912. 'DETR' CELL ;
  913.  
  914. CELL = ALV ;
  915. ALV = ALV '-' ALVLEV ;
  916. 'DETR' CELL ;
  917.  
  918. 'FINSI' ;
  919.  
  920. 'SI' (ORDTPS 'EGA' 1);
  921.  
  922. *
  923. ********* Ordre 1 en temps
  924. *
  925.  
  926. ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS
  927. $DOMA
  928. RN GRADR ALR
  929. VN GRADV ALV
  930. PN GRADP ALP
  931. GAMN ;
  932. 'SINON' ;
  933.  
  934. *
  935. ********* Ordre 2 en temps (en explicite)
  936. *
  937.  
  938. DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
  939. (RV . 'PASDETPS' . 'TPSM') ;
  940.  
  941. ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS
  942. $DOMA
  943. RN GRADR ALR
  944. VN GRADV ALV
  945. PN GRADP ALP
  946. GAMN
  947. (DELTAM1 '/' 2.0);
  948. 'FINSI' ;
  949.  
  950. 'FINSI' ;
  951.  
  952. 'SI' LOGIMP ;
  953. 'SI' (ITJACO '>' 0) ;
  954. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
  955. (KKONV . 'LISTINCO')
  956. $DOMA ROF VITF PF GAMF
  957. (KKONV . 'FACELIM') KKONV . 'UINF' KKONV . 'UPRI'
  958. (KKONV . 'TYPEJACO') RN VN PN GAMN
  959. * (KKONV . 'FACELIM')
  960. ;
  961. * 'MESSAGE' ('CHAINE' 'zdes') ;
  962. 'SINON' ;
  963. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
  964. (KKONV . 'LISTINCO')
  965. $DOMA ROF VITF PF GAMF
  966. (KKONV . 'TYPEJACO') RN VN PN GAMN
  967. GRADR GRADV GRADP
  968. ALR ALV ALP
  969. (KKONV . 'GRADRN') (KKONV . 'GRADVN') (KKONV . 'GRADPN')
  970. (KKONV . 'VLIM')
  971. (KKONV . 'FACELIM')
  972. ;
  973. 'FINSI' ;
  974. 'SINON' ;
  975. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
  976. (KKONV . 'LISTINCO')
  977. $DOMA ROF VITF PF GAMF
  978. (KKONV . 'FACELIM')
  979. ;
  980. 'FINSI' ;
  981.  
  982. *
  983. **** On detrui les choses qui ne servent plus
  984. *
  985. 'DETR' UN ;
  986. 'OUBL' UN ;
  987. 'DETR' RN ;
  988. 'DETR' GN ;
  989. 'DETR' RETN ;
  990. 'DETR' VN ;
  991. 'DETR' PN ;
  992. 'OUBL' RN ;
  993. 'OUBL' GN ;
  994. 'OUBL' RETN ;
  995. 'OUBL' VN ;
  996. 'OUBL' PN ;
  997.  
  998. *
  999. **** Les MCHAML faces
  1000. *
  1001.  
  1002. 'DETR' ROF ;
  1003. 'DETR' VITF ;
  1004. 'DETR' PF ;
  1005. 'DETR' GAMF ;
  1006. 'OUBL' ROF ;
  1007. 'OUBL' VITF ;
  1008. 'OUBL' PF ;
  1009. 'OUBL' GAMF ;
  1010.  
  1011. *
  1012. **** Les pentes et les limiteurs
  1013. *
  1014.  
  1015. 'SI' (ORDESP 'EGA' 2);
  1016.  
  1017. 'DETR' GRADR ;
  1018. 'DETR' GRADP ;
  1019. 'DETR' GRADV ;
  1020. 'DETR' ALR ;
  1021. 'DETR' ALP ;
  1022. 'DETR' ALV;
  1023.  
  1024. 'OUBL' GRADR ;
  1025. 'OUBL' GRADP ;
  1026. 'OUBL' GRADV ;
  1027. 'OUBL' ALR ;
  1028. 'OUBL' ALP ;
  1029. 'OUBL' ALV;
  1030.  
  1031. 'FINSI' ;
  1032.  
  1033. 'FINSI' ;
  1034.  
  1035. 'SI' ('EGA' (KKONV . 'GAZ') 'PERFMULT') ;
  1036.  
  1037. ****************************************************************************
  1038. ******** EULER, multiespece, "calorically perfect" (cv = constant) *********
  1039. ****************************************************************************
  1040.  
  1041. IPGAZ = KKONV . 'PGAZ' ;
  1042. NESP = 'DIME' (IPGAZ . 'ESPEULE') ;
  1043.  
  1044. *
  1045. ***** Les variables conservatives
  1046. *
  1047.  
  1048. MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
  1049. IDIM = 'VALE' 'DIME' ;
  1050.  
  1051. 'SI' ('EGA' IDIM 2) ;
  1052. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1053. ('LECT' 2 3 ) ;
  1054. LMOT2 = 'MOTS' 'UX' 'UY' ;
  1055. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
  1056. 'SINON' ;
  1057. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1058. ('LECT' 2 3 4) ;
  1059. LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
  1060. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
  1061. 'FINSI' ;
  1062. LMOT3 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1063. ('LECT' (IDIM '+' 3) 'PAS' 1 (IDIM '+' 2 '+' NESP)) ;
  1064.  
  1065. RN = 'EXCO' MOT1 UN ;
  1066. GN = 'EXCO' LMOT1 UN LMOT2 ;
  1067. RETN = 'EXCO' MOT2 UN ;
  1068. RYN = 'EXCO' LMOT3 UN (IPGAZ . 'ESPEULE') ;
  1069.  
  1070. *
  1071. ***** On calcule les variables primitive
  1072. *
  1073.  
  1074. VN PN TN YN GAMN = 'PRIM' 'PERFMULT' IPGAZ
  1075. RN GN RETN RYN ;
  1076.  
  1077. *
  1078. ***** On calcule les variables aux faces
  1079. *
  1080.  
  1081. 'SI' (ORDESP 'EGA' 1) ;
  1082.  
  1083. *
  1084. ********* Ordre 1 en espace
  1085. *
  1086.  
  1087. ROF VITF PF YF GAMF = 'PRET' 'PERFMULT'
  1088. 1 1 $DOMA RN VN PN YN GAMN ;
  1089.  
  1090. 'SINON' ;
  1091.  
  1092. *
  1093. ********* Ordre 2 en espace
  1094. *
  1095.  
  1096. GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
  1097. RN 'GRADGEO' (KKONV . 'GRADRN') ;
  1098.  
  1099. GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
  1100. PN 'GRADGEO' (KKONV . 'GRADPN') ;
  1101.  
  1102. GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT' (KKONV . 'LIMITEUR')
  1103. VN 'CLIM' (KKONV . 'VLIM')
  1104. 'GRADGEO' (KKONV . 'GRADVN') ;
  1105.  
  1106. GRADY ALY = 'PENT' $DOMA 'CENTRE' 'EULESCAL' (KKONV . 'LIMITEUR')
  1107. YN 'GRADGEO' (KKONV . 'GRADYN') ;
  1108.  
  1109. 'SI' ('EXISTE' RV 'MAIFAN') ;
  1110.  
  1111. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  1112. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  1113. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  1114. ALYLEV = ('REDU' ALY (RV . 'MAIFAN')) ;
  1115.  
  1116. CELL = ALR ;
  1117. ALR = ALR '-' ALRLEV ;
  1118. 'DETR' CELL ;
  1119.  
  1120. CELL = ALP ;
  1121. ALP = ALP '-' ALPLEV ;
  1122. 'DETR' CELL ;
  1123.  
  1124. CELL = ALV ;
  1125. ALV = ALV '-' ALVLEV ;
  1126. 'DETR' CELL ;
  1127.  
  1128. CELL = ALY ;
  1129. ALY = ALY '-' ALYLEV ;
  1130. 'DETR' CELL ;
  1131.  
  1132. 'FINSI' ;
  1133.  
  1134. 'SI' (ORDTPS 'EGA' 1);
  1135.  
  1136. *
  1137. ********* Ordre 1 en temps
  1138. *
  1139.  
  1140. ROF VITF PF YF GAMF = 'PRET' 'PERFMULT' ORDESP ORDTPS
  1141. $DOMA IPGAZ
  1142. RN GRADR ALR
  1143. VN GRADV ALV
  1144. PN GRADP ALP
  1145. YN GRADY ALY
  1146. GAMN ;
  1147. 'SINON' ;
  1148.  
  1149. *
  1150. ********* Ordre 2 en temps (en explicite)
  1151. *
  1152.  
  1153. DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
  1154. (RV . 'PASDETPS' . 'TPSM') ;
  1155.  
  1156. ROF VITF PF YF GAMF = 'PRET' 'PERFMULT' ORDESP ORDTPS
  1157. $DOMA IPGAZ
  1158. RN GRADR ALR
  1159. VN GRADV ALV
  1160. PN GRADP ALP
  1161. YN GRADY ALY
  1162. GAMN
  1163. (DELTAM1 '/' 2.0);
  1164. 'FINSI' ;
  1165.  
  1166. 'FINSI' ;
  1167.  
  1168. 'SI' LOGIMP ;
  1169. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMULT' 'RESI' METO
  1170. (KKONV . 'LISTINCO')
  1171. $DOMA ROF VITF PF GAMF YF IPGAZ
  1172. (KKONV . 'TYPEJACO') RN VN PN GAMN IYN ;
  1173. 'SINON' ;
  1174. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFMULT' 'RESI' METO
  1175. (KKONV . 'LISTINCO')
  1176. $DOMA ROF VITF PF GAMF YF IPGAZ ;
  1177. 'FINSI' ;
  1178.  
  1179. *
  1180. **** On detrui les choses qui ne servent plus
  1181. *
  1182. 'DETR' UN ;
  1183. 'OUBL' UN ;
  1184. 'DETR' RN ;
  1185. 'DETR' GN ;
  1186. 'DETR' RETN ;
  1187. 'DETR' VN ;
  1188. 'DETR' PN ;
  1189. 'DETR' YN ;
  1190. 'DETR' RYN ;
  1191. 'DETR' TN ;
  1192. 'DETR' GAMN ;
  1193. 'OUBL' RN ;
  1194. 'OUBL' GN ;
  1195. 'OUBL' RETN ;
  1196. 'OUBL' VN ;
  1197. 'OUBL' PN ;
  1198. 'OUBL' YN ;
  1199. 'OUBL' RYN ;
  1200. 'OUBL' TN ;
  1201. 'OUBL' GAMN ;
  1202.  
  1203. *
  1204. **** Les MCHAML faces
  1205. *
  1206.  
  1207. 'DETR' ROF ;
  1208. 'DETR' VITF ;
  1209. 'DETR' PF ;
  1210. 'DETR' GAMF ;
  1211. 'DETR' YF ;
  1212. 'OUBL' ROF ;
  1213. 'OUBL' VITF ;
  1214. 'OUBL' PF ;
  1215. 'OUBL' GAMF ;
  1216. 'OUBL' YF ;
  1217.  
  1218. *
  1219. **** Les pentes et les limiteurs
  1220. *
  1221.  
  1222. 'SI' (ORDESP 'EGA' 2);
  1223.  
  1224. 'DETR' GRADR ;
  1225. 'DETR' GRADP ;
  1226. 'DETR' GRADV ;
  1227. 'DETR' GRADY ;
  1228. 'DETR' ALR ;
  1229. 'DETR' ALP ;
  1230. 'DETR' ALV;
  1231. 'DETR' ALY;
  1232.  
  1233. 'OUBL' GRADR ;
  1234. 'OUBL' GRADP ;
  1235. 'OUBL' GRADV ;
  1236. 'OUBL' GRADY ;
  1237. 'OUBL' ALR ;
  1238. 'OUBL' ALP ;
  1239. 'OUBL' ALV;
  1240. 'OUBL' ALY;
  1241.  
  1242. 'FINSI' ;
  1243.  
  1244. 'FINSI' ;
  1245.  
  1246.  
  1247. 'SI' ('EGA' (KKONV . 'GAZ') 'PERFTEMP') ;
  1248.  
  1249. ***************************************************************************
  1250. ******** EULER, "thermally perfect" *********
  1251. ***************************************************************************
  1252.  
  1253. PGAZ = KKONV . 'PGAZ' ;
  1254.  
  1255. 'SI' ('EXISTE' PGAZ 'ESPEULE') ;
  1256. NESP = 'DIME' (PGAZ . 'ESPEULE') ;
  1257. LOGESP = VRAI ;
  1258. 'SINON' ;
  1259. NESP = 0 ;
  1260. LOGESP = FAUX ;
  1261. 'FINSI' ;
  1262.  
  1263. 'SI' ('EXISTE' PGAZ 'SCALPASS') ;
  1264. NSCA = 'DIME' (PGAZ . 'SCALPASS') ;
  1265. LOGSCA = VRAI ;
  1266. 'SINON' ;
  1267. NSCA = 0 ;
  1268. LOGSCA = FAUX ;
  1269. 'FINSI' ;
  1270.  
  1271. *
  1272. *** Quatre cas differents
  1273. *
  1274. * a) LOGESP 'ET' LOGSCA
  1275. * b) LOGESP 'ET' ('NON' LOGSCA)
  1276. * c) ('NON' LOGESP) 'ET' ('NON' LOGSCA)
  1277. * d) ('NON' LOGESP) 'ET' LOGSCA
  1278. *
  1279.  
  1280. * a) LOGESP 'ET' LOGSCA
  1281.  
  1282. 'SI' (LOGESP 'ET' LOGSCA) ;
  1283.  
  1284. MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
  1285. NDIM = 'VALE' 'DIME' ;
  1286. 'SI' ('EGA' NDIM 2) ;
  1287. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1288. ('LECT' 2 3 ) ;
  1289. LMOT2 = 'MOTS' 'UX' 'UY' ;
  1290. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
  1291. 'SINON' ;
  1292. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1293. ('LECT' 2 3 4) ;
  1294. LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
  1295. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
  1296. 'FINSI' ;
  1297. LMOT3 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1298. ('LECT' (3+NDIM) 'PAS' 1 'NPAS' (NESP '-' 1)) ;
  1299. LMOT4 = (PGAZ . 'ESPEULE') ;
  1300. LMOT5 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1301. ('LECT' (3+NDIM+NESP) 'PAS' 1 'NPAS'
  1302. (NSCA '-' 1)) ;
  1303. LMOT6 = (PGAZ . 'SCALPASS') ;
  1304.  
  1305. RN = 'EXCO' MOT1 UN ;
  1306. GN = 'EXCO' LMOT1 UN LMOT2 ;
  1307. RETN = 'EXCO' MOT2 UN ;
  1308. RYN = 'EXCO' LMOT3 UN LMOT4 ;
  1309. RSN = 'EXCO' LMOT5 UN LMOT6 ;
  1310.  
  1311. *
  1312. ***** On calcule les variables primitive
  1313. *
  1314.  
  1315. VN PN TN YN SN GAMN = 'PRIM' 'PERFTEMP'
  1316. PGAZ RN GN RETN RYN RSN ;
  1317.  
  1318. *
  1319. ***** On calcule les variables aux faces
  1320. *
  1321.  
  1322. 'SI' (ORDESP 'EGA' 1) ;
  1323.  
  1324. *
  1325. ********* Ordre 1 en espace
  1326. *
  1327.  
  1328. ROF VITF PF YF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
  1329. PGAZ RN VN PN YN SN ;
  1330.  
  1331. 'SINON' ;
  1332.  
  1333. *
  1334. ********* Ordre 2 en espace
  1335. *
  1336.  
  1337. GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1338. (KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
  1339.  
  1340. GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1341. (KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
  1342.  
  1343. GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
  1344. (KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
  1345. 'GRADGEO' (KKONV . 'GRADVN') ;
  1346.  
  1347. GRADY ALY = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1348. (KKONV . 'LIMITEUR') YN 'GRADGEO' (KKONV . 'GRADYN') ;
  1349.  
  1350. GRADS ALS = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1351. (KKONV . 'LIMITEUR') SN 'GRADGEO' (KKONV . 'GRADSN') ;
  1352.  
  1353. 'SI' ('EXISTE' RV 'MAIFAN') ;
  1354.  
  1355. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  1356. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  1357. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  1358. ALYLEV = ('REDU' ALY (RV . 'MAIFAN')) ;
  1359. ALSLEV = ('REDU' ALS (RV . 'MAIFAN')) ;
  1360.  
  1361. CELL = ALR ;
  1362. ALR = ALR '-' ALRLEV ;
  1363. 'DETR' CELL ;
  1364.  
  1365. CELL = ALP ;
  1366. ALP = ALP '-' ALPLEV ;
  1367. 'DETR' CELL ;
  1368.  
  1369. CELL = ALV ;
  1370. ALV = ALV '-' ALVLEV ;
  1371. 'DETR' CELL ;
  1372.  
  1373. CELL = ALY ;
  1374. ALY = ALY '-' ALYLEV ;
  1375. 'DETR' CELL ;
  1376.  
  1377. CELL = ALS ;
  1378. ALS = ALS '-' ALSLEV ;
  1379. 'DETR' CELL ;
  1380.  
  1381. 'FINSI' ;
  1382.  
  1383. 'SI' (ORDTPS 'EGA' 1);
  1384.  
  1385. *
  1386. ********* Ordre 1 en temps
  1387. *
  1388.  
  1389. ROF VITF PF YF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1390. $DOMA PGAZ
  1391. RN GRADR ALR
  1392. VN GRADV ALV
  1393. PN GRADP ALP
  1394. YN GRADY ALY
  1395. SN GRADS ALS ;
  1396.  
  1397. 'SINON' ;
  1398.  
  1399. *
  1400. ********* Ordre 2 en temps (en explicite)
  1401. *
  1402.  
  1403. DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
  1404. (RV . 'PASDETPS' . 'TPSM') ;
  1405.  
  1406. ROF VITF PF YF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1407. $DOMA PGAZ
  1408. RN GRADR ALR
  1409. VN GRADV ALV
  1410. PN GRADP ALP
  1411. YN GRADY ALY
  1412. SN GRADS ALS
  1413. GAMN (DELTAM1 '/' 2.0);
  1414. 'FINSI' ;
  1415.  
  1416. 'FINSI' ;
  1417.  
  1418. 'SI' LOGIMP ;
  1419. 'ERREUR' 21 ;
  1420. 'SINON' ;
  1421. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
  1422. $DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF YF SF ;
  1423. 'FINSI' ;
  1424.  
  1425.  
  1426. *
  1427. **** On detrui les choses qui ne servent plus
  1428. *
  1429.  
  1430. 'DETR' UN ;
  1431. 'OUBL' UN ;
  1432.  
  1433. 'DETR' RN ;
  1434. 'DETR' GN ;
  1435. 'DETR' RETN ;
  1436. 'DETR' RYN ;
  1437. 'DETR' RSN ;
  1438. 'DETR' VN ;
  1439. 'DETR' PN ;
  1440. 'DETR' YN ;
  1441. 'DETR' SN ;
  1442. 'DETR' GAMN ;
  1443.  
  1444. 'OUBL' RN ;
  1445. 'OUBL' GN ;
  1446. 'OUBL' RETN ;
  1447. 'OUBL' RYN ;
  1448. 'OUBL' RSN ;
  1449. 'OUBL' VN ;
  1450. 'OUBL' PN ;
  1451. 'OUBL' YN ;
  1452. 'OUBL' SN ;
  1453. 'OUBL' GAMN ;
  1454.  
  1455. *
  1456. **** Les MCHAML faces
  1457. *
  1458.  
  1459. 'DETR' ROF ;
  1460. 'DETR' VITF ;
  1461. 'DETR' PF ;
  1462. 'DETR' YF ;
  1463. 'DETR' SF ;
  1464.  
  1465. 'OUBL' ROF ;
  1466. 'OUBL' VITF ;
  1467. 'OUBL' PF ;
  1468. 'OUBL' YF ;
  1469. 'OUBL' SF ;
  1470.  
  1471. *
  1472. **** Les pentes et les limiteurs
  1473. *
  1474.  
  1475. 'SI' (ORDESP 'EGA' 2);
  1476.  
  1477. 'DETR' GRADR ;
  1478. 'DETR' GRADP ;
  1479. 'DETR' GRADV ;
  1480. 'DETR' GRADY ;
  1481. 'DETR' GRADS ;
  1482. 'DETR' ALR ;
  1483. 'DETR' ALP ;
  1484. 'DETR' ALV ;
  1485. 'DETR' ALY ;
  1486. 'DETR' ALS ;
  1487.  
  1488. 'OUBL' GRADR ;
  1489. 'OUBL' GRADP ;
  1490. 'OUBL' GRADV ;
  1491. 'OUBL' GRADY ;
  1492. 'OUBL' GRADS ;
  1493. 'OUBL' ALR ;
  1494. 'OUBL' ALP ;
  1495. 'OUBL' ALV;
  1496. 'OUBL' ALY ;
  1497. 'OUBL' ALS ;
  1498.  
  1499. 'FINSI' ;
  1500.  
  1501. 'FINSI' ;
  1502.  
  1503. * b) LOGESP 'ET' ('NON' LOGSCA)
  1504.  
  1505.  
  1506. 'SI' (LOGESP 'ET' ('NON' LOGSCA)) ;
  1507.  
  1508. MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
  1509. NDIM = 'VALE' 'DIME' ;
  1510. 'SI' ('EGA' NDIM 2) ;
  1511. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1512. ('LECT' 2 3 ) ;
  1513. LMOT2 = 'MOTS' 'UX' 'UY' ;
  1514. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
  1515. 'SINON' ;
  1516. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1517. ('LECT' 2 3 4) ;
  1518. LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
  1519. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
  1520. 'FINSI' ;
  1521. LMOT3 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1522. ('LECT' (3+NDIM) 'PAS' 1 'NPAS' (NESP '-' 1)) ;
  1523. LMOT4 = (PGAZ . 'ESPEULE') ;
  1524.  
  1525. RN = 'EXCO' MOT1 UN ;
  1526. GN = 'EXCO' LMOT1 UN LMOT2 ;
  1527. RETN = 'EXCO' MOT2 UN ;
  1528. RYN = 'EXCO' LMOT3 UN LMOT4 ;
  1529.  
  1530. *
  1531. ***** On calcule les variables primitive
  1532. *
  1533.  
  1534. VN PN TN YN GAMN = 'PRIM' 'PERFTEMP'
  1535. PGAZ RN GN RETN RYN ;
  1536.  
  1537. *
  1538. ***** On calcule les variables aux faces
  1539. *
  1540.  
  1541. 'SI' (ORDESP 'EGA' 1) ;
  1542.  
  1543. *
  1544. ********* Ordre 1 en espace
  1545. *
  1546.  
  1547. ROF VITF PF YF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
  1548. PGAZ RN VN PN YN ;
  1549.  
  1550. 'SINON' ;
  1551.  
  1552. *
  1553. ********* Ordre 2 en espace
  1554. *
  1555.  
  1556. GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1557. (KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
  1558.  
  1559. GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1560. (KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
  1561.  
  1562. GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
  1563. (KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
  1564. 'GRADGEO' (KKONV . 'GRADVN') ;
  1565.  
  1566. GRADY ALY = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1567. (KKONV . 'LIMITEUR') YN 'GRADGEO' (KKONV . 'GRADYN') ;
  1568.  
  1569. 'SI' ('EXISTE' RV 'MAIFAN') ;
  1570.  
  1571. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  1572. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  1573. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  1574. ALYLEV = ('REDU' ALY (RV . 'MAIFAN')) ;
  1575.  
  1576. CELL = ALR ;
  1577. ALR = ALR '-' ALRLEV ;
  1578. 'DETR' CELL ;
  1579.  
  1580. CELL = ALP ;
  1581. ALP = ALP '-' ALPLEV ;
  1582. 'DETR' CELL ;
  1583.  
  1584. CELL = ALV ;
  1585. ALV = ALV '-' ALVLEV ;
  1586. 'DETR' CELL ;
  1587.  
  1588. CELL = ALY ;
  1589. ALY = ALY '-' ALYLEV ;
  1590. 'DETR' CELL ;
  1591.  
  1592. 'FINSI' ;
  1593.  
  1594. 'SI' (ORDTPS 'EGA' 1);
  1595.  
  1596. *
  1597. ********* Ordre 1 en temps
  1598. *
  1599.  
  1600. ROF VITF PF YF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1601. $DOMA PGAZ
  1602. RN GRADR ALR
  1603. VN GRADV ALV
  1604. PN GRADP ALP
  1605. YN GRADY ALY ;
  1606.  
  1607. 'SINON' ;
  1608.  
  1609. *
  1610. ********* Ordre 2 en temps (en explicite)
  1611. *
  1612.  
  1613. DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
  1614. (RV . 'PASDETPS' . 'TPSM') ;
  1615.  
  1616. ROF VITF PF YF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1617. $DOMA PGAZ
  1618. RN GRADR ALR
  1619. VN GRADV ALV
  1620. PN GRADP ALP
  1621. YN GRADY ALY
  1622. GAMN (DELTAM1 '/' 2.0);
  1623. 'FINSI' ;
  1624.  
  1625. 'FINSI' ;
  1626.  
  1627. 'SI' LOGIMP ;
  1628. 'ERREUR' 21 ;
  1629. 'SINON' ;
  1630. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
  1631. $DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF YF ;
  1632. 'FINSI' ;
  1633.  
  1634.  
  1635. *
  1636. **** On detrui les choses qui ne servent plus
  1637. *
  1638.  
  1639. 'DETR' UN ;
  1640. 'OUBL' UN ;
  1641.  
  1642. 'DETR' RN ;
  1643. 'DETR' GN ;
  1644. 'DETR' RETN ;
  1645. 'DETR' RYN ;
  1646. 'DETR' VN ;
  1647. 'DETR' PN ;
  1648. 'DETR' YN ;
  1649. 'DETR' GAMN ;
  1650.  
  1651. 'OUBL' RN ;
  1652. 'OUBL' GN ;
  1653. 'OUBL' RETN ;
  1654. 'OUBL' RYN ;
  1655. 'OUBL' VN ;
  1656. 'OUBL' PN ;
  1657. 'OUBL' YN ;
  1658. 'OUBL' GAMN ;
  1659.  
  1660. *
  1661. **** Les MCHAML faces
  1662. *
  1663.  
  1664. 'DETR' ROF ;
  1665. 'DETR' VITF ;
  1666. 'DETR' PF ;
  1667. 'DETR' YF ;
  1668.  
  1669. 'OUBL' ROF ;
  1670. 'OUBL' VITF ;
  1671. 'OUBL' PF ;
  1672. 'OUBL' YF ;
  1673.  
  1674. *
  1675. **** Les pentes et les limiteurs
  1676. *
  1677.  
  1678. 'SI' (ORDESP 'EGA' 2);
  1679.  
  1680. 'DETR' GRADR ;
  1681. 'DETR' GRADP ;
  1682. 'DETR' GRADV ;
  1683. 'DETR' GRADY ;
  1684. 'DETR' ALR ;
  1685. 'DETR' ALP ;
  1686. 'DETR' ALV ;
  1687. 'DETR' ALY ;
  1688.  
  1689. 'OUBL' GRADR ;
  1690. 'OUBL' GRADP ;
  1691. 'OUBL' GRADV ;
  1692. 'OUBL' GRADY ;
  1693. 'OUBL' ALR ;
  1694. 'OUBL' ALP ;
  1695. 'OUBL' ALV;
  1696. 'OUBL' ALY ;
  1697.  
  1698. 'FINSI' ;
  1699.  
  1700. 'FINSI' ;
  1701.  
  1702.  
  1703.  
  1704. * c) ('NON' LOGESP) 'ET' ('NON' LOGSCA)
  1705.  
  1706.  
  1707. 'MESSAGE' ;
  1708. 'MESSAGE' 'Ciao' ;
  1709.  
  1710. 'SI' (('NON' LOGESP) 'ET' ('NON' LOGSCA)) ;
  1711.  
  1712. MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
  1713. NDIM = 'VALE' 'DIME' ;
  1714. 'SI' ('EGA' NDIM 2) ;
  1715. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1716. ('LECT' 2 3 ) ;
  1717. LMOT2 = 'MOTS' 'UX' 'UY' ;
  1718. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
  1719. 'SINON' ;
  1720. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1721. ('LECT' 2 3 4) ;
  1722. LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
  1723. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
  1724. 'FINSI' ;
  1725.  
  1726. RN = 'EXCO' MOT1 UN ;
  1727. GN = 'EXCO' LMOT1 UN LMOT2 ;
  1728. RETN = 'EXCO' MOT2 UN ;
  1729.  
  1730. *
  1731. ***** On calcule les variables primitive
  1732. *
  1733.  
  1734. VN PN TN GAMN = 'PRIM' 'PERFTEMP'
  1735. PGAZ RN GN RETN ;
  1736.  
  1737. *
  1738. ***** On calcule les variables aux faces
  1739. *
  1740.  
  1741. 'SI' (ORDESP 'EGA' 1) ;
  1742.  
  1743. *
  1744. ********* Ordre 1 en espace
  1745. *
  1746.  
  1747. ROF VITF PF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
  1748. PGAZ RN VN PN ;
  1749.  
  1750. 'SINON' ;
  1751.  
  1752. *
  1753. ********* Ordre 2 en espace
  1754. *
  1755.  
  1756. GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1757. (KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
  1758.  
  1759. GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1760. (KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
  1761.  
  1762. GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
  1763. (KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
  1764. 'GRADGEO' (KKONV . 'GRADVN') ;
  1765.  
  1766. 'SI' ('EXISTE' RV 'MAIFAN') ;
  1767.  
  1768. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  1769. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  1770. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  1771.  
  1772. CELL = ALR ;
  1773. ALR = ALR '-' ALRLEV ;
  1774. 'DETR' CELL ;
  1775.  
  1776. CELL = ALP ;
  1777. ALP = ALP '-' ALPLEV ;
  1778. 'DETR' CELL ;
  1779.  
  1780. CELL = ALV ;
  1781. ALV = ALV '-' ALVLEV ;
  1782. 'DETR' CELL ;
  1783.  
  1784. 'FINSI' ;
  1785.  
  1786. 'SI' (ORDTPS 'EGA' 1);
  1787.  
  1788. *
  1789. ********* Ordre 1 en temps
  1790. *
  1791.  
  1792. ROF VITF PF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1793. $DOMA PGAZ
  1794. RN GRADR ALR
  1795. VN GRADV ALV
  1796. PN GRADP ALP ;
  1797.  
  1798. 'SINON' ;
  1799.  
  1800. *
  1801. ********* Ordre 2 en temps (en explicite)
  1802. *
  1803.  
  1804. DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
  1805. (RV . 'PASDETPS' . 'TPSM') ;
  1806.  
  1807. ROF VITF PF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1808. $DOMA PGAZ
  1809. RN GRADR ALR
  1810. VN GRADV ALV
  1811. PN GRADP ALP
  1812. GAMN (DELTAM1 '/' 2.0);
  1813. 'FINSI' ;
  1814.  
  1815. 'FINSI' ;
  1816.  
  1817. 'SI' LOGIMP ;
  1818. 'ERREUR' 21 ;
  1819. 'SINON' ;
  1820. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
  1821. $DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF ;
  1822. 'FINSI' ;
  1823.  
  1824.  
  1825. *
  1826. **** On detrui les choses qui ne servent plus
  1827. *
  1828.  
  1829. 'DETR' UN ;
  1830. 'OUBL' UN ;
  1831.  
  1832. 'DETR' RN ;
  1833. 'DETR' GN ;
  1834. 'DETR' RETN ;
  1835. 'DETR' VN ;
  1836. 'DETR' PN ;
  1837. 'DETR' GAMN ;
  1838.  
  1839. 'OUBL' RN ;
  1840. 'OUBL' GN ;
  1841. 'OUBL' RETN ;
  1842. 'OUBL' VN ;
  1843. 'OUBL' PN ;
  1844. 'OUBL' GAMN ;
  1845.  
  1846. *
  1847. **** Les MCHAML faces
  1848. *
  1849.  
  1850. 'DETR' ROF ;
  1851. 'DETR' VITF ;
  1852. 'DETR' PF ;
  1853.  
  1854. 'OUBL' ROF ;
  1855. 'OUBL' VITF ;
  1856. 'OUBL' PF ;
  1857.  
  1858. *
  1859. **** Les pentes et les limiteurs
  1860. *
  1861.  
  1862. 'SI' (ORDESP 'EGA' 2);
  1863.  
  1864. 'DETR' GRADR ;
  1865. 'DETR' GRADP ;
  1866. 'DETR' GRADV ;
  1867. 'DETR' ALR ;
  1868. 'DETR' ALP ;
  1869. 'DETR' ALV ;
  1870.  
  1871. 'OUBL' GRADR ;
  1872. 'OUBL' GRADP ;
  1873. 'OUBL' GRADV ;
  1874. 'OUBL' GRADY ;
  1875. 'OUBL' ALR ;
  1876. 'OUBL' ALP ;
  1877. 'OUBL' ALV;
  1878.  
  1879. 'FINSI' ;
  1880.  
  1881. 'FINSI' ;
  1882.  
  1883.  
  1884. * d) ('NON' LOGESP) 'ET' LOGSCA
  1885.  
  1886. 'SI' (('NON' LOGESP) 'ET' LOGSCA) ;
  1887.  
  1888. MOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO') 1 ;
  1889. NDIM = 'VALE' 'DIME' ;
  1890. 'SI' ('EGA' NDIM 2) ;
  1891. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1892. ('LECT' 2 3 ) ;
  1893. LMOT2 = 'MOTS' 'UX' 'UY' ;
  1894. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 4 ;
  1895. 'SINON' ;
  1896. LMOT1 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1897. ('LECT' 2 3 4) ;
  1898. LMOT2 = 'MOTS' 'UX' 'UY' 'UZ' ;
  1899. MOT2 = 'EXTRAIRE' (KKONV . 'LISTINCO') 5 ;
  1900. 'FINSI' ;
  1901. LMOT5 = 'EXTRAIRE' (KKONV . 'LISTINCO')
  1902. ('LECT' (3+NDIM) 'PAS' 1 'NPAS'
  1903. (NSCA '-' 1)) ;
  1904. LMOT6 = (PGAZ . 'SCALPASS') ;
  1905.  
  1906. RN = 'EXCO' MOT1 UN ;
  1907. GN = 'EXCO' LMOT1 UN LMOT2 ;
  1908. RETN = 'EXCO' MOT2 UN ;
  1909. RSN = 'EXCO' LMOT5 UN LMOT6 ;
  1910.  
  1911. *
  1912. ***** On calcule les variables primitive
  1913. *
  1914.  
  1915. VN PN TN SN GAMN = 'PRIM' 'PERFTEMP'
  1916. PGAZ RN GN RETN RSN ;
  1917.  
  1918. *
  1919. ***** On calcule les variables aux faces
  1920. *
  1921.  
  1922. 'SI' (ORDESP 'EGA' 1) ;
  1923.  
  1924. *
  1925. ********* Ordre 1 en espace
  1926. *
  1927.  
  1928. ROF VITF PF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS $DOMA
  1929. PGAZ RN VN PN SN ;
  1930.  
  1931. 'SINON' ;
  1932.  
  1933. *
  1934. ********* Ordre 2 en espace
  1935. *
  1936.  
  1937. GRADR ALR = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1938. (KKONV . 'LIMITEUR') RN 'GRADGEO' (KKONV . 'GRADRN') ;
  1939.  
  1940. GRADP ALP = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1941. (KKONV . 'LIMITEUR') PN 'GRADGEO' (KKONV . 'GRADPN') ;
  1942.  
  1943. GRADV ALV = 'PENT' $DOMA 'CENTRE' 'EULEVECT'
  1944. (KKONV . 'LIMITEUR') VN 'CLIM' (KKONV . 'VLIM')
  1945. 'GRADGEO' (KKONV . 'GRADVN') ;
  1946.  
  1947. GRADS ALS = 'PENT' $DOMA 'CENTRE' 'EULESCAL'
  1948. (KKONV . 'LIMITEUR') SN 'GRADGEO' (KKONV . 'GRADSN') ;
  1949.  
  1950. 'SI' ('EXISTE' RV 'MAIFAN') ;
  1951.  
  1952. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  1953. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  1954. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  1955. ALSLEV = ('REDU' ALS (RV . 'MAIFAN')) ;
  1956.  
  1957. CELL = ALR ;
  1958. ALR = ALR '-' ALRLEV ;
  1959. 'DETR' CELL ;
  1960.  
  1961. CELL = ALP ;
  1962. ALP = ALP '-' ALPLEV ;
  1963. 'DETR' CELL ;
  1964.  
  1965. CELL = ALV ;
  1966. ALV = ALV '-' ALVLEV ;
  1967. 'DETR' CELL ;
  1968.  
  1969. CELL = ALS ;
  1970. ALS = ALS '-' ALSLEV ;
  1971. 'DETR' CELL ;
  1972.  
  1973. 'FINSI' ;
  1974.  
  1975. 'SI' (ORDTPS 'EGA' 1);
  1976.  
  1977. *
  1978. ********* Ordre 1 en temps
  1979. *
  1980.  
  1981. ROF VITF PF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1982. $DOMA PGAZ
  1983. RN GRADR ALR
  1984. VN GRADV ALV
  1985. PN GRADP ALP
  1986. SN GRADS ALS ;
  1987.  
  1988. 'SINON' ;
  1989.  
  1990. *
  1991. ********* Ordre 2 en temps (en explicite)
  1992. *
  1993.  
  1994. DELTAM1 = (RV . 'PASDETPS' . 'TPS') '-'
  1995. (RV . 'PASDETPS' . 'TPSM') ;
  1996.  
  1997. ROF VITF PF SF = 'PRET' 'PERFTEMP' ORDESP ORDTPS
  1998. $DOMA PGAZ
  1999. RN GRADR ALR
  2000. VN GRADV ALV
  2001. PN GRADP ALP
  2002. SN GRADS ALS
  2003. GAMN (DELTAM1 '/' 2.0);
  2004. 'FINSI' ;
  2005.  
  2006. 'FINSI' ;
  2007.  
  2008. 'SI' LOGIMP ;
  2009. 'ERREUR' 21 ;
  2010. 'SINON' ;
  2011. JACO RESIDU DELTAT = 'KONV' 'VF' 'PERFTEMP' 'RESI' METO
  2012. $DOMA PGAZ (KKONV . 'LISTINCO') ROF VITF PF SF ;
  2013. 'FINSI' ;
  2014.  
  2015.  
  2016. *
  2017. **** On detrui les choses qui ne servent plus
  2018. *
  2019.  
  2020. 'DETR' UN ;
  2021. 'OUBL' UN ;
  2022.  
  2023. 'DETR' RN ;
  2024. 'DETR' GN ;
  2025. 'DETR' RETN ;
  2026. 'DETR' RSN ;
  2027. 'DETR' VN ;
  2028. 'DETR' PN ;
  2029. 'DETR' SN ;
  2030. 'DETR' GAMN ;
  2031.  
  2032. 'OUBL' RN ;
  2033. 'OUBL' GN ;
  2034. 'OUBL' RETN ;
  2035. 'OUBL' RSN ;
  2036. 'OUBL' VN ;
  2037. 'OUBL' PN ;
  2038. 'OUBL' SN ;
  2039. 'OUBL' GAMN ;
  2040.  
  2041. *
  2042. **** Les MCHAML faces
  2043. *
  2044.  
  2045. 'DETR' ROF ;
  2046. 'DETR' VITF ;
  2047. 'DETR' PF ;
  2048. 'DETR' SF ;
  2049.  
  2050. 'OUBL' ROF ;
  2051. 'OUBL' VITF ;
  2052. 'OUBL' PF ;
  2053. 'OUBL' SF ;
  2054.  
  2055. *
  2056. **** Les pentes et les limiteurs
  2057. *
  2058.  
  2059. 'SI' (ORDESP 'EGA' 2);
  2060.  
  2061. 'DETR' GRADR ;
  2062. 'DETR' GRADP ;
  2063. 'DETR' GRADV ;
  2064. 'DETR' GRADS ;
  2065. 'DETR' ALR ;
  2066. 'DETR' ALP ;
  2067. 'DETR' ALV ;
  2068. 'DETR' ALS ;
  2069.  
  2070. 'OUBL' GRADR ;
  2071. 'OUBL' GRADP ;
  2072. 'OUBL' GRADV ;
  2073. 'OUBL' GRADS ;
  2074. 'OUBL' ALR ;
  2075. 'OUBL' ALP ;
  2076. 'OUBL' ALV;
  2077. 'OUBL' ALS ;
  2078.  
  2079. 'FINSI' ;
  2080.  
  2081. 'FINSI' ;
  2082.  
  2083. 'FINSI' ;
  2084.  
  2085. 'SI' ('EGA' ('TYPE' (KKONV . 'ALPHA')) FLOTTANT) ;
  2086. ALPDT = 'PROG' ((KKONV . 'ALPHA') '*' DELTAT) ;
  2087. 'SINON' ;
  2088. ALPDT = 'PROG' ;
  2089. 'FINSI' ;
  2090.  
  2091. KKONV . 'DT' = DELTAT ;
  2092.  
  2093. 'FINPROC' JACO RESIDU ALPDT THETA ;
  2094.  
  2095.  
  2096. *****************************************************
  2097. *****************************************************
  2098. ** FIN PROCEDURE PKON **
  2099. *****************************************************
  2100. *****************************************************
  2101.  
  2102.  
  2103.  
  2104. *****************************************************
  2105. *****************************************************
  2106. ***** PROCEDURE PROLIM *****
  2107. *****************************************************
  2108. *****************************************************
  2109. *
  2110. *
  2111. **** Cas Euler mono-espèce
  2112. *
  2113.  
  2114. 'DEBPROC' PROLIM ;
  2115. 'ARGUMENT' RV * TABLE ;
  2116.  
  2117. UN = RV . 'UN' ;
  2118. UNLIM = RV . 'UNLIM' ;
  2119. MAILLIM = 'EXTRAIRE' UNLIM 'MAILLAGE' ;
  2120. UNLEV = 'REDU' UN MAILLIM '*' (-1.0) ;
  2121.  
  2122. UN = UN '+' UNLEV '+' UNLIM ;
  2123.  
  2124. 'FINPROC' UN ;
  2125.  
  2126.  
  2127. *****************************************************
  2128. *****************************************************
  2129. ***** FIN PROCEDURE PROLIM *****
  2130. *****************************************************
  2131. *****************************************************
  2132.  
  2133. *********************************************************************
  2134. **** Procedure CALC *************************************************
  2135. *********************************************************************
  2136. *
  2137. * Cette procédure, utilisée comme un opérateur, calcule la différence
  2138. * entre deux pas de temps toutes les (RVX . 'FCALC') itérations.
  2139. * L'evolution de cette différence (erreur absolue) au cours du temps
  2140. * est conservée en vue d'un post-traitement.
  2141. *
  2142. *
  2143. 'DEBP' CALC ;
  2144. 'ARGU' RVX*'TABLE' ;
  2145. *
  2146. RV = RVX . 'EQEX' ;
  2147. UN = RV . 'UN' ;
  2148. RN = 'EXCO' UN 'RN' ;
  2149. RUX = 'EXCO' UN 'RUX' ;
  2150. RUY = 'EXCO' UN 'RUY' ;
  2151. MOMSQ = (RUX '*' RUX) '+' (RUY '*' RUY) ;
  2152. MOM = MOMSQ '**' 0.5 ;
  2153. *
  2154. 'SI' ( 'EXIS' RVX 'COMPT') ;
  2155. RVX . 'COMPT' = RVX . 'COMPT' + 1 ;
  2156. 'SINON' ;
  2157. RVX . 'COMPT' = 1 ;
  2158. RVX . 'IT' = 'PROG' ;
  2159. RVX . 'TPS' = 'PROG' ;
  2160. RVX . 'ER' = 'PROG' ;
  2161. RVX . 'RN0' = 'COPI' RN ;
  2162. 'FINSI' ;
  2163. *******************************************
  2164. DD = RVX . 'COMPT' ;
  2165. COMBIEN = RVX . 'FCALC' ;
  2166. NN = DD '/' COMBIEN ;
  2167. LO = (DD '-' (COMBIEN '*' NN)) 'EGA' 0 ;
  2168. 'SI' LO ;
  2169. ERR = MOM '-' (RVX . 'RN0') ;
  2170. RVX . 'RN0' = 'COPI' MOM ;
  2171. ERRINF = 'MAXI' ERR 'ABS' ;
  2172. ELI = ('LOG' (ERRINF + 1.0E-50))/('LOG' 10.) ;
  2173. 'MESSAGE' ;
  2174. 'MESSAGE' 'Erreur de convergence' ;
  2175. 'MESS' 'ITERATION ' (RVX . 'COMPT') ' LOG10 ERREUR ' ELI ;
  2176. 'MESSAGE' ;
  2177. IT = 'PROG' RVX . 'COMPT' ;
  2178. ER = 'PROG' ELI ;
  2179. TPS = 'PROG' (RV . 'PASDETPS' . 'TPS') ;
  2180. RVX . 'IT' = (RVX . 'IT') 'ET' IT ;
  2181. RVX . 'ER' = (RVX . 'ER') 'ET' ER ;
  2182. RVX . 'TPS' = (RVX . 'TPS') 'ET' TPS ;
  2183. 'FINS' ;
  2184. IRESU IJACO ='KOPS' 'MATRIK' ;
  2185. IALPDT = 'PROG' ;
  2186. THETA = 0.0 ;
  2187. ***************************************************
  2188. RV . 'MATIDE' = 'KOPS' 'MATIDE' ('MOTS' 'RN' 'RUX' 'RUY' 'RETN')
  2189. ($DOMTOT . 'CENTRE') 'MATRIK' ;
  2190. ***************************************************
  2191. *****************************************************************
  2192. LMOT = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
  2193.  
  2194. RN = 'EXCO' 'RN' (RV . 'UN') ;
  2195. GN = 'EXCO' ('MOTS' 'RUX' 'RUY') (RV . 'UN') ('MOTS' 'UX' 'UY') ;
  2196. RETN = 'EXCO' 'RETN' (RV . 'UN') ;
  2197. ****************
  2198. VN PN = 'PRIM' 'PERFMONO'
  2199. RN GN RETN GAMN ;
  2200. ***************************************************
  2201. 'MENAGE' ;
  2202.  
  2203. 'RESPRO' IJACO IRESU IALPDT THETA ;
  2204.  
  2205. 'FINP' ;
  2206.  
  2207. ************************************************************************
  2208. ************************************************************************
  2209. ***************** FIN PARTIE PROCEDURES ********************************
  2210. ************************************************************************
  2211. ************************************************************************
  2212. **********************************************************************
  2213. * CALCUL DE L'ECOULEMENT SUBSONIQUE ISENTROPIQUE STATIONNAIRE DANS *
  2214. * UN CANAL MAILLAGE -------- MAILLAGE ----- *-------------------------------------------------------------------
  2215. * GRAPH = VRAI ;
  2216.  
  2217. ******************
  2218. **** MAILLAGE ****
  2219. ******************
  2220.  
  2221. NY = 4 ;
  2222. NX1 = NY ;
  2223. NX2 = 2 '*' NX1 ;
  2224. NX3 = NX1 ;
  2225. NX = NX1 '+' NX2 '+' NX3 ;
  2226. DX = 4.0 '/' NX ;
  2227. * NRAFF = 2 ;
  2228.  
  2229. A0 = -2.0 0.0 ;
  2230. A1 = -1.0 0.0 ;
  2231. A2 = 1.0 0.0 ;
  2232. A3 = 2.0 0.0 ;
  2233. A4 = 2.0 1.0 ;
  2234. A5 = -2.0 1.0 ;
  2235.  
  2236. *
  2237. **** LIGB
  2238. *
  2239.  
  2240. LIGB1 = A0 'DROIT' NX1 A1 ;
  2241.  
  2242. * LIGB2 (On utilise un propriete de 'ET' ; si 'ET' change ?)
  2243.  
  2244. xcel = ('COORDONNEE' 1 A1) '+' DX ;
  2245. ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
  2246. ACEL = xcel ycel ;
  2247. LIGB2 = A1 'DROIT' 1 ACEL ;
  2248. 'REPETER' BL1 (NX2 '-' 2) ;
  2249. ACEL0 = ACEL ;
  2250. xcel = xcel '+' DX ;
  2251. ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
  2252. ACEL = xcel ycel ;
  2253. LIGB2 = LIGB2 'ET' (ACEL0 'DROIT' 1 ACEL) ;
  2254. 'FIN' BL1;
  2255. LIGB2 = LIGB2 'ET' (ACEL 'DROIT' 1 A2) ;
  2256.  
  2257.  
  2258. LIGB3 = A2 'DROIT' NX3 A3 ;
  2259.  
  2260. LIGB = LIGB1 'ET' LIGB2 'ET' LIGB3 ;
  2261.  
  2262. *
  2263. **** LIGH
  2264. *
  2265.  
  2266. LIGH = A4 'DROIT' NX A5 ;
  2267.  
  2268. *
  2269. *** LIGG
  2270. *
  2271.  
  2272. LIGG = A5 'DROIT' NY A0 ;
  2273.  
  2274. *
  2275. **** LIGD
  2276. *
  2277.  
  2278. LIGD = A3 'DROIT' NY A4 ;
  2279.  
  2280. LIGT = LIGB 'ET' LIGD 'ET' LIGH 'ET' LIGG ;
  2281.  
  2282. *
  2283. **** Le domaine
  2284. *
  2285. DOMINT = LIGT 'SURFACE' 'PLANE' ;
  2286. DOMINT = 'DEDU' DOMINT LIGT LIGT 'REGU' ;
  2287.  
  2288. *
  2289. **** Le rafinement
  2290. *
  2291. *
  2292. **** C'est la Perle qui a fait ça quand il etait encore tres brillant!!!
  2293. * (Avant la lettre de l'Arme!!!)
  2294. * Mais il va bientot etre un vrai homme!!!
  2295. *
  2296.  
  2297.  
  2298. DOMCEL = DOMINT ;
  2299.  
  2300. 'SI' (nraff > 0) ;
  2301. 'REPETER' bcl nraff ;
  2302. mttemp = 'CHANGER' DOMCEL 'QUADRATIQUE' ;
  2303. $mtt = 'DOMA' mttemp 'MACRO' ;
  2304. DOMCEL = ($mtt . 'MAILLAGE') ;
  2305. 'OUBLIER' mttemp ;
  2306. 'OUBLIER' $mtt ;
  2307. DOMINT = DOMCEL ;
  2308. LIGCON = 'CONTOUR' DOMINT ;
  2309.  
  2310. *
  2311. **** Je doit transler le points du BUMP (operateur FORME)
  2312. *
  2313.  
  2314. NLIGB2 = LIGCON 'ELEM' 'COMPRIS' A1 A2 ;
  2315. MAILB = 'CHANGER' NLIGB2 'POI1';
  2316. MAILB0 = MAILB 'PLUS' (0.0D0 0.0D0);
  2317.  
  2318. * Listreels des deplacements
  2319.  
  2320. NP = 'NBNO' MAILB ;
  2321. LISTX = 'PROG' NP '*' 0.0 ;
  2322. LISTY = 'PROG' NP '*' 0.0 ;
  2323.  
  2324. 'REPETER' BL1 ('NBNO' MAILB) ;
  2325. xcel ycel0 = 'COORDONNEE' (MAILB 'POIN' &BL1);
  2326. ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
  2327. 'REMPLACER' LISTY &BL1 (ycel '-' ycel0) ;
  2328.  
  2329. 'FIN' BL1 ;
  2330.  
  2331. DEPCH = 'MANUEL' 'CHPO' MAILB 2 'UX' LISTX 'UY' LISTY ;
  2332. 'FORME' DEPCH ;
  2333.  
  2334. 'FIN' bcl ;
  2335. DX = DX '/' (NRAFF '*' 2.0 ) ;
  2336. 'SINON' ;
  2337. LIGCON = 'CONTOUR' DOMINT ;
  2338. 'FINSI' ;
  2339. 'MENAGE' ;
  2340.  
  2341. *
  2342. **** Les C.L.
  2343. *
  2344.  
  2345. NLIGD = LIGCON 'ELEM' 'COMPRIS' A3 A4 ;
  2346. NLIGG = LIGCON 'ELEM' 'COMPRIS' A5 A0 ;
  2347.  
  2348. 'OPTION' 'ELEM' 'QUA4' ;
  2349. FG = (NLIGG 'TRANSLATION' 1 ((-1.0 '*' DX) 0.0)) 'COULEUR' 'ROUGE' ;
  2350. FD = (NLIGD 'TRANSLATION' 1 (DX 0.0)) 'COULEUR' 'ROUGE' ;
  2351. FRONT = FG 'ET' FD ;
  2352.  
  2353. *
  2354. **** Domaine '+' CL
  2355. *
  2356.  
  2357. DOMTOT = DOMINT 'ET' FG 'ET' FD ;
  2358. 'ELIMINATION' DOMTOT 0.0001 ;
  2359.  
  2360. *********************
  2361. *** TABLE DOMAINE ***
  2362. *********************
  2363.  
  2364. $DOMTOT = 'DOMA' DOMTOT ;
  2365. $DOMINT = 'DOMA' DOMINT 'INCL' $DOMTOT ;
  2366. $FG = 'DOMA' FG 'INCL' $DOMTOT ;
  2367. $FD = 'DOMA' FD 'INCL' $DOMTOT ;
  2368. $FRONT = 'DOMA' FRONT 'INCL' $DOMTOT ;
  2369. 'DOMA' $DOMINT 'XXNORMAF' ;
  2370.  
  2371. CHPONOR = $DOMINT . 'XXNORMAF' ;
  2372.  
  2373. MOD1 = 'MODELISER' ($DOMTOT . 'MAILLAGE' ) 'THERMIQUE';
  2374.  
  2375. *
  2376. **** On doit imposer un'entree subsonic (u>0 i.e. 3 condition a imposer) et une
  2377. * sortie subsonic (1 condition)
  2378. *
  2379.  
  2380. *
  2381. **** Maillage entree subsonic
  2382. *
  2383.  
  2384. POIN0 = NLIGG 'POIN' 1;
  2385. X1 Y1 = 'COORDONNEE' POIN0;
  2386. 'REPETER' BLLIM (('NBNO' NLIGG) '-' 1) ;
  2387. X0 = X1 ;
  2388. Y0 = Y1 ;
  2389. POIN0 = NLIGG 'POIN' (&BLLIM '+' 1) ;
  2390. X1 Y1 = 'COORDONNEE' POIN0 ;
  2391. XFAC = (X0 '+' X1) '/' 2 ;
  2392. YFAC = (Y0 '+' Y1) '/' 2 ;
  2393. PFAC = ($DOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
  2394. GEOFAC1 = ($DOMINT . 'FACEL') 'ELEM' 'APPUYE'
  2395. 'LARGEMENT' PFAC ;
  2396. GEOFAC2 = ($FG . 'FACEL') 'ELEM' 'APPUYE'
  2397. 'LARGEMENT' PFAC ;
  2398. *
  2399. **** Tranformation en POI1
  2400. *
  2401. GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
  2402. PCEL11 = GEO1POI1 'POIN' 1 ;
  2403. PCEL12 = GEO1POI1 'POIN' 2 ;
  2404. GEO2POI1 = 'CHANGER' 'POI1' GEOFAC2 ;
  2405. PCEL21 = GEO2POI1 'POIN' 1 ;
  2406. PCEL22 = GEO2POI1 'POIN' 2 ;
  2407. *
  2408. **** Il faur verifier que PFAC = PCEL12 = PCEL22
  2409. * ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
  2410. *
  2411. 'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
  2412. 'MESSAGE' ;
  2413. 'MESSAGE'
  2414. 'Probleme dans la creation du domaine entree subsonique';
  2415. 'MESSAGE' ;
  2416. 'ERREUR' 21 ;
  2417. 'FINSI' ;
  2418. 'SI' ( ('NBEL' GEO2POI1) 'NEG' 2);
  2419. 'MESSAGE' ;
  2420. 'MESSAGE'
  2421. 'Probleme dans la creation du domaine entree subsonique';
  2422. 'MESSAGE' ;
  2423. 'ERREUR' 21 ;
  2424. 'FINSI' ;
  2425. 'SI' ( PCEL12 'NEG' PFAC);
  2426. 'MESSAGE' ;
  2427. 'MESSAGE'
  2428. 'Probleme dans la creation du domaine entree subsonique';
  2429. 'MESSAGE' ;
  2430. 'ERREUR' 21 ;
  2431. 'FINSI' ;
  2432. 'SI' ( PCEL22 'NEG' PFAC);
  2433. 'MESSAGE' ;
  2434. 'MESSAGE'
  2435. 'Probleme dans la creation du domaine entree subsonique';
  2436. 'MESSAGE' ;
  2437. 'ERREUR' 21 ;
  2438. 'FINSI' ;
  2439. *
  2440. *** Creation d'un maillage SEG2
  2441. *
  2442. 'SI' (&BLLIM 'EGA' 1);
  2443. BONCONNE = 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR' 'ROUGE' ;
  2444. MAILNOR = 'MANUEL' PCEL21 'POI1' ;
  2445. LISTVX = 'PROG' ('EXTRAIRE' CHPONOR PCEL12 'UX') ;
  2446. LISTVY = 'PROG' ('EXTRAIRE' CHPONOR PCEL12 'UY') ;
  2447. 'SINON' ;
  2448. BONCONNE = BONCONNE 'ET'
  2449. ( 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR' 'ROUGE' );
  2450. MAILNOR = MAILNOR 'ET' PCEL21 ;
  2451. LISTVX = LISTVX 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
  2452. 'UX')) ;
  2453. LISTVY = LISTVY 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
  2454. 'UY')) ;
  2455. 'FINSI' ;
  2456. 'FIN' BLLIM ;
  2457.  
  2458.  
  2459. *
  2460. **** Maillage sortie subsonic
  2461. *
  2462.  
  2463. POIN0 = NLIGD 'POIN' 1;
  2464. X1 Y1 = 'COORDONNEE' POIN0;
  2465. 'REPETER' BLLIM (('NBNO' NLIGD) '-' 1) ;
  2466. X0 = X1 ;
  2467. Y0 = Y1 ;
  2468. POIN0 = NLIGD 'POIN' (&BLLIM '+' 1) ;
  2469. X1 Y1 = 'COORDONNEE' POIN0 ;
  2470. XFAC = (X0 '+' X1) '/' 2 ;
  2471. YFAC = (Y0 '+' Y1) '/' 2 ;
  2472. PFAC = ($DOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
  2473. GEOFAC1 = ($DOMINT . 'FACEL') 'ELEM' 'APPUYE'
  2474. 'LARGEMENT' PFAC ;
  2475. GEOFAC2 = ($FD . 'FACEL') 'ELEM' 'APPUYE'
  2476. 'LARGEMENT' PFAC ;
  2477. *
  2478. **** Tranformation en POI1
  2479. *
  2480. GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
  2481. PCEL11 = GEO1POI1 'POIN' 1 ;
  2482. PCEL12 = GEO1POI1 'POIN' 2 ;
  2483. GEO2POI1 = 'CHANGER' 'POI1' GEOFAC2 ;
  2484. PCEL21 = GEO2POI1 'POIN' 1 ;
  2485. PCEL22 = GEO2POI1 'POIN' 2 ;
  2486. *
  2487. **** Il faur verifier que PFAC = PCEL12 = PCEL22
  2488. * ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
  2489. *
  2490. 'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
  2491. 'MESSAGE' ;
  2492. 'MESSAGE'
  2493. 'Probleme dans la creation du domaine entree subsonique';
  2494. 'MESSAGE' ;
  2495. 'ERREUR' 21 ;
  2496. 'FINSI' ;
  2497. 'SI' ( ('NBEL' GEO2POI1) 'NEG' 2);
  2498. 'MESSAGE' ;
  2499. 'MESSAGE'
  2500. 'Probleme dans la creation du domaine entree subsonique';
  2501. 'MESSAGE' ;
  2502. 'ERREUR' 21 ;
  2503. 'FINSI' ;
  2504. 'SI' ( PCEL12 'NEG' PFAC);
  2505. 'MESSAGE' ;
  2506. 'MESSAGE'
  2507. 'Probleme dans la creation du domaine entree subsonique';
  2508. 'MESSAGE' ;
  2509. 'ERREUR' 21 ;
  2510. 'FINSI' ;
  2511. 'SI' ( PCEL22 'NEG' PFAC);
  2512. 'MESSAGE' ;
  2513. 'MESSAGE'
  2514. 'Probleme dans la creation du domaine entree subsonique';
  2515. 'MESSAGE' ;
  2516. 'ERREUR' 21 ;
  2517. 'FINSI' ;
  2518. *
  2519. *** Creation d'un maillage SEG2
  2520. *
  2521. BONCONNE = BONCONNE 'ET'
  2522. ( 'MANUEL' 'SEG2' PCEL11 PCEL21 'COULEUR' 'ROUGE' );
  2523. MAILNOR = MAILNOR 'ET' PCEL21 ;
  2524. LISTVX = LISTVX 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
  2525. 'UX')) ;
  2526. LISTVY = LISTVY 'ET' ('PROG' ('EXTRAIRE' CHPONOR PCEL12
  2527. 'UY')) ;
  2528. 'FIN' BLLIM ;
  2529.  
  2530. CHNORM = 'MANUEL' 'CHPO' MAILNOR 2 'UX' LISTVX 'UY' LISTVY ;
  2531. *
  2532. * N.B.:
  2533. * CHNORM = normales sortantes du domaine!!!
  2534. *
  2535.  
  2536. TITOLO = ('CHAINE'
  2537. 'Maillage et con. aux bords (+ norm. sort.). NBEL = '
  2538. ('NBNO' ($DOMTOT . 'CENTRE'))) ;
  2539. 'SI' GRAPH ;
  2540. VECTN = 'VECTEUR' CHNORM .1 'UX' 'UY' 'BLEU' ;
  2541. 'TRACER' VECTN (DOMTOT 'ET' BONCONNE)
  2542. 'TITRE' TITOLO ;
  2543. 'FINSI' ;
  2544.  
  2545. *******************************************
  2546. ****** LIGNE de Post-traitement ***********
  2547. *******************************************
  2548.  
  2549. LIGB = LIGCON 'ELEM' 'COMPRIS' A0 A3 ;
  2550. POIN0 = LIGB 'POIN' 1;
  2551. X1 Y1 = 'COORDONNEE' POIN0 ;
  2552. 'REPETER' BLLIM (('NBNO' LIGB) '-' 1) ;
  2553. X0 = X1 ;
  2554. Y0 = Y1 ;
  2555. POIN0 = LIGB 'POIN' (&BLLIM '+' 1) ;
  2556. X1 Y1 = 'COORDONNEE' POIN0 ;
  2557. XFAC = (X0 '+' X1) '/' 2 ;
  2558. YFAC = (Y0 '+' Y1) '/' 2 ;
  2559. PFAC = ($DOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
  2560. GEOFAC1 = ($DOMINT . 'FACEL') 'ELEM' 'APPUYE'
  2561. 'LARGEMENT' PFAC ;
  2562. *
  2563. **** Tranformation en POI1
  2564. *
  2565. GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
  2566. PCEL11 = GEO1POI1 'POIN' 1 ;
  2567. PCEL12 = GEO1POI1 'POIN' 2 ;
  2568. *
  2569. **** Il faur verifier que PFAC = PCEL12 = PCEL22
  2570. * ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
  2571. *
  2572. 'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
  2573. 'MESSAGE' ;
  2574. 'MESSAGE'
  2575. 'Probleme dans la creation de la ligne pour le post.';
  2576. 'MESSAGE' ;
  2577. 'ERREUR' 21 ;
  2578. 'FINSI' ;
  2579. 'SI' ( PCEL12 'NEG' PFAC);
  2580. 'MESSAGE' ;
  2581. 'MESSAGE'
  2582. 'Probleme dans la creation de la ligne pour le post.';
  2583. 'MESSAGE' ;
  2584. 'ERREUR' 21 ;
  2585. 'FINSI' ;
  2586. *
  2587. *** Creation d'un maillage SEG2
  2588. *
  2589. 'SI' (&BLLIM 'EGA' 1);
  2590. PCEN0 = PCEL11 ;
  2591. 'SINON' ;
  2592. 'SI' (&BLLIM 'EGA' 2);
  2593. LIGPOST = 'MANUEL' 'SEG2' PCEN0 PCEL11 ;
  2594. PCEN0 = PCEL11 ;
  2595. 'SINO' ;
  2596. LIGPOST = LIGPOST 'ET' ('MANUEL' 'SEG2' PCEN0 PCEL11) ;
  2597. PCEN0 = PCEL11 ;
  2598. 'FINSI' ;
  2599. 'FINSI' ;
  2600. 'FIN' BLLIM ;
  2601.  
  2602. *****************************************************
  2603. * CALCUL DE L'ECOULEMENT SUBSONIQUE ISENTROPIQUE STATIONNAIRE DANS *
  2604. * UN CANAL *
  2605. * *
  2606. * INITIAL CONDITIONS ------ INITIAL CONDITIOINS
  2607. *********************************************************************
  2608. * GRAPH = VRAI ;
  2609.  
  2610. ***************************************************************
  2611. ***** PROCEDURE POUR CALCULER LES VARIABLES CONSERVATIVES *****
  2612. ***************************************************************
  2613.  
  2614. 'DEBPROC' CONS ;
  2615. 'ARGUMENT' RN*'CHPOINT' VN*'CHPOINT' PN*'CHPOINT' GAMN*'CHPOINT' ;
  2616.  
  2617. RVN = RN '*' VN ('MOTS' 'SCAL' 'SCAL') ('MOTS' 'UX' 'UY')
  2618. ('MOTS' 'UX' 'UY') ;
  2619. CELL = 'PSCAL' RVN VN ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
  2620. RECIN = 0.5 '*' CELL ;
  2621. REIN = PN '/' (GAMN '-' 1.0) ;
  2622. RETN = RECIN '+' REIN ;
  2623.  
  2624. DETR CELL ;
  2625. DETR RECIN ;
  2626. DETR REIN ;
  2627. 'RESPRO' RVN RETN ;
  2628.  
  2629. 'FINPROC' ;
  2630.  
  2631. ***************************************************************
  2632. ***************************************************************
  2633. ***************************************************************
  2634.  
  2635.  
  2636. RN0 = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' RO_INF
  2637. 'NATURE' 'DISCRET' ;
  2638. VN0 = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 2 'UX' U_INF
  2639. 'UY' 0.0 'NATURE' 'DISCRET' ;
  2640. PN0 = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' P_INF
  2641. 'NATURE' 'DISCRET' ;
  2642. GAMN = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' GAMSCAL
  2643. 'NATURE' 'DISCRET' ;
  2644.  
  2645. GN0 RETN0 = CONS RN0 VN0 PN0 GAMN ;
  2646.  
  2647. VN20 = 'PSCAL' VN0 VN0 ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
  2648. CN20 = GAMSCAL '*' (PN0 '/' RN0) ;
  2649. MACHN20 = VN20 '/' CN20 ;
  2650. MACHN0 = MACHN20 '**' 0.5 ;
  2651.  
  2652.  
  2653. MOD1 = 'MODELISER' ($DOMTOT . 'MAILLAGE' ) 'THERMIQUE';
  2654.  
  2655. 'SI' GRAPH ;
  2656.  
  2657. CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN0 ;
  2658. CHM_PN = 'KCHA' $DOMTOT 'CHAM' PN0 ;
  2659. CHM_VN = 'KCHA' $DOMTOT 'CHAM' VN0 ;
  2660. CHM_MACH = 'KCHA' $DOMTOT 'CHAM' MACHN0 ;
  2661.  
  2662. 'TRACER' CHM_RN MOD1
  2663. 'TITR' ('CHAINE' 'RN at t=' 0.0);
  2664. 'TRACER' CHM_PN MOD1
  2665. 'TITR' ('CHAINE' 'PN at t=' 0.0);
  2666. 'TRACER' CHM_MACH MOD1
  2667. 'TITR' ('CHAINE' 'MACHN at t=' 0.0);
  2668. 'TRACER' CHM_VN MOD1
  2669. 'TITR' ('CHAINE' 'VN at t=' 0.0);
  2670.  
  2671. 'FINSI' ;
  2672.  
  2673. UN =
  2674. ('NOMC' 'RN' RN0 'NATURE' 'DISCRET') 'ET'
  2675. ('EXCO' ('MOTS' 'UX' 'UY') GN0 ('MOTS' 'RUX' 'RUY')
  2676. 'NATURE' 'DISCRET') 'ET'
  2677. ('NOMC' 'RETN' RETN0 'NATURE' 'DISCRET') ;
  2678.  
  2679. UNLIM0 = 'REDU' UN ($FRONT . 'CENTRE') ;
  2680.  
  2681. *****************************************************
  2682. *****************************************************
  2683. *****************************************************
  2684. *****************************************************
  2685. **************** La table RV **********************
  2686. *****************************************************
  2687. *****************************************************
  2688. *****************************************************
  2689. *****************************************************
  2690. UINF = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' U_INF
  2691. 'NATURE' 'DISCRET' ;
  2692.  
  2693. UPRI = 'MANU' 'CHPO' ($DOMTOT . 'CENTRE') 1 'SCAL' 0.0
  2694. 'NATURE' 'DISCRET' ;
  2695.  
  2696. RV = 'TABLE' ;
  2697.  
  2698. RV . 'UN' = UN ;
  2699.  
  2700. **** Le domaine interne
  2701. RV . 'DOMINT' = $DOMINT . 'CENTRE' ;
  2702. *
  2703. RV . 'CLIM' = VRAI ;
  2704. *
  2705. RV . 'INST' = VRAI ;
  2706. RV . 'CONS' = FAUX ;
  2707. *
  2708. RV . 'TFINAL' = 1.D6 ;
  2709. RV . 'NITMAEX' = 40 ;
  2710. *
  2711. RV . 'NITMAIN' = 2 ;
  2712. RV . 'NITMIIN' = 1 ;
  2713. RV . 'EPSINT' = 1.0D-3 ;
  2714. ***********************************
  2715. *****************************************************************
  2716. LMOT = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
  2717.  
  2718. RN = 'EXCO' 'RN' (RV . 'UN') ;
  2719. GN = 'EXCO' ('MOTS' 'RUX' 'RUY') (RV . 'UN') ('MOTS' 'UX' 'UY') ;
  2720. RETN = 'EXCO' 'RETN' (RV . 'UN') ;
  2721. ****************
  2722. VN PN = 'PRIM' 'PERFMONO'
  2723. RN GN RETN GAMN ;
  2724. **************************************
  2725. RV . 'MATIDE' = 'KOPS' 'MATIDE' ('MOTS' 'RN' 'RUX' 'RUY' 'RETN')
  2726. ($DOMTOT . 'CENTRE') 'MATRIK' ;
  2727. ******************************************************************
  2728. *
  2729. RV . 'FEXT' = 20 ;
  2730. RV . 'FINT' = 1 ;
  2731. *
  2732. RV . 'LISTOPER' = 'MOTS' 'CALC' 'PKON' ;
  2733. *
  2734. **** Parametres de la procedure PROLIM
  2735. *
  2736.  
  2737. RV . 'MAIFAN' = $FRONT . 'CENTRE' ;
  2738. RV . 'UNLIM' = 'REDU' UNLIM0 ($FRONT . 'CENTRE') ;
  2739. ******************************************************
  2740. ** Here is the information for the BC
  2741. ******************************************************
  2742. RV . 'CONNECT' = BONCONNE ;
  2743. RV . 'NORM' = CHNORM ;
  2744. RV . 'GAMSCAL' = GAMSCAL ;
  2745.  
  2746. *
  2747.  
  2748. VITFAN = 'MANUEL' 'CHPO' ($FRONT . 'CENTRE') 2
  2749. 'UX' U_INF 'UY' 0.0 ;
  2750. VNORMFAN = 'PSCAL' VITFAN CHNORM ('MOTS' 'UX' 'UY')
  2751. ('MOTS' 'UX' 'UY') ;
  2752. SIGNVN = (2.0 '*' ('MASQUE' VNORMFAN 'SUPERIEUR' 0.0))
  2753. '-' 1.0 ;
  2754. SN_INF = P_INF '/' (RO_INF '**' GAMSCAL) ;
  2755. CELL_INF = (2.0 '/' (GAMSCAL '-' 1.0)) '*'
  2756. ((GAMSCAL '*' P_INF '/' RO_INF) '**' 0.5) ;
  2757.  
  2758. RV . 'R1INF' = (VNORMFAN '*' SIGNVN) '-' CELL_INF ;
  2759. RV . 'R3INF' = (VNORMFAN '*' SIGNVN) '+' CELL_INF ;
  2760. RV . 'R2INF' = SN_INF ;
  2761. RV . 'UTINF' = 'MANUEL' 'CHPO' ($FRONT . 'CENTRE')
  2762. 1 'SCAL' 0.0 ;
  2763. ********************************************************
  2764. *** End of the information for the BC
  2765. ********************************************************
  2766.  
  2767. *****************
  2768. ** CALCUL *******
  2769. *****************
  2770.  
  2771. RV . '1CALC' = 'TABLE' ;
  2772. RV . '1CALC' . 'EQEX' = RV ;
  2773. RV . '1CALC' . 'FCALC' = RV . 'NITMAIN' ;
  2774. RV . '1CALC' . 'IMPL' = VRAI ;
  2775. *****************
  2776. * PKON **********
  2777. *****************
  2778.  
  2779. RV . '2PKON' = 'TABLE' ;
  2780. ****************************************
  2781. * Alberto's strange things.....
  2782. ****************************************
  2783. ACEL = 0.0 0.0 ;
  2784. M1 = 'MANU' 'POI1' ACEL ;
  2785. M2 = 'MANU' 'POI1' ACEL ;
  2786. RV . '2PKON' . 'FACELIM' = 'DIFF' M1 M2 ;
  2787. ***************************************
  2788. RV . '2PKON' . 'UINF' = UINF ;
  2789. RV . '2PKON' . 'UPRI' = UPRI ;
  2790. RV . '2PKON' . 'EQEX' = RV ;
  2791. RV . '2PKON' . 'GAZ' = 'PERFMONO' ;
  2792. RV . '2PKON' . 'GAMN' = GAMN ;
  2793. RV . '2PKON' . 'DOMA' = $DOMTOT ;
  2794. RV . '2PKON' . 'LISTINCO' = 'MOTS' 'RN' 'RUX' 'RUY' 'RETN' ;
  2795. RV . '2PKON' . 'METHODE' = AUSMPLM ;
  2796. RV . '2PKON' . 'IMPL' = VRAI ;
  2797. RV . '2PKON' . 'TYPEJACO' = 'AUSMLMJ1' ;
  2798. RV . '2PKON' . 'THETA' = 1.0 ;
  2799. *
  2800. *
  2801. RV . '2PKON' . 'ORDREESP' = 2 ;
  2802. RV . '2PKON' . 'LIMITEUR' = 'NOLIMITE' ;
  2803. RV . '2PKON' . 'PREDCOR' = FAUX ;
  2804. RV . '2PKON' . 'ALPHA' = 1000000.0 ;
  2805.  
  2806. *
  2807. **** Dans le cas explicite, on doit faire beaucoup
  2808. * plus d'iterations
  2809. *
  2810. 'SI' ('NON' ( RV . '2PKON' . 'IMPL' )) ;
  2811. RV . 'NITMAEX' = (RV . 'NITMAEX') '*' 1 ;
  2812. 'FINSI' ;
  2813. *
  2814. *
  2815. **** Les gradients
  2816. *
  2817.  
  2818. 'SI' ((RV . '2PKON' . 'ORDREESP') 'EGA' 2) ;
  2819. CACCA PIPI = 'KOPS' 'MATRIK' ;
  2820.  
  2821. RN = 'EXCO' 'RN' UN ;
  2822. GN = 'EXCO' ('MOTS' 'RUX' 'RUY') UN ('MOTS' 'UX' 'UY') ;
  2823. RETN = 'EXCO' 'RETN' UN ;
  2824.  
  2825. VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
  2826. GRADR ALR COEFR = 'PENT' $DOMTOT 'CENTRE' 'EULESCAL' 'NOLIMITE'
  2827. RN ;
  2828. GRADP ALP COEFP = 'PENT' $DOMTOT 'CENTRE' 'EULESCAL' 'NOLIMITE'
  2829. PN ;
  2830. GRADV ALV COEFV = 'PENT' $DOMTOT 'CENTRE' 'EULEVECT' 'NOLIMITE'
  2831. VN 'CLIM' CACCA ;
  2832.  
  2833. RV . '2PKON' . 'GRADRN' = COEFR ;
  2834. RV . '2PKON' . 'GRADPN' = COEFP ;
  2835. RV . '2PKON' . 'GRADVN' = COEFV ;
  2836. RV . '2PKON' . 'VLIM' = CACCA ;
  2837. 'FINSI' ;
  2838.  
  2839. ***********************************
  2840. * Inversion de la matrice *********
  2841. ***********************************
  2842.  
  2843. RV . 'MATINV' = 'TABLE' 'METHINV' ;
  2844. MATTAB = RV . 'MATINV' ;
  2845. MATTAB . 'TYPINV' = 5 ;
  2846. MATTAB . 'IMPINV' = 0 ;
  2847. *
  2848. * Matrice pour assurer que la matrice à inverser est correctement
  2849. * assemblé
  2850. *
  2851. * MATTAB . 'MATASS' definie en EXEXIM
  2852. * MATTAB . 'MAPREC' "
  2853. * MATTAB . 'XINIT' "
  2854. *
  2855.  
  2856. * Methode de numerotation de DDL
  2857. MATTAB . 'TYRENU' = 'SLOA' ;
  2858. MATTAB . 'PCMLAG' = 'APR2' ;
  2859. MATTAB . 'GMRESTRT' = 50 ;
  2860. * ILU
  2861. MATTAB . 'PRECOND' = 3 ;
  2862. MATTAB . 'NITMAX' = 3000 ;
  2863. MATTAB . 'RESID' = 1.D-6 ;
  2864.  
  2865. ******************************************************************
  2866. ******************************************************************
  2867. ******************************************************************
  2868. ******************************************************************
  2869. ******************************************************************
  2870. ******************************************************************
  2871. ******************************************************************
  2872. ******************************************************************
  2873.  
  2874.  
  2875. *
  2876. **** Exexcution EXEXIM
  2877. *
  2878.  
  2879. 'TEMPS' 'ZERO' ;
  2880.  
  2881.  
  2882. EXEXIM RV ;
  2883. 'TEMPS' ;
  2884.  
  2885. 'MENAGE' ;
  2886.  
  2887. 'SI' ('NON' (RV . 'INST')) ;
  2888. CELL = 'INF' ;
  2889. 'SINON' ;
  2890. CELL = ((RV . '2PKON' . 'ALPHA')) ;
  2891. 'FINSI' ;
  2892.  
  2893. ********************************************************************
  2894. ********** POSTTREATMENT-------------------------------------------
  2895. ********************************************************************
  2896.  
  2897. * GRAPH = VRAI ;
  2898.  
  2899. *****************************************************
  2900. *************** SOLUTIONS ***************************
  2901. *****************************************************
  2902. *****************************************************
  2903.  
  2904. *
  2905. **** Le noms de la procedure PKON
  2906. *
  2907.  
  2908. LISTOPER = RV . 'LISTOPER' ;
  2909. 'REPETER' BL1 ('DIME' LISTOPER) ;
  2910. NOMPER = 'EXTRAIRE' LISTOPER &BL1 ;
  2911. 'SI' ('EGA' NOMPER 'PKON') ;
  2912. KKON = RV . ('MOT' ('TEXTE' ('CHAINE' &BL1 NOMPER) )) ;
  2913. 'FINSI' ;
  2914. 'FIN' BL1 ;
  2915.  
  2916. ORD_ESP = KKON . 'ORDREESP' ;
  2917.  
  2918. 'SI' (RV . 'INST') ;
  2919. ALPDT = KKON . 'ALPHA' ;
  2920. TFIN = RV . 'PASDETPS' . 'TPS' ;
  2921. 'SINON' ;
  2922. ALPDT = 'INF' ;
  2923. TFIN = 'INF' ;
  2924. 'FINSI' ;
  2925.  
  2926. NTOTEL = 'NBNO' ($DOMINT . 'CENTRE') ;
  2927.  
  2928. *
  2929. **** Les variables conservatives
  2930. *
  2931.  
  2932.  
  2933. RN = 'EXCO' 'RN' (RV . 'UN') ;
  2934. GN = 'EXCO' ('MOTS' 'RUX' 'RUY') (RV . 'UN') ('MOTS' 'UX' 'UY') ;
  2935. RETN = 'EXCO' 'RETN' (RV . 'UN') ;
  2936.  
  2937. *
  2938. **** Les variables primitives
  2939. *
  2940.  
  2941. VN PN = 'PRIM' 'PERFMONO'
  2942. RN GN RETN GAMN ;
  2943.  
  2944. CSON2 = (GAMN '*' PN) '/' RN ;
  2945. VN2 = 'PSCAL' VN VN ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
  2946. MACHN2 = VN2 '/' CSON2 ;
  2947. MACHN = MACHN2 '**' 0.5 ;
  2948.  
  2949. *
  2950. *** GRAPHIQUE DES SOLUTIONS
  2951. *
  2952.  
  2953. MOD1 = 'MODELISER' $DOMTOT 'THERMIQUE';
  2954. 'SI' GRAPH ;
  2955.  
  2956. 'TRACER' DOMTOT 'TITRE' ('CHAINE' 'Maillage, NBEL =' NTOTEL) ;
  2957. 'FINSI' ;
  2958. TITOLO = ('CHAINE' METO ', OE = ' ORD_ESP ', ALPDT =' ALPDT
  2959. ', TFIN =' TFIN ', NBEL = ' NTOTEL) ;
  2960.  
  2961. * 'SI' GRAPH ;
  2962.  
  2963. CHM_RN = 'KCHA' $DOMTOT 'CHAM' RN ;
  2964. CHM_PN = 'KCHA' $DOMTOT 'CHAM' PN ;
  2965. CHM_VN = 'KCHA' $DOMTOT 'CHAM' VN ;
  2966. CHM_MACH = 'KCHA' $DOMTOT 'CHAM' MACHN ;
  2967.  
  2968. SN = (PN '/' (RN '**' GAMSCAL)) ;
  2969. ERSN = 'ABS' (SN '-' ((P_INF '/' (RO_INF '**' GAMSCAL)))) ;
  2970. CHM_ERSN = 'KCHA' $DOMTOT 'CHAM' ERSN ;
  2971.  
  2972. 'SI' GRAPH ;
  2973.  
  2974. 'TRACER' CHM_RN MOD1 ('CONTOUR' DOMTOT)
  2975. 'TITR' ('CHAINE' 'RN : ' TITOLO) ;
  2976. 'TRACER' CHM_PN MOD1 ('CONTOUR' DOMTOT)
  2977. 'TITR' ('CHAINE' 'PN : ' TITOLO) ;
  2978. 'TRACER' CHM_MACH MOD1 ('CONTOUR' DOMTOT)
  2979. 'TITR' ('CHAINE' 'MACHN : ' TITOLO);
  2980. 'TRACER' CHM_VN MOD1 ('CONTOUR' DOMTOT)
  2981. 'TITR' ('CHAINE' 'VN : ' TITOLO) ;
  2982. 'TRACER' CHM_ERSN MOD1 ('CONTOUR' DOMTOT)
  2983. 'TITR' ('CHAINE' 'ERSN : ' TITOLO) ;
  2984.  
  2985. 'SI' (RV . 'INST') ;
  2986. TITOLO1 = 'CHAINE' 'Convergence : ' TITOLO ;
  2987. EVER = 'EVOL' 'MANU' 'Niter' (RV . '1CALC' . 'IT') 'Log_10(Linf)'
  2988. (RV . '1CALC' . 'ER') ;
  2989. 'DESSIN' EVER 'TITRE' TITOLO1 ;
  2990. EVER1 = 'EVOL' 'MANU' 'tps' (RV . '1CALC' . 'TPS') 'Log_10(Linf)'
  2991. (RV . '1CALC' . 'ER') ;
  2992. 'DESSIN' EVER1 'TITRE' TITOLO1 ;
  2993. 'FINSI' ;
  2994.  
  2995. MNC = 'ELNO' $DOMINT ('KCHT' $DOMINT 'SCAL' 'CENTRE' MACHN) ;
  2996. 'OPTION' 'ISOV' 'LIGN' ;
  2997. 'TRACER' DOMINT MNC ('CONTOUR' DOMINT)
  2998. 'TITR' ('CHAINE' 'MACHN : ' TITOLO) 55 ;
  2999.  
  3000.  
  3001.  
  3002. 'FINSI' ;
  3003.  
  3004. XLIGPOST = 'COORDONNEE' 1 LIGPOST ;
  3005. EVCOOR = 'EVOL' 'CHPO' XLIGPOST 'SCAL' LIGPOST ;
  3006. LISTX = 'EXTRAIRE' EVCOOR 'ORDO' ;
  3007.  
  3008. EVMACH = 'EVOL' 'CHPO' MACHN 'SCAL' LIGPOST ;
  3009. LISTMACH = 'EXTRAIRE' EVMACH 'ORDO' ;
  3010. EVMACH = 'EVOL' 'MANU' 'x' LISTX 'Mach' LISTMACH ;
  3011. 'SI' GRAPH ;
  3012. 'DESSIN' EVMACH 'MIMA' 'TITRE' TITOLO ;
  3013. 'FINSI' ;
  3014. *
  3015. **** Entropie
  3016. *
  3017.  
  3018. EVSN = 'EVOL' 'CHPO' SN 'SCAL' LIGPOST ;
  3019. LISTSN = 'EXTRAIRE' EVSN 'ORDO' ;
  3020. EVSN = 'EVOL' 'MANU' 'x' LISTX 'SN' LISTSN ;
  3021. 'SI' GRAPH ;
  3022. 'DESSIN' EVSN 'MIMA' 'TITRE' TITOLO ;
  3023. 'FINSI' ;
  3024. EVERSN = 'EVOL' 'CHPO' ERSN 'SCAL' LIGPOST ;
  3025. LISTERSN = 'EXTRAIRE' EVERSN 'ORDO' ;
  3026. EVERSN = 'EVOL' 'MANU' 'x' LISTX 'SN' LISTERSN ;
  3027. EVMAX = 'MAXIMUM' LISTERSN ;
  3028. 'SI' ( EVMAX > ENTERR ) ;
  3029. 'ERREUR' 5 ;
  3030. 'FINSI' ;
  3031. 'SI' GRAPH ;
  3032. 'DESSIN' EVERSN 'MIMA' 'TITRE' TITOLO ;
  3033. 'FINSI' ;
  3034.  
  3035. PCEL1 = -2.0 0.99 ;
  3036. PCEL2 = 2.0 0.99 ;
  3037.  
  3038. LIGTRA = PCEL1 'DROIT' (2 '*' NRAFF '*' ('NBNO' LIGH)) PCEL2 ;
  3039.  
  3040. PCEL12 = ($DOMINT . 'CENTRE') 'POIN' 'PROC' PCEL1 ;
  3041. LIGNEW = ('MANUEL' 'POI1' PCEL12) ;
  3042.  
  3043. 'REPETER' BL1 (('NBNO' LIGTRA) '-' 1) ;
  3044. PCEL11= PCEL12 ;
  3045. PCEL13 = LIGTRA 'POIN' (&BL1 '+' 1) ;
  3046. PCEL13 = ($DOMINT . 'CENTRE') 'POIN' 'PROC' PCEL13 ;
  3047. 'SI' (PCEL13 'NEG' PCEL11) ;
  3048. PCEL12 = PCEL13 ;
  3049. LIGNEW = LIGNEW 'ET' ('MANUEL' 'POI1' PCEL12) ;
  3050. 'FINSI' ;
  3051. 'FIN' BL1 ;
  3052.  
  3053. LIGNEW = 'QUELCONQUE' 'SEG2' LIGNEW ;
  3054.  
  3055. EVRN1 = 'EVOL' 'CHPO' MACHN 'SCAL' LIGNEW ;
  3056. LISTRN1 = 'EXTRAIRE' EVRN1 'ORDO' ;
  3057. LISTX1 = 'EVOL' 'CHPO' ('COORDONNEE' 1 LIGNEW) 'SCAL' LIGNEW ;
  3058. LISTX1 = 'EXTRAIRE' LISTX1 'ORDO' ;
  3059. EVERRN1 = 'EVOL' 'MANU' 'x' LISTX1 'RN' LISTRN1 ;
  3060. 'SI' GRAPH ;
  3061. 'DESSIN' EVERRN1 'MIMA' 'TITRE' TITOLO ;
  3062. 'FINSI' ;
  3063.  
  3064.  
  3065. 'FIN' ;
  3066.  
  3067.  
  3068.  
  3069.  
  3070.  
  3071.  
  3072.  
  3073.  
  3074.  
  3075.  

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