Télécharger cyltest6.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : cyltest6.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTI' 'ECHO' 0 ;
  5. ************************************************************************
  6. * *
  7. * Ecoulement autour d'un cylindre circulaire *
  8. * Résolution des équations de Navier Stokes laminaires instationnaires *
  9. * *
  10. * Pompé sur cyltest.dgibi *
  11. * Ajouts Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF) *
  12. * mél : gounand@semt2.smts.cea.fr *
  13. * en date du 20/12/2007 *
  14. * teste une méthode couplée et une méthode de projection *
  15. * algébrique incrémentale : vérification du bilan des forces *
  16. * locales et de la force s'exercant sur le cylindre *
  17. * SG 08/10/2024 : passage aux quadratiques pour la discrétisation *
  18. * du cercle en TRIA RAFT *
  19. * Ajout double projection *
  20. * SG 31/01/2025 : Modifs tolerance tests car MacOS/Arm genere un *
  21. * maillage un peu different (TRIA/RAFT) *
  22. * Test simple projection aussi *
  23. ************************************************************************
  24. 'SAUTER' 2 'LIGNE' ;
  25. 'MESSAGE' ' Execution de cyltest6.dgibi' ;
  26. 'SAUTER' 2 'LIGNE' ;
  27. *
  28. interact = FAUX ;
  29. graph = FAUX ;
  30. *
  31. *****************************************
  32. * *
  33. * Procedure tracvit *
  34. * *
  35. *****************************************
  36. 'DEBPROC' TRACVIT;
  37. 'ARGUMENT' RVX*'TABLE';
  38. rv = rvx . 'EQEX' ;
  39. umax = 2. ;
  40. CHUN = 'VECTEUR' (rv.inco.un) (1. '/' (1. * umax)) UX UY JAUN;
  41. 'TRACER' CHUN mt cmt 'TITRE' 'Champ de vitesse'
  42. 'NCLK' ;
  43. as2 ama1 = 'KOPS' 'MATRIK';
  44. 'RESPRO' as2 ama1;
  45. 'FINP';
  46. *****************************************
  47. * *
  48. * Proc Bloc de pression nul *
  49. * *
  50. *****************************************
  51. 'DEBPROC' BLOCPNUL ;
  52. 'ARGUMENT' rvx*'TABLE' ;
  53. RV = RVX . 'EQEX';
  54. *
  55. 'SI' ('NON' ('EXISTE' rv 'MATPNULL')) ;
  56. *
  57. * Creation d'un bloc de pression nulle
  58. *
  59. 'MESSAGE' ('CHAINE' 'Calcul du bloc de pression') ;
  60. $mt = rvx . 'DOMZ' ;
  61. rt = 'EQEX' 'OPTI' 'EF' 'IMPL' 'CENTREE' 'CENTREP1'
  62. 'ZONE' $mt
  63. 'OPER' 'KMAB' 0. 'INCO' 'UN' 'PN' ;
  64. Rt.'INCO' = RV . 'INCO' ;
  65. smbb matb = kmab rt . '1KMAB' ;
  66. chpv = 'KCHT' $mt 'VECT' 'SOMMET' 'COMP' '1UN' '2UN' (0. 0.) ;
  67. matpres = 'KOPS' 'CMCT' matb chpv matb ;
  68. rv . 'MATPNULL' = matpres ;
  69. 'SINON' ;
  70. matpres =rv . 'MATPNULL' ;
  71. 'FINSI' ;
  72. smbvide matvide = 'KOPS' 'MATRIK' ;
  73. 'FINPROC' smbvide matpres ;
  74. *
  75. * Options globales
  76. *
  77. 'OPTION' 'DIME' 2 'ELEM' 'QUA8' 'ECHO' 0 ;
  78. 'SI' interact ;
  79. 'OPTION' 'TRAC' 'X' ;
  80. 'SINON' ;
  81. 'OPTION' 'TRAC' 'PSC';
  82. 'FINSI' ;
  83. 'OPTION' isov suli;
  84. disv = 'QUAF' ;
  85. DISP = 'CENTREP1';
  86. * iraff : raffinement du maillage
  87. * mproj : 0 méthode couplée
  88. * 1 méthode simple projection
  89. * 2 méthode double projection
  90. * miter : méthode itérative ou directe (FAUX ou VRAI)
  91. iraff = 1 ;
  92. impkres = 0 ;
  93. *
  94. lok = VRAI ;
  95. *
  96. 'REPETER' imet 10 ;
  97. 'SAUTER' 1 'LIGN' ;
  98. iimet = &imet ;
  99. lprec = faux ;
  100. 'SI' ('EGA' iimet 1) ;
  101. mproj = 0 ; miter = FAUX ;
  102. 'FINSI' ;
  103. 'SI' ('EGA' iimet 2) ;
  104. mproj = 0 ; miter = VRAI ;
  105. 'FINSI' ;
  106. 'SI' ('EGA' iimet 3) ;
  107. mproj = 1; lprec = FAUX ; miter = FAUX ;
  108. 'FINSI' ;
  109. 'SI' ('EGA' iimet 4) ;
  110. mproj = 1 ; lprec = FAUX ; miter = VRAI ;
  111. 'FINSI' ;
  112. 'SI' ('EGA' iimet 5) ;
  113. mproj = 1 ; lprec = VRAI ; miter = FAUX ;
  114. 'FINSI' ;
  115. 'SI' ('EGA' iimet 6) ;
  116. mproj = 1 ; lprec = VRAI ; miter = VRAI ;
  117. 'FINSI' ;
  118. 'SI' ('EGA' iimet 7) ;
  119. mproj = 2 ; lprec = FAUX ; miter = FAUX ;
  120. 'FINSI' ;
  121. 'SI' ('EGA' iimet 8) ;
  122. mproj = 2 ; lprec = FAUX ; miter = VRAI ;
  123. 'FINSI' ;
  124. 'SI' ('EGA' iimet 9) ;
  125. mproj = 2 ; lprec = VRAI ; miter = FAUX ;
  126. 'FINSI' ;
  127. 'SI' ('EGA' iimet 10) ;
  128. mproj = 2 ; lprec = VRAI ; miter = VRAI ;
  129. 'FINSI' ;
  130. 'SI' ('EGA' mproj 0) ;
  131. chmet = 'CHAI' 'Methode directe' ;
  132. 'FINS' ;
  133. 'SI' ('EGA' mproj 1) ;
  134. chmet = 'CHAI' 'Methode simple projection' ;
  135. 'FINS' ;
  136. 'SI' ('EGA' mproj 2) ;
  137. chmet = 'CHAI' 'Methode double projection' ;
  138. 'FINS' ;
  139. 'SI' lprec ;
  140. chmet = 'CHAI' chmet ' preconditionnee' ;
  141. 'FINSI' ;
  142. 'MESS' chmet ;
  143. 'SI' miter ;
  144. 'MESSAGE' 'Solveur iteratif' ;
  145. 'SINON' ;
  146. 'MESSAGE' 'Solveur direct' ;
  147. 'FINSI' ;
  148. 'SAUTER' 1 'LIGN' ;
  149. *============================
  150. * Construction du maillage:
  151. *============================
  152. * Construction des points:
  153. nc = 4 ;
  154. nx = 11 ; ny = 6 ;
  155. nc = '*' nc iraff ;
  156. nx = '*' nx iraff ;
  157. ny = '*' ny iraff ;
  158. *
  159. p0 = 0. 0. ;
  160. p1 = 0.5 0. ;
  161. p2 = 0. 0.5 ;
  162. p3 = -0.5 0. ;
  163. p4 = 0. -0.5 ;
  164. *
  165. c1 = 'CERCLE' nc p1 p0 p2 ;
  166. c2 = 'CERCLE' nc p2 p0 p3 ;
  167. c3 = 'CERCLE' nc p3 p0 p4 ;
  168. c4 = 'CERCLE' nc p4 p0 p1 ;
  169. *
  170. ligc = c1 'ET' c2 'ET' c3 'ET' c4 ;
  171. ligc = 'INVERSE' ligc ;
  172. *
  173. *
  174. pA = -6. -6. ;
  175. pB = 15. -6. ;
  176. pC = 15. 6. ;
  177. pD = -6. 6. ;
  178. bas = pA 'DROIT' nx pB ;
  179. dro = pB 'DROIT' ny pC ;
  180. hau = pC 'DROIT' nx pD ;
  181. gau = pD 'DROIT' ny pA ;
  182. *
  183. lige = bas 'ET' dro 'ET' hau 'ET' gau ;
  184. *
  185. cntt = ligc 'ET' lige ;
  186. *
  187. mt = tria cntt ;
  188. xmt ymt = 'COORDONNEE' mt ;
  189. rmt = '**' ('+' ('**' xmt 2) ('**' ymt 2)) 0.5D0 ;
  190. *rmt = '*' rmt 3. ;
  191. rmt = '/' rmt 3. ;
  192. rmt = '/' rmt iraff ;
  193. mtr = 'RAFT' rmt mt ;
  194. 'SI' graph ;
  195. 'TRACER' mtr 'TITR' ('CHAINE' 'nbl=' ('NBEL' mtr)) ;
  196. 'FINSI' ;
  197. *'OPTION' 'DONN' 5 ;
  198. cercle = ligc ;
  199. * Création du domaine total:
  200. mt = mtr;
  201. cmt = 'CONTOUR' mt;
  202. *==============================================
  203. * Changement des éléments du maillage en QUAF:
  204. *==============================================
  205.  
  206. _mt = 'CHANGER' mt 'QUAF';
  207. _cmt = 'CHANGER' cmt 'QUAF';
  208. _cercle = 'CHANGER' cercle 'QUAF';
  209. _entree = 'CHANGER' gau 'QUAF';
  210. _sortie = 'CHANGER' dro 'QUAF';
  211. _hau = 'CHANGER' hau 'QUAF';
  212. _bas = 'CHANGER' bas 'QUAF';
  213. 'ELIM' 1.E-5 (_mt et _cercle et _entree 'ET' _sortie
  214. 'ET' _cmt 'ET' _hau 'ET' _bas);
  215.  
  216. NN = 'NBEL' mt;
  217. 'MESSAGE' 'Nombre d elements du maillage :' ' ' NN;
  218.  
  219. *=======================================
  220. * Formulation du domaine Navier Stokes:
  221. *=======================================
  222.  
  223. $mt = 'MODE' _mt 'NAVIER_STOKES' disv ;
  224. $cmt = 'MODE' _cmt 'NAVIER_STOKES' disv ;
  225. $cercle = 'MODE' _cercle 'NAVIER_STOKES' disv ;
  226. $entree = 'MODE' _entree 'NAVIER_STOKES' disv ;
  227. $sortie = 'MODE' _sortie 'NAVIER_STOKES' disv ;
  228. $hau = 'MODE' _hau 'NAVIER_STOKES' disv ;
  229. $bas = 'MODE' _bas 'NAVIER_STOKES' disv ;
  230. *
  231. mt = 'DOMA' $mt 'MAILLAGE' ;
  232. cmt = 'DOMA' $cmt 'MAILLAGE' ;
  233. cercle = 'DOMA' $cercle 'MAILLAGE' ;
  234. entree = 'DOMA' $entree 'MAILLAGE' ;
  235. sortie = 'DOMA' $sortie 'MAILLAGE' ;
  236. hau = 'DOMA' $hau 'MAILLAGE' ;
  237. bas = 'DOMA' $bas 'MAILLAGE' ;
  238.  
  239. *====================================
  240. * Création des tables de résolution:
  241. *====================================
  242.  
  243. dt = .5D0 ;
  244. *rey = 30. ;
  245. rey = 100.;
  246. nu = 1./rey;
  247. arelax = 1.;
  248. *
  249. niter = 6 ;
  250. nitime = 3 ;
  251. *
  252. RV = 'EQEX' 'OMEGA' 1.0 'NITER' niter 'ITMA' 1 'FIDT' 1 ;
  253. *
  254. RV = 'EQEX' RV
  255. 'OPTI' 'EF' 'CENTREE' 'IMPL'
  256. * 'ZONE' $mt 'OPER' 'NS' 'INV_RE' 'INCO' 'UN'
  257. 'ZONE' $mt 'OPER' 'KONV' 1. 'UN' 'INV_RE' 'INCO' 'UN'
  258. 'OPTI' 'EF' 'CENTREE' 'IMPL'
  259. 'ZONE' $mt 'OPER' 'LAPN' 'INV_RE' 'INCO' 'UN'
  260. 'OPTI' 'EF' 'CENTREE' 'IMPL'
  261. 'ZONE' $mt 'OPER' 'DFDT' 1. 'UNM' 'DT' 'INCO' 'UN'
  262. 'OPTI' 'EF' 'IMPL' 'CENTREE' DISP
  263. 'ZONE' $mt
  264. 'OPER' 'KBBT' 1. 'INCO' 'UN' 'PN' ;
  265.  
  266. 'SI' graph ;
  267. rv = 'EQEX' rv
  268. 'ZONE' $mt 'OPER' TRACVIT ;
  269. 'FINSI' ;
  270.  
  271. * Implantation des conditions aux limites:
  272.  
  273. RV = 'EQEX' RV
  274. 'CLIM' 'UN' 'UIMP' cercle 0. 'UN' 'VIMP' cercle 0.
  275. 'UN' 'UIMP' entree 1. 'UN' 'VIMP' entree 0.
  276. 'UN' 'VIMP' hau 0.
  277. 'UN' 'VIMP' bas 0. ;
  278. *
  279. * Choix de la méthode de résolution (couplée, projection)
  280. * et des solveurs (direct, itératif)
  281. *
  282. 'SI' ('EGA' mproj 0) ;
  283. * Solveur pour le système vitesse-pression
  284. rvm = rv . 'METHINV' ;
  285. rvm . 'SCALING' = 1 ;
  286. rvm . 'IMPINV' = impkres ;
  287. 'SI' ('NON' miter) ;
  288. rvm . 'TYPINV' = 1 ;
  289. 'SINON' ;
  290. * On rajoute le bloc de pression nul
  291. rv = 'EQEX' rv 'ZONE' $mt 'OPER' BLOCPNUL ;
  292. *
  293. rvm . 'TYPINV' = 4 ;
  294. rvm . 'LBCG' = 2 ;
  295. rvm . 'PRECOND' = 5 ;
  296. rvm . 'ILUTLFIL' = 3.D0 ;
  297. 'FINSI' ;
  298. 'SINON' ;
  299. rv . 'GPROJ' = 'TABLE' ;
  300. rv . 'GPROJ' . 'NOMVIT' = 'UN' ;
  301. rv . 'GPROJ' . 'NOMPRES' = 'PN' ;
  302. 'SI' ('NON' lprec) ;
  303. rv . 'GPROJ' . 'NOPREC' = VRAI ;
  304. 'FINSI' ;
  305. rv . 'GPROJ' . 'dblproj' = ('EGA' mproj 2) ;
  306. *
  307. * Solveur pour les composantes de la vitesse
  308. rvm = rv . 'METHINV' ;
  309. rvm . 'SCALING' = 1 ;
  310. rvm . 'IMPINV' = impkres ;
  311. 'SI' ('NON' miter) ;
  312. rvm . 'TYPINV' = 1 ;
  313. 'SINON' ;
  314. rvm . 'TYPINV' = 4 ;
  315. rvm . 'LBCG' = 2 ;
  316. rvm . 'PRECOND' = 3 ;
  317. 'FINSI' ;
  318. * Solveur pour l'équation de pression
  319. rv . 'GPROJ'. 'METHINV' = 'TABLE' 'METHINV' ;
  320. rvgm = rv . 'GPROJ' . 'METHINV' ;
  321. rvgm . 'SCALING' = 1 ;
  322. rvgm . 'IMPINV' = impkres ;
  323. 'SI' ('NON' miter) ;
  324. rvgm . 'TYPINV' = 1 ;
  325. 'SINON' ;
  326. rvgm . 'TYPINV' = 4 ;
  327. rvgm . 'LBCG' = 2 ;
  328. rvgm . 'PRECOND' = 3 ;
  329. * rvgm . 'PRECOND' = 5 ;
  330. * rvgm . 'ILUTLFIL' = 1.D0 ;
  331. 'FINSI' ;
  332. 'FINSI' ;
  333. * Création de la table des inconnues et initialisation:
  334. RV.INCO = 'TABLE' INCO;
  335. *
  336. RV.INCO.'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (1.E-3 1.E-3);
  337. RV.INCO.'UNM' = 'KCHT' $mt 'VECT' 'SOMMET' (1.E-3 1.E-3);
  338. rv . 'INCO' . 'G' = (0. -9.8) ;
  339. RV.INCO.'DT' = dt ;
  340. RV.INCO.'INV_RE'= nu;
  341. RV.INCO.'PN' = 'KCHT' $mt 'SCAL' DISP 0.;
  342. *
  343. * Table avec les résultats en vitesse
  344. *
  345. res = 'TABLE' ;
  346. itres = 0 ;
  347. res . itres = 'COPIER' (RV.INCO.'UN') ;
  348. ***************************************************
  349. *
  350. * Boucle en temps faite main
  351. *
  352. 'TEMPS' 'ZERO' ;
  353. 'REPETER' iitime nitime ;
  354. rv . 'INCO' . 'UNM' = 'COPIER' (res . itres) ;
  355. EXEC RV;
  356. itres = '+' itres 1 ;
  357. res . itres = 'COPIER' (RV.INCO.'UN') ;
  358. 'FIN' iitime ;
  359. TABTPS = TEMP 'NOEC';
  360. tcpu = TABTPS.'TEMPS_CPU'.'INITIAL' ;
  361. *
  362. ***************************************************
  363. lastime = '-' ('DIME' res) 1 ;
  364. vit = res . lastime ;
  365. vitm1 = res . ('-' lastime 1) ;
  366. umax = 2. ;
  367. *
  368. *
  369. * Créer les matrices
  370. *
  371. bidon matkon = 'KONV' (rv . '1KONV') ;
  372. bidon matlap = 'LAPN' (rv . '2LAPN') ;
  373. chdfdt matdfdt = 'DFDT' (rv . '3DFDT') ;
  374. *
  375. rt = 'EQEX' 'ZONE' $mt
  376. 'OPTI' 'EF' 'IMPL' 'CENTREE' DISP
  377. 'OPER' 'KMBT' -1. 'INCO' 'PN' 'UN'
  378. ;
  379. rt.'INCO' = rv . 'INCO' ;
  380. bidon matgrp = 'KMBT' (rt . '1KMBT') ;
  381. *
  382. pre = rv . 'INCO' . 'PN' ;
  383. nomavv = 'MOTS' 'UX' 'UY' ;
  384. nomapv = 'MOTS' '1UN' '2UN' ;
  385. nomavp = 'MOTS' 'SCAL' ;
  386. nomapp = 'MOTS' 'PN' ;
  387. vit = 'NOMC' nomavv nomapv vit ;
  388. vitm1 = 'NOMC' nomavv nomapv vitm1 ;
  389. pre = 'NOMC' nomavp nomapp pre ;
  390. forlap = 'KOPS' matlap '*' vit ;
  391. forkon = 'KOPS' matkon '*' vit ;
  392. forgrp = 'KOPS' matgrp '*' pre ;
  393. fordfdt = 'KOPS' matdfdt '*' ('-' vit vitm1) ;
  394. *
  395. forlap = ('NOMC' nomapv nomavv forlap) ;
  396. forkon = ('NOMC' nomapv nomavv forkon) ;
  397. forgrp = ('NOMC' nomapv nomavv forgrp) ;
  398. fordfdt = ('NOMC' nomapv nomavv fordfdt) ;
  399. *
  400. fort = forlap '+' forkon '+' forgrp '+' fordfdt ;
  401. *
  402. fmax = 'MAXIMUM' fort 'ABS' ;
  403. echf = '/' 0.5 fmax ;
  404. *
  405. vlap = 'VECTEUR' forlap echf UX UY VERT ;
  406. vkon = 'VECTEUR' forkon echf UX UY ROUG ;
  407. vgrp = 'VECTEUR' forgrp echf UX UY JAUN ;
  408. vdfdt = 'VECTEUR' fordfdt echf UX UY TURQ ;
  409. vf = 'VECTEUR' fort echf UX UY BLAN ;
  410. vtot = vlap 'ET' vkon 'ET' vgrp 'ET' vdfdt 'ET' vf ;
  411. *
  412. 'SI' graph ;
  413. tit = 'CHAINE' 'vert=lap;roug=kon;jaun=grp;turq=dfdt;blan=reac;fmax='
  414. fmax ;
  415. 'TRACER' vtot _mt ('CONTOUR' _mt) 'TITRE' tit ;
  416. 'FINSI' ;
  417. *
  418. pmt = 'CHANGER' mt 'POI1' ;
  419. pcmt = 'CHANGER' cmt 'POI1' ;
  420. pint = 'DIFF' pmt pcmt ;
  421. fortint = 'REDU' fort pint ;
  422. fmaxint = 'MAXIMUM' fortint 'ABS' ;
  423. 'MESSAGE' ('CHAINE' 'fmax=' fmax) ;
  424. 'MESSAGE' ('CHAINE' 'fmaxint=' fmaxint) ;
  425. errbf = '*' ('/' fmaxint fmax) 100. ;
  426. 'MESSAGE' ('CHAINE' 'erreur bilan forces =' errbf ' %') ;
  427. forcer = 'REDU' fort cercle ;
  428. rfor = 'RESULT' forcer ;
  429. 'MESSAGE' 'Resultante des forces sur le cylindre' ;
  430. rfx = 'MAXIMUM' ('EXCO' 'UX' rfor) ;
  431. rfy = 'MAXIMUM' ('EXCO' 'UY' rfor) ;
  432. 'MESSAGE' ('CHAINE' ' en x =' rfx) ;
  433. 'MESSAGE' ('CHAINE' ' en y =' rfy) ;
  434. 'MESSAGE' ('CHAINE' 'tcpu=' tcpu) ;
  435. *
  436. * Tests
  437. * Erreur sur le bilan des forces au 08/10/2024
  438. * 2.e-3 % pour la méthode directe
  439. * 3.5 % pour la méthode projection algébrique
  440. * 5.3e-2 % pour la méthode double projection algébrique
  441. * Valeur de la force de trainée (fx) (Linux x86)
  442. * -7.261-1 pour la méthode directe
  443. * -7.029e-1 pour la méthode projection algébrique
  444. * -7.262e-1 pour la méthode double projection algébrique
  445. * Valeur de la force de trainée (fx) (MacOS ARM)
  446. * -7.236-1 pour la méthode directe
  447. *
  448. 'SI' ('EGA' mproj 0) ; vrbf = 3.D-3 ; 'FINS' ;
  449. 'SI' ('EGA' mproj 1) ; vrbf = 4. ; 'FINS' ;
  450. 'SI' ('EGA' mproj 2) ; vrbf = 1.D-1 ; 'FINS' ;
  451. *
  452. vrftd = -7.25e-1 ;
  453. *
  454. 'SI' ('EGA' mproj 0) ; tolfx = 0.03e-1 ; 'FINS' ;
  455. 'SI' ('EGA' mproj 1) ; tolfx = 0.4e-1 ; 'FINS' ;
  456. 'SI' ('EGA' mproj 2) ; tolfx = 0.03e-1 ; 'FINS' ;
  457. *
  458. tst = '<' errbf vrbf ;
  459. 'SI' ('NON' tst) ;
  460. cherr = 'CHAINE' '!!! Erreur bilan force > ' vrbf ' %' ;
  461. 'MESSAGE' cherr ;
  462. 'SINO' ;
  463. cherr = 'CHAINE' 'OK Erreur bilan force < ' vrbf ' %' ;
  464. 'MESSAGE' cherr ;
  465. 'FINSI' ;
  466. lok = lok 'ET' tst ;
  467. *
  468. tst = '<' ('ABS' ('-' rfx vrftd)) tolfx ;
  469. 'SI' ('NON' tst) ;
  470. cherr = 'CHAINE' '!!! Erreur force trainee' ' ' rfx ' <>' ' ' vrftd
  471. ' a' ' ' tolfx ' pres' ;
  472. 'MESSAGE' cherr ;
  473. 'SINO' ;
  474. cherr = 'CHAINE' 'OK Erreur force trainee' ' ' rfx ' ~=' ' ' vrftd
  475. ' a' ' ' tolfx ' pres' ;
  476. 'MESSAGE' cherr ;
  477. 'FINSI' ;
  478. lok = lok 'ET' tst ;
  479. 'FIN' imet ;
  480. 'SAUTER' 2 'LIGNE' ;
  481. 'SI' lok ;
  482. 'MESSAGE' 'Tout sest bien passe' ;
  483. 'SINON' ;
  484. 'MESSAGE' 'Il y a eu des erreurs' ;
  485. 'FINSI' ;
  486. 'SAUTER' 2 'LIGNE' ;
  487. *
  488. 'SI' interact ;
  489. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  490. 'FINSI' ;
  491. 'SI' ('NON' lok) ;
  492. 'ERREUR' 5 ;
  493. 'FINSI' ;
  494. * 'FIN' du jeu de données.
  495. fin;
  496.  
  497.  
  498.  

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