Télécharger sinebump.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. * MODIF BECCANTINI AUGUST 2021 *
  13. * *
  14. * Compressible AUSM+ scheme is used for computation *
  15. ******************************************************************
  16.  
  17. GRAPH = VRAI ;
  18. COMPLET = VRAI ;
  19.  
  20. GRAPH = FAUX ;
  21. COMPLET = FAUX ;
  22.  
  23. 'SI' complet ;
  24. RAF = 8 ;
  25. NITER = 20 ;
  26. 'SINON' ;
  27. RAF = 5 ;
  28. NITER = 20 ;
  29. 'FINSI' ;
  30.  
  31.  
  32. TYEL = 'QUA4' ;
  33.  
  34. 'OPTION' 'DIME' 2 'ELEM' TYEL 'ISOV' 'SULI'
  35. 'ECHO' 1 'TRAC' 'X';
  36.  
  37. *
  38. *** C.L. et initiales
  39. *
  40.  
  41. RO_INF = 1.4D0 ;
  42. P_INF = 1.0D0 ;
  43. U_INF = 0.50 ;
  44. GAMSCAL = 1.4D0;
  45.  
  46. *
  47. *
  48. ************************************************************************
  49. ************************************************************************
  50. ***************** PARTIE PROCEDURES ************************************
  51. ************************************************************************
  52. ************************************************************************
  53. ************************************************************************
  54. *
  55. *
  56. * Put it in utilproc
  57. * Procedures will finish in FIN PARTIE PROCEDURES
  58. *
  59.  
  60. ***** $$$$ EXEXCH
  61. *
  62. *****************************************************
  63. *****************************************************
  64. ** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE **
  65. *****************************************************
  66. *****************************************************
  67. *
  68. * We check wether the table RV is complete
  69. *
  70. *
  71. 'DEBPROC' EXEXCH ;
  72. 'ARGUMENT' RV*TABLE ;
  73. 'MESSAGE' ;
  74. 'MESSAGE' 'PROCEDURE EXEXCH' ;
  75. *
  76. **** Initialisation d'un CHPOINT 'ET' d'une MATRIK vide
  77. *
  78. CHPVID MATVID = 'KOPS' 'MATRIK' ;
  79. RESPRO CHPVID MATVID ;
  80. *
  81. **** Les inconnues
  82. *
  83. 'SI' ('NON' ('EXISTE' RV 'UN')) ;
  84. 'MESSAGE' ;
  85. 'MESSAGE' 'UN = ???' ;
  86. 'ERREUR' 21 ;
  87. 'FINSI' ;
  88. *
  89. **** We check the compatibility between the variables and their names
  90. *
  91. 'SI' ('NON' ('EXISTE' RV 'LISTCONS')) ;
  92. 'MESSAGE' ;
  93. 'MESSAGE' 'LISTCONS = ???' ;
  94. 'ERREUR' 21 ;
  95. 'FINSI' ;
  96. 'MESSAGE' ;
  97. 'MESSAGE' 'Conservative variables check' ;
  98. UNCELL = 'EXCO' (RV . 'LISTCONS') (RV . 'UN') (RV . 'LISTCONS') ;
  99. ERRO = 'MAXIMUM' (UNCELL '-' (RV . 'UN')) 'ABS' ;
  100. ERRO = ERRO '/' (('MAXIMUM' UNCELL 'ABS') '+' 1.0D-15) ;
  101. 'SI' (ERRO > 1.0D-6) ;
  102. 'MESSAGE' ;
  103. 'MESSAGE' 'UN = ???' ;
  104. 'MESSAGE' 'LISTCONS = ???' ;
  105. 'ERREUR' 21 ;
  106. 'SINON' ;
  107. 'MESSAGE' 'OK' ;
  108. 'FINSI' ;
  109. *
  110. **** On which variables the error has to be computed?
  111. *
  112. 'SI' ('NON' ('EXISTE' RV 'ERROMOTS')) ;
  113. 'MESSAGE' ;
  114. 'MESSAGE' 'ERROMOTS = ???' ;
  115. 'ERREUR' 21 ;
  116. 'FINSI' ;
  117. *
  118. **** Definition of the table containing some results
  119. *
  120. 'SI' ('NON' ('EXISTE' RV 'RESULTATS')) ;
  121. RV . 'RESULTATS' = 'TABLE' ;
  122. 'FINSI' ;
  123. *
  124. **** Existence d'une procédure pour imposer le conditions aux limites
  125. * à chaque iteration (interne ou externe)
  126. *
  127. 'SI' ('NON' ('EXISTE' RV 'CLIM')) ;
  128. 'MESSAGE' ;
  129. 'MESSAGE' 'CLIM = ???' ;
  130. 'ERREUR' 21 ;
  131. 'FINSI' ;
  132. * Par securité, on les impose tout de suite
  133. 'SI' (RV . 'CLIM') ;
  134. 'SI' ('NON' ('EXISTE' RV 'MAIFAN')) ;
  135. 'MESSAGE' ;
  136. 'MESSAGE' 'MAIFAN = ???' ;
  137. 'ERREUR' 21 ;
  138. 'FINSI' ;
  139. RV . 'UN' = PROLIM RV ;
  140. * DUCLIM à imposer dans l'inversion matricielle:
  141. * pas d'increment sur les cellules fantomes
  142. DUCLIM = 0.0 '*' ('REDU' (RV . 'UN') (RV . 'MAIFAN')) ;
  143. 'SINON' ;
  144. DUCLIM = 'COPIER' CHPVID ;
  145. 'FINSI' ;
  146.  
  147. RESPRO DUCLIM ;
  148. *
  149. *
  150. ****** Mise a jour de la matrice à inverser pendant les iterations internes?
  151. *
  152. * RV . 'MATUPDAT'
  153. * RV . 'MUPINT'
  154. *
  155. 'SI' ('NON' ('EXISTE' RV 'MATUPDAT')) ;
  156. 'MESSAGE' ;
  157. 'MESSAGE' 'MATUPDAT = ???' ;
  158. 'ERREUR' 21 ;
  159. 'FINSI' ;
  160. 'SI' (RV . 'MATUPDAT') ;
  161. 'MESSAGE' ;
  162. 'MESSAGE'
  163. 'We always update the matrix to inverse' ;
  164. LOGMAOLD = FAUX ;
  165. 'SINON' ;
  166. 'MESSAGE' ;
  167. 'MESSAGE'
  168. 'We don t always update the matrix to inverse' ;
  169. LOGMAOLD = VRAI ;
  170. 'FINSI' ;
  171. *
  172. RESPRO LOGMAOLD ;
  173. *
  174. **** Iterations externes et/ou temps final
  175. * La table 'PASDETPS'
  176. *
  177. 'SI' ('NON'
  178. (('EXISTE' RV 'NITMAEX') 'OU' ('EXISTE' RV 'TFINAL'))) ;
  179. 'MESSAGE' ;
  180. 'MESSAGE' 'NITMAEX = ???' ;
  181. 'MESSAGE' 'ou' ;
  182. 'MESSAGE' 'TFINAL = ???' ;
  183. 'ERREUR' 21 ;
  184. 'FINSI' ;
  185. *
  186. **** Gas model
  187. *
  188. 'SI' ('NON' ('EXISTE' RV 'PGAZ')) ;
  189. 'MESSAGE' ;
  190. 'MESSAGE' 'PGAZ = ???' ;
  191. 'ERREUR' 21 ;
  192. 'FINSI' ;
  193. *
  194. **** BAS MACH
  195. *
  196. 'SI' ('NON' ('EXISTE' RV 'BASMACH')) ;
  197. 'MESSAGE' ;
  198. 'MESSAGE' 'BASMACH = ???' ;
  199. 'ERREUR' 21 ;
  200. 'SINON' ;
  201. 'SI' (RV . 'BASMACH') ;
  202. 'SI' (('NON' ('EXISTE' RV 'CO1')) 'OU'
  203. ('NON' ('EXISTE' RV 'CO2'))) ;
  204. 'MESSAGE' ;
  205. 'MESSAGE' 'CO1 = ???' ;
  206. 'MESSAGE' 'CO2 = ???' ;
  207. 'ERREUR' 21 ;
  208. 'FINSI' ;
  209. 'FINSI' ;
  210. 'FINSI' ;
  211. *
  212. *** La table PASDETPS
  213. *
  214. 'SI' ('NON' ('EXISTE' RV 'PASDETPS')) ;
  215. 'MESSAGE' ;
  216. 'MESSAGE' 'We create the table PASDETPS' ;
  217. RV . 'PASDETPS' = 'TABLE' ;
  218. 'SINON' ;
  219. 'MESSAGE' ;
  220. 'MESSAGE' 'We use the table PASDETPS that already exists' ;
  221. 'FINSI' ;
  222. KTPS = RV . 'PASDETPS' ;
  223. *
  224. RESPRO KTPS ;
  225. * Initialisation éventuelle de la table
  226. 'SI' (('NON' ('EXISTE' KTPS 'NUPASDT')) 'OU'
  227. ('NON' ('EXISTE' KTPS 'TPS')) 'OU'
  228. ('NON' ('EXISTE' KTPS 'TPSM'))) ;
  229. 'MESSAGE' ;
  230. 'MESSAGE' 'Table PASDETPS' ;
  231. 'MESSAGE' 'NUPASDT = 0' ;
  232. 'MESSAGE' 'TPS = 0.0' ;
  233. 'MESSAGE' ;
  234. KTPS . 'NUPASDT' = 0 ;
  235. KTPS . 'TPSM' = 0.0D0 ;
  236. KTPS . 'TPS' = 0.0D0 ;
  237. 'FINSI' ;
  238. *
  239. * KTPS contient
  240. *
  241. * KTPS . 'NUPASDT' = numero de pas de TPS actuel dans les itérations
  242. * internes
  243. *
  244. * KTPS . 'TPSM' = le TPS aprés (KTPS . 'NUPASDT' '-' 2) itérations
  245. * KTPS . 'TPS' = le TPS aprés (KTPS . 'NUPASDT' '-' 1) itérations
  246. * KTPS . 'TPSP' = le TPS aprés (KTPS . 'NUPASDT') itérations, i.e. à
  247. * la fin de l'itération actuelle
  248. *
  249. *
  250. *
  251. * N.B. 'XINIT' is used in the iterative methods
  252. * We have decided to keep it 0
  253. RV . 'MATINV' . 'XINIT' = 0.0 '*' (RV . 'UN') ;
  254. 'FINPROC' ;
  255.  
  256.  
  257. **** $$$$ EXEXIM
  258. *
  259. *****************************************************
  260. *****************************************************
  261. ** PROCEDURE EXEX POUR FORMULATION VF COMPRESSIBLE **
  262. *****************************************************
  263. *****************************************************
  264. *
  265. * RV . 'UN' = les variables conservatives
  266. *
  267. * RV . 'ANOM' = LOGIQUE (anomalie detectée ?)
  268. *
  269. * RV . 'DTIMP' = pas de tmps imposé (facultatif)
  270. *
  271. * RV . 'LISTCONS'= noms des variables conservatives
  272. *
  273. * RV . 'ERROMOTS'= noms des variables sur lesquelles on calcule Linf
  274. *
  275. * RV . 'CLIM' = logique qui me dit si existe une procédure pour le
  276. * calcul de conditions limites (procédure PROLIM)
  277. *
  278. * RV . 'MAIFAN' = (a définir si RV . 'CLIM')
  279. * les cellules fantômes
  280. *
  281. * RV . 'TFINAL' = le temps final
  282. *
  283. * RV . 'NITMAEX' = le nombre d'itération externes
  284. *
  285. * N.B. Si RV . 'TFINAL' et RV . 'NITMAEX' sont les deux spécifiés, on
  286. * s'arrête quand un des deux critères est satisfait
  287. *
  288. * RV . 'MATUPDAT' = si VRAI, on ne met pas toujours à jour la matrice
  289. * à inverser
  290. *
  291. * RV . 'MUPEXT' = si (RV . 'MATUPDAT'), indice de mise à jours de la
  292. * matrice jacobienne pendant les itérations externes
  293. *
  294. * RV . 'MUPINT' = si (RV . 'MATUPDAT'), indice de mise à jours de la
  295. * matrice jacobienne pendant les itérations internes
  296. *
  297. * RV . 'MUPINI' = si (RV . 'MATUPDAT'), nombre initial de pas de temps
  298. * pendant lesquels on met à jour la matrice à chaque
  299. * itération externe
  300. *
  301. * RV . 'MUPLIN' = si (RV . 'MATUPDAT') et on utilise un solveur
  302. * itératif pour la résolution du système linéaire,
  303. * si le nombre d'itérations linéaires est > que
  304. * RV . 'MUPLIN', alors on met à jour le
  305. * preconditionneur
  306. *
  307. * RV . 'MATACC' = si (RV . 'MATUPDAT'), logique qui nous dit si on
  308. * veut utiliser la méthode de Broyden.
  309. *
  310. * RV . 'LISTOPER' = liste des opérateurs (ou des procédures) qui
  311. * interviennent dans le calcul (chaque opérateur a une
  312. * table associée), qui s'appelle &NOMPER ou
  313. * & = position de l'opérateur dedans cette liste
  314. * NOMPER = noms de l'opérateur ou de la procédure
  315. *
  316. * RV . 'NITMAIN' = (à définir dans le cas d'un calcul implicite)
  317. * le nombre max d'itération internes
  318. * RV . 'NITMIIN' = (à définir dans le cas d'un calcul implicite)
  319. * le nombre min d'itération internes
  320. *
  321. * RV . 'EPSINT' = (à définir dans le cas d'un calcul implicite)
  322. * l'erreur pour le critère de convergence sur les
  323. * itérations internes
  324. *
  325. * RV . 'MATHINV' = (a définir sans la cas d'un calcul implicite)
  326. * table de SOUSTYPE 'TYPINV' pour l'inversion de
  327. * MATRIK (pour l'opérateur 'KRES')
  328. *
  329. * RV . 'RESULTATS' = table qui contient des resultats
  330. * 'NITERLIN' = nombre de iterations lineaires
  331. * dans le solveur iteratif
  332. * 'ERROLIN' = residu de l'erreur du solveur
  333. * iteratif
  334. * 'ITERIN' = iteration interne (0, 1, ...)
  335. *
  336. *************************************************************************
  337. * MODIF
  338. *************************************************************************
  339. * Message en anglais!
  340. *
  341. 'DEBPROC' EXEXIM ;
  342. 'ARGUMENT' RV*TABLE ;
  343. 'MESSAGE' ;
  344. 'MESSAGE' 'PROCEDURE EXEXIM' ;
  345. *
  346. **** Initialisation and controls into exexch
  347. *
  348.  
  349. CHPVID MATVID DUCLIM LOGMAOLD KTPS = EXEXCH RV ;
  350.  
  351. *************************************************************************
  352. *************************************************************************
  353. *************************************************************************
  354. *************************************************************************
  355. ************** ITÉRATIONS EXTERNES ************************************
  356. *************************************************************************
  357. *************************************************************************
  358. *************************************************************************
  359. *************************************************************************
  360. LOGEXP = VRAI ;
  361. * LOGEXP = variable logique qui me dit si on est en explicite ;
  362. LOGQIE = FAUX ;
  363. *
  364. **** Boucle qui s'arrête quand LOGQIE = VRAI ; i.e.
  365. *
  366. * (KTPS . NUPASDT) = (RV . 'NITMAEX')
  367. * ou
  368. * (KTPS . 'TPS') = (RV . 'TFINAL');
  369. *
  370. *
  371. 'SI' ('EXISTE' RV 'DTIMP') ;
  372. ALPDT = RV . 'DTIMP' ;
  373. 'SINON' ;
  374. ALPDT = 0.0 ;
  375. 'FINSI' ;
  376. NITEX = 0 ;
  377. 'REPETER' BLEX -1 ;
  378. NITEX = NITEX '+' 1 ;
  379. *
  380. ****** Iteration interne
  381. *
  382. RV . 'RESULTATS' . 'ITERIN' = 0 ;
  383. *
  384. ****** Mise à jour de la matrice à inverser
  385. *
  386. 'SI' ((NITEX 'EGA' 1) 'OU' (RV . 'ANOM')) ;
  387. * A la premiere iteration externe on doit calculer la matrice
  388. LOGUPEX = VRAI ;
  389. 'SINON' ;
  390. 'SI' LOGMAOLD ;
  391. MUPEXT = RV . 'MUPEXT' ;
  392. * On met a jour la matrice toutes les MUPEXT iterations externes
  393. LOGUPEX = ((NITEX '/' MUPEXT) '*' MUPEXT) 'EGA' NITEX ;
  394. 'FINSI' ;
  395. 'FINSI' ;
  396. *
  397. ****** Trop d'iterations externes?
  398. *
  399. KTPS . 'NUPASDT' = KTPS . 'NUPASDT' '+' 1 ;
  400. 'SI' ('EXISTE' RV 'NITMAEX') ;
  401. 'SI' ( (KTPS . 'NUPASDT') '>EG' (RV . 'NITMAEX')) ;
  402. LOGQIE = VRAI ;
  403. 'FINSI' ;
  404. 'FINSI' ;
  405. *
  406. ****** Impression
  407. *
  408. 'MESSAGE' ;
  409. 'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
  410. ' TPS = ' (KTPS . 'TPS') ' DTM1 = ' ALPDT) ;
  411. *
  412. *** ALGORITHM A RESOUDRE
  413. *
  414. * F(U^{n+1}) = 0
  415. *
  416. * if (RV . INST) then
  417. *
  418. * F(U^{n+1}) = -1. * (U^{n+1} - U^{n}) '/' (\delta t)
  419. * '+' \sum_k Res_k(U^{n+1}) '+' \sum_kexpl Res_kexpl(U^{n})
  420. *
  421. * else
  422. *
  423. * F(U^{n+1}) = -\sum_k Res_k(U^{n+1})
  424. *
  425. * endif
  426. *
  427. *
  428. * Avec une methode de type Newton-Raphson
  429. *
  430. * a) U^{n+1,0} = U^{n}
  431. *
  432. * b) for l=0,1,2,...
  433. *
  434. * MAT(U^{n+1,l}) \delta U^{n+1,l} = -F(U^{n+1,l})
  435. *
  436. * U^{n+1,l+1} = U^{n+1,l} '+' \delta U^{n+1,l}
  437. *
  438. * if || \delta U^{n+1,l} ||_{\inf} < \epsilon goto c)
  439. *
  440. * c)
  441. *
  442. * U^{n+1} = U^{n+1,l+1}
  443. *
  444. * endif
  445. *
  446. *** LES VARIABLES
  447. *
  448. * RESIMP = \sum_k Res_k(U^{n+1,l})
  449. * RESEXP = \sum_kexpl Res_kexpl(U^{n})
  450. * MATASS = - \sum_k JACR_k(U^{n+1,l})
  451. * UNM = conserved variables at t^{n}
  452. * UNM = conserved variables at t^{n-1}
  453. * LREEDT = LISTREEL de (\delta t)_k t.q.
  454. * \delta t = min (\delta t)_k
  455. *
  456. RESIMP = 'COPIER' CHPVID ;
  457. RESEXP = 'COPIER' CHPVID ;
  458. 'SI' ('EXISTE' RV 'UNM2') ;
  459. RV . 'UNM3' = 'COPIER' (RV . 'UNM2') ;
  460. 'FINSI' ;
  461. 'SI' ('EXISTE' RV 'UNM') ;
  462. RV . 'UNM2' = 'COPIER' (RV . 'UNM') ;
  463. 'FINSI' ;
  464. RV . 'UNM' = 'COPIER' (RV . 'UN') ;
  465. MATASS = 'KOPS' 'MULT' 0.0 MATVID ;
  466. LREEDT = 'PROG' ;
  467. *
  468. ***********************************************
  469. ********* Boucle sur les operateurs ***********
  470. ***********************************************
  471. *** On calcule: LREEDT
  472. * RESIMP
  473. * RESEXP
  474. * (MATASS)
  475. *
  476. 'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
  477. NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
  478. NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
  479. 'SI' (RV . NOTABLE . 'IMPL') ;
  480. 'SI' ('EGA' NITEX 1) ;
  481. 'MESSAGE' ;
  482. 'MESSAGE' ('CHAINE' ('MOT' NOMPER) ': implicit') ;
  483. 'FINSI' ;
  484. * JACO = objet de type MATRIK (éventuellement vide)
  485. * RESIDU = " RESIDU "
  486. * ALPHADT = " LISTREEL "
  487. LOGEXP = FAUX ;
  488. JACO RESIDU ALPHADT = ('TEXTE' NOMPER) (RV . NOTABLE) ;
  489. 'SI' (RV . NOTABLE . 'ANOM') ;
  490. RV . 'ANOM' = VRAI ;
  491. RV . NOTABLE . 'ANOM' = FAUX ;
  492. 'QUITTER' BLOP ;
  493. 'SINON' ;
  494. MATASS = MATASS 'ET' ('KOPS' 'MULT' -1.0D0 JACO ) ;
  495. RESIMP = RESIMP 'ET' RESIDU ;
  496. 'FINSI' ;
  497. 'SINON' ;
  498. 'SI' ('EGA' NITEX 1) ;
  499. 'MESSAGE' ;
  500. 'MESSAGE' ('CHAINE' ('MOT' NOMPER) ': explicit') ;
  501. 'FINSI' ;
  502. RESIDU ALPHADT = ('TEXTE' NOMPER) (RV . NOTABLE) ;
  503. 'SI' (RV . NOTABLE . 'ANOM') ;
  504. RV . 'ANOM' = VRAI ;
  505. 'QUITTER' BLOP ;
  506. 'SINON' ;
  507. RESEXP = RESEXP 'ET' RESIDU ;
  508. 'FINSI' ;
  509. 'FINSI' ;
  510. LREEDT = LREEDT 'ET' ALPHADT ;
  511. 'FIN' BLOP ;
  512. ***********************************************
  513. ***** Fin de la boucle sur les operateurs ****
  514. ***********************************************
  515. *
  516. ******* Anomalie detectée (CTRL+S 9999)
  517. * On arrete ici
  518. *
  519. 'SI' ('NON' (RV . 'ANOM')) ;
  520. *
  521. ******* On controlle la compatibilité E/S (si NITEX = 1)
  522. *
  523. 'SI' ('EGA' NITEX 1) ;
  524. *
  525. **** Dans le cas implicite, on verifie l'existence
  526. * des parametres pour les itérations internes
  527. *
  528. 'SI' ('NON' LOGEXP) ;
  529. 'SI' ('NON' (('EXISTE' RV 'NITMAIN') 'ET'
  530. ('EXISTE' RV 'EPSINT') 'ET' ('EXISTE' RV 'NITMIIN')));
  531. 'MESSAGE' ;
  532. 'MESSAGE' 'NITMAIN = ??? ' ;
  533. 'MESSAGE' 'NITMIIN = ??? ' ;
  534. 'MESSAGE' 'EPSINT = ??? ' ;
  535. 'ERREUR' 21 ;
  536. 'FINSI' ;
  537. 'FINSI' ;
  538. 'FINSI' ;
  539. *
  540. ******* Fin contrôle compatibilité E/S
  541. *
  542. *** Mise a jour de la table RV . 'PASDETPS' au debu du calcul
  543. *
  544. 'SI' ('EXISTE' RV 'DTIMP') ;
  545. ALPDT = RV . 'DTIMP' ;
  546. 'SINON' ;
  547. ALPDT = 'MINIMUM' LREEDT ;
  548. 'FINSI' ;
  549. ALPDT1 = (RV . 'TFINAL') '-' (KTPS . 'TPS') ;
  550. 'SI' ((ALPDT 'EGA' ALPDT1 (ALPDT '*' 1.0D-6)) 'OU'
  551. (ALPDT > ALPDT1)) ;
  552. KTPS . 'TPSP' = (RV . 'TFINAL') ;
  553. ALPDT = ALPDT1 ;
  554. LOGQIE = VRAI ;
  555. * Dans ce cas, il faut metre a jour la matrice à inverser
  556. * car elle peut etre tres differnte pas rapport à celle
  557. * calculé precedentment
  558. LOGMAOLD = FAUX ;
  559. 'SINO' ;
  560. KTPS . 'TPSP' = (KTPS . 'TPS') '+' ALPDT ;
  561. 'FINSI' ;
  562. *
  563. 'SI' LOGEXP ;
  564. *************************************************************************
  565. ********** Cas explicite pour les variables conservatives ***************
  566. *************************************************************************
  567. 'SI' ((NITEX 'EGA' 1) 'OU' ((RV . 'ORDTPS') 'EGA' 1)) ;
  568. RV . 'UN' = (RV . 'UNM') '+' (ALPDT '*' RESEXP) ;
  569. 'SINON' ;
  570. RV . 'UN' = ((4. '/' 3.) '*' (RV . 'UNM')) '+'
  571. ((-1. '/' 3.) '*' (RV . 'UNM2')) '+'
  572. (((2. * ALPDT) '/' 3.) '*' RESEXP) ;
  573. 'FINSI' ;
  574. 'SI' (RV . 'CLIM') ;
  575. * 'MESSAGE' 'PROLIM after an explicit iteration' ;
  576. RV . 'UN' = PROLIM RV ;
  577. 'FINSI' ;
  578. 'SINON' ;
  579. *************************************************************************
  580. ********** Cas implicite pour les variables conservatives ***************
  581. *************************************************************************
  582. *
  583. ****** Initialisation of RV . 'RESULTATS' . 'ERRONLIN' ;
  584. *
  585. RV . 'RESULTATS' . 'ERRONLIN' = 'PROG' ;
  586. *
  587. *************************************************************************
  588. ************** Les iterations internes **********************************
  589. *************************************************************************
  590. *
  591. 'REPETER' BLINT (RV . 'NITMAIN') ;
  592. *
  593. RV . 'RESULTATS' . 'ITERIN' = &BLINT ;
  594. *
  595. ****** Implicite
  596. *
  597. 'SI' ((NITEX 'EGA' 1) 'OU' ((RV . 'ORDTPS') 'EGA' 1)) ;
  598. *
  599. *************** Implicit Euler
  600. *
  601. MAT1 = 'KOPS' 'MULT' (1. '/' ALPDT)
  602. (RV . 'MATIDE') ;
  603. SMB = ((RV . 'UNM') '-' (RV . 'UN')) '/' ALPDT ;
  604. 'SINON' ;
  605. *
  606. **************** BDF2
  607. *
  608. MAT1 = 'KOPS' 'MULT' (1.5 '/' ALPDT)
  609. (RV . 'MATIDE') ;
  610. SMB = ((4. '*' (RV . 'UNM'))
  611. '+' (-3. '*' (RV . 'UN'))
  612. '+' (-1. '*' (RV . 'UNM2'))) '/' (2. '*' ALPDT) ;
  613. 'FINSI' ;
  614. SMB = 'CHAN' 'ATTRIBUT' SMB 'NATURE' 'DISCRET' ;
  615. *
  616. ********* Bas Mach
  617. *
  618. 'SI' (RV . 'BASMACH') ;
  619. MAT1 = MAT1 'ET' (RV . 'GAMSDTAU') ;
  620. 'FINSI' ;
  621. *
  622. MATTOT = MAT1 'ET' MATASS ;
  623. RESTOT = SMB 'ET' RESIMP 'ET' RESEXP ;
  624. *
  625. ********* LOGOLD = VRAI
  626. * Si methode directe, on utilise la meme parametrisation LU
  627. * Si methode iterative, on utilise le meme preconditionneur
  628. *
  629. LOGOLD = VRAI ;
  630. 'SI' LOGMAOLD ;
  631. 'SI' (LOGUPEX 'ET' (&BLINT 'EGA' 1)) ;
  632. * LOGUPEX = VRAI -> At this external iteration we can
  633. * update the matrix to inverse
  634. 'OUBLIER' MATOLD ;
  635. 'MENAGE' ;
  636. MATOLD = MATTOT ;
  637. LOGOLD = FAUX ;
  638. 'MESSAGE' ;
  639. 'MESSAGE' 'We update the matrix' ;
  640. 'SINON' ;
  641. * We don't care about LOGUPEX if (&BLINT > 1)
  642. * In this case we update the matrix each MUPINT-th
  643. * iteration
  644. 'SI'
  645. (((&BLINT '/' (RV . 'MUPINT')) '*' (RV . 'MUPINT'))
  646. 'EGA' &BLINT) ;
  647. 'OUBLIER' MATOLD ;
  648. 'MENAGE' ;
  649. MATOLD = MATTOT ;
  650. LOGOLD = FAUX ;
  651. 'MESSAGE' ;
  652. 'MESSAGE' 'We update the matrix' ;
  653. 'FINSI' ;
  654. 'FINSI' ;
  655. 'SINON' ;
  656. *
  657. * We always update the matrix to inverse
  658. *
  659. 'OUBLIER' MATOLD ;
  660. 'MENAGE' ;
  661. LOGOLD = FAUX ;
  662. MATOLD = MATTOT ;
  663. 'FINSI' ;
  664. *
  665. 'SI' ('EXISTE' (RV . 'MATINV') 'CONVINV') ;
  666. 'SI' LOGOLD ;
  667. NLIT = ('DIME' (RV . 'MATINV' . 'CONVINV')) ;
  668. 'SI' (NLIT > RV . 'MUPLIN') ;
  669. 'MESSAGE' ;
  670. 'MESSAGE' 'We update the matrix' ;
  671. 'OUBLIER' MATOLD ;
  672. 'MENAGE' ;
  673. MATOLD = MATTOT ;
  674. 'FINSI' ;
  675. 'FINSI' ;
  676. 'FINSI' ;
  677. RV . 'MATINV' . 'MATASS' = MATOLD ;
  678. RV . 'MATINV' . 'MAPREC' = MATOLD ;
  679. *
  680. 'SI' LOGOLD ;
  681. *
  682. * LOGOLD vrai si on utilise la meme
  683. * parametrisation LU ou le meme preconditionneur
  684. * pour calculer la solution du systeme lineaire
  685. *
  686. 'SI' ((RV . 'MATINV' . 'TYPINV') 'EGA' 1) ;
  687. * Meme parametrisation LU que MATOLD
  688. DELTAU = 'KRES' MATOLD
  689. 'TYPI' (RV . 'MATINV')
  690. 'CLIM' DUCLIM
  691. 'SMBR' RESTOT
  692. 'IMPR' 0 ;
  693. 'SINON' ;
  694. * Meme preconditionneur que MATOLD
  695. DELTAU = 'KRES' MATTOT
  696. 'TYPI' (RV . 'MATINV')
  697. 'CLIM' DUCLIM
  698. 'SMBR' RESTOT
  699. 'IMPR' 0 ;
  700. 'FINSI' ;
  701. 'SINON' ;
  702. DELTAU = 'KRES' MATOLD
  703. 'TYPI' (RV . 'MATINV')
  704. 'CLIM' DUCLIM
  705. 'SMBR' RESTOT
  706. 'IMPR' 0 ;
  707. 'FINSI' ;
  708.  
  709. RV . 'UN' = (RV . 'UN') '+' DELTAU ;
  710.  
  711. 'SI' (RV . 'CLIM') ;
  712. UNCELL = RV . 'UN' ;
  713. * 'PROLIM after the matrix inversion' ;
  714. RV . 'UN' = PROLIM RV ;
  715. * We redefine DELTAU to compute the error
  716. DELTAU = ((RV . 'UN') '-' UNCELL) '+' DELTAU ;
  717. 'FINSI' ;
  718. *
  719. ********* Boucle sur les operateurs implicites pour calculer RESIMP
  720. * et MATASS de RV . 'UN'
  721.  
  722. RESIMP = 'COPIER' CHPVID ;
  723. MATASS = 'KOPS' 'MULT' 0.0 MATVID ;
  724. 'REPETER' BLOP ('DIME' (RV . 'LISTOPER')) ;
  725. NOMPER = 'EXTRAIRE' &BLOP (RV . 'LISTOPER') ;
  726. NOTABLE = 'MOT' ('TEXTE' ('CHAINE' &BLOP NOMPER) ) ;
  727. 'SI' (RV . NOTABLE . 'IMPL') ;
  728. JACO RESIDU ALPHADT =
  729. ('TEXTE' NOMPER) (RV . NOTABLE) ;
  730. 'SI' (RV . NOTABLE . 'ANOM') ;
  731. RV . 'ANOM' = VRAI ;
  732. 'QUITTER' BLINT ;
  733. 'SINON' ;
  734. MATASS = MATASS 'ET' ('KOPS' 'MULT'
  735. -1.0D0 JACO ) ;
  736. RESIMP = RESIMP 'ET' RESIDU ;
  737. 'FINSI' ;
  738. 'FINSI' ;
  739. 'FIN' BLOP ;
  740. *
  741. ********* Test de convergence
  742. *
  743. ERRO = 'MAXIMUM' DELTAU 'ABS' 'AVEC' (RV . 'ERROMOTS') ;
  744. 'SI' (&blint 'EGA' 1) ;
  745. ERRO0 = ERRO ;
  746. 'FINSI' ;
  747. RV . 'RESULTATS' . 'ERRONLIN' = (RV . 'RESULTATS'
  748. . 'ERRONLIN') 'ET' ('PROG' ERRO) ;
  749. *
  750. ********* Impression
  751. *
  752. 'MESSAGE' ;
  753. 'MESSAGE' ('CHAINE' 'PASDETPS = ' (KTPS . 'NUPASDT')
  754. ' TPS = ' (KTPS . 'TPS') ' DT = ' ALPDT) ;
  755. 'MESSAGE' ('CHAINE' 'ITERIN = ' &BLINT) ;
  756. 'REPETER' BLERRO ('DIME' (RV . 'LISTCONS')) ;
  757. MOTERR = 'EXTRAIRE' (RV . 'LISTCONS') &BLERRO ;
  758. ERRBLE = 'MAXIMUM' DELTAU 'ABS' 'AVEC'
  759. ('MOTS' MOTERR) ;
  760. 'MESSAGE' (CHAIN 'ERREUR on ' MOTERR ' = ' ERRBLE) ;
  761. 'FIN' BLERRO ;
  762. 'SI' (('EXISTE' (RV . 'MATINV') 'CONVINV')) ;
  763. NLIT = ('DIME' (RV . 'MATINV' . 'CONVINV')) ;
  764. 'MESSAGE' ('CHAINE' 'Linear iterations = ' NLIT );
  765. RV . 'RESULTATS' . 'NITERLIN' = NLIT ;
  766. REIT = 'EXTR' (RV . 'MATINV' . 'CONVINV') NLIT ;
  767. 'MESSAGE' ('CHAINE' 'Linear residuum = ' REIT );
  768. RV . 'RESULTATS' . 'ERROLIN' = REIT ;
  769. 'FINSI' ;
  770. *
  771. ************ Criteres de sortie
  772. *
  773. 'SI' (&BLINT > (RV . 'NITMIIN')) ;
  774. 'SI' ('EXISTE' RV 'EPSREL') ;
  775. 'SI' (ERRO < ((RV . 'EPSREL') '*' ERRO0)) ;
  776. 'QUITTER' BLINT ;
  777. 'FINSI' ;
  778. 'FINSI' ;
  779. 'SI' (ERRO '<' (RV . 'EPSINT')) ;
  780. 'QUITTER' BLINT ;
  781. 'FINSI' ;
  782. 'FINSI' ;
  783. * 'SI' (ERRO > (1.0D3 '*' ERRO0)) ;
  784. * RV . 'ANOM' = VRAI ;
  785. * 'QUITTER' BLINT ;
  786. * 'FINSI' ;
  787. * 'SI' (&BLINT '>EG' (RV . 'NITMAIN')) ;
  788. * RV . 'ANOM' = VRAI ;
  789. * 'QUITTER' BLINT ;
  790. * 'FINSI' ;
  791. 'FIN' BLINT ;
  792. *************************************************************************
  793. **************** Fin boucle iterations internes *************************
  794. *************************************************************************
  795. ***********************************************
  796. ************* Fin cas implicite ***************
  797. ***********************************************
  798. 'FINSI' ;
  799. * ('SI' (RV . 'ANOM') ;)
  800. 'FINSI' ;
  801. *
  802. 'SI' (RV . 'ANOM') ;
  803. LOGQIE = FAUX ;
  804. NITEX = NITEX '-' 1 ;
  805. KTPS . 'NUPASDT' = KTPS . 'NUPASDT' '-' 1 ;
  806. KTPS . 'TPSP' = KTPS . 'TPS' ;
  807. RV . 'UN' = 'COPIER' RV . 'UNM' ;
  808. 'SI' ('EXISTE' RV 'UNM2') ;
  809. RV . 'UNM' = 'COPIER' (RV . 'UNM2') ;
  810. 'FINSI' ;
  811. 'SINON' ;
  812. *
  813. *** Mise a jour de la table RV . 'PASDETPS' à la fin du calcul
  814. *
  815. KTPS . 'TPSM' = KTPS . 'TPS' ;
  816. KTPS . 'TPS' = KTPS . 'TPSP' ;
  817. 'FINSI' ;
  818. *
  819. **** Dernier commande de BLEX
  820. *
  821. 'SI' LOGQIE ;
  822. 'QUITTER' BLEX ;
  823. 'FINSI' ;
  824.  
  825. 'FIN' BLEX ;
  826.  
  827. 'FINPROC' ;
  828.  
  829. *****************************************************
  830. *****************************************************
  831. ** FIN PROCEDURE EXEX **
  832. *****************************************************
  833. *****************************************************
  834.  
  835. *****$$$$ PKON
  836.  
  837. *****************************************************
  838. *****************************************************
  839. ** PROCÉDURE PKON **
  840. *****************************************************
  841. *****************************************************
  842. * Il faut définir:
  843. *
  844. * *KKONV . 'EQEX' = table générale, qui contient toutes les
  845. * informations sur le calcul qu'on va faire.
  846. * Dans ce table, on ne prend que:
  847. * - la table (KKONV . 'EQEX' . 'PASDETPS')
  848. * - les inconnues du problème
  849. * (KKONV . 'EQEX' . 'UN')
  850. * - le maillage fantome
  851. * (KKONV . 'EQEX' . 'MAIFAN')
  852. * - les vitesses de cut-off pour le bas Mach
  853. * (KKONV . 'EQEX' . 'CO1')
  854. * (KKONV . 'EQEX' . 'CO2')
  855. *
  856. * *KKONV . 'GAZ' = le modelé de gaz qu'on considère
  857. * - si KKONV . 'GAZ' = 'PERFMONO', alors
  858. * on considère un gaz parfait mono-espèce
  859. * polytropique
  860. *
  861. * *KKONV . 'MODELE' = objet modele
  862. *
  863. * *KKONV . 'LISTCONS' = les noms des variables conservatives, i.e.
  864. * densité, q.d.m., energie totale par unité de
  865. * volume
  866. *
  867. * *KKONV . 'IMPL' = calcul implicite ou non ?
  868. *
  869. * *KKONV . 'METHODE' = méthode pour le calcul du flux convectif
  870. *
  871. * *KKONV . 'TYPEJACO' = 'VLH'
  872. * 'AUSMPLUS'
  873. * 'AUSMPLM'
  874. * (à donner si (KKONV . 'IMPL'))
  875. *
  876. * *KKONV . 'ORDREESP' = ordre en espace (1 ou 2) ;
  877. *
  878. * *KKONV . 'GRADRN' coeff. pour calculer le gradient de la densité
  879. * *KKONV . 'GRADVN' coeff. pour calculer le gradient de la vitesse
  880. * *KKONV . 'GRADPN' coeff. pour calculer le gradient de la pression
  881. * *KKONV . 'VLIM' vitesses au bord imposées
  882. * (à donner si (KKONV . 'ORDREESP') = 2)
  883. *
  884. * *KKONV . 'LIMITEUR' = limiteur utilisé
  885. * (à donner si (KKONV . 'ORDREESP') = 2)
  886. *
  887. * *KKONV . 'NFROZLIM' = entier
  888. * On gele les limiteurs quand
  889. * RV . 'PASDETPS' . 'NUPASDT' = KKONV . 'NFROZLIM'
  890. * On le met dedans
  891. * *KKONV . 'FROZALR'
  892. * *KKONV . 'FROZALP'
  893. * *KKONV . 'FROZALV'
  894. *
  895. * *KKONV . 'ALPHA' = coefficient de securité pour le quel on
  896. * multiplie le pas de tps determiné par un
  897. * condition de type CFL.
  898. * Il peut etre:
  899. * - un flottant
  900. * - une mot que veut 'INF'
  901. *
  902. * *KKON . 'FACELIM' = maillage de centres de face ou on ne calcule pas
  903. * le flux convectif et le jacobien
  904. *
  905. * *KKON . 'CLIM' = LOGIQUE
  906. * si vrai on doit definir une procedure PKOCLI
  907. *
  908. * *KKON . 'DT' = output. Donne les pas de temps plus petit
  909. * (r_elem/(u+c))
  910. *
  911. 'DEBPROC' PKON ;
  912. 'ARGUMENT' KKONV * TABLE ;
  913. *
  914. CHPVID MATVID = 'KOPS' 'MATRIK' ;
  915. *
  916. METO = KKONV . 'METHODE' ;
  917. *
  918. RV = KKONV . 'EQEX' ;
  919. *
  920. LOGIMP = KKONV . 'IMPL';
  921. LOGEXP = 'NON' LOGIMP ;
  922. *
  923. ORDESP = KKONV . 'ORDREESP' ;
  924. *
  925. 'SI' (('NEG' (KKONV . 'ALPHA') 'INF') 'ET'
  926. ('NEG' ('TYPE' (KKONV . 'ALPHA')) FLOTTANT)) ;
  927. 'MESSAGE' 'PKON . ALPHA = ???' ;
  928. 'ERREUR' 21 ;
  929. 'FINSI' ;
  930. *
  931. UN = 'REDU' (RV . 'UN') ('DOMA' (KKONV . 'MODELE') 'CENTRE') ;
  932. *
  933. 'SI' ('NEG' (KKONV . 'GAZ') 'PERFMONO') ;
  934. *
  935. ******** EULER, monoespece, "calorically perfect" (cv = constant)
  936. *
  937. 'MESSAGE' ;
  938. 'MESSAGE' 'PKON . GAZ = ???' ;
  939. 'ERREUR' 21 ;
  940. 'FINSI' ;
  941. *
  942. **** Type de jacobien (Bas Mach ?)
  943. *
  944. 'SI' LOGIMP ;
  945. ITJACO = 0 ;
  946. 'SI' (('EGA' (KKONV . 'TYPEJACO') 'AUSMPLM') 'OU'
  947. ('EGA' (KKONV . 'TYPEJACO') 'RUSANOLM') 'OU'
  948. ('EGA' (KKONV . 'TYPEJACO') 'ROELM') 'OU'
  949. ('EGA' (KKONV . 'TYPEJACO') 'HLLCLM')) ;
  950. ITJACO = -1 ;
  951. 'FINSI' ;
  952. 'FINSI' ;
  953. *
  954. ITMETO = 0 ;
  955. 'SI' (('EGA' METO 'AUSMPLM') 'OU'
  956. ('EGA' METO 'RUSANOLM') 'OU'
  957. ('EGA' METO 'ROELM') 'OU'
  958. ('EGA' METO 'HLLCLM')) ;
  959. ITMETO = -1 ;
  960. 'FINSI' ;
  961. *
  962. ***** Les variables conservatives
  963. *
  964. MOT1 = 'EXTRAIRE' (KKONV . 'LISTCONS') 1 ;
  965. 'SI' ('EGA' ('VALE' 'DIME') 2) ;
  966. NOMMOM = 'EXTRAIRE' (KKONV . 'LISTCONS')
  967. ('LECT' 2 3 ) ;
  968. NOMVEL = 'MOTS' 'UX' 'UY' ;
  969. MOT2 = 'EXTRAIRE' (KKONV . 'LISTCONS') 4 ;
  970. NOMGP = 'MOTS' 'P1DX' 'P1DY' ;
  971. 'SINON' ;
  972. NOMMOM = 'EXTRAIRE' (KKONV . 'LISTCONS')
  973. ('LECT' 2 3 4) ;
  974. NOMVEL = 'MOTS' 'UX' 'UY' 'UZ' ;
  975. MOT2 = 'EXTRAIRE' (KKONV . 'LISTCONS') 5 ;
  976. NOMGP = 'MOTS' 'P1DX' 'P1DY' 'P1DZ' ;
  977. 'FINSI' ;
  978. RN = 'EXCO' MOT1 UN 'SCAL' ;
  979. GN = 'EXCO' NOMMOM UN NOMVEL ;
  980. RETN = 'EXCO' MOT2 UN 'SCAL' ;
  981. *
  982. ***** On calcule les variables primitive
  983. *
  984. GAMN = (RV . 'PGAZ' . 'GAMN') ;
  985. VN PN = 'PRIM' 'PERFMONO' RN GN RETN GAMN ;
  986. * VN PN = PPRIM RN GN RETN GAMN ;
  987. * 'SI' ((('MINIMUM' PN) < 0) 'OU' (('MINIMUM' RN) < 0)) ;
  988. * 'MESSAGE' 'Negative density or pressure' ;
  989. * KKONV . 'ANOM' = VRAI ;
  990. * RN = ('ABS' RN) '+' (('MAXIMUM' RN 'ABS') '*' 1.001) ;
  991. * PN = ('ABS' PN) '+' (('MAXIMUM' PN 'ABS') '*' 1.001) ;
  992. * 'FINSI' ;
  993. *
  994. **** Conditions aux limits ???
  995. *
  996. 'SI' (KKONV . 'CLIM') ;
  997.  
  998. * TABLIM = 'TABLE' definie dans le programme principal ;
  999.  
  1000. KKONV . 'TABLIM' . 'RN' = RN ;
  1001. KKONV . 'TABLIM' . 'VN' = VN ;
  1002. KKONV . 'TABLIM' . 'PN' = PN ;
  1003. KKONV . 'TABLIM' . 'GAMN' = GAMN ;
  1004.  
  1005. CHPLIM RESLIM JACLIM = PKOLIM (KKONV . 'TABLIM') ;
  1006. MAILLIM = ('EXTRAIRE' CHPLIM 'MAILLAGE') 'ET' (KKONV . 'FACELIM') ;
  1007. 'SINON' ;
  1008. MAILLIM = KKONV . 'FACELIM' ;
  1009. RESLIM JACLIM = 'KOPS' 'MATRIK' ;
  1010. CHPLIM = 'COPIER' RESLIM ;
  1011. 'FINSI' ;
  1012. MAILLIM = 'CHANGER' 'POI1' MAILLIM ;
  1013. *
  1014. **** La gravite
  1015. *
  1016. *
  1017. RESGRA = 'FIMP' 'VF' 'GRAVMONO' 'RESI' (KKONV . 'LISTCONS')
  1018. RN GN (KKONV . 'GRAVITE') ;
  1019. *
  1020. JACGRA = 'FIMP' 'VF' 'GRAVMONO' 'JACOCONS' (KKONV . 'LISTCONS')
  1021. RN GN (KKONV . 'GRAVITE') ;
  1022. *
  1023. * Fin contribution gravité
  1024. *
  1025.  
  1026. *
  1027. ***** On calcule les variables aux faces
  1028. *
  1029. ORDTPS = 1 ;
  1030.  
  1031. *
  1032. 'SI' (ORDESP 'EGA' 1) ;
  1033. *
  1034. ********* Ordre 1 en espace
  1035. *
  1036. ROF VITF PF GAMF = 'PRET' 'PERFMONO' 1 ORDTPS
  1037. (KKONV . 'MODELE') RN VN PN GAMN ;
  1038. 'SINON' ;
  1039. *
  1040. ********* Ordre 2 en espace
  1041. *
  1042. 'SI' (KKONV . 'CLIM') ;
  1043. GRADV ALV = 'PENT' (KKONV . 'MODELE') 'CENTRE' 'EULEVECT'
  1044. (KKONV . 'LIMITEUR') NOMVEL VN 'CLIM'
  1045. ((KKONV . 'VLIM') '+' ('EXCO' NOMVEL CHPLIM))
  1046. 'GRADGEO' (KKONV . 'GRADVN') ;
  1047. GRADR ALR = 'PENT' (KKONV . 'MODELE') 'CENTRE' 'EULESCAL'
  1048. (KKONV . 'LIMITEUR') ('MOTS' 'SCAL') RN
  1049. 'CLIM' ('EXCO' 'RN' CHPLIM) 'GRADGEO' (KKONV . 'GRADRN') ;
  1050. *
  1051. GRADP ALP = 'PENT' (KKONV . 'MODELE') 'CENTRE' 'EULESCAL'
  1052. (KKONV . 'LIMITEUR') ('MOTS' 'SCAL') PN
  1053. 'CLIM' ('EXCO' 'PN' CHPLIM) 'GRADGEO' (KKONV . 'GRADPN') ;
  1054. *
  1055. 'SINON' ;
  1056. GRADV ALV = 'PENT' (KKONV . 'MODELE') 'CENTRE' 'EULEVECT'
  1057. (KKONV . 'LIMITEUR') NOMVEL VN 'CLIM'
  1058. (KKONV . 'VLIM')
  1059. 'GRADGEO' (KKONV . 'GRADVN') ;
  1060. GRADR ALR = 'PENT' (KKONV . 'MODELE') 'CENTRE' 'EULESCAL'
  1061. (KKONV . 'LIMITEUR') ('MOTS' 'SCAL') RN
  1062. 'GRADGEO' (KKONV . 'GRADRN') ;
  1063. *
  1064. GRADP ALP = 'PENT' (KKONV . 'MODELE') 'CENTRE' 'EULESCAL'
  1065. (KKONV . 'LIMITEUR') ('MOTS' 'SCAL') PN
  1066. 'GRADGEO' (KKONV . 'GRADPN') ;
  1067. 'FINSI' ;
  1068. *
  1069. ****** Limiters = 0 on ghostcells
  1070. *
  1071. 'SI' (('EXISTE' RV 'MAIFAN')) ;
  1072. ALRLEV = ('REDU' ALR (RV . 'MAIFAN')) ;
  1073. ALPLEV = ('REDU' ALP (RV . 'MAIFAN')) ;
  1074. ALVLEV = ('REDU' ALV (RV . 'MAIFAN')) ;
  1075. CELL = ALR ;
  1076. ALR = ALR '-' ALRLEV ;
  1077. 'DETR' CELL ;
  1078. CELL = ALP ;
  1079. ALP = ALP '-' ALPLEV ;
  1080. 'DETR' CELL ;
  1081. CELL = ALV ;
  1082. ALV = ALV '-' ALVLEV ;
  1083. 'DETR' CELL ;
  1084. 'FINSI' ;
  1085. *
  1086. ****** Frozen Limiters
  1087. *
  1088. * External iterations
  1089. *
  1090. 'SI' ('EXISTE' KKONV 'NFROZLIM') ;
  1091. ITEREX = RV . 'PASDETPS' . 'NUPASDT' ;
  1092. 'SI' (ITEREX 'EGA' (KKONV . 'NFROZLIM')) ;
  1093. 'MESSAGE' ;
  1094. 'MESSAGE' 'External iterations' ;
  1095. 'MESSAGE' 'We froze the limiters' ;
  1096. KKONV . 'FROZALR' = 'COPIER' ALR ;
  1097. KKONV . 'FROZALP' = 'COPIER' ALP ;
  1098. KKONV . 'FROZALV' = 'COPIER' ALV ;
  1099. 'SINON' ;
  1100. 'SI' (ITEREX > (KKONV . 'NFROZLIM')) ;
  1101. *
  1102. * Min
  1103. *
  1104. DAR = (ALR '-' (KKONV . 'FROZALR')) 'ABS' ;
  1105. DAP = (ALP '-' (KKONV . 'FROZALP')) 'ABS' ;
  1106. DAV = (ALV '-' (KKONV . 'FROZALV')) 'ABS' ;
  1107. ALR = (ALR '+' (KKONV . 'FROZALR')) '-' DAR ;
  1108. ALP = (ALP '+' (KKONV . 'FROZALP')) '-' DAP ;
  1109. ALV = (ALV '+' (KKONV . 'FROZALV')) '-' DAV ;
  1110. ALR = ALR '/' 2.0 ;
  1111. ALV = ALV '/' 2.0 ;
  1112. ALP = ALP '/' 2.0 ;
  1113. KKONV . 'FROZALR' = 'COPIER' ALR ;
  1114. KKONV . 'FROZALP' = 'COPIER' ALP ;
  1115. KKONV . 'FROZALV' = 'COPIER' ALV ;
  1116. 'FINSI' ;
  1117. 'FINSI' ;
  1118. 'FINSI' ;
  1119. *
  1120. * Internal iterations
  1121. *
  1122. 'SI' ('EXISTE' KKONV 'NFROZLII') ;
  1123. ITERIN = RV . 'RESULTATS' . 'ITERIN' ;
  1124. 'SI' (ITERIN 'EGA' (KKONV . 'NFROZLII')) ;
  1125. 'MESSAGE' ;
  1126. 'MESSAGE' 'Internal iterations' ;
  1127. 'MESSAGE' 'We froze the limiters' ;
  1128. KKONV . 'FROZALR' = 'COPIER' ALR ;
  1129. KKONV . 'FROZALP' = 'COPIER' ALP ;
  1130. KKONV . 'FROZALV' = 'COPIER' ALV ;
  1131. 'SINON' ;
  1132. 'SI' (ITERIN > (KKONV . 'NFROZLII')) ;
  1133. DAR = (ALR '-' (KKONV . 'FROZALR')) 'ABS' ;
  1134. DAP = (ALP '-' (KKONV . 'FROZALP')) 'ABS' ;
  1135. DAV = (ALV '-' (KKONV . 'FROZALV')) 'ABS' ;
  1136. ALR = (ALR '+' (KKONV . 'FROZALR')) '-' DAR ;
  1137. ALP = (ALP '+' (KKONV . 'FROZALP')) '-' DAP ;
  1138. ALV = (ALV '+' (KKONV . 'FROZALV')) '-' DAV ;
  1139. ALR = ALR '/' 2.0 ;
  1140. ALV = ALV '/' 2.0 ;
  1141. ALP = ALP '/' 2.0 ;
  1142. KKONV . 'FROZALR' = 'COPIER' ALR ;
  1143. KKONV . 'FROZALP' = 'COPIER' ALP ;
  1144. KKONV . 'FROZALV' = 'COPIER' ALV ;
  1145. 'FINSI' ;
  1146. 'FINSI' ;
  1147. 'FINSI' ;
  1148. *
  1149.  
  1150. *
  1151. ********* Ordre 1 en temps
  1152. *
  1153. ROF VITF PF GAMF = 'PRET' 'PERFMONO' ORDESP ORDTPS
  1154. (KKONV . 'MODELE')
  1155. RN GRADR ALR
  1156. VN GRADV ALV
  1157. PN GRADP ALP
  1158. GAMN ;
  1159. 'FINSI' ;
  1160.  
  1161. *
  1162. 'SI' (ITMETO 'EGA' (-1)) ;
  1163. RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
  1164. (KKONV . 'LISTCONS') (KKONV . 'MODELE')
  1165. ROF VITF PF GAMF
  1166. MAILLIM (RV . 'CO1')
  1167. (RV . 'CO2') ;
  1168. 'SINON' ;
  1169. RESIDU DELTAT = 'KONV' 'VF' 'PERFMONO' 'RESI' METO
  1170. (KKONV . 'LISTCONS') (KKONV . 'MODELE')
  1171. ROF VITF PF GAMF
  1172. MAILLIM ;
  1173. 'FINSI' ;
  1174. *
  1175. 'SI' ('EGA' ('TYPE' (KKONV . 'ALPHA')) FLOTTANT) ;
  1176. ALPDT = 'PROG' ((KKONV . 'ALPHA') '*' DELTAT) ;
  1177. 'SINON' ;
  1178. ALPDT = 'PROG' ;
  1179. 'FINSI' ;
  1180.  
  1181. KKONV . 'DT' = DELTAT ;
  1182.  
  1183. *
  1184. **** Low Mach
  1185. *
  1186. 'SI' (RV . 'BASMACH') ;
  1187. MATBM = 'KONV' 'VF' 'PERFMONO' 'GAMMCONS' (KKONV . 'LISTCONS')
  1188. ('DOMA' (KKONV . 'MODELE') 'CENTRE')
  1189. ('DOMA' (KKONV . 'MODELE') 'DIAMIN')
  1190. RN VN PN GAMN (RV . 'CO1')
  1191. (RV . 'CO2') ;
  1192. RV . 'GAMSDTAU' = 'KOPS' 'MULT'
  1193. (1. '/' (KKONV . 'CFLDTAU')) MATBM ;
  1194. 'FINSI' ;
  1195. *
  1196. 'SI' LOGIMP ;
  1197. 'SI' (ITJACO 'EGA' 0) ;
  1198. JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS' (KKONV . 'MODELE')
  1199. (KKONV . 'LISTCONS')
  1200. MAILLIM (KKONV . 'TYPEJACO')
  1201. RN VN PN GAMN ;
  1202. 'SINON' ;
  1203. JACO = 'KONV' 'VF' 'PERFMONO' 'JACOCONS' (KKONV . 'MODELE')
  1204. (KKONV . 'LISTCONS')
  1205. MAILLIM (KKONV . 'TYPEJACO')
  1206. RN VN PN GAMN (RV . 'CO1')
  1207. (RV . 'CO2') ;
  1208. 'FINSI' ;
  1209. 'RESPRO' (JACO 'ET' JACLIM 'ET' JACGRA)
  1210. (RESIDU '+' RESLIM '+' RESGRA)
  1211. ALPDT ;
  1212. 'SINON' ;
  1213. 'RESPRO' (RESIDU '+' RESLIM '+' RESGRA) ALPDT ;
  1214. 'FINSI' ;
  1215. *
  1216. **** On detrui les choses qui ne servent plus
  1217. *
  1218. 'DETR' UN ;
  1219. 'OUBL' UN ;
  1220. 'DETR' RN ;
  1221. 'DETR' GN ;
  1222. 'DETR' RETN ;
  1223. 'DETR' VN ;
  1224. 'DETR' PN ;
  1225. 'OUBL' RN ;
  1226. 'OUBL' GN ;
  1227. 'OUBL' RETN ;
  1228. 'OUBL' VN ;
  1229. 'OUBL' PN ;
  1230. *
  1231. **** Les MCHAML faces
  1232. *
  1233. 'DETR' ROF ;
  1234. 'DETR' VITF ;
  1235. 'DETR' PF ;
  1236. 'DETR' GAMF ;
  1237. 'OUBL' ROF ;
  1238. 'OUBL' VITF ;
  1239. 'OUBL' PF ;
  1240. 'OUBL' GAMF ;
  1241. *
  1242. **** Les pentes et les limiteurs
  1243. *
  1244. 'SI' (ORDESP 'EGA' 2);
  1245. *
  1246. 'DETR' GRADR ;
  1247. 'DETR' GRADP ;
  1248. 'DETR' GRADV ;
  1249. 'DETR' ALR ;
  1250. 'DETR' ALP ;
  1251. 'DETR' ALV;
  1252. *
  1253. 'OUBL' GRADR ;
  1254. 'OUBL' GRADP ;
  1255. 'OUBL' GRADV ;
  1256. 'OUBL' ALR ;
  1257. 'OUBL' ALP ;
  1258. 'OUBL' ALV;
  1259. *
  1260. 'FINSI' ;
  1261.  
  1262. 'FINPROC' ;
  1263. *****************************************************
  1264. *****************************************************
  1265. ** FIN PROCEDURE PKON **
  1266. *****************************************************
  1267. *****************************************************
  1268.  
  1269.  
  1270. *********************************************************************
  1271. **** Procedure PKOLIM ***********************************************
  1272. *********************************************************************
  1273.  
  1274.  
  1275. 'DEBPROC' PKOLIM ;
  1276. 'ARGUMENT' TABLIM*'TABLE' ;
  1277.  
  1278. LISTP = 'MOTS' 'RN' 'UX' 'UY' 'PN' ;
  1279.  
  1280. RCHLIM1 RCHRES1 = 'KONV' 'VF' 'PERFMONO' 'CLIM' 'RESI'
  1281. MDOMINT MLIGG LISTCONS LISTP
  1282. (TABLIM . 'RN') (TABLIM . 'VN') (TABLIM . 'PN')
  1283. (TABLIM . 'GAMN') (TABLIM . 'CHINRI') 'INRI' ;
  1284.  
  1285. RJACO1 = 'KONV' 'VF' 'PERFMONO' 'CLIM' 'JACOCONS'
  1286. MDOMINT MLIGG LISTCONS LISTP
  1287. (TABLIM . 'RN') (TABLIM . 'VN') (TABLIM . 'PN')
  1288. (TABLIM . 'GAMN') (TABLIM . 'CHINRI') 'INRI' ;
  1289.  
  1290. RCHLIM2 RCHRES2 = 'KONV' 'VF' 'PERFMONO' 'CLIM' 'RESI'
  1291. MDOMINT MLIGD LISTCONS LISTP
  1292. (TABLIM . 'RN') (TABLIM . 'VN') (TABLIM . 'PN')
  1293. (TABLIM . 'GAMN') (TABLIM . 'CHOUTR') 'OUTRI' ;
  1294.  
  1295. RJACO2 = 'KONV' 'VF' 'PERFMONO' 'CLIM' 'JACOCONS'
  1296. MDOMINT MLIGD LISTCONS LISTP
  1297. (TABLIM . 'RN') (TABLIM . 'VN') (TABLIM . 'PN')
  1298. (TABLIM . 'GAMN') (TABLIM . 'CHOUTR') 'OUTRI' ;
  1299.  
  1300.  
  1301. CHPLIM = RCHLIM1 '+' RCHLIM2 ;
  1302. RESLIM = RCHRES1 '+' RCHRES2 ;
  1303. JACLIM = RJACO1 'ET' RJACO2 ;
  1304.  
  1305. 'RESPRO' CHPLIM RESLIM JACLIM ;
  1306. 'FINPROC' ;
  1307.  
  1308. *********************************************************************
  1309. **** Procedure CALC *************************************************
  1310. *********************************************************************
  1311. *
  1312. * Personal procedure
  1313. *
  1314. 'DEBP' CALC ;
  1315. 'ARGU' RVX*'TABLE' ;
  1316. *
  1317. RV = RVX . 'EQEX' ;
  1318. UN = RV . 'UN' ;
  1319. MCALC = RVX . 'MODELE' ;
  1320. *
  1321. * During the external iteration (except the first; in which
  1322. * UNM = UN of the previous step )
  1323. *
  1324. 'SI' ('NEG' 0 (RV . 'RESULTATS' . 'ITERIN')) ;
  1325.  
  1326. RN = 'REDU' ('DOMA' MCALC 'CENTRE')
  1327. ('EXCO' UN NOMDEN ('MOTS' 'SCAL')) ;
  1328. GN = 'REDU' ('DOMA' MCALC 'CENTRE')
  1329. ('EXCO' NOMMOM UN NOMVEL) ;
  1330. RETN = 'REDU' ('DOMA' MCALC 'CENTRE')
  1331. ('EXCO' NOMRET UN ('MOTS' 'SCAL')) ;
  1332. VN PN = 'PRIM' 'PERFMONO' RN GN RETN (RV . 'PGAZ' . 'GAMN') ;
  1333. *
  1334. 'SI' ('EGA' (RVX . 'COMPT') 0) ;
  1335. RVX . 'IT' = 'PROG' ;
  1336. RVX . 'ER' = 'PROG' ;
  1337. 'SINON' ;
  1338. CHPVOL = 'DOMA' MCALC 'VOLUME' ;
  1339. VOLTOT = 'XTY' CHPVOL ('MANUEL' CHPO
  1340. ('DOMA' MCALC 'CENTRE') 1 'SCAL' 1.) ('MOTS' 'SCAL')
  1341. ('MOTS' 'SCAL');
  1342. ERRO = 'ABS' (PN '-' (RVX . 'PN0')) ;
  1343. ERRO = 'XTY' ERRO CHPVOL ('MOTS' 'SCAL')
  1344. ('MOTS' 'SCAL') ;
  1345. ERRO = ERRO '/' VOLTOT ;
  1346. RVX . 'IT' = (RVX . 'IT') 'ET' ('PROG'
  1347. (RVX . 'COMPT')) ;
  1348. RVX . 'ER' = (RVX . 'ER') 'ET' ('PROG' ERRO) ;
  1349. 'FINSI' ;
  1350. RVX . 'PN0' = PN ;
  1351. RVX . 'COMPT' = (RVX . 'COMPT') '+' 1 ;
  1352. 'FINSI' ;
  1353. *
  1354. * We change the cut-off during the internal iterations
  1355. *
  1356. 'SI' FAUX ;
  1357. 'SI' ((RV . 'RESULTATS' . 'ITERIN') > 0) ;
  1358. CUMAX = RV . 'CO1MAX' ;
  1359. CUMIN = RV . 'CO1MIN' ;
  1360. DCU = (CUMIN '-' CUMAX) '/' 5 ;
  1361. CU = CUMAX '+' (DCU * (RV . 'RESULTATS' . 'ITERIN')) ;
  1362. * Take the max between CU and CUMIN
  1363. A = CUMIN '+' CU ;
  1364. B = 'ABS' (CUMIN '-' CU) ;
  1365. CU = 0.5 '*' (A '+' B) ;
  1366. *
  1367. RV . 'CO1' = CU ;
  1368. RV . 'CO2' = CU ;
  1369. 'FINSI' ;
  1370. 'FINSI' ;
  1371. *
  1372. IALPDT = 'PROG' ;
  1373. IRESU IJACO ='KOPS' 'MATRIK' ;
  1374. *
  1375. 'MENAGE' ;
  1376. *
  1377. 'SI' (RVX . 'IMPL') ;
  1378. 'RESPRO' IJACO IRESU IALPDT ;
  1379. 'SINON' ;
  1380. 'RESPRO' IRESU IALPDT ;
  1381. 'FINSI' ;
  1382. *
  1383. 'FINP' ;
  1384. *
  1385.  
  1386. ************************************************************************
  1387. ************************************************************************
  1388. ***************** FIN PARTIE PROCEDURES ********************************
  1389. ************************************************************************
  1390. ************************************************************************
  1391. ************************************************************************
  1392.  
  1393. ************************************************************************
  1394. ************************************************************************
  1395. **************************** MESH **************************************
  1396. ************************************************************************
  1397. ************************************************************************
  1398.  
  1399. NY = 5 '*' RAF ;
  1400. NX1 = 4 '*' RAF ;
  1401. NX2 = 2 '*' NX1 ;
  1402. NX3 = NX1 ;
  1403. NX = (NX1 '+' NX2 '+' NX3) ;
  1404. DX = (4.0 '/' NX) ;
  1405.  
  1406. A0 = -2.0 0.0 ;
  1407. A1 = -1.0 0.0 ;
  1408. A2 = 1.0 0.0 ;
  1409. A3 = 2.0 0.0 ;
  1410. A4 = 2.0 1.0 ;
  1411. A5 = -2.0 1.0 ;
  1412.  
  1413. *
  1414. **** LIGB
  1415. *
  1416.  
  1417. LIGB1 = A0 'DROIT' NX1 A1 ;
  1418.  
  1419. * LIGB2 (On utilise un propriete de 'ET' ; si 'ET' change ?)
  1420.  
  1421. xcel = ('COORDONNEE' 1 A1) '+' DX ;
  1422. ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
  1423. ACEL = xcel ycel ;
  1424. LIGB2 = A1 'DROIT' 1 ACEL ;
  1425. 'REPETER' BL1 (NX2 '-' 2) ;
  1426. ACEL0 = ACEL ;
  1427. xcel = xcel '+' DX ;
  1428. ycel = 0.1 '*' ( 1.0 '+' ('COS' (180 '*' xcel)));
  1429. ACEL = xcel ycel ;
  1430. LIGB2 = LIGB2 'ET' (ACEL0 'DROIT' 1 ACEL) ;
  1431. 'FIN' BL1;
  1432. LIGB2 = LIGB2 'ET' (ACEL 'DROIT' 1 A2) ;
  1433.  
  1434.  
  1435. LIGB3 = A2 'DROIT' NX3 A3 ;
  1436.  
  1437. LIGB = LIGB1 'ET' LIGB2 'ET' LIGB3 ;
  1438.  
  1439. *
  1440. **** LIGH
  1441. *
  1442.  
  1443. LIGH = A4 'DROIT' NX A5 ;
  1444.  
  1445. *
  1446. **** DOMINT
  1447. *
  1448.  
  1449. DOMINT = LIGH 'REGLER' NY ('INVERSE' LIGB) ;
  1450. LIGCON = 'CONTOUR' DOMINT ;
  1451.  
  1452. *
  1453. *** LIGG
  1454. *
  1455.  
  1456. LIGG = LIGCON 'ELEM' 'COMP' A5 A0 ;
  1457.  
  1458. *
  1459. **** LIGD
  1460. *
  1461.  
  1462. LIGD = LIGCON 'ELEM' 'COMP' A3 A4 ;
  1463.  
  1464. *
  1465. **** MODEL OBJECTS
  1466. *
  1467.  
  1468. MDOMINT = 'MODELISER' DOMINT 'EULER' ;
  1469. MLIGG = 'MODELISER' LIGG 'EULER' ;
  1470. MLIGD = 'MODELISER' LIGD 'EULER' ;
  1471.  
  1472. *
  1473. **** Creation of DOMAINE tables via the MODEL object
  1474. *
  1475.  
  1476. TDOMINT = 'DOMA' MDOMINT 'VF' ;
  1477. TLIGG = 'DOMA' MLIGG 'VF' ;
  1478. TLIGD = 'DOMA' MLIGD 'VF' ;
  1479.  
  1480. QDOMINT = TDOMINT . 'QUAF' ;
  1481. QLIGD = TLIGD . 'QUAF' ;
  1482. QLIGG = TLIGG . 'QUAF' ;
  1483.  
  1484. 'ELIMINATION' QDOMINT (DX '/' 100.) QLIGG ;
  1485. 'ELIMINATION' QDOMINT (DX '/' 100.) QLIGD ;
  1486.  
  1487. 'SI' GRAPH ;
  1488. 'TRACER' (DOMINT 'ET' (LIGG 'COULEUR' 'ROUG')
  1489. 'ET' (LIGD 'COULEUR' 'BLEU'))
  1490. 'TITRE' 'Domaine total' ;
  1491. 'FINSI' ;
  1492.  
  1493.  
  1494. *******************************************
  1495. ****** LIGNE de Post-traitement ***********
  1496. *******************************************
  1497.  
  1498. LIGB = LIGCON 'ELEM' 'COMPRIS' A0 A3 ;
  1499. POIN0 = LIGB 'POIN' 1;
  1500. X1 Y1 = 'COORDONNEE' POIN0 ;
  1501. 'REPETER' BLLIM (('NBNO' LIGB) '-' 1) ;
  1502. X0 = X1 ;
  1503. Y0 = Y1 ;
  1504. POIN0 = LIGB 'POIN' (&BLLIM '+' 1) ;
  1505. X1 Y1 = 'COORDONNEE' POIN0 ;
  1506. XFAC = (X0 '+' X1) '/' 2 ;
  1507. YFAC = (Y0 '+' Y1) '/' 2 ;
  1508. PFAC = (TDOMINT . 'FACE') 'POIN' 'PROC' (XFAC YFAC);
  1509. GEOFAC1 = (TDOMINT . 'FACEL') 'ELEM' 'APPUYE'
  1510. 'LARGEMENT' PFAC ;
  1511. *
  1512. **** Tranformation en POI1
  1513. *
  1514. GEO1POI1 = 'CHANGER' 'POI1' GEOFAC1 ;
  1515. PCEL11 = GEO1POI1 'POIN' 1 ;
  1516. PCEL12 = GEO1POI1 'POIN' 2 ;
  1517. *
  1518. **** Il faur verifier que PFAC = PCEL12 = PCEL22
  1519. * ('NBEL' GEO1POI1) = ('NBEL' GEO2POI1) = 2
  1520. *
  1521. 'SI' ( ('NBEL' GEO1POI1) 'NEG' 2);
  1522. 'MESSAGE' ;
  1523. 'MESSAGE'
  1524. 'Probleme dans la creation de la ligne pour le post.';
  1525. 'MESSAGE' ;
  1526. 'ERREUR' 21 ;
  1527. 'FINSI' ;
  1528. 'SI' ( PCEL12 'NEG' PFAC);
  1529. 'MESSAGE' ;
  1530. 'MESSAGE'
  1531. 'Probleme dans la creation de la ligne pour le post.';
  1532. 'MESSAGE' ;
  1533. 'ERREUR' 21 ;
  1534. 'FINSI' ;
  1535. *
  1536. *** Creation d'un maillage SEG2
  1537. *
  1538. 'SI' (&BLLIM 'EGA' 1);
  1539. PCEN0 = PCEL11 ;
  1540. 'SINON' ;
  1541. 'SI' (&BLLIM 'EGA' 2);
  1542. LIGPOST = 'MANUEL' 'SEG2' PCEN0 PCEL11 ;
  1543. PCEN0 = PCEL11 ;
  1544. 'SINO' ;
  1545. LIGPOST = LIGPOST 'ET' ('MANUEL' 'SEG2' PCEN0 PCEL11) ;
  1546. PCEN0 = PCEL11 ;
  1547. 'FINSI' ;
  1548. 'FINSI' ;
  1549. 'FIN' BLLIM ;
  1550.  
  1551. 'SI' GRAPH ;
  1552. 'TRACER' (DOMINT 'ET' (LIGPOST 'COULEUR' 'VERT'))
  1553. 'TITRE' 'LIGPOST' ;
  1554. 'FINSI' ;
  1555.  
  1556. ***************************************************************
  1557. ***************************************************************
  1558. ***************************************************************
  1559. ************** Initial conditions *****************************
  1560. ***************************************************************
  1561. ***************************************************************
  1562. ***************************************************************
  1563. *
  1564. *** C.L. et initiales
  1565. *
  1566.  
  1567. C_INF = GAMSCAL * P_INF '/' RO_INF ;
  1568. C_INF = C_INF '**' 0.5 ;
  1569. M_INF = U_INF '/' C_INF ;
  1570.  
  1571. *
  1572. * Names of conserved variables and others
  1573. *
  1574. NOMDEN = 'MOTS' 'RN' ;
  1575. NOMMOM = 'MOTS' 'RUX' 'RUY' ;
  1576. NOMRET = 'MOTS' 'RETN' ;
  1577. NOMVEL = 'MOTS' 'UX' 'UY' ;
  1578. * NOMPRE = 'MOTS' 'NOMPRE' ;
  1579. LISTCONS = NOMDEN 'ET' NOMMOM 'ET' NOMRET ;
  1580. *
  1581.  
  1582. GAMN = 'MANUEL' 'CHPO' (TDOMINT . 'CENTRE') 1 'SCAL' gamscal;
  1583.  
  1584.  
  1585. rek_inf = 0.5D0 * u_inf * u_inf * ro_inf ;
  1586. rei_inf = P_INF '/' (gamscal '-' 1.0D0) ;
  1587.  
  1588. RN0 = 'MANUEL' 'CHPO' (TDOMINT . 'CENTRE') 1 'SCAL' ro_inf ;
  1589. GN0 = 'MANUEL' 'CHPO' (TDOMINT . 'CENTRE') 2 'UX' (ro_inf * u_inf)
  1590. 'UY' 0.0 ;
  1591. RETN0 = 'MANUEL' 'CHPO' (TDOMINT . 'CENTRE') 1 'SCAL'
  1592. (rei_inf '+' rek_inf) ;
  1593.  
  1594. UNCONS = ('NOMC' 'RN' RN0 'NATU' 'DISCRET') 'ET' ('NOMC'
  1595. ('MOTS' 'UX' 'UY') GN0 ('MOTS' 'RUX' 'RUY') 'NATU' 'DISCRET') 'ET'
  1596. ('NOMC' 'RETN' RETN0 'NATU' 'DISCRET') ;
  1597.  
  1598. VN0 PN0 = 'PRIM' 'PERFMONO' RN0 GN0 RETN0 GAMN ;
  1599. ERRO = ('MAXIMUM' (PN0 '-' p_inf) 'ABS') / p_inf ;
  1600. 'SI' (ERRO > 1.0D-16) ;
  1601. 'ERREUR' 21 ;
  1602. 'FINSI' ;
  1603.  
  1604. aa = 'EXCO' 'UX' VN0 ;
  1605. ERRO = ('MAXIMUM' (aa '-' u_inf) 'ABS') / u_inf ;
  1606. 'SI' (ERRO > 1.0D-16) ;
  1607. 'ERREUR' 21 ;
  1608. 'FINSI' ;
  1609.  
  1610. VN2 = 'PSCAL' VN0 VN0 ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
  1611. C2 = GAMN '*' ( PN0 '/' RN0) ;
  1612. CN0 = C2 '**' 0.5 ;
  1613.  
  1614. MACH2 = VN2 '/' C2;
  1615. MACHN0 = MACH2 '**' 0.5;
  1616.  
  1617. *
  1618. **** Plot of IC
  1619. *
  1620.  
  1621. 'SI' GRAPH ;
  1622.  
  1623. CHM_RN = 'KCHA' MDOMINT 'CHAM' RN0 ;
  1624. CHM_PN = 'KCHA' MDOMINT 'CHAM' PN0 ;
  1625. CHM_VN = 'KCHA' MDOMINT 'CHAM' VN0 ;
  1626. CHM_MACH = 'KCHA' MDOMINT 'CHAM' MACHN0 ;
  1627.  
  1628. 'TRACER' CHM_RN MDOMINT
  1629. 'TITR' ('CHAINE' 'RN at t=' 0.0);
  1630. 'TRACER' CHM_PN MDOMINT
  1631. 'TITR' ('CHAINE' 'PN at t=' 0.0);
  1632. 'TRACER' CHM_VN MDOMINT
  1633. 'TITR' ('CHAINE' 'VN at t=' 0.0);
  1634. 'TRACER' CHM_MACH MDOMINT
  1635. 'TITR' ('CHAINE' 'MACH at t=' 0.0);
  1636.  
  1637. 'FINSI' ;
  1638.  
  1639.  
  1640. *****************************************************
  1641. *****************************************************
  1642. *****************************************************
  1643. **************** La table RV **********************
  1644. *****************************************************
  1645. *****************************************************
  1646. *****************************************************
  1647. *
  1648. RV = 'TABLE' ;
  1649. RV . 'ANOM' = FAUX ;
  1650. * Constant time step
  1651. CFLREF = 100.0 ;
  1652. UREF = u_inf ;
  1653. UREF = c_inf ;
  1654. RV . 'DTIMP' = CFLREF * DX '/' UREF ;
  1655. *
  1656. RV . 'ORDTPS' = 1 ;
  1657. *
  1658. RV . 'UN' = UNCONS ;
  1659. RV . 'LISTCONS' = LISTCONS ;
  1660. RV . 'ERROMOTS' = NOMRET ;
  1661. *
  1662. RV . 'CLIM' = FAUX ;
  1663. *
  1664. RV . 'CONS' = FAUX ;
  1665. *
  1666. RV . 'TFINAL' = 1.0E6 ;
  1667. RV . 'NITMAEX' = NITER ;
  1668. *
  1669. RV . 'NITMAIN' = 6 ;
  1670. RV . 'NITMIIN' = 6 ;
  1671. RV . 'EPSINT' = 1.0D-16 ;
  1672. *
  1673. * RV . 'FEXT' = 20 ;
  1674. * RV . 'FINT' = 1 ;
  1675. *
  1676. RV . 'LISTOPER' = 'MOTS' 'CALC' 'PKON' ;
  1677. *
  1678. CALCTAB = 'TABLE' ;
  1679. RV . '1CALC' = CALCTAB ;
  1680. PKONTAB = 'TABLE' ;
  1681. RV . '2PKON' = PKONTAB ;
  1682. *
  1683. RV . 'MATIDE' = 'KOPS' 'MATIDE' LISTCONS ('DOMA' MDOMINT 'CENTRE')
  1684. 'MATRIK' ;
  1685. *
  1686. **** Parametres de la procedure PROLIM
  1687. *
  1688. * Gas model
  1689. * Gas properties
  1690. RV . 'PGAZ' = 'TABLE' ;
  1691. RV . 'PGAZ' . 'R' = Rair ;
  1692. RV . 'PGAZ' . 'GAMN' = gamn ;
  1693. * RV . 'PGAZ' . 'MU' = 0.0 ;
  1694. * RV . 'PGAZ' . 'LAMBDA' = 0.0 ;
  1695. * Bas Mach (PKON)
  1696. RV . 'BASMACH' = FAUX ;
  1697. RV . 'CO1' = 'MANUEL' 'CHPO' ('DOMA' MDOMINT 'CENTRE')
  1698. 1 'SCAL' (10 * U_INF) ;
  1699. RV . 'CO1MAX' = 'MANUEL' 'CHPO' ('DOMA' MDOMINT 'CENTRE')
  1700. 1 'SCAL' (10 * U_INF) ;
  1701. RV . 'CO1MIN' = 'MANUEL' 'CHPO' ('DOMA' MDOMINT 'CENTRE')
  1702. 1 'SCAL' (10 * U_INF) ;
  1703. RV . 'CO2' = 'COPIER' ( RV . 'CO1') ;
  1704. * RV . 'CO2' can be Modified into PDIF
  1705. *****************
  1706. ** CALCUL *******
  1707. *****************
  1708. * Personal procedure
  1709. *
  1710. CALCTAB . 'ANOM' = FAUX ;
  1711. CALCTAB . 'EQEX' = RV ;
  1712. CALCTAB . 'MODELE' = MDOMINT ;
  1713. * We call this procedure during the external iterations ->
  1714. CALCTAB . 'IMPL' = VRAI ;
  1715. CALCTAB . 'COMPT' = 0 ;
  1716. *
  1717. *****************
  1718. * PKON **********
  1719. *****************
  1720. CHPVID MATVID = 'KOPS' 'MATRIK' ;
  1721. PKONTAB . 'CFLDTAU' = 10000. ;
  1722. PKONTAB . 'ANOM' = FAUX ;
  1723. PKONTAB . 'EQEX' = RV ;
  1724. PKONTAB . 'GAZ' = 'PERFMONO' ;
  1725. PKONTAB . 'MODELE' = MDOMINT ;
  1726. PKONTAB . 'LISTCONS' = LISTCONS ;
  1727. * PKONTAB . 'METHODE' = 'CENTERED' ;
  1728. * PKONTAB . 'METHODE' = 'RUSANOLM' ;
  1729. * PKONTAB . 'METHODE' = 'AUSMPLM' ;
  1730. PKONTAB . 'METHODE' = 'AUSMPLUS' ;
  1731. * PKONTAB . 'METHODE' = 'VLH' ;
  1732. * PKONTAB . 'METHODE' = 'ROELM' ;
  1733. * PKONTAB . 'METHODE' = 'ROE' ;
  1734. * PKONTAB . 'METHODE' = 'HLLCLM' ;
  1735. *
  1736. PKONTAB . 'IMPL' = VRAI ;
  1737. 'SI' (PKONTAB . 'IMPL') ;
  1738. PKONTAB . 'TYPEJACO' = 'AUSMPLUS' ;
  1739. * PKONTAB . 'TYPEJACO' = 'VLH' ;
  1740. * PKONTAB . 'TYPEJACO' = 'RUSANOLM' ;
  1741. * PKONTAB . 'TYPEJACO' = 'AUSMPLM' ;
  1742. 'FINSI' ;
  1743. *
  1744. PKONTAB . 'ORDREESP' = 2 ;
  1745. 'SI' ((PKONTAB . 'ORDREESP') 'EGA' 2) ;
  1746. PKONTAB . 'VLIM' = CHPVID ;
  1747. CHPENLIM = 'MANUEL' 'CHPO' (('DOMA' MLIGG 'CENTRE') 'ET'
  1748. ('DOMA' MLIGD 'CENTRE')) 1 'SCAL' 0.0 ;
  1749. CHPE2LIM = 'MANUEL' 'CHPO' (('DOMA' MLIGG 'CENTRE') 'ET'
  1750. ('DOMA' MLIGD 'CENTRE')) 2
  1751. 'UX' 1.0 'UY' 0.0 ;
  1752. TOTO TITI MCHRCON = 'PENTE' MDOMINT 'CENTRE' 'EULESCAL'
  1753. 'LIMITEUR' ('MOTS' 'SCAL') RN0 'CLIM' CHPENLIM ;
  1754. TOTO TITI MCHVCON = 'PENTE' MDOMINT 'CENTRE' 'EULEVECT'
  1755. 'LIMITEUR' ('MOTS' 'UX' 'UY') GN0 'CLIM' CHPE2LIM ;
  1756. PKONTAB . 'LIMITEUR' = 'NOLIMITE' ;
  1757. PKONTAB . 'GRADRN' = MCHRCON ;
  1758. PKONTAB . 'GRADPN' = MCHRCON ;
  1759. PKONTAB . 'GRADVN' = MCHVCON ;
  1760. 'FINSI' ;
  1761. PKONTAB . 'NFROZLIM' = 50 ;
  1762. * Gravité
  1763. * PKONTAB . 'CORRGRA' = FAUX ;
  1764. PKONTAB . 'GRAVITE' = 'MANUEL' 'CHPO' ('DOMA' MDOMINT 'CENTRE') 2
  1765. 'UX' 0.0 'UY' 0.0 ;
  1766. *
  1767. MAIVID = 'DIFF' ('DOMA' MLIGG 'CENTRE')
  1768. ('DOMA' MLIGG 'CENTRE') ;
  1769. PKONTAB . 'FACELIM' = MAIVID ;
  1770. PKONTAB . 'ALPHA' = 'INF' ;
  1771. PKONTAB . 'CLIM' = VRAI ;
  1772. PKONTAB . 'TABLIM' = TABLE ;
  1773. *
  1774. * Normalisation du profile parabolique, pour obtenir que
  1775. * le flux rentrante vaut MINJ
  1776. *
  1777. PKONTAB . 'TABLIM' . 'CHINRI' = 'MANUEL' 'CHPO' ('DOMA' MLIGG
  1778. 'CENTRE') 4 'RN' ro_inf 'UX' U_INF
  1779. 'UY' 0.0 'PN' p_inf ;
  1780. PKONTAB . 'TABLIM' . 'CHOUTR' = 'MANUEL' 'CHPO' ('DOMA' MLIGD
  1781. 'CENTRE') 4 'RN' ro_inf 'UX' U_INF
  1782. 'UY' 0.0 'PN' p_inf ;
  1783. *
  1784. ***********************************
  1785. * Inversion de la matrice *********
  1786. ***********************************
  1787. *
  1788. * RV . 'MATUPDAT' updating
  1789. * RV . 'MUPEXT' external iterations updating
  1790. * RV . 'MUPINT' internal iterations updating
  1791. * RV . 'MUPLIN' We update the matrix if in the previous
  1792. * internal iteration the number of linear
  1793. * iterations to solve the system were bigger
  1794. * than (RV . 'MUPLIN')
  1795. RV . 'MATUPDAT' = FAUX ;
  1796. 'SI' ('NON' ( RV . 'MATUPDAT')) ;
  1797. RV . 'MUPEXT' = 1 ;
  1798. RV . 'MUPINT' = 50 ;
  1799. RV . 'MUPLIN' = 4000 ;
  1800. 'FINSI' ;
  1801. RV . 'MATINV' = 'TABLE' 'METHINV' ;
  1802. MATTAB = RV . 'MATINV' ;
  1803. * MATTAB . 'TYPINV' = 1 : methode exact
  1804. * MATTAB . 'TYPINV' = 5 ; GMRES
  1805. MATTAB . 'TYPINV' = 1 ;
  1806. MATTAB . 'IMPINV' = 0 ;
  1807. *
  1808. * Matrice pour assurer que la matrice à inverser est correctement
  1809. * assemblé
  1810. *
  1811. * MATTAB . 'MATASS' definie en EXEXIM
  1812. * MATTAB . 'MAPREC' "
  1813. * MATTAB . 'XINIT' "
  1814. *
  1815.  
  1816. * Methode de numerotation de DDL
  1817. MATTAB . 'TYRENU' = 'RIEN' ;
  1818. MATTAB . 'PCMLAG' = 'APR2' ;
  1819. MATTAB . 'GMRESTRT' = 500 ;
  1820. MATTAB . 'SCALING' = 1 ;
  1821. * ILU 3
  1822. * ILUT (dual truncation) 5
  1823. * ILUTP 9
  1824. * Dans le cas ILUT il faut definir
  1825. * ILUTLFIL
  1826. * ILUTDTOL
  1827. MATTAB . 'PRECOND' = 7 ;
  1828. MATTAB . 'OUBMAT' = 0 ;
  1829. MATTAB . 'ILUTPPIV' = 0.1 ;
  1830. MATTAB . 'ILUTPMBL' = 0 ;
  1831. MATTAB . 'ILUTLFIL' = 4. ;
  1832. MATTAB . 'ILUTDTOL' = 0. ;
  1833. MATTAB . 'NITMAX' = 3000 ;
  1834. MATTAB . 'RESID' = 1.D-6 ;
  1835. *
  1836. **** Save results into a file
  1837. *
  1838. SI FAUX ;
  1839. FICHER1 = ('CHAINE' FICHER 'main' RAF
  1840. (PKONTAB . 'METHODE')
  1841. 'OE' (PKONTAB . 'ORDREESP')
  1842. 'OT' (RV . 'ORDTPS') '.sauv') ;
  1843. 'OPTION' 'SAUVER' FICHER1 ;
  1844. 'MESSAGE' 'We save results into' ;
  1845. 'MESSAGE' FICHER ;
  1846. 'MESSAGE' ;
  1847. 'FINSI' ;
  1848. *
  1849. **** Exexcution EXEXIM
  1850. *
  1851. 'SI' FAUX ;
  1852. LISTTPS = ('PROG' 100.0) ;
  1853. 'REPETER' BL1 ('DIME' LISTTPS) ;
  1854. RV . 'TFINAL' = 'EXTRAIRE' LISTTPS &BL1 ;
  1855. 'TEMPS' 'ZERO' ;
  1856. EXEXIM RV ;
  1857. 'TEMPS' 'IMPR' ;
  1858. *
  1859. **** To save memory storage
  1860. *
  1861. 'OUBLIER' MATTAB MATASS ;
  1862. 'OUBLIER' MATTAB MAPREC ;
  1863. 'MENAGE' ;
  1864. 'SI' FAUX ;
  1865. 'SAUVER' 'LABEL' ('CHAINE' &BL1) ;
  1866. 'FINSI' ;
  1867. 'FIN' BL1 ;
  1868. SINON ;
  1869. * 'TEMPS' 'ZERO' ;
  1870. EXEXIM RV ;
  1871. * 'TEMPS' 'IMPR' ;
  1872. 'FINSI' ;
  1873. *
  1874. ***************************************************************
  1875. ***************************************************************
  1876. ***************************************************************
  1877. ************** Plot of the solutions **************************
  1878. ***************************************************************
  1879. ***************************************************************
  1880. ***************************************************************
  1881. *
  1882. * GRAPH = VRAI ;
  1883. *
  1884. 'SI' FAUX ;
  1885. FICHER =
  1886. './D_sauv/main16VLHOE2OT1.sauv' ;
  1887. 'OPTION' 'RESTITUER' FICHER ;
  1888. 'RESTITUER' ;
  1889. 'FINSI' ;
  1890. *
  1891. * LOGGNP = logical. If VRAI, files for gnuplot are created
  1892. *
  1893. LOGGNP = VRAI ;
  1894. VALECH = 1 ;
  1895.  
  1896. 'OPTION' 'ECHO' VALECH 'TRAC' 'X' ;
  1897.  
  1898. TPS = RV . 'PASDETPS' . 'TPS' ;
  1899. METO = PKONTAB . 'METHODE' ;
  1900. ORD_ESP = PKONTAB . 'ORDREESP' ;
  1901. ORD_TPS = RV . 'ORDTPS' ;
  1902.  
  1903. NTOTEL = 'NBNO' ('DOMA' MDOMINT 'CENTRE') ;
  1904.  
  1905. *
  1906. **** Les variables conservatives
  1907. *
  1908.  
  1909. GAMN = 'REDU' GAMN ('DOMA' MDOMINT 'CENTRE') ;
  1910. RN = 'EXCO' NOMDEN (RV . 'UN') ('MOTS' 'SCAL') ;
  1911. GN = 'EXCO' NOMMOM (RV . 'UN') ('MOTS' 'UX' 'UY') ;
  1912. RETN = 'EXCO' NOMRET (RV . 'UN') ('MOTS' 'SCAL') ;
  1913.  
  1914. *
  1915. **** Les variables primitives
  1916. *
  1917.  
  1918. VN PN = 'PRIM' 'PERFMONO'
  1919. RN GN RETN GAMN ;
  1920.  
  1921. CSON2 = (GAMN '*' PN) '/' RN ;
  1922. VN2 = 'PSCAL' VN VN ('MOTS' 'UX' 'UY') ('MOTS' 'UX' 'UY') ;
  1923. MACHN2 = VN2 '/' CSON2 ;
  1924. MACHN = MACHN2 '**' 0.5 ;
  1925.  
  1926. TITOLO = ('CHAINE' METO ', OE = ' ORD_ESP ', OT =' ORD_TPS
  1927. ', NBEL = ' NTOTEL ' ,tps =' TPS) ;
  1928.  
  1929. EVO1 = 'EVOL' 'MANU' 'it' (CALCTAB . 'IT') 'err'
  1930. ((CALCTAB . 'ER') '+' 1.0D-16) ;
  1931.  
  1932. *
  1933. *** GRAPHIQUE DES SOLUTIONS
  1934. *
  1935.  
  1936. 'SI' GRAPH ;
  1937.  
  1938. 'TRACER' DOMINT 'TITRE' ('CHAINE' 'Maillage') ;
  1939.  
  1940. CHM_RN = 'KCHA' MDOMINT 'CHAM' RN ;
  1941. CHM_PN = 'KCHA' MDOMINT 'CHAM' PN ;
  1942. CHM_VN = 'KCHA' MDOMINT 'CHAM' VN ;
  1943. CHM_MACH = 'KCHA' MDOMINT 'CHAM' MACHN ;
  1944.  
  1945. 'TRACER' CHM_RN MDOMINT ('CONTOUR' DOMINT)
  1946. 'TITR' ('CHAINE' ' RN : ' TITOLO) ;
  1947. RNV = 'ELNO' TDOMINT ('REDU' RN TDOMINT . 'CENTRE') ;
  1948. 'OPTION' 'ISOV' 'LIGN' ;
  1949. 'TRACER' DOMINT RNV ('CONTOUR' DOMINT)
  1950. 'TITRE' ('CHAINE' 'RN : ' TITOLO) 15 ;
  1951. 'OPTION' 'ISOV' 'SULI' ;
  1952. 'TRACER' CHM_PN MDOMINT ('CONTOUR' DOMINT)
  1953. 'TITR' ('CHAINE' 'PN : ' TITOLO) ;
  1954. PNV = 'ELNO' TDOMINT ('REDU' PN TDOMINT . 'CENTRE') ;
  1955. 'OPTION' 'ISOV' 'LIGN' ;
  1956. 'TRACER' DOMINT PNV ('CONTOUR' DOMINT)
  1957. 'TITRE' ('CHAINE' 'PN : ' TITOLO) 15 ;
  1958. 'OPTION' 'ISOV' 'SULI' ;
  1959. 'TRACER' CHM_MACH MDOMINT ('CONTOUR' DOMINT)
  1960. 'TITR' ('CHAINE' 'MACHN : ' TITOLO);
  1961. MACHNV = 'ELNO' TDOMINT ('REDU' MACHN TDOMINT . 'CENTRE') ;
  1962. 'OPTION' 'ISOV' 'LIGN' ;
  1963. 'TRACER' DOMINT MACHNV ('CONTOUR' DOMINT)
  1964. 'TITRE' ('CHAINE' 'Mach : ' TITOLO) 15 ;
  1965. 'OPTION' 'ISOV' 'SULI' ;
  1966. 'TRACER' CHM_VN MDOMINT ('CONTOUR' DOMINT)
  1967. 'TITR' ('CHAINE' 'VN : ' TITOLO) ;
  1968. VECN = 'VECTEUR' VN (8. '/' RAF) 'UX' 'UY' 'JAUNE' ;
  1969. 'TRACER' DOMINT VECN ('CONTOUR' DOMINT)
  1970. 'TITRE' ('CHAINE' 'VN : ' TITOLO) ;
  1971. *
  1972. 'OPTION' 'ISOV' 'SULI' ;
  1973. 'DESSIN' EVO1 LOGY 'TITRE' 'Error' ;
  1974. *
  1975. 'FINSI' ;
  1976.  
  1977. *
  1978. **** Test de convergence
  1979. *
  1980.  
  1981. AA = 'EXTRAIRE' (CALCTAB . 'ER') ('DIME' (CALCTAB . 'ER')) ;
  1982.  
  1983. 'SI' (AA > 1.0D-8) ;
  1984. 'MESSAGE' 'Probleme' ;
  1985. 'ERREUR' 5 ;
  1986. 'FINSI' ;
  1987. *
  1988.  
  1989. XLIGPOST = 'COORDONNEE' 1 LIGPOST ;
  1990. EVCOOR = 'EVOL' 'CHPO' XLIGPOST 'SCAL' LIGPOST ;
  1991. LISTX = 'EXTRAIRE' EVCOOR 'ORDO' ;
  1992.  
  1993. EVMACH = 'EVOL' 'CHPO' MACHN 'SCAL' LIGPOST ;
  1994. LISTMACH = 'EXTRAIRE' EVMACH 'ORDO' ;
  1995. EVMACH = 'EVOL' 'MANU' 'x' LISTX 'Mach' LISTMACH ;
  1996. 'SI' GRAPH ;
  1997. 'DESSIN' EVMACH 'MIMA' 'TITRE' TITOLO ;
  1998. 'FINSI' ;
  1999.  
  2000. MMAX = 'MAXIMUM' MACHN ;
  2001. MMIN = 'MINIMUM' MACHN ;
  2002.  
  2003. MMAX_REF = 0.93624 ;
  2004. MMIN_REF = 0.42153 ;
  2005.  
  2006. ERRO = 'ABS' (MMAX_REF '-' MMAX) '/' M_INF ;
  2007. 'SI' (ERRO > 5.0D-2) ;
  2008. 'MESSAGE' 'Probleme' ;
  2009. 'ERREUR' 5 ;
  2010. 'FINSI' ;
  2011. *
  2012.  
  2013. ERRO = 'ABS' (MMIN_REF '-' MMIN) '/' M_INF ;
  2014. 'SI' (ERRO > 1.0D-2) ;
  2015. 'MESSAGE' 'Probleme' ;
  2016. 'ERREUR' 5 ;
  2017. 'FINSI' ;
  2018.  
  2019. 'FIN' ;
  2020.  
  2021.  
  2022.  

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