Télécharger dedu_ghia.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : dedu_ghia.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTI' 'ECHO' 0 ;
  5. ************************************************************************
  6. * NOM : DEDU_GHIA
  7. * DESCRIPTION : Calcul de la cavité carrée à paroi défilante
  8. * (Navier-Stokes incompressible) pour plusieurs nombres de
  9. * Reynolds et comparaison avec les résultats de
  10. * référence de Ghia et al. :
  11. *
  12. *@Article{ghia,
  13. * author = {U. Ghia and K.N. Ghia and C.T. Shin},
  14. * title = {High-Re Solutions for Incompressible Flow Using the
  15. * Navier-Stokes Equations and a Multigrid Method},
  16. * journal = {JCP},
  17. * year = {1982},
  18. * volume = {48},
  19. * pages = {387-411},
  20. * endroit = {Classeur Benchmarks (I)}
  21. *}
  22. *
  23. * On utilise une adaptation de maillage par bougé de noeuds
  24. * utilisant l'algorithme implémenté dans 'DEDU' 'ADAP'
  25. * pour calculer le cas avec peu de mailles et sans
  26. * viscosité artificielle (décentrement).
  27. * On arrive à passer Re= 10^4 avec un maillage 25x25
  28. * (ca oscille un peu sur les bords !)
  29. *
  30. *
  31. * LANGAGE : GIBIANE-CAST3M
  32. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  33. * mél : gounand@semt2.smts.cea.fr
  34. **********************************************************************
  35. * VERSION : v1, 13/04/2007, version initiale
  36. * HISTORIQUE : v1, 13/04/2007, création
  37. * HISTORIQUE :
  38. * HISTORIQUE :
  39. ************************************************************************
  40. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  41. * en cas de modification de ce sous-programme afin de faciliter
  42. * la maintenance !
  43. ************************************************************************
  44. *
  45. 'SAUTER' 2 'LIGNE' ;
  46. 'MESSAGE' ' Execution de dedu_ghia.dgibi' ;
  47. 'SAUTER' 2 'LIGNE' ;
  48. *
  49. *
  50. *
  51. interact= FAUX ;
  52. graph = FAUX ;
  53. verbose = FAUX ;
  54. debug = FAUX ;
  55. complet = FAUX ;
  56. *
  57. *BEGINPROCEDUR gmass
  58. ************************************************************************
  59. * NOM : GMASS
  60. * DESCRIPTION : Une matrice de masse
  61. *
  62. *
  63. *
  64. * LANGAGE : GIBIANE-CAST3M
  65. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  66. * mél : gounand@semt2.smts.cea.fr
  67. **********************************************************************
  68. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  69. * VERSION : v1, 13/05/2004, version initiale
  70. * HISTORIQUE : v1, 13/05/2004, création
  71. * HISTORIQUE :
  72. * HISTORIQUE :
  73. ************************************************************************
  74. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  75. * en cas de modification de ce sous-programme afin de faciliter
  76. * la maintenance !
  77. ************************************************************************
  78. *
  79. *
  80. 'DEBPROC' GMASS ;
  81. 'ARGUMENT' _mt*'MAILLAGE' ;
  82. 'ARGUMENT' _smt/'MAILLAGE' ;
  83. 'ARGUMENT' gdisc*'MOT ' ;
  84. 'ARGUMENT' lnomt/'LISTMOTS' ;
  85. 'SI' ('NON' ('EXISTE' lnomt)) ;
  86. 'ARGUMENT' nomt*'MOT ' ;
  87. lnomt = 'MOTS' nomt ;
  88. 'FINSI' ;
  89. 'ARGUMENT' disct*'MOT ' ;
  90. 'ARGUMENT' lnomq/'LISTMOTS' ;
  91. 'SI' ('NON' ('EXISTE' lnomq)) ;
  92. 'ARGUMENT' nomq*'MOT ' ;
  93. lnomq = 'MOTS' nomq ;
  94. 'FINSI' ;
  95. 'ARGUMENT' discq*'MOT ' ;
  96. 'ARGUMENT' coef/'FLOTTANT' ;
  97. 'SI' ('NON' ('EXISTE' coef)) ;
  98. 'ARGUMENT' coef2/'CHPOINT ' ;
  99. 'SI' ('NON' ('EXISTE' coef2)) ;
  100. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  101. 'SINON' ;
  102. coef = coef2 ;
  103. 'ARGUMENT' discc*'MOT ' ;
  104. 'FINSI' ;
  105. 'SINON' ;
  106. discc = 'CSTE' ;
  107. 'FINSI' ;
  108. 'ARGUMENT' methgau/'MOT ' ;
  109. 'SI' ('NON' ('EXISTE' methgau)) ;
  110. methgau = 'GAU7' ;
  111. 'FINSI' ;
  112. 'ARGUMENT' chpop/'CHPOINT' ;
  113. 'ARGUMENT' chpod/'CHPOINT' ;
  114. *
  115. vdim = 'VALEUR' 'DIME' ;
  116. vmod = 'VALEUR' 'MODE' ;
  117. idim = 0 ;
  118. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  119. idim = 2 ;
  120. iaxi = FAUX ;
  121. 'FINSI' ;
  122. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  123. idim = 2 ;
  124. iaxi = VRAI ;
  125. 'FINSI' ;
  126. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  127. idim = 3 ;
  128. iaxi = FAUX ;
  129. 'FINSI' ;
  130. 'SI' ('EGA' vdim 1) ;
  131. idim = 1 ;
  132. iaxi = FAUX ;
  133. 'FINSI' ;
  134. 'SI' ('EGA' idim 0) ;
  135. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  136. 'FINSI' ;
  137. 'SI' iaxi ;
  138. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  139. 'FINSI' ;
  140. dlnomt = 'DIME' lnomt ; dlnomq = 'DIME' lnomq ;
  141. 'SI' ('NEG' dlnomt dlnomq) ;
  142. 'ERREUR' ('CHAINE' 'Pas le meme nombre dincos primales et duales');
  143. 'FINSI' ;
  144. * numop = 1 ;
  145. numop = dlnomt ;
  146. numder = idim ;
  147. numvar = dlnomt ;
  148. numdat = 1 ;
  149. numcof = 1 ;
  150. *
  151. A = ININLIN numop numvar numdat numcof numder ;
  152. 'REPETER' iilnomt dlnomt ;
  153. ilnomt = &iilnomt ;
  154. A . 'VAR' . ilnomt . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lnomt ilnomt) ;
  155. A . 'VAR' . ilnomt . 'DISC' = disct ;
  156. 'SI' ('EXISTE' chpop) ;
  157. A . 'VAR' . ilnomt . 'VALEUR' = chpop ;
  158. 'FINSI' ;
  159. 'FIN' iilnomt ;
  160. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  161. A . 'DAT' . 1 . 'DISC' = discc ;
  162. A . 'DAT' . 1 . 'VALEUR' = coef ;
  163. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  164. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  165. *
  166. 'REPETER' iilnomt dlnomt ;
  167. ilnomt = &iilnomt ;
  168. A . ilnomt . ilnomt . 0 = 'LECT' 1 ;
  169. 'FIN' iilnomt ;
  170. *
  171. 'SI' iaxi ;
  172. numdat = 1 ;
  173. numcof = 1 ;
  174. 'SINON' ;
  175. numdat = 0 ;
  176. numcof = 0 ;
  177. 'FINSI' ;
  178. B = ININLIN numop numvar numdat numcof numder ;
  179. 'REPETER' iilnomq dlnomq ;
  180. ilnomq = &iilnomq ;
  181. B . 'VAR' . ilnomq . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lnomq ilnomq) ;
  182. B . 'VAR' . ilnomq . 'DISC' = discq ;
  183. 'SI' ('EXISTE' chpod) ;
  184. B . 'VAR' . ilnomq . 'VALEUR' = chpod ;
  185. 'FINSI' ;
  186. 'FIN' iilnomq ;
  187. *
  188. 'SI' iaxi ;
  189. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  190. B . 'DAT' . 1 . 'DISC' = gdisc ;
  191. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  192. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  193. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  194. 'FINSI' ;
  195. 'SI' iaxi ;
  196. 'REPETER' iilnomq dlnomq ;
  197. ilnomq = &iilnomq ;
  198. B . ilnomq . ilnomq . 0 = 'LECT' 1 ;
  199. 'FIN' iilnomq ;
  200. 'SINON' ;
  201. 'REPETER' iilnomq dlnomq ;
  202. ilnomq = &iilnomq ;
  203. B . ilnomq . ilnomq . 0 = 'LECT' ;
  204. 'FIN' iilnomq ;
  205. 'FINSI' ;
  206. *
  207. 'SI' ('EXISTE' _smt) ;
  208. mgmass = 'NLIN' gdisc _mt _smt A B methgau ;
  209. 'SINON' ;
  210. mgmass = 'NLIN' gdisc _mt A B methgau ;
  211. 'FINSI' ;
  212. *
  213. 'RESPRO' mgmass ;
  214. 'FINPROC' ;
  215. *
  216. * End of procedure file GMASS
  217. *
  218. *ENDPROCEDUR gmass
  219. *BEGINPROCEDUR glapn
  220. ************************************************************************
  221. * NOM : GLAPN
  222. * DESCRIPTION : Un laplacien scalaire
  223. *
  224. *
  225. *
  226. * LANGAGE : GIBIANE-CAST3M
  227. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  228. * mél : gounand@semt2.smts.cea.fr
  229. **********************************************************************
  230. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  231. * VERSION : v1, 13/05/2004, version initiale
  232. * HISTORIQUE : v1, 13/05/2004, création
  233. * HISTORIQUE :
  234. * HISTORIQUE :
  235. ************************************************************************
  236. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  237. * en cas de modification de ce sous-programme afin de faciliter
  238. * la maintenance !
  239. ************************************************************************
  240. *
  241. *
  242. 'DEBPROC' GLAPN ;
  243. 'ARGUMENT' _mt*'MAILLAGE' ;
  244. 'ARGUMENT' gdisc*'MOT ' ;
  245. 'ARGUMENT' nomt*'MOT ' ;
  246. 'ARGUMENT' disct*'MOT ' ;
  247. 'ARGUMENT' nomq*'MOT ' ;
  248. 'ARGUMENT' discq*'MOT ' ;
  249. 'ARGUMENT' coef/'FLOTTANT' ;
  250. 'SI' ('NON' ('EXISTE' coef)) ;
  251. 'ARGUMENT' coef2/'CHPOINT ' ;
  252. 'SI' ('NON' ('EXISTE' coef2)) ;
  253. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  254. 'SINON' ;
  255. coef = coef2 ;
  256. 'ARGUMENT' discc*'MOT ' ;
  257. 'FINSI' ;
  258. 'SINON' ;
  259. discc = 'CSTE' ;
  260. 'FINSI' ;
  261. 'ARGUMENT' methgau/'MOT ' ;
  262. 'SI' ('NON' ('EXISTE' methgau)) ;
  263. methgau = 'GAU7' ;
  264. 'FINSI' ;
  265. 'ARGUMENT' chpop/'CHPOINT' ;
  266. 'ARGUMENT' chpod/'CHPOINT' ;
  267. *
  268. vdim = 'VALEUR' 'DIME' ;
  269. vmod = 'VALEUR' 'MODE' ;
  270. idim = 0 ;
  271. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  272. idim = 2 ;
  273. iaxi = FAUX ;
  274. 'FINSI' ;
  275. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  276. idim = 2 ;
  277. iaxi = VRAI ;
  278. 'FINSI' ;
  279. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  280. idim = 3 ;
  281. iaxi = FAUX ;
  282. 'FINSI' ;
  283. 'SI' ('EGA' vdim 1) ;
  284. idim = 1 ;
  285. iaxi = FAUX ;
  286. 'FINSI' ;
  287. 'SI' ('EGA' idim 0) ;
  288. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  289. 'FINSI' ;
  290. 'SI' iaxi ;
  291. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  292. 'FINSI' ;
  293. * Test bête...
  294. 'SI' ('EGA' ('TYPE' coef) 'CHPOINT ') ;
  295. mincoef = 'MINIMUM' coef ;
  296. 'SINON' ;
  297. mincoef = coef ;
  298. 'FINSI' ;
  299. 'SI' ('<' mincoef 0.D0) ;
  300. 'ERREUR' 'Le coef (une viscosité) doit etre positive' ;
  301. 'FINSI' ;
  302. *
  303. 'SI' iaxi ;
  304. lcoef = 'MOTS' 'NURR' 'NUZZ' ;
  305. 'SINON' ;
  306. 'SI' ('EGA' idim 2) ;
  307. lcoef = 'MOTS' 'NUXX' 'NUYY' ;
  308. 'SINON' ;
  309. lcoef = 'MOTS' 'NUXX' 'NUYY' 'NUZZ' ;
  310. 'FINSI' ;
  311. 'FINSI' ;
  312. *
  313. ltens = FAUX ;
  314. 'SI' ('EGA' ('TYPE' coef) 'CHPOINT') ;
  315. ncomp = 'DIME' ('EXTRAIRE' coef 'COMP') ;
  316. 'SI' ('EGA' ncomp idim) ;
  317. ltens = VRAI ;
  318. 'FINSI' ;
  319. 'FINSI' ;
  320. *
  321. tcoef = 'TABLE' ;
  322. 'SI' ltens ;
  323. 'REPETER' iidim idim ;
  324. tcoef . &iidim = 'EXCO' ('EXTRAIRE' lcoef &iidim) coef ;
  325. 'FIN' iidim ;
  326. 'SINON' ;
  327. 'REPETER' iidim idim ;
  328. tcoef . &iidim = coef ;
  329. 'FIN' iidim ;
  330. 'FINSI' ;
  331. *
  332. numop = idim ;
  333. numder = idim ;
  334. mmt = 'MOTS' nomt ;
  335. mmq = 'MOTS' nomq ;
  336. numvar = 1 ;
  337. numdat = idim ;
  338. numcof = idim ;
  339. *
  340. A = ININLIN numop numvar numdat numcof numder ;
  341. A . 'VAR' . 1 . 'NOMDDL' = mmt ;
  342. A . 'VAR' . 1 . 'DISC' = disct ;
  343. 'SI' ('EXISTE' chpop) ;
  344. A . 'VAR' . 1 . 'VALEUR' = chpop ;
  345. 'FINSI' ;
  346. 'REPETER' iidim idim ;
  347. A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' 'SCAL' ;
  348. A . 'DAT' . &iidim . 'DISC' = discc ;
  349. A . 'DAT' . &iidim . 'VALEUR' = tcoef . &iidim ;
  350. A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
  351. A . 'COF' . &iidim . 'LDAT' = 'LECT' &iidim ;
  352. 'FIN' iidim ;
  353. *
  354. 'REPETER' iidim idim ;
  355. A . &iidim . 1 . &iidim = 'LECT' &iidim ;
  356. 'FIN' iidim ;
  357. *
  358. 'SI' iaxi ;
  359. numdat = 1 ;
  360. numcof = 1 ;
  361. 'SINON' ;
  362. numdat = 0 ;
  363. numcof = 0 ;
  364. 'FINSI' ;
  365. *
  366. B = ININLIN numop numvar numdat numcof numder ;
  367. B . 'VAR' . 1 . 'NOMDDL' = mmq ;
  368. B . 'VAR' . 1 . 'DISC' = discq ;
  369. 'SI' ('EXISTE' chpod) ;
  370. B . 'VAR' . 1 . 'VALEUR' = chpod ;
  371. 'FINSI' ;
  372. 'SI' iaxi ;
  373. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  374. B . 'DAT' . 1 . 'DISC' = gdisc ;
  375. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  376. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  377. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  378. 'FINSI' ;
  379. *
  380. 'REPETER' iidim idim ;
  381. 'SI' iaxi ;
  382. B . &iidim . 1 . &iidim = 'LECT' 1 ;
  383. 'SINON' ;
  384. B . &iidim . 1 . &iidim = 'LECT' ;
  385. 'FINSI' ;
  386. 'FIN' iidim ;
  387. *
  388. mglapn = 'NLIN' gdisc _mt A B methgau ;
  389. * Integration par parties
  390. mglapn = '*' mglapn -1.D0 ;
  391. *
  392. 'RESPRO' mglapn ;
  393. 'FINPROC' ;
  394. *
  395. * End of procedure file GLAPN
  396. *
  397. *ENDPROCEDUR glapn
  398. *BEGINPROCEDUR gugrad
  399. ************************************************************************
  400. * NOM : GUGRAD
  401. * DESCRIPTION : U . grad
  402. *
  403. *
  404. *
  405. * LANGAGE : GIBIANE-CAST3M
  406. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  407. * mél : gounand@semt2.smts.cea.fr
  408. **********************************************************************
  409. * VERSION : v1, 13/05/2004, version initiale
  410. * HISTORIQUE : v1, 13/05/2004, création
  411. * HISTORIQUE :
  412. * HISTORIQUE :
  413. ************************************************************************
  414. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  415. * en cas de modification de ce sous-programme afin de faciliter
  416. * la maintenance !
  417. ************************************************************************
  418. *
  419. *
  420. 'DEBPROC' GUGRAD ;
  421. 'ARGUMENT' _mt*'MAILLAGE' ;
  422. 'ARGUMENT' gdisc*'MOT ' ;
  423. 'ARGUMENT' nomp*'MOT ' ;
  424. 'ARGUMENT' discp*'MOT ' ;
  425. 'ARGUMENT' nomd*'MOT ' ;
  426. 'ARGUMENT' discd*'MOT ' ;
  427. 'ARGUMENT' vtot*'CHPOINT ' ;
  428. 'ARGUMENT' vcomp*'LISTMOTS' ;
  429. 'ARGUMENT' discv*'MOT ' ;
  430. 'ARGUMENT' coef/'FLOTTANT' ;
  431. 'SI' ('NON' ('EXISTE' coef)) ;
  432. 'ARGUMENT' coef2/'CHPOINT ' ;
  433. 'SI' ('NON' ('EXISTE' coef2)) ;
  434. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  435. 'SINON' ;
  436. coef = coef2 ;
  437. 'ARGUMENT' discc*'MOT ' ;
  438. 'FINSI' ;
  439. 'SINON' ;
  440. discc = 'CSTE' ;
  441. 'FINSI' ;
  442. 'ARGUMENT' methgau/'MOT ' ;
  443. 'SI' ('NON' ('EXISTE' methgau)) ;
  444. methgau = 'GAU7' ;
  445. 'FINSI' ;
  446. 'ARGUMENT' chpop/'CHPOINT' ;
  447. 'ARGUMENT' chpod/'CHPOINT' ;
  448. *
  449. vdim = 'VALEUR' 'DIME' ;
  450. vmod = 'VALEUR' 'MODE' ;
  451. idim = 0 ;
  452. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  453. idim = 2 ;
  454. iaxi = FAUX ;
  455. * Passé en argument désormais
  456. * vcomp = 'MOTS' 'UX' 'UY' ;
  457. 'FINSI' ;
  458. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  459. idim = 2 ;
  460. iaxi = VRAI ;
  461. * vcomp = 'MOTS' 'UR' 'UZ' ;
  462. 'FINSI' ;
  463. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  464. idim = 3 ;
  465. iaxi = FAUX ;
  466. * vcomp = 'MOTS' 'UX' 'UY' 'UZ' ;
  467. 'FINSI' ;
  468. 'SI' ('EGA' vdim 1) ;
  469. idim = 1 ;
  470. iaxi = FAUX ;
  471. 'FINSI' ;
  472. 'SI' ('EGA' idim 0) ;
  473. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  474. 'FINSI' ;
  475. 'SI' iaxi ;
  476. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  477. 'FINSI' ;
  478. *
  479. numop = 1 ;
  480. numder = idim ;
  481. mmp = 'MOTS' nomp ;
  482. mmd = 'MOTS' nomd ;
  483. numvar = 1 ;
  484. numdat = idim ;
  485. numcof = idim ;
  486. *
  487. A = ININLIN numop numvar numdat numcof numder ;
  488. A . 'VAR' . 1 . 'NOMDDL' = mmp ;
  489. A . 'VAR' . 1 . 'DISC' = discp ;
  490. 'SI' ('EXISTE' chpop) ;
  491. A . 'VAR' . 1 . 'VALEUR' = chpop ;
  492. 'FINSI' ;
  493. 'REPETER' iidim idim ;
  494. nomco = 'EXTRAIRE' vcomp &iidim ;
  495. A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' nomco ;
  496. A . 'DAT' . &iidim . 'DISC' = discv ;
  497. * A . 'DAT' . &iidim . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
  498. A . 'DAT' . &iidim . 'VALEUR' = 'EXCO' nomco vtot nomco ;
  499. *
  500. A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
  501. A . 'COF' . &iidim . 'LDAT' = 'LECT' &iidim ;
  502. 'FIN' iidim ;
  503. *
  504. 'REPETER' iidim idim ;
  505. A . 1 . 1 . &iidim = 'LECT' &iidim ;
  506. 'FIN' iidim ;
  507. *
  508. numvar = 1 ;
  509. 'SI' iaxi ;
  510. numdat = 2 ;
  511. numcof = 2 ;
  512. 'SINON' ;
  513. numdat = 1 ;
  514. numcof = 1 ;
  515. 'FINSI' ;
  516. *
  517. B = ININLIN numop numvar numdat numcof numder ;
  518. B . 'VAR' . 1 . 'NOMDDL' = mmd ;
  519. B . 'VAR' . 1 . 'DISC' = discd ;
  520. 'SI' ('EXISTE' chpod) ;
  521. B . 'VAR' . 1 . 'VALEUR' = chpod ;
  522. 'FINSI' ;
  523. *
  524. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  525. B . 'DAT' . 1 . 'DISC' = discc ;
  526. B . 'DAT' . 1 . 'VALEUR' = coef ;
  527. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  528. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  529. *
  530. 'SI' iaxi ;
  531. B . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  532. B . 'DAT' . 2 . 'DISC' = gdisc ;
  533. B . 'DAT' . 2 . 'VALEUR' = dprmt ;
  534. B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  535. B . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  536. 'FINSI' ;
  537. *
  538. 'SI' iaxi ;
  539. B . 1 . 1 . 0 = 'LECT' 1 2 ;
  540. 'SINON' ;
  541. B . 1 . 1 . 0 = 'LECT' 1 ;
  542. 'FINSI' ;
  543. *
  544. mgugrad = 'NLIN' gdisc _mt A B methgau ;
  545. *
  546. 'RESPRO' mgugrad ;
  547. 'FINPROC' ;
  548. *
  549. * End of procedure file GUGRAD
  550. *
  551. *ENDPROCEDUR gugrad
  552. *BEGINPROCEDUR gdecent
  553. ************************************************************************
  554. * NOM : GDECENT
  555. * DESCRIPTION : Décentrement
  556. *
  557. *
  558. *
  559. * LANGAGE : GIBIANE-CAST3M
  560. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  561. * mél : gounand@semt2.smts.cea.fr
  562. **********************************************************************
  563. * VERSION : v1, 13/05/2004, version initiale
  564. * HISTORIQUE : v1, 13/05/2004, création
  565. * HISTORIQUE :
  566. * HISTORIQUE :
  567. ************************************************************************
  568. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  569. * en cas de modification de ce sous-programme afin de faciliter
  570. * la maintenance !
  571. ************************************************************************
  572. *
  573. *
  574. 'DEBPROC' GDECENT ;
  575. 'ARGUMENT' imeth*'ENTIER' ;
  576. 'ARGUMENT' _mt*'MAILLAGE' ;
  577. 'ARGUMENT' gdisc*'MOT ' ;
  578. 'ARGUMENT' nomp*'MOT ' ;
  579. 'ARGUMENT' discp*'MOT ' ;
  580. 'ARGUMENT' nomd*'MOT ' ;
  581. 'ARGUMENT' discd*'MOT ' ;
  582. 'ARGUMENT' vtot*'CHPOINT ' ;
  583. 'ARGUMENT' vcomp*'LISTMOTS' ;
  584. 'ARGUMENT' discv*'MOT ' ;
  585. 'ARGUMENT' rho*'FLOTTANT' ;
  586. 'ARGUMENT' nu*'FLOTTANT' ;
  587. 'ARGUMENT' Pec*'FLOTTANT' ;
  588. 'ARGUMENT' methgau/'MOT ' ;
  589. 'SI' ('NON' ('EXISTE' methgau)) ;
  590. methgau = 'GAU7' ;
  591. 'FINSI' ;
  592. 'ARGUMENT' chpop/'CHPOINT' ;
  593. 'ARGUMENT' chpod/'CHPOINT' ;
  594. *
  595. vdim = 'VALEUR' 'DIME' ;
  596. vmod = 'VALEUR' 'MODE' ;
  597. idim = 0 ;
  598. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  599. idim = 2 ;
  600. iaxi = FAUX ;
  601. * Passé en argument désormais
  602. * vcomp = 'MOTS' 'UX' 'UY' ;
  603. 'FINSI' ;
  604. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  605. idim = 2 ;
  606. iaxi = VRAI ;
  607. * vcomp = 'MOTS' 'UR' 'UZ' ;
  608. 'FINSI' ;
  609. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  610. idim = 3 ;
  611. iaxi = FAUX ;
  612. * vcomp = 'MOTS' 'UX' 'UY' 'UZ' ;
  613. 'FINSI' ;
  614. 'SI' ('EGA' vdim 1) ;
  615. idim = 1 ;
  616. iaxi = FAUX ;
  617. 'FINSI' ;
  618. 'SI' ('EGA' idim 0) ;
  619. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  620. 'FINSI' ;
  621. 'SI' iaxi ;
  622. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  623. 'FINSI' ;
  624. *
  625. mdumm = 'MOTS' 'DUMM' ;
  626. numop = 1 ;
  627. numder = idim ;
  628. mmp = 'MOTS' nomp ;
  629. mmd = 'MOTS' nomd ;
  630. numvar = 1 ;
  631. numdat = '+' idim 3 ;
  632. numcof = idim ;
  633. lisdat = 'LECT' 1 PAS 1 ('+' idim 3) ;
  634. *
  635. A = ININLIN numop numvar numdat numcof numder ;
  636. A . 'VAR' . 1 . 'NOMDDL' = mmp ;
  637. A . 'VAR' . 1 . 'DISC' = discp ;
  638. 'SI' ('EXISTE' chpop) ;
  639. A . 'VAR' . 1 . 'VALEUR' = chpop ;
  640. 'FINSI' ;
  641. idat = 0 ;
  642. idat = '+' idat 1 ;
  643. A . 'DAT' . idat . 'NOMDDL' = mdumm ;
  644. A . 'DAT' . idat . 'DISC' = 'CSTE' ;
  645. A . 'DAT' . idat . 'VALEUR' = rho ;
  646. idat = '+' idat 1 ;
  647. A . 'DAT' . idat . 'NOMDDL' = mdumm ;
  648. A . 'DAT' . idat . 'DISC' = 'CSTE' ;
  649. A . 'DAT' . idat . 'VALEUR' = nu ;
  650. 'REPETER' iidim idim ;
  651. nomco = 'EXTRAIRE' vcomp &iidim ;
  652. idat = '+' idat 1 ;
  653. A . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
  654. A . 'DAT' . idat . 'DISC' = discv ;
  655. * A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
  656. A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
  657. 'FIN' iidim ;
  658. idat = '+' idat 1 ;
  659. A . 'DAT' . idat . 'NOMDDL' = mdumm ;
  660. A . 'DAT' . idat . 'DISC' = 'CSTE' ;
  661. A . 'DAT' . idat . 'VALEUR' = Pec ;
  662. *
  663. icof = 0 ;
  664. 'REPETER' iidim idim ;
  665. icof = '+' icof 1 ;
  666. A . 'COF' . icof . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth &iidim ;
  667. A . 'COF' . icof . 'LDAT' = lisdat ;
  668. 'FIN' iidim ;
  669. *
  670. 'REPETER' iidim idim ;
  671. A . 1 . 1 . &iidim = 'LECT' &iidim ;
  672. 'FIN' iidim ;
  673. *
  674. numvar = 1 ;
  675. 'SI' iaxi ;
  676. numdat = '+' idim 4 ;
  677. numcof = '+' idim 1 ;
  678. 'SINON' ;
  679. numdat = '+' idim 3 ;
  680. numcof = idim ;
  681. 'FINSI' ;
  682. *
  683. B = ININLIN numop numvar numdat numcof numder ;
  684. B . 'VAR' . 1 . 'NOMDDL' = mmd ;
  685. B . 'VAR' . 1 . 'DISC' = discd ;
  686. 'SI' ('EXISTE' chpod) ;
  687. B . 'VAR' . 1 . 'VALEUR' = chpod ;
  688. 'FINSI' ;
  689. idat = 0 ;
  690. idat = '+' idat 1 ;
  691. B . 'DAT' . idat . 'NOMDDL' = mdumm ;
  692. B . 'DAT' . idat . 'DISC' = 'CSTE' ;
  693. B . 'DAT' . idat . 'VALEUR' = rho ;
  694. idat = '+' idat 1 ;
  695. B . 'DAT' . idat . 'NOMDDL' = mdumm ;
  696. B . 'DAT' . idat . 'DISC' = 'CSTE' ;
  697. B . 'DAT' . idat . 'VALEUR' = nu ;
  698. 'REPETER' iidim idim ;
  699. nomco = 'EXTRAIRE' vcomp &iidim ;
  700. idat = '+' idat 1 ;
  701. B . 'DAT' . idat . 'NOMDDL' = 'MOTS' nomco ;
  702. B . 'DAT' . idat . 'DISC' = discv ;
  703. * A . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco 'NOID' vtot nomco ;
  704. B . 'DAT' . idat . 'VALEUR' = 'EXCO' nomco vtot nomco ;
  705. 'FIN' iidim ;
  706. idat = '+' idat 1 ;
  707. B . 'DAT' . idat . 'NOMDDL' = mdumm ;
  708. B . 'DAT' . idat . 'DISC' = 'CSTE' ;
  709. B . 'DAT' . idat . 'VALEUR' = Pec ;
  710. *
  711. icof = 0 ;
  712. 'REPETER' iidim idim ;
  713. icof = '+' icof 1 ;
  714. B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'MUSTAB' imeth &iidim ;
  715. B . 'COF' . icof . 'LDAT' = lisdat ;
  716. 'FIN' iidim ;
  717. *
  718. 'SI' iaxi ;
  719. idat = '+' idat 1 ;
  720. B . 'DAT' . idat . 'NOMDDL' = 'MOTS' 'SCAL' ;
  721. B . 'DAT' . idat . 'DISC' = gdisc ;
  722. B . 'DAT' . idat . 'VALEUR' = dprmt ;
  723. icof = '+' icof 1 ;
  724. B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  725. B . 'COF' . icof . 'LDAT' = 'LECT' idat ;
  726. 'FINSI' ;
  727. *
  728. 'SI' iaxi ;
  729. 'REPETER' iidim idim ;
  730. B . 1 . 1 . &iidim = 'LECT' &iidim icof ;
  731. 'FIN' iidim ;
  732. 'SINON' ;
  733. 'REPETER' iidim idim ;
  734. B . 1 . 1 . &iidim = 'LECT' &iidim ;
  735. 'FIN' iidim ;
  736. 'FINSI' ;
  737. *
  738. mgdecent = 'NLIN' gdisc _mt A B methgau ;
  739. *
  740. 'RESPRO' mgdecent ;
  741. 'FINPROC' ;
  742. *
  743. * End of procedure file GDECENT
  744. *
  745. *ENDPROCEDUR gdecent
  746. *BEGINPROCEDUR gbbt
  747. ************************************************************************
  748. * NOM : GBBT
  749. * DESCRIPTION : Copie de GDIV mais en précablé
  750. *
  751. *
  752. *
  753. * LANGAGE : GIBIANE-CAST3M
  754. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  755. * mél : gounand@semt2.smts.cea.fr
  756. **********************************************************************
  757. * VERSION : v1, 14/09/2004, version initiale
  758. * HISTORIQUE : v1, 14/09/2004, création
  759. * HISTORIQUE :
  760. * HISTORIQUE :
  761. ************************************************************************
  762. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  763. * en cas de modification de ce sous-programme afin de faciliter
  764. * la maintenance !
  765. ************************************************************************
  766. *
  767. *
  768. 'DEBPROC' GBBT ;
  769. 'ARGUMENT' _mt*'MAILLAGE' ;
  770. 'ARGUMENT' gdisc*'MOT ' ;
  771. 'ARGUMENT' discv*'MOT ' ;
  772. 'ARGUMENT' discp*'MOT ' ;
  773. 'ARGUMENT' coef/'FLOTTANT' ;
  774. 'SI' ('NON' ('EXISTE' coef)) ;
  775. 'ARGUMENT' coef2/'CHPOINT ' ;
  776. 'SI' ('NON' ('EXISTE' coef2)) ;
  777. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  778. 'SINON' ;
  779. coef = coef2 ;
  780. 'ARGUMENT' discc*'MOT ' ;
  781. 'FINSI' ;
  782. 'SINON' ;
  783. discc = 'CSTE' ;
  784. 'FINSI' ;
  785. 'ARGUMENT' methgau/'MOT ' ;
  786. 'SI' ('NON' ('EXISTE' methgau)) ;
  787. methgau = 'GAU7' ;
  788. 'FINSI' ;
  789. *
  790. vdim = 'VALEUR' 'DIME' ;
  791. vmod = 'VALEUR' 'MODE' ;
  792. idim = 0 ;
  793. lpp = 'MOTS' 'LX' ; ldp = 'MOTS' 'FLX' ;
  794. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  795. lpv = 'MOTS' 'UX' 'UY' ; ldv = 'MOTS' 'FX' 'FY' ;
  796. idim = 2 ;
  797. iaxi = FAUX ;
  798. 'FINSI' ;
  799. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  800. lpv = 'MOTS' 'UR' 'UZ' ; ldv = 'MOTS' 'FR' 'FZ' ;
  801. idim = 2 ;
  802. iaxi = VRAI ;
  803. 'FINSI' ;
  804. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  805. lpv = 'MOTS' 'UX' 'UY' 'UZ' ; ldv = 'MOTS' 'FX' 'FY' 'FZ' ;
  806. idim = 3 ;
  807. iaxi = FAUX ;
  808. 'FINSI' ;
  809. 'SI' ('EGA' idim 0) ;
  810. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  811. 'FINSI' ;
  812. 'SI' iaxi ;
  813. dp = ('*' PI 2.D0) ;
  814. rmt = 'COORDONNEE' 1 _mt ;
  815. 'FINSI' ;
  816. *
  817. numop = 2 ;
  818. numder = idim ;
  819. mmp = 'MOTS' nomp ;
  820. idim1 = '+' idim 1 ;
  821. numvar = idim1 ;
  822. 'SI' iaxi ;
  823. numdat = 3 ;
  824. numcof = 3 ;
  825. 'SINON' ;
  826. numdat = 1 ;
  827. numcof = 1 ;
  828. 'FINSI' ;
  829. *
  830. A = ININLIN numop numvar numdat numcof numder ;
  831. 'REPETER' iidim idim ;
  832. A . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' lpv &iidim) ;
  833. A . 'VAR' . &iidim . 'DISC' = discv ;
  834. 'FIN' iidim ;
  835. A . 'VAR' . idim1 . 'NOMDDL' = lpp ;
  836. A . 'VAR' . idim1 . 'DISC' = discp ;
  837. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  838. A . 'DAT' . 1 . 'DISC' = discc ;
  839. A . 'DAT' . 1 . 'VALEUR' = coef ;
  840. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  841. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  842. *
  843. 'SI' iaxi ;
  844. A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  845. A . 'DAT' . 2 . 'DISC' = 'CSTE' ;
  846. A . 'DAT' . 2 . 'VALEUR' = dp ;
  847. A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  848. A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  849. A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  850. A . 'DAT' . 3 . 'DISC' = gdisc ;
  851. A . 'DAT' . 3 . 'VALEUR' = rmt ;
  852. A . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
  853. A . 'COF' . 3 . 'LDAT' = 'LECT' 3 ;
  854. 'FINSI' ;
  855. *
  856. 'SI' iaxi ;
  857. 'REPETER' iidim idim ;
  858. A . 1 . &iidim . &iidim = 'LECT' 1 2 3 ;
  859. 'FIN' iidim ;
  860. A . 1 . 1 . 0 = 'LECT' 1 2 ;
  861. 'SINON' ;
  862. 'REPETER' iidim idim ;
  863. A . 1 . &iidim . &iidim = 'LECT' 1 ;
  864. 'FIN' iidim ;
  865. 'FINSI' ;
  866. A . 2 . idim1 . 0 = 'LECT' ;
  867. *
  868. 'SI' iaxi ;
  869. numdat = 3 ;
  870. numcof = 3 ;
  871. 'SINON' ;
  872. numdat = 1 ;
  873. numcof = 1 ;
  874. 'FINSI' ;
  875. B = ININLIN numop numvar numdat numcof numder ;
  876. 'REPETER' iidim idim ;
  877. B . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
  878. B . 'VAR' . &iidim . 'DISC' = discv ;
  879. 'FIN' iidim ;
  880. B . 'VAR' . idim1 . 'NOMDDL' = ldp ;
  881. B . 'VAR' . idim1 . 'DISC' = discp ;
  882. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  883. B . 'DAT' . 1 . 'DISC' = discc ;
  884. B . 'DAT' . 1 . 'VALEUR' = coef ;
  885. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  886. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  887. *
  888. 'SI' iaxi ;
  889. B . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  890. B . 'DAT' . 2 . 'DISC' = 'CSTE' ;
  891. B . 'DAT' . 2 . 'VALEUR' = dp ;
  892. B . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  893. B . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  894. B . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  895. B . 'DAT' . 3 . 'DISC' = gdisc ;
  896. B . 'DAT' . 3 . 'VALEUR' = rmt ;
  897. B . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
  898. B . 'COF' . 3 . 'LDAT' = 'LECT' 3 ;
  899. 'FINSI' ;
  900. *
  901. 'SI' iaxi ;
  902. 'REPETER' iidim idim ;
  903. B . 2 . &iidim . &iidim = 'LECT' 1 2 3 ;
  904. 'FIN' iidim ;
  905. B . 2 . 1 . 0 = 'LECT' 1 2 ;
  906. 'SINON' ;
  907. 'REPETER' iidim idim ;
  908. B . 2 . &iidim . &iidim = 'LECT' 1 ;
  909. 'FIN' iidim ;
  910. 'FINSI' ;
  911. B . 1 . idim1 . 0 = 'LECT' ;
  912. *
  913. mgbbt = 'NLIN' gdisc _mt A B methgau ;
  914. *
  915. 'RESPRO' mgbbt ;
  916. 'FINPROC' ;
  917. *
  918. * End of procedure file GBBT
  919. *
  920. *ENDPROCEDUR gbbt
  921. *BEGINPROCEDUR ggradt
  922. ************************************************************************
  923. * NOM : GGRADT
  924. * DESCRIPTION : Gradient d'une quantité
  925. *
  926. *
  927. *
  928. * LANGAGE : GIBIANE-CAST3M
  929. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  930. * mél : gounand@semt2.smts.cea.fr
  931. **********************************************************************
  932. * VERSION : v1, 08/03/2006, version initiale
  933. * HISTORIQUE : v1, 08/03/2006, création
  934. * HISTORIQUE :
  935. * HISTORIQUE :
  936. ************************************************************************
  937. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  938. * en cas de modification de ce sous-programme afin de faciliter
  939. * la maintenance !
  940. ************************************************************************
  941. *
  942. *
  943. 'DEBPROC' GGRADT ;
  944. 'ARGUMENT' _mt*'MAILLAGE' ;
  945. 'ARGUMENT' gdisc*'MOT ' ;
  946. 'ARGUMENT' nomp*'MOT ' ;
  947. 'ARGUMENT' discp*'MOT ' ;
  948. 'ARGUMENT' nomv*'LISTMOTS' ;
  949. 'ARGUMENT' discv*'MOT ' ;
  950. 'ARGUMENT' coef/'FLOTTANT' ;
  951. 'SI' ('NON' ('EXISTE' coef)) ;
  952. 'ARGUMENT' coef2/'CHPOINT ' ;
  953. 'SI' ('NON' ('EXISTE' coef2)) ;
  954. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  955. 'SINON' ;
  956. coef = coef2 ;
  957. 'ARGUMENT' discc*'MOT ' ;
  958. 'FINSI' ;
  959. 'SINON' ;
  960. discc = 'CSTE' ;
  961. 'FINSI' ;
  962. 'ARGUMENT' methgau/'MOT ' ;
  963. 'SI' ('NON' ('EXISTE' methgau)) ;
  964. methgau = 'GAU7' ;
  965. 'FINSI' ;
  966. 'ARGUMENT' chpop/'CHPOINT' ;
  967. 'ARGUMENT' chpod/'CHPOINT' ;
  968. *
  969. vdim = 'VALEUR' 'DIME' ;
  970. vmod = 'VALEUR' 'MODE' ;
  971. idim = 0 ;
  972. lpp = 'MOTS' nomp ;
  973. ldv = nomv ;
  974. 'SI' ('ET' ('EGA' vdim 1) ('EGA' vmod 'UNIDPLANDYDZ')) ;
  975. idim = 1 ;
  976. iaxi = FAUX ;
  977. 'FINSI' ;
  978. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  979. idim = 2 ;
  980. iaxi = FAUX ;
  981. 'FINSI' ;
  982. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  983. idim = 2 ;
  984. iaxi = VRAI ;
  985. 'FINSI' ;
  986. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  987. idim = 3 ;
  988. iaxi = FAUX ;
  989. 'FINSI' ;
  990. 'SI' ('EGA' idim 0) ;
  991. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  992. 'FINSI' ;
  993. 'SI' iaxi ;
  994. dp = ('*' PI 2.D0) ;
  995. rmt = 'COORDONNEE' 1 _mt ;
  996. 'FINSI' ;
  997. *
  998. numop = idim ;
  999. numder = idim ;
  1000. numvar = 1 ;
  1001. 'SI' iaxi ;
  1002. numdat = 3 ;
  1003. numcof = 3 ;
  1004. 'SINON' ;
  1005. numdat = 1 ;
  1006. numcof = 1 ;
  1007. 'FINSI' ;
  1008. *
  1009. A = ININLIN numop numvar numdat numcof numder ;
  1010. A . 'VAR' . 1 . 'NOMDDL' = lpp ;
  1011. A . 'VAR' . 1 . 'DISC' = discp ;
  1012. 'SI' ('EXISTE' chpop) ;
  1013. A . 'VAR' . 1 . 'VALEUR' = chpop ;
  1014. 'FINSI' ;
  1015. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  1016. A . 'DAT' . 1 . 'DISC' = discc ;
  1017. A . 'DAT' . 1 . 'VALEUR' = coef ;
  1018. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  1019. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  1020. 'SI' iaxi ;
  1021. A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  1022. A . 'DAT' . 2 . 'DISC' = 'CSTE' ;
  1023. A . 'DAT' . 2 . 'VALEUR' = dp ;
  1024. A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  1025. A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  1026. A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  1027. A . 'DAT' . 3 . 'DISC' = gdisc ;
  1028. A . 'DAT' . 3 . 'VALEUR' = rmt ;
  1029. A . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
  1030. A . 'COF' . 3 . 'LDAT' = 'LECT' 3 ;
  1031. 'FINSI' ;
  1032. *
  1033. 'SI' iaxi ;
  1034. 'REPETER' iidim idim ;
  1035. A . &iidim . 1 . 0 = 'LECT' 1 2 3 ;
  1036. 'FIN' iidim ;
  1037. 'SINON' ;
  1038. 'REPETER' iidim idim ;
  1039. A . &iidim . 1 . 0 = 'LECT' 1 ;
  1040. 'FIN' iidim ;
  1041. 'FINSI' ;
  1042. *
  1043. numvar = idim ;
  1044. numdat = 0 ;
  1045. numcof = 0 ;
  1046. B = ININLIN numop numvar numdat numcof numder ;
  1047. 'REPETER' iidim idim ;
  1048. msinc = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
  1049. B . 'VAR' . &iidim . 'NOMDDL' = msinc ;
  1050. B . 'VAR' . &iidim . 'DISC' = discv ;
  1051. 'SI' ('EXISTE' chpod) ;
  1052. B . 'VAR' . &iidim . 'VALEUR' = 'EXCO' msinc chpod msinc ;
  1053. 'FINSI' ;
  1054. 'FIN' iidim ;
  1055. *
  1056. 'REPETER' iidim idim ;
  1057. B . &iidim . &iidim . &iidim = 'LECT' ;
  1058. 'FIN' iidim ;
  1059. *
  1060. mggradt = 'NLIN' gdisc _mt A B methgau ;
  1061. *
  1062. 'RESPRO' mggradt ;
  1063. 'FINPROC' ;
  1064. *
  1065. * End of procedure file GGRADT
  1066. *
  1067. *ENDPROCEDUR ggradt
  1068. *BEGINPROCEDUR dessevol
  1069. ************************************************************************
  1070. * NOM : DESSEVOL
  1071. * DESCRIPTION : Dessine des évolutions : choisit automatiquement
  1072. * les options, marqueurs, couleurs...
  1073. *
  1074. *
  1075. * LANGAGE : GIBIANE-CAST3M
  1076. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1077. * mél : gounand@semt2.smts.cea.fr
  1078. **********************************************************************
  1079. * VERSION : v1, 16/11/2004, version initiale
  1080. * HISTORIQUE : v1, 16/11/2004, création
  1081. * HISTORIQUE :
  1082. * HISTORIQUE :
  1083. ************************************************************************
  1084. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1085. * en cas de modification de ce sous-programme afin de faciliter
  1086. * la maintenance !
  1087. ************************************************************************
  1088. *
  1089. *
  1090. 'DEBPROC' DESSEVOL ;
  1091. 'ARGUMENT' evtot*'EVOLUTION' ;
  1092. 'ARGUMENT' tabt*'TABLE' ;
  1093. 'ARGUMENT' tit*'MOT' ;
  1094. 'ARGUMENT' tix*'MOT' ;
  1095. 'ARGUMENT' tiy*'MOT' ;
  1096. 'ARGUMENT' lnclk/'LOGIQUE' ;
  1097. 'ARGUMENT' nb/'ENTIER' ;
  1098. *
  1099. 'SI' ('NON' ('EXISTE' lnclk)) ;
  1100. lnclk = FAUX ;
  1101. 'FINSI' ;
  1102. *
  1103. 'SI' ('NON' ('EXISTE' nb)) ;
  1104. nb = 3 ;
  1105. 'FINSI' ;
  1106. *
  1107. nt = 'DIME' tabt ;
  1108. nev = 'DIME' evtot ;
  1109. *
  1110. * Attention, dans evtot, il y a une évolution avec des noms de points ?
  1111. *
  1112. *'SI' ('NEG' nev nt) ;
  1113. * cherr = 'CHAINE' 'Evolution and title table : not same dim.' ;
  1114. * 'ERREUR' cherr ;
  1115. *'FINSI' ;
  1116. *
  1117. tev = 'TABLE' ;
  1118. tev . 'TITRE' = tabt ;
  1119. *
  1120. toto = 'TABLE' ;
  1121. *
  1122. lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
  1123. lmarq = 'MOTS' 'TRIB' 'TRIA' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI' ;
  1124. ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
  1125. *
  1126. 'SI' ('EGA' nb 0) ;
  1127. ev2 = evtot ;
  1128. 'SINON' ;
  1129. icou = 0 ;
  1130. 'REPETER' iev nev ;
  1131. ii = &iev ;
  1132. evi = 'EXTRAIRE' evtot 'COUR' ii ;
  1133. 'SI' ('NEG' ('TYPE' ('EXTRAIRE' evi 'ORDO')) 'LISTMOTS') ;
  1134. icou = '+' icou 1 ;
  1135. 'FINSI' ;
  1136. * ii2 = '/' ('+' ii 1) 2 ;
  1137. * ci = EXMOMOD lcoul ii2 ;
  1138. * ci = EXMOMOD lcoul ii ;
  1139. ci = EXMOMOD lcoul icou ;
  1140. APPEND toto 'EVOLUTION' ('COULEUR' evi ci) ;
  1141. 'FIN' iev ;
  1142. ev2 = toto . 'EVOLUTION' ;
  1143. 'FINSI' ;
  1144. *
  1145. 'REPETER' iev nev ;
  1146. ii = &iev ;
  1147. mi = EXMOMOD lmarq ii ;
  1148. ti = EXMOMOD ltirr ii ;
  1149. 'SI' ('>' nb 2) ;
  1150. tev . ii = 'CHAINE' 'MARQ ' mi ' ' ti ;
  1151. 'FINSI' ;
  1152. 'SI' ('>' nb 1) ;
  1153. tev . ii = 'CHAINE' 'MARQ ' mi ;
  1154. 'FINSI' ;
  1155. 'FIN' iev ;
  1156. *
  1157. 'SI' lnclk ;
  1158. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1159. 'NCLK' ;
  1160. 'SINON' ;
  1161. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev ;
  1162. 'FINSI' ;
  1163. *
  1164. * End of procedure file DESSEVOL
  1165. *
  1166. 'FINPROC' ;
  1167. *ENDPROCEDUR dessevol
  1168. *BEGINPROCEDUR exmomod
  1169. ************************************************************************
  1170. * NOM : EXMOMOD
  1171. * DESCRIPTION : Extraction d'un mot d'un listmots
  1172. *
  1173. *
  1174. *
  1175. * LANGAGE : GIBIANE-CAST3M
  1176. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1177. * mél : gounand@semt2.smts.cea.fr
  1178. **********************************************************************
  1179. * VERSION : v1, 23/06/2003, version initiale
  1180. * HISTORIQUE : v1, 23/06/2003, création
  1181. * HISTORIQUE :
  1182. * HISTORIQUE :
  1183. ************************************************************************
  1184. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1185. * en cas de modification de ce sous-programme afin de faciliter
  1186. * la maintenance !
  1187. ************************************************************************
  1188. *
  1189. *
  1190. 'DEBPROC' EXMOMOD ;
  1191. 'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
  1192. j = 'DIME' lm ;
  1193. k = '+' (MODULO ('-' i 1) j) 1 ;
  1194. lemot = 'EXTRAIRE' lm k ;
  1195. * Usage de l'opérateur text pour éviter que lemot
  1196. * ne soit interprété comme un opérateur
  1197. 'RESPRO' 'TEXTE' lemot ;
  1198. *
  1199. * End of procedure file EXMOMOD
  1200. *
  1201. 'FINPROC' ;
  1202. *ENDPROCEDUR exmomod
  1203. *BEGINPROCEDUR modulo
  1204. ************************************************************************
  1205. * NOM : MODULO
  1206. * DESCRIPTION : Calcule un entier modulo un autre...
  1207. *
  1208. *
  1209. *
  1210. * LANGAGE : GIBIANE-CAST3M
  1211. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1212. * mél : gounand@semt2.smts.cea.fr
  1213. **********************************************************************
  1214. * VERSION : v1, 15/10/2002, version initiale
  1215. * HISTORIQUE : v1, 15/10/2002, création
  1216. * HISTORIQUE :
  1217. * HISTORIQUE :
  1218. ************************************************************************
  1219. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1220. * en cas de modification de ce sous-programme afin de faciliter
  1221. * la maintenance !
  1222. ************************************************************************
  1223. *
  1224. *
  1225. 'DEBPROC' MODULO ;
  1226. 'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
  1227. 'SI' ('EGA' j 0) ;
  1228. 'MESSAGE' 'Impossible de faire modulo 0' ;
  1229. 'ERREUR' 5 ;
  1230. 'SINON' ;
  1231. k=i '/' j ;
  1232. mod=i '-' ( k '*'j ) ;
  1233. 'RESPRO' mod ;
  1234. 'FINSI' ;
  1235. *
  1236. * End of procedure file MODULO
  1237. *
  1238. 'FINPROC' ;
  1239. *ENDPROCEDUR modulo
  1240. *BEGINPROCEDUR append
  1241. ************************************************************************
  1242. * NOM : APPEND
  1243. * DESCRIPTION : Rajoute :
  1244. * - un entier à un listentier
  1245. * - un réel à un listreel
  1246. * - un objet (liste, evolution, matrice ou chpoint)
  1247. * à un indice de table ('MOT' ou 'ENTIER')
  1248. * * si l'indice n'existe pas
  1249. * * 'ET' si l'indice existe
  1250. *
  1251. *
  1252. *
  1253. * LANGAGE : GIBIANE-CAST3M
  1254. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1255. * mél : gounand@semt2.smts.cea.fr
  1256. **********************************************************************
  1257. * VERSION : v1, 10/09/2004, version initiale
  1258. * HISTORIQUE : v1, 10/09/2004, création
  1259. * HISTORIQUE :
  1260. * HISTORIQUE :
  1261. ************************************************************************
  1262. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1263. * en cas de modification de ce sous-programme afin de faciliter
  1264. * la maintenance !
  1265. ************************************************************************
  1266. *
  1267. *
  1268. 'DEBPROC' APPEND ;
  1269. 'ARGUMENT' tab/'TABLE' ;
  1270. 'SI' ('EXISTE' tab) ;
  1271. 'ARGUMENT' itab/'MOT' ;
  1272. 'SI' ('NON' ('EXISTE' itab)) ;
  1273. 'ARGUMENT' itab*'ENTIER' ;
  1274. 'FINSI' ;
  1275. lobj = FAUX ;
  1276. 'SI' ('NON' lobj) ;
  1277. 'ARGUMENT' lr/'LISTREEL' ;
  1278. 'SI' ('EXISTE' lr) ;
  1279. obj = lr ; lobj = VRAI ;
  1280. 'FINSI' ;
  1281. 'FINSI' ;
  1282. 'SI' ('NON' lobj) ;
  1283. 'ARGUMENT' le/'LISTENTI' ;
  1284. 'SI' ('EXISTE' le) ;
  1285. obj = le ; lobj = VRAI ;
  1286. 'FINSI' ;
  1287. 'FINSI' ;
  1288. 'SI' ('NON' lobj) ;
  1289. 'ARGUMENT' lev/'EVOLUTION' ;
  1290. 'SI' ('EXISTE' lev) ;
  1291. obj = lev ; lobj = VRAI ;
  1292. 'FINSI' ;
  1293. 'FINSI' ;
  1294. 'SI' ('NON' lobj) ;
  1295. 'ARGUMENT' lm/'MAILLAGE' ;
  1296. 'SI' ('EXISTE' lm) ;
  1297. obj = lm ; lobj = VRAI ;
  1298. 'FINSI' ;
  1299. 'FINSI' ;
  1300. 'SI' ('NON' lobj) ;
  1301. 'ARGUMENT' chpo/'CHPOINT' ;
  1302. 'SI' ('EXISTE' chpo) ;
  1303. obj = chpo ; lobj = VRAI ;
  1304. 'FINSI' ;
  1305. 'FINSI' ;
  1306. 'SI' ('NON' lobj) ;
  1307. 'ARGUMENT' rig/'RIGIDITE' ;
  1308. 'SI' ('EXISTE' rig) ;
  1309. obj = rig ; lobj = VRAI ;
  1310. 'FINSI' ;
  1311. 'FINSI' ;
  1312. 'SI' ('NON' lobj) ;
  1313. 'ARGUMENT' matk/'MATRIK' ;
  1314. 'SI' ('EXISTE' matk) ;
  1315. obj = matk ; lobj = VRAI ;
  1316. 'FINSI' ;
  1317. 'FINSI' ;
  1318. 'SI' ('NON' lobj) ;
  1319. cherr = 'CHAINE'
  1320. 'Il faut fournir un objet liste, evolution, matrice ou chpoint.'
  1321. ;
  1322. 'ERREUR' cherr ;
  1323. 'FINSI' ;
  1324. 'SI' ('EXISTE' tab itab) ;
  1325. 'SI' ('EGA' ('TYPE' obj) 'CHPOINT') ;
  1326. tab . itab = '+' (tab . itab) obj ;
  1327. 'SINON' ;
  1328. tab . itab = 'ET' (tab . itab) obj ;
  1329. 'FINSI' ;
  1330. 'SINON' ;
  1331. tab . itab = obj ;
  1332. 'FINSI' ;
  1333. 'RESPRO' tab ;
  1334. 'FINSI' ;
  1335. 'ARGUMENT' lenti/'LISTENTI' ;
  1336. 'ARGUMENT' lreel/'LISTREEL' ;
  1337. 'SI' ('EXISTE' lenti) ;
  1338. 'ARGUMENT' enti*'ENTIER' ;
  1339. lenti = 'ET' lenti ('LECT' enti) ;
  1340. 'RESPRO' lenti ;
  1341. 'FINSI' ;
  1342. 'SI' ('EXISTE' lreel) ;
  1343. 'ARGUMENT' reel*'FLOTTANT' ;
  1344. lreel = 'ET' lreel ('PROG' reel) ;
  1345. 'RESPRO' lreel ;
  1346. 'FINSI' ;
  1347. *
  1348. * End of procedure file APPEND
  1349. *
  1350. 'FINPROC' ;
  1351. *ENDPROCEDUR append
  1352. *BEGINPROCEDUR histo
  1353. ************************************************************************
  1354. * NOM : HISTO
  1355. * DESCRIPTION : Construit une evolution représentant un histogramme
  1356. *
  1357. *
  1358. *
  1359. * LANGAGE : GIBIANE-CAST3M
  1360. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1361. * mél : gounand@semt2.smts.cea.fr
  1362. **********************************************************************
  1363. * VERSION : v1, 13/09/2004, version initiale
  1364. * HISTORIQUE : v1, 13/09/2004, création
  1365. * HISTORIQUE :
  1366. * HISTORIQUE :
  1367. ************************************************************************
  1368. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1369. * en cas de modification de ce sous-programme afin de faciliter
  1370. * la maintenance !
  1371. ************************************************************************
  1372. *
  1373. *
  1374. 'DEBPROC' HISTO ;
  1375. 'ARGUMENT' lx*'LISTREEL' ;
  1376. 'ARGUMENT' ly*'LISTREEL' ;
  1377. *
  1378. dlx = 'DIME' lx ;
  1379. dly = 'DIME' ly ;
  1380. *
  1381. 'SI' ('NEG' dly ('-' dlx 1)) ;
  1382. cherr = 'CHAINE' 'Dimension des arguments incorrecte' ;
  1383. 'MESSAGE' ('CHAINE' 'Dime lx=' dlx ' Dime ly=' dly) ;
  1384. 'ERREUR' cherr ;
  1385. 'FINSI' ;
  1386. *
  1387. lxn = 'PROG' ;
  1388. lyn = 'PROG' ;
  1389. *
  1390. 'REPETER' ii dly ;
  1391. vx = 'EXTRAIRE' lx &ii ;
  1392. vxp = 'EXTRAIRE' lx ('+' &ii 1) ;
  1393. vy = 'EXTRAIRE' ly &ii ;
  1394. pvx = 'PROG' vx ; pvxp = 'PROG' vxp ;
  1395. pvy = 'PROG' vy ; pv0 = 'PROG' 0.D0 ;
  1396. lxn = lxn 'ET' pvx 'ET' pvx 'ET' pvxp 'ET' pvxp ;
  1397. lyn = lyn 'ET' pv0 'ET' pvy 'ET' pvy 'ET' pv0 ;
  1398. 'FIN' ii ;
  1399. evhist = 'EVOL' 'MANU' lxn lyn ;
  1400. 'RESPRO' evhist ;
  1401. *
  1402. * End of procedure file HISTO
  1403. *
  1404. 'FINPROC' ;
  1405. *ENDPROCEDUR histo
  1406. *
  1407. ************************************************************************
  1408. * NOM : GHIA
  1409. * DESCRIPTION : Une partie des résultats de référence (profils U_x(y)
  1410. * et U_y(x) obtenus par Ghia et al. dans la référence :
  1411. *@Article{ghia,
  1412. * author = {U. Ghia and K.N. Ghia and C.T. Shin},
  1413. * title = {High-Re Solutions for Incompressible Flow Using the
  1414. * Navier-Stokes Equations and a Multigrid Method},
  1415. * journal = {JCP},
  1416. * year = {1982},
  1417. * volume = {48},
  1418. * pages = {387-411},
  1419. * endroit = {Classeur Benchmarks (I)}
  1420. *}
  1421. *
  1422. * LANGAGE : GIBIANE-CAST3M
  1423. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1424. * mél : gounand@semt2.smts.cea.fr
  1425. **********************************************************************
  1426. * VERSION : v1, 14/06/2007, version initiale
  1427. * HISTORIQUE : v1, 14/06/2007, création
  1428. * HISTORIQUE :
  1429. * HISTORIQUE :
  1430. ************************************************************************
  1431. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1432. * en cas de modification de ce sous-programme afin de faciliter
  1433. * la maintenance !
  1434. ************************************************************************
  1435. *
  1436. *
  1437. 'DEBPROC' GHIA ;
  1438. 'ARGUMENT' Re*'FLOTTANT' ;
  1439. lok = FAUX ;
  1440. iRe = 'ENTIER' ('+' Re 0.5D0) ;
  1441. ly = 'PROG' 0.0000 0.0547 0.0625 0.0703 0.1016 0.1719 0.2813 0.4531
  1442. 0.5000 0.6172 0.7344 0.8516 0.9531 0.9609 0.9688 0.9766
  1443. 1.0000 ;
  1444. lx = 'PROG' 0.0000 0.0625 0.0703 0.0781 0.0938 0.1563 0.2266 0.2344
  1445. 0.5000 0.8047 0.8594 0.9063 0.9453 0.9531 0.9609 0.9688
  1446. 1.0000 ;
  1447. 'SI' ('EGA' iRe 100) ;
  1448. lok = VRAI ;
  1449. lu = 'PROG' 0.00000 -0.03717 -0.04192 -0.04775 -0.06434 -0.10150
  1450. -0.15662 -0.21090
  1451. -0.20581 -0.13641 0.00332 0.23151 0.68717 0.73722 0.78871
  1452. 0.84123 1.00000 ;
  1453. lv = 'PROG' 0.00000 0.09233 0.10091 0.10890 0.12317 0.16077 0.17507
  1454. 0.17527
  1455. 0.05454 -0.24533 -0.22445 -0.16914 -0.10313 -0.08864
  1456. -0.07391 -0.05906 0.00000 ;
  1457. 'FINSI' ;
  1458. 'SI' ('EGA' iRe 400) ;
  1459. lok = VRAI ;
  1460. lu = 'PROG' 0.00000 -0.08186 -0.09266 -0.10338 -0.14612 -0.24299
  1461. -0.32726 -0.17119
  1462. -0.11477 0.02135 0.16256 0.29093 0.55892 0.61756 0.68439
  1463. 0.75837 1.00000 ;
  1464. lv = 'PROG' 0.00000 0.18360 0.19713 0.20920 0.22965 0.28124 0.30203
  1465. 0.30174
  1466. 0.05186 -0.38598 -0.44993 -0.3827 -0.22847 -0.19254
  1467. -0.15663 -0.12146 0.00000 ;
  1468. 'FINSI' ;
  1469. 'SI' ('EGA' iRe 1000) ;
  1470. lok = VRAI ;
  1471. lu = 'PROG' 0.00000 -0.18109 -0.20196 -0.22220 -0.29730 -0.38289
  1472. -0.27805 -0.10648
  1473. -0.06080 0.05702 0.18719 0.33304 0.46604 0.51117 0.57492
  1474. 0.65928 1.00000 ;
  1475. lv = 'PROG' 0.00000 0.27485 0.29012 0.30353 0.32627 0.37095 0.33075
  1476. 0.32235
  1477. 0.02526 -0.31966 -0.42665 -0.51550 -0.39188 -0.33714
  1478. -0.27669 -0.21388 0.00000 ;
  1479. 'FINSI' ;
  1480. 'SI' ('EGA' iRe 3200) ;
  1481. lok = VRAI ;
  1482. lu = 'PROG' 0.00000 -0.32407 -0.35344 -0.37827 -0.41933 -0.34323
  1483. -0.24427 -0.086636
  1484. -0.04272 0.07156 0.19791 0.34682 0.46101 0.46547 0.48296
  1485. 0.53236 1.00000 ;
  1486. lv = 'PROG' 0.00000 0.39560 0.40917 0.41906 0.42768 0.37119 0.29030
  1487. 0.28188
  1488. 0.00999 -0.31184 -0.37401 -0.44307 -0.54053 -0.52357
  1489. -0.47425 -0.39017 0.00000 ;
  1490. 'FINSI' ;
  1491. 'SI' ('EGA' iRe 5000) ;
  1492. lok = VRAI ;
  1493. lu = 'PROG' 0.00000 -0.41165 -0.42901 -0.43643 -0.40435 -0.33050
  1494. -0.22855 -0.07404
  1495. -0.03039 0.08183 0.20087 0.33556 0.46036 0.45992 0.46120
  1496. 0.48223 1.00000 ;
  1497. lv = 'PROG' 0.00000 0.42447 0.43329 0.43648 0.42951 0.35368 0.28066
  1498. 0.27280
  1499. 0.00945 -0.30018 -0.36214 -0.41442 -0.52876 -0.55408
  1500. -0.55069 -0.49774 0.00000 ;
  1501. 'FINSI' ;
  1502. 'SI' ('EGA' iRe 7500) ;
  1503. lok = VRAI ;
  1504. lu = 'PROG' 0.00000 -0.43154 -0.43590 -0.43025 -0.38324 -0.32393
  1505. -0.23176 -0.07503
  1506. -0.03800 0.08342 0.20591 0.34228 0.47167 0.47323 0.47048
  1507. 0.47244 1.00000 ;
  1508. lv = 'PROG' 0.00000 0.43979 0.44030 0.43564 0.41824 0.35060 0.28117
  1509. 0.27348
  1510. 0.00824 -0.30448 -0.36213 -0.41050 -0.48590 -0.52347
  1511. -0.55216 -0.53858 0.00000 ;
  1512. 'FINSI' ;
  1513. 'SI' ('EGA' iRe 10000) ;
  1514. lok = VRAI ;
  1515. lu = 'PROG' 0.00000 -0.42735 -0.42537 -0.41657 -0.38000 -0.32709
  1516. -0.23186 -0.07540
  1517. -0.03111 0.08344 0.20673 0.34635 0.47804 0.48070 0.47783
  1518. 0.47221 1.00000 ;
  1519. lv = 'PROG' 0.00000 0.43983 0.43733 0.43124 0.41487 0.35070 0.28003
  1520. 0.27224
  1521. 0.00831 -0.30719 -0.36737 -0.41496 -0.45863 -0.49099
  1522. -0.52987 -0.54302 0.00000 ;
  1523. 'FINSI' ;
  1524. 'SI' ('NON' lok) ;
  1525. cherr = 'CHAINE' 'Pas de sol tabulee pour Re = ' Re ;
  1526. 'ERREUR' cherr ;
  1527. 'FINSI' ;
  1528. 'RESPRO' ly lu lx lv ;
  1529. 'FINPROC' ;
  1530. *
  1531. * Calcul la condition à la limite sur le bord haut
  1532. *
  1533. * 1 ^
  1534. * | ________
  1535. * | / \
  1536. * | /pente= \pente = - pmax
  1537. * |/ pmax \
  1538. * 0 +------------------>
  1539. * 0 1
  1540. *
  1541. 'DEBPROC' CALCLIM ;
  1542. *
  1543. * ! Attention, gros problème de fuite avec la condition à la limite
  1544. * ! suivante
  1545. *
  1546. *ccli = '+' ('MANUEL' 'CHPO' hau 1 'UX' 1.D0)
  1547. * ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
  1548. *
  1549. * Celle-ci est bien smooth
  1550. *
  1551. *
  1552. * 'LISTE' ccli ;
  1553. *xhau = 'COORDONNEE' 1 hau ;
  1554. *phau = xhau '*' ('-' xhau 1) '*' -4.D0 ;
  1555. *ccli = '+' ('NOMC' 'UX' phau)
  1556. * ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
  1557. *
  1558. * Celle-ci est quasi singulière mais correspond au benchmark de ghia !
  1559. *
  1560. pmax = 100. ; ipmax = '/' 1. pmax ;
  1561. *
  1562. xhau = 'COORDONNEE' 1 hau ;
  1563. xm1 = '-' xhau ipmax ; axm1 = 'ABS' xm1 ;
  1564. f1 = '*' ('-' xm1 axm1) ('/' pmax 2.) ;
  1565. xm2 = '-' xhau ('-' 1. ipmax) ; axm2 = 'ABS' xm2 ;
  1566. f2 = '*' ('+' xm2 axm2) ('/' pmax -2.) ;
  1567. ft = '+' ('+' f1 f2) 1. ;
  1568. ccli = '+' ('NOMC' 'UX' ft)
  1569. ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
  1570. 'RESPRO' ccli ;
  1571. 'FINPROC' ;
  1572. *
  1573. * Calcul de l'incrément vitesse-pression NS incompressible
  1574. *
  1575. 'DEBPROC' SOLAPP ;
  1576. 'ARGUMENT' _mt*'MAILLAGE' ;
  1577. 'ARGUMENT' inco*'CHPOINT' ;
  1578. 'ARGUMENT' ccli*'CHPOINT' ;
  1579. *
  1580. mlapx = GLAPN _mt discg 'UX' discv 'FX' discv iRe ;
  1581. mlapx = '*' mlapx -1.D0 ;
  1582. mlapy = 'CHANGER' 'INCO' mlapx ('MOTS' 'UX') ('MOTS' 'UY')
  1583. ('MOTS' 'FX') ('MOTS' 'FY') ;
  1584. mcnvx = GUGRAD _mt discg 'UX' discv 'FX' discv inco mxpri discv 1. ;
  1585. mcnvy = 'CHANGER' 'INCO' mcnvx ('MOTS' 'UX') ('MOTS' 'UY')
  1586. ('MOTS' 'FX') ('MOTS' 'FY') ;
  1587. 'SI' lsupg ;
  1588. mdecx = GDECENT 2 _mt discg 'UX' discv 'FX' discv inco mxpri discv
  1589. csupg iRe 2.D0 ;
  1590. mdecy = 'CHANGER' 'INCO' mdecx ('MOTS' 'UX') ('MOTS' 'UY')
  1591. ('MOTS' 'FX') ('MOTS' 'FY') ;
  1592. 'FINSI' ;
  1593. mbbt = GBBT _mt discg discv discp -1. ;
  1594. * Régularisation de pression
  1595. mp = GMASS _mt discg 'LX' discp 'FLX' discp ('*' ap -1.D0) ;
  1596. * Blocage
  1597. mblo = 'BLOQUE' 'DEPL' bor ;
  1598. fblo = 'DEPIMPOSE' mblo ccli ;
  1599. mphy = mlapx 'ET' mlapy 'ET' mcnvx 'ET' mcnvy 'ET' mbbt 'ET' mblo ;
  1600. 'SI' lsupg ;
  1601. mphy = mphy 'ET' mdecx 'ET' mdecy ;
  1602. 'FINSI' ;
  1603. mtot = mphy 'ET' mp ;
  1604. *
  1605. ftot = '-' fblo ('*' mphy inc) ;
  1606. *
  1607. incr = 'KRES' mtot ftot ;
  1608. 'RESPRO' incr ;
  1609. 'FINPROC' ;
  1610. *
  1611. * Calcul de la métrique : on utilise la valeur iRe * grad v : gradtv
  1612. * (dissipation thermique = production locale d'entropie) pour réaliser
  1613. * l'adaptation
  1614. *
  1615. 'DEBPROC' TGDENT ;
  1616. 'ARGUMENT' _mt*'MAILLAGE' ;
  1617. 'ARGUMENT' vit*'CHPOINT' ;
  1618. 'ARGUMENT' beta*'FLOTTANT' ;
  1619. * Volume des éléments
  1620. vmtl = GMASS _mt discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
  1621. vmtml = GMASS _mtmoy discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
  1622. vmtm = 'MAXIMUM' ('RESULT' vmtml) ;
  1623. discc = 'CSTE' ;
  1624. *
  1625. * Calcul de la dissipation thermique
  1626. *
  1627. fdtxi = GLAPN _mt discg 'UX' discv 'UX' discv iRe vit vit ;
  1628. fdtyi = GLAPN _mt discg 'UY' discv 'UY' discv iRe vit vit ;
  1629. fdtxi = '*' fdtxi -1. ;
  1630. fdtyi = '*' fdtyi -1. ;
  1631. fdtx = '/' fdtxi vmtl ;
  1632. fdty = '/' fdtyi vmtl ;
  1633. fdt = '+' fdtx fdty ;
  1634. 'SI' lsupgm ;
  1635. fdecxi = GDECENT 2 _mt discg 'UX' discv 'UX' discv vit mxpri discv
  1636. csupg iRe 2.D0 vit vit ;
  1637. fdecyi = GDECENT 2 _mt discg 'UY' discv 'UY' discv vit mxpri discv
  1638. csupg iRe 2.D0 vit vit ;
  1639. fdecx = '/' fdecxi vmtl ;
  1640. fdecy = '/' fdecyi vmtl ;
  1641. fdec = '+' fdecx fdecy ;
  1642. 'FINSI' ;
  1643. 'SI' (graph 'ET' debug) ;
  1644. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1645. tit = 'CHAINE' 'Dissipation thermique' ;
  1646. 'TRACER' rescal $mb 'TITR' tit ;
  1647. 'SI' lsupg ;
  1648. rescal = 'KCHA' $mt fdec 'CHAM' ;
  1649. tit = 'CHAINE' 'Dissipation numérique' ;
  1650. 'TRACER' rescal $mb 'TITR' tit ;
  1651. 'FINSI' ;
  1652. 'FINSI' ;
  1653. 'SI' lsupg ;
  1654. fdt = '+' fdt fdec ;
  1655. 'FINSI' ;
  1656. *
  1657. * Lissage de la dissipation
  1658. *
  1659. 'SI' lissd ;
  1660. mms = GMASS _mt discg 'SCAL' discg 'SCAL' discr 1. c1 ;
  1661. fdti = GMASS _mt discg 'SCAL' 'CSTE' 'SCAL' discr 1. fdt ;
  1662. fdts = '/' fdti mms ;
  1663. fdtsi = GMASS _mt discg 'SCAL' discr 'SCAL' 'CSTE' 1. fdts ;
  1664. fdt = '/' fdtsi vmtl ;
  1665. 'SI' (graph 'ET' debug) ;
  1666. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1667. tit = 'CHAINE' 'Dissipation apres lissage' ;
  1668. 'TRACER' rescal $mb 'TITR' tit ;
  1669. 'FINSI' ;
  1670. 'FINSI' ;
  1671. *
  1672. * Limitation de la dissipation
  1673. *
  1674. sfdti = GMASS _mtmoy discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
  1675. mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmtm ;
  1676. 'SI' verbose ;
  1677. 'MESSAGE' ('CHAINE' ' Diss. therm. moy.=' mfdt) ;
  1678. 'FINSI' ;
  1679. seuil = '*' limfdt mfdt ;
  1680. * Limitation des valeurs supérieures
  1681. m1 = 'MASQUE' fdt 'INFERIEUR' seuil ;
  1682. m0 = '*' ('-' m1 1.) -1. ;
  1683. fdt = '+' ('*' m1 fdt) ('*' m0 seuil) ;
  1684. 'SI' (graph 'ET' debug) ;
  1685. rescal = 'KCHA' $mt m0 'CHAM' ;
  1686. tit = 'CHAINE' 'Masquage de la dissipation' ;
  1687. 'TRACER' rescal $mb 'TITR' tit ;
  1688. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1689. tit = 'CHAINE' 'Dissipation apres limitation' ;
  1690. 'TRACER' rescal $mb 'TITR' tit ;
  1691. 'FINSI' ;
  1692. *
  1693. * Scaling de la dissipation
  1694. *
  1695. sfdti = GMASS _mtmoy discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
  1696. mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmtm ;
  1697. 'SI' verbose ;
  1698. 'MESSAGE' ('CHAINE' ' Diss. therm. moy. apres limitation=' mfdt) ;
  1699. 'FINSI' ;
  1700. * D'où alpha :
  1701. alpha = '*' ('/' ('-' 1.D0 beta) beta) mfdt ;
  1702. 'SI' ('ET' debug verbose) ;
  1703. 'MESSAGE' ('CHAINE' ' Alpha = ' alpha) ;
  1704. 'FINSI' ;
  1705. *
  1706. * Calcul du gradient de la dissipation thermique et du tenseur directionnel
  1707. *
  1708. lmvit = 'MOTS' 'UX' 'UY' ;
  1709. mmgs = GMASS _mt discg lmvit discr lmvit discr 1. ;
  1710. gfdti = GGRADT _mt discg 'SCAL' 'CSTE' lmvit discr 1. fdt ;
  1711. *gfdt = '/' gfdti vmtl ;
  1712. gfdts = 'RESOUD' mmgs gfdti ;
  1713. gfdti = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
  1714. gfdt = '/' gfdti vmtl ;
  1715. 'SI' (graph 'ET' debug) ;
  1716. tit = 'CHAINE' 'Gradient de dissipation thermique ; i=' &bcl ;
  1717. vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
  1718. 'TRACER' vvit mt 'TITR' tit ;
  1719. 'FINSI' ;
  1720. *
  1721. * Lissage du gradient
  1722. *
  1723. 'SI' lissg ;
  1724. mms = GMASS _mt discg 'SCAL' discg 'SCAL' discr 1. c1 ;
  1725. gfdti = GMASS _mt discg lmvit 'CSTE' lmvit discr 1. gfdt ;
  1726. gfdts = '/' gfdti mms ;
  1727. gfdtsi = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
  1728. gfdt = '/' gfdtsi vmtl ;
  1729. 'SI' (graph 'ET' debug) ;
  1730. tit = 'CHAINE' 'Gradient apres lissage ; i=' &bcl ;
  1731. vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
  1732. 'TRACER' vvit mt 'TITR' tit ;
  1733. 'FINSI' ;
  1734. 'FINSI' ;
  1735. *
  1736. nfdt = 'PSCAL' gfdt gfdt lmvit lmvit ;
  1737. snfdt = '**' nfdt 0.5D0 ;
  1738. msnfdt = 'MAXIMUM' snfdt ;
  1739. 'SI' ('<' msnfdt 1.D-100) ;
  1740. binf = 1.D0 ;
  1741. 'SINON' ;
  1742. binf = '*' msnfdt 1.D-10 ;
  1743. 'FINSI' ;
  1744. snfdt = '+' snfdt binf ;
  1745. sgfdt = '/' gfdt snfdt ;
  1746. 'SI' (graph 'ET' debug) ;
  1747. tit = 'CHAINE' 'Gddt mis a lechelle ; i=' &bcl ;
  1748. vvit = 'VECT' sgfdt 'DEPL' 'JAUN' ;
  1749. 'TRACER' vvit mt 'TITR' tit ;
  1750. 'FINSI' ;
  1751. td11 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UX') ('MOTS' 'SCAL') ;
  1752. td22 = '*' sgfdt sgfdt ('MOTS' 'UY') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
  1753. td12 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
  1754. * D'où le tenseur
  1755. gxx = '**' fdt 2 ;
  1756. vdim = 'VALEUR' 'DIME' ;
  1757. limgd2 = '**' limgd 2 ;
  1758. gd1 = '**' ('/' gxx ('*' alpha alpha))
  1759. ('/' 1.D0 vdim) ;
  1760. gd2 = '-' ('**' ('+' gd1 1.) vdim) 1. ;
  1761. *
  1762. * Considération pour les calculs de ngd :
  1763. * en 1D : gd1 = gd2, la partie anisotrope doit s'annuler
  1764. *
  1765. gdb = '-' ('*' ('**' ('+' gd1 1.) delta)
  1766. ('**' ('+' gd2 1.) ('-' 1. delta))) 1. ;
  1767. gda = '-' ('**' ('+' gd1 1.) delta) 1. ;
  1768. dgd = '-' gdb gda ;
  1769. *
  1770. 'SI' (graph 'ET' debug) ;
  1771. rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
  1772. tit = 'CHAINE' 'Partie isotrope de ladaptation' ;
  1773. 'TRACER' rescal $mb 'TITR' tit ;
  1774. rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
  1775. tit = 'CHAINE' 'Partie anisotrope de ladaptation' ;
  1776. 'TRACER' rescal $mb 'TITR' tit ;
  1777. 'FINSI' ;
  1778. *
  1779. * Limitation des valeurs supérieures
  1780. *
  1781. * de la partie isotrope
  1782. m1 = 'MASQUE' gda 'INFERIEUR' limgd2 ;
  1783. m0 = '*' ('-' m1 1.) -1. ;
  1784. gda = '+' ('*' m1 gda) ('*' m0 limgd2) ;
  1785. * de la partie anisotrope
  1786. gdb = gda '+' dgd ;
  1787. m1 = 'MASQUE' gdb 'INFERIEUR' limgd2 ;
  1788. m0 = '*' ('-' m1 1.) -1. ;
  1789. gdb = '+' ('*' m1 gdb) ('*' m0 limgd2) ;
  1790. dgd = '-' gdb gda ;
  1791. 'SI' (graph 'ET' debug) ;
  1792. rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
  1793. tit = 'CHAINE' 'Partie isotrope de ladaptation apres lim' ;
  1794. 'TRACER' rescal $mb 'TITR' tit ;
  1795. rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
  1796. tit = 'CHAINE' 'Partie anisotrope de ladaptation apres lim' ;
  1797. 'TRACER' rescal $mb 'TITR' tit ;
  1798. 'FINSI' ;
  1799. *
  1800. * Le tenseur
  1801. *
  1802. g11 = 'NOMC' 'G11' (gda '+' ('*' dgd td11) '+' 1.D0) ;
  1803. g22 = 'NOMC' 'G22' (gda '+' ('*' dgd td22) '+' 1.D0) ;
  1804. g12 = 'NOMC' 'G12' ('*' dgd td12) ;
  1805. gtot = g11 '+' g22 '+' g12 ;
  1806. *
  1807. 'RESPRO' gtot fdt ;
  1808. 'FINPROC' ;
  1809. *
  1810. * Début du jeu de donnés
  1811. *
  1812. 'OPTION' 'DIME' 2 ;
  1813. 'SI' ('NON' interact) ;
  1814. 'OPTION' 'TRAC' 'PSC' ;
  1815. 'SINON' ;
  1816. 'OPTION' 'TRAC' 'X' ;
  1817. 'FINSI' ;
  1818. *
  1819. * Maillage
  1820. *
  1821. * Paramètres d'adaptation :
  1822. * beta :
  1823. * 0. pas d'adaptation ;
  1824. * 0.5 la moitié des mailles dans les régions où le paramètre de
  1825. * contrôle est grand
  1826. * 1. toutes les mailles dans les régions où le paramètre de
  1827. * contrôle est grand
  1828. * Usuellement, 0.5 < beta < 0.8
  1829. * lissd : lissage de la dissipation thermique
  1830. * limfdt : limitation de la dissipation thermique
  1831. * on limite les valeurs qui dépassent (moy. fdt) * limfdt
  1832. * limgd : limitation de la diagonale du tenseur métrique
  1833. * on limite les valeurs qui dépassent limgd
  1834. * delta : 0.D0 adaptation totalement anisotrope
  1835. * 1.D0 adaptation totalement isotrope
  1836. * omi : relaxation de l'incrément vitesse-pression
  1837. * omd : relaxation de l'incrément de déplacement du maillage
  1838. * theta et gamma : paramètres de l'adapteur de DEDU ADAP
  1839. omi = 0.5D0 ;
  1840. omd = 0.5D0 ;
  1841. 'OPTI' 'ELEM' 'QUA8' ;
  1842. 'SI' complet ;
  1843. nx = 25 ; ny = 25 ;
  1844. cvg = 2.D-3 ; nitmax = 85 ;
  1845. lRe = 'PROG' 100. 400. 1000. 3200. 5000. 7500. 10000. ;
  1846. lerru = 'PROG' 3.E-03 1.E-03 3.E-03 6.E-03
  1847. 6.E-03 7.E-03 8.E-03 ;
  1848. lerrv = 'PROG' 6.E-03 2.E-03 4.E-03 6.E-03
  1849. 6.E-03 5.E-03 1.E-02 ;
  1850. beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
  1851. * beta = 0.8D0 ; lissd = FAUX ; limfdt = 7.D0 ;
  1852. * beta = 0.7D0 ; lissd = FAUX ; limfdt = 5.D0 ;
  1853. * theta = 0.5D0 ; gamma = 2.D0 ;
  1854. theta = 0.5D0 ; gamma = 2.D0 ;
  1855. lissg = FAUX ; limgd = 15.D0 ;
  1856. delta = 0.75D0 ;
  1857. * delta = 0.5D0 ;
  1858. 'SINON' ;
  1859. nx = 10 ; ny = 10 ;
  1860. * nx = 15 ; ny = 15 ;
  1861. cvg = 5.D-3 ; nitmax = 50 ;
  1862. lRe = 'PROG' 100. 400. 1000. ;
  1863. * lRe = 'PROG' 100. 400. 1000. 3200. 5000. ;
  1864. lerru = 'PROG' 4.E-03 7.E-03 2.E-02 ;
  1865. lerrv = 'PROG' 5.E-03 9.E-03 2.E-02 ;
  1866. * lerru = 'PROG' 4.E-03 7.E-03 2.E-02 1. 1. ;
  1867. * lerrv = 'PROG' 5.E-03 9.E-03 2.E-02 1. 1. ;
  1868. beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
  1869. theta = 0.5D0 ; gamma = 2.D0 ;
  1870. lissg = FAUX ; limgd = 15.D0 ;
  1871. delta = 0.75D0 ;
  1872. 'FINSI' ;
  1873. lerruc = 'PROG' ;
  1874. lerrvc = 'PROG' ;
  1875. pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ;
  1876. bas = 'DROIT' nx pA pB ; dro = 'DROIT' ny pB pC ;
  1877. hau = 'DROIT' nx pC pD ; gau = 'DROIT' ny pD pA ;
  1878. mt = 'DALLER' bas dro hau gau ;
  1879. bor = 'CONTOUR' mt ;
  1880. _mt = 'CHANGER' mt 'QUAF' ;
  1881. $mt = 'MODE' _mt 'NAVIER_STOKES' 'QUAF' ;
  1882. $mb = 'MODE' ('DOMA' $mt 'MAILLAGE') 'THERMIQUE' ;
  1883. mtl = 'CHANGER' mt 'LINEAIRE' ;
  1884. *
  1885. * Maillage sans les éléments de coin pour la prise des moyennes
  1886. *
  1887. _mtcoin = 'ELEM' _mt 'APPUYE' 'LARGEMENT' ('ET' pC pD) ;
  1888. _mtmoy = 'DIFF' _mt _mtcoin ;
  1889. * Paramètres pour le décentrement
  1890. * lsupg : VRAI=decentrement
  1891. * csupg : facteur multiplicatif
  1892. lsupg = FAUX ;
  1893. lsupgm = FAUX ;
  1894. csupg = 0.3D0 ;
  1895. *
  1896. * discg : discrétisation géométrique
  1897. * discv : discrétisation vitesse
  1898. * discp : discrétisation pression
  1899. * discr : discrétisation pour la mise au sommet du paramètre de contrôle
  1900. discg = 'QUAF' ;
  1901. discv = 'QUAF' ;
  1902. discp = 'LINE' ;
  1903. discr = 'LINE' ;
  1904. *
  1905. methgau = 'GAU7' ;
  1906. mxpri = 'MOTS' 'UX' 'UY' ;
  1907. mxdua = 'MOTS' 'FX' 'FY' ;
  1908. mppri = 'MOTS' 'LX' ;
  1909. mpdua = 'MOTS' 'FLX' ;
  1910. * Limitation du déplacement
  1911. ldmax = FAUX ;
  1912. dmax = 1. ;
  1913. echvit = 1. ;
  1914. echdx = 1. ;
  1915. *
  1916. c1 = 'MANUEL' 'CHPO' mt ('MOTS' 'SCAL') ('PROG' 1.) ;
  1917. *
  1918. lok = VRAI ;
  1919. *
  1920. ccli = CALCLIM ;
  1921. inc = 'COPIER' ccli ;
  1922. *
  1923. dRe = 'DIME' lRe ;
  1924. 'REPETER' iiRe dRe ;
  1925. Re = 'EXTRAIRE' lRe &iiRe ;
  1926. iRe = '/' 1. Re ;
  1927. * Numérique
  1928. ap= 1.D0 '*' iRe ;
  1929. *
  1930. * Résumé du cas
  1931. *
  1932. 'SAUTER' 1 'LIGN' ;
  1933. 'MESSAGE' ('CHAINE' '***********************************') ;
  1934. 'MESSAGE' ('CHAINE' 'Résumé du cas : ') ;
  1935. 'MESSAGE' ('CHAINE' 'Nombre de maille = ' nx ' x ' ny) ;
  1936. 'MESSAGE' ('CHAINE' 'Reynolds = ' Re) ;
  1937. 'MESSAGE' ('CHAINE' 'Param. adaptation = ' beta) ;
  1938. 'MESSAGE' ('CHAINE' '***********************************') ;
  1939. *
  1940. * Algorithme
  1941. *
  1942. 'REPETER' bcl nitmax ;
  1943. 'SI' verbose ;
  1944. 'MESSAGE' ('CHAINE' 'Itération : ' &bcl ) ;
  1945. 'FINSI' ;
  1946. * Mise à jour des conditions aux limites
  1947. ccli = CALCLIM ;
  1948. * Calcul des champs
  1949. dinc = SOLAPP _mt inc ccli ;
  1950. inc = inc '+' ('*' dinc omi) ;
  1951. vit = 'EXCO' mxpri inc ;
  1952. pre = 'EXCO' mppri inc ;
  1953. dvit = 'EXCO' mxpri dinc ;
  1954. echdvit = 'MAXIMUM' dvit 'ABS' ;
  1955. 'SI' verbose ;
  1956. 'MESSAGE' ('CHAINE' ' Echelle increment vitesse : ' echdvit) ;
  1957. 'FINSI' ;
  1958. *
  1959. 'SI' (graph 'ET' debug) ;
  1960. tit = 'CHAINE' 'Vitesse ; i=' &bcl ;
  1961. vvit = 'VECT' ('/' 1.D0 nx) vit 'DEPL' 'JAUN' ;
  1962. 'TRACER' vvit mt 'TITR' tit ;
  1963. 'FINSI' ;
  1964. 'SI' (graph 'ET' debug) ;
  1965. tit = 'CHAINE' 'Pression ; i=' &bcl ;
  1966. 'TRACER' pre mtl 'TITR' tit ;
  1967. 'FINSI' ;
  1968. *
  1969. * Calcul du champ de déplacement
  1970. *
  1971. * Construction de la métrique
  1972. tdcd fdt = TGDENT _mt vit beta ;
  1973. 'SI' graph ;
  1974. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1975. vvit = 'VECT' ('/' 1.D0 nx) vit 'DEPL' 'JAUN' ;
  1976. tit = 'CHAINE' 'Diss. therm. + Vitesse ; i=' &bcl ' ; Re='
  1977. Re ;
  1978. 'SI' debug ;
  1979. 'TRACER' $mb rescal vvit _mt 'TITR' tit ;
  1980. 'SINON' ;
  1981. 'TRACER' $mb rescal vvit _mt 'TITR' tit 'NCLK' ;
  1982. 'FINSI' ;
  1983. 'FINSI' ;
  1984. * Champ de déplacement
  1985. mblox = 'BLOQUE' 'UX' (gau 'ET' dro) ;
  1986. mbloy = 'BLOQUE' 'UY' (bas 'ET' hau) ;
  1987. mblo = mblox 'ET' mbloy ;
  1988. dep = 'DEDU' 'ADAP' _mt mblo 'DISG' discg
  1989. 'METR' tdcd 'CSTE' 'THET' theta 'GAMM' gamma
  1990. 'NITM' 1 'METG' methgau ;
  1991. *
  1992. echdep = 'MAXIMUM' dep 'ABS' ;
  1993. 'SI' verbose ;
  1994. 'MESSAGE' ('CHAINE' ' Echelle des depl. : ' echdep) ;
  1995. 'FINSI' ;
  1996. *
  1997. 'SI' ldmax ;
  1998. 'SI' ('>' echdep dmax) ;
  1999. fdep = '/' dmax echdep ;
  2000. dep = '*' dep fdep ;
  2001. 'FINSI' ;
  2002. 'SI' verbose ;
  2003. 'MESSAGE'
  2004. ('CHAINE' ' Echelle des depl. apres lim : ' echdep) ;
  2005. 'FINSI' ;
  2006. 'FINSI' ;
  2007. dep = '*' dep omd ;
  2008. crit2 = '<' ('/' echdep echdx) cvg ;
  2009. 'SI' ('NON' crit2) ;
  2010. 'FORME' dep ;
  2011. 'FINSI' ;
  2012. ciso = DEADUTIL 'QISO' _mt discg 'GAU7' tdcd 'CSTE' ;
  2013. cequ = DEADUTIL 'QEQU' _mt discg 'GAU7' tdcd 'CSTE' ;
  2014. maciso = 'MAXIMUM' ciso ; miciso = 'MINIMUM' ciso ;
  2015. macequ = 'MAXIMUM' cequ ; micequ = 'MINIMUM' cequ ;
  2016. 'SI' verbose ;
  2017. 'MESSAGE' ('CHAINE'
  2018. ' CISO : max. = ' maciso ' min. = ' miciso) ;
  2019. 'MESSAGE' ('CHAINE'
  2020. ' CEQU : max. = ' macequ ' min. = ' micequ) ;
  2021. 'FINSI' ;
  2022. 'SI' (graph 'ET' debug) ;
  2023. cliso = 'KCHA' $mt ciso 'CHAM' ;
  2024. tit = 'CHAINE' 'Isotropie ; i=' &bcl ' ; Re=' Re ;
  2025. 'TRACER' cliso $mb 'TITR' tit ;
  2026. clequ = 'KCHA' $mt cequ 'CHAM' ;
  2027. tit = 'CHAINE' 'Equidis. ; i=' &bcl ' ; Re=' Re ;
  2028. 'TRACER' clequ $mb 'TITR' tit ;
  2029. 'FINSI' ;
  2030. * Critères de convergence :
  2031. * sur les incréments
  2032. crit1 = '<' ('/' echdvit echvit) cvg ;
  2033. crit2 = '<' ('/' echdep echdx) cvg ;
  2034. 'SI' ('ET' crit1 crit2) ;
  2035. 'QUITTER' bcl ;
  2036. 'FINSI' ;
  2037. 'FIN' bcl ;
  2038. 'SI' ('ET' graph interact) ;
  2039. tit = 'CHAINE' 'Vitesse ; Re=' Re ;
  2040. vvit = 'VECT' ('/' 2.D0 nx) vit 'DEPL' 'JAUN' ;
  2041. 'TRACER' vvit mt 'TITR' tit ;
  2042. 'FINSI' ;
  2043. *
  2044. ly lu lx lv = GHIA Re ;
  2045. lxd = 'PROG' ('DIME' ly) '*' 0.5D0 ;
  2046. lyd = 'PROG' ('DIME' lx) '*' 0.5D0 ;
  2047. lig1 = 'QUELCONQUE' 'SEG2' lxd ly ;
  2048. lig2 = 'QUELCONQUE' 'SEG2' lx lyd ;
  2049. *
  2050. chamvit = 'CHANGER' 'CHAM' vit _mt ;
  2051. *
  2052. * U(y)
  2053. *
  2054. lun = PROI lig1 ('EXCO' 'UX' chamvit) ;
  2055. evghia = 'EVOL' 'MANU' ly lu ;
  2056. evnum = 'EVOL' 'CHPO' lun 'UX' lig1 ;
  2057. 'SI' graph ;
  2058. evt = evghia 'ET' evnum ;
  2059. tabt = 'TABLE' ;
  2060. tabt . 1 = 'CHAINE' 'Ghia' ;
  2061. tabt . 2 = 'CHAINE' 'Nous' ;
  2062. tit = 'CHAINE' 'Profil U(y) ; Re=' Re ;
  2063. titx = 'CHAINE' 'y' ;
  2064. tity = 'CHAINE' 'U' ;
  2065. DESSEVOL evt tabt tit titx tity ;
  2066. 'FINSI' ;
  2067. erru = 'EXTRAIRE' ('INTG' ('-' evghia evnum) 'ABSO') 1 ;
  2068. 'MESSAGE' ('CHAINE' ' erru = ' erru) ;
  2069. lerruc = 'ET' lerruc ('PROG' erru) ;
  2070. verur = 'EXTRAIRE' lerru &iiRe ;
  2071. teru = ('<' erru verur) ;
  2072. 'SI' ('NON' teru) ;
  2073. cherr = 'CHAINE' '!!! Erreur, on aurait voulu erru < ' verur ;
  2074. 'MESSAGE' cherr ;
  2075. 'FINSI' ;
  2076. lok = 'ET' lok teru ;
  2077. *
  2078. * V(x)
  2079. *
  2080. lvn = PROI lig2 ('EXCO' 'UY' chamvit) ;
  2081. evghia = 'EVOL' 'MANU' lx lv ;
  2082. evnum = 'EVOL' 'CHPO' lvn 'UY' lig2 ;
  2083. 'SI' graph ;
  2084. evt = evghia 'ET' evnum ;
  2085. tabt = 'TABLE' ;
  2086. tabt . 1 = 'CHAINE' 'Ghia' ;
  2087. tabt . 2 = 'CHAINE' 'Nous' ;
  2088. tit = 'CHAINE' 'Profil V(x) ; Re=' Re ;
  2089. titx = 'CHAINE' 'x' ;
  2090. tity = 'CHAINE' 'V' ;
  2091. DESSEVOL evt tabt tit titx tity ;
  2092. 'FINSI' ;
  2093. errv = 'EXTRAIRE' ('INTG' ('-' evghia evnum) 'ABSO') 1 ;
  2094. 'MESSAGE' ('CHAINE' ' errv = ' errv) ;
  2095. lerrvc = 'ET' lerrvc ('PROG' errv) ;
  2096. vervr = 'EXTRAIRE' lerrv &iiRe ;
  2097. terv = ('<' errv vervr) ;
  2098. 'SI' ('NON' terv) ;
  2099. cherr = 'CHAINE' '!!! Erreur, on aurait voulu errv < ' vervr ;
  2100. 'MESSAGE' cherr ;
  2101. 'FINSI' ;
  2102. lok = 'ET' lok terv ;
  2103. 'FIN' iiRe ;
  2104. *
  2105. * Fin du jeu de donnees
  2106. *
  2107. 'SAUTER' 2 'LIGNE' ;
  2108. 'SI' lok ;
  2109. 'MESSAGE' 'Tout sest bien passe' ;
  2110. 'SINON' ;
  2111. 'MESSAGE' 'Il y a eu des erreurs' ;
  2112. 'FINSI' ;
  2113. 'SAUTER' 2 'LIGNE' ;
  2114. 'SI' interact ;
  2115. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  2116. 'FINSI' ;
  2117. 'SI' ('NON' lok) ;
  2118. 'ERREUR' 5 ;
  2119. 'FINSI' ;
  2120. *
  2121. * End of dgibi file DEDU_GHIA
  2122. *
  2123. 'FIN' ;
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  

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