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. ************************************************************************
  1091. * NOM : DESSEVOL
  1092. * DESCRIPTION : Dessine des évolutions : choisit automatiquement
  1093. * les options, marqueurs, couleurs...
  1094. *
  1095. *
  1096. * LANGAGE : GIBIANE-CAST3M
  1097. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1098. * mél : gounand@semt2.smts.cea.fr
  1099. **********************************************************************
  1100. * VERSION : v1, 16/11/2004, version initiale
  1101. * HISTORIQUE : v1, 16/11/2004, création
  1102. * HISTORIQUE : 05/01/2018 : utilisation de l'objet évolution VIDE plutôt
  1103. * que APPEND
  1104. * HISTORIQUE : 11/06/2018 : suite à évolution pv 9841
  1105. * on écrit 'MARQ' ' ' plutôt que 'MARQ '
  1106. * HISTORIQUE :
  1107. ************************************************************************
  1108. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1109. * en cas de modification de ce sous-programme afin de faciliter
  1110. * la maintenance !
  1111. ************************************************************************
  1112. *
  1113. *
  1114. 'DEBPROC' DESSEVOL ;
  1115. 'ARGUMENT' evtot*'EVOLUTION' ;
  1116. 'ARGUMENT' tabt*'TABLE' ;
  1117. 'ARGUMENT' tit*'MOT' ;
  1118. 'ARGUMENT' tix*'MOT' ;
  1119. 'ARGUMENT' tiy*'MOT' ;
  1120. 'ARGUMENT' lnclk/'LOGIQUE' ;
  1121. 'ARGUMENT' nb/'ENTIER' ;
  1122. 'ARGUMENT' lx/'LISTREEL' ;
  1123. *
  1124. 'SI' ('NON' ('EXISTE' lnclk)) ;
  1125. lnclk = FAUX ;
  1126. 'FINSI' ;
  1127. *
  1128. * nb = 0 : noir et blanc
  1129. * nb = 1 : couleur
  1130. * nb = 2 : couleur + marqueurs
  1131. * nb = 3 : couleur + marqueurs + tirets
  1132. * nb = 4 : couleur + marqueurs regu
  1133. * nb = 5 : couleur + marqueurs regu + tirets
  1134. * nb = 6 : nb + marqueurs regu + tirets
  1135. * nb = 7 : nb + marqueurs
  1136. * nb = 8 : nb + marqueurs regu
  1137. *
  1138. 'SI' ('NON' ('EXISTE' nb)) ;
  1139. nb = 3 ;
  1140. 'FINSI' ;
  1141. *
  1142. nt = 'DIME' tabt ;
  1143. nev = 'DIME' evtot ;
  1144. *
  1145. * Attention, dans evtot, il y a une évolution avec des noms de points ?
  1146. *
  1147. *'SI' ('NEG' nev nt) ;
  1148. * cherr = 'CHAINE' 'Evolution and title table : not same dim.' ;
  1149. * 'ERREUR' cherr ;
  1150. *'FINSI' ;
  1151. *
  1152. tev = 'TABLE' ;
  1153. tev . 'TITRE' = tabt ;
  1154. *
  1155. toto = 'TABLE' ;
  1156. *
  1157. *lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
  1158. *
  1159. * 2018/01/04 On enlève les SI..FINSI, c'est trop moche.
  1160. ** Attention danger ! Si une variable lcoulpsc existe dans le programme
  1161. ** appelant, le comportement de la procédure est modifié !!!
  1162. **
  1163. *'SI' ('NON' ('EXISTE' lcoulpsc)) ;
  1164. lcoulpsc = 'EGA' ('VALEUR' 'TRAC') 'PSC' ;
  1165. *'FINSI' ;
  1166. 'SI' lcoulpsc ;
  1167. lcoul = 'MOTS' 'BLEU' 'ROUG' 'VERT' 'VIOL' 'OLIV' 'ORAN' ;
  1168. 'SINON' ;
  1169. lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
  1170. 'FINSI' ;
  1171. lmarq = 'MOTS' 'TRID' 'TRIU' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI'
  1172. 'TRIL' 'TRIR' ;
  1173. ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
  1174. *
  1175. lnb = 'LECT' 0 6 7 8 ;
  1176. *'SI' ('OU' ('EGA' nb 0) ('EGA' nb 6)) ;
  1177. 'SI' (dans ('LECT' nb) lnb) ;
  1178. ev2 = evtot ;
  1179. 'SINON' ;
  1180. icou = 0 ;
  1181. 'REPETER' iev nev ;
  1182. ii = &iev ;
  1183. evi = 'EXTRAIRE' evtot 'COUR' ii ;
  1184. 'SI' ('NEG' ('TYPE' ('EXTRAIRE' evi 'ORDO')) 'LISTMOTS') ;
  1185. icou = '+' icou 1 ;
  1186. 'FINSI' ;
  1187. * ii2 = '/' ('+' ii 1) 2 ;
  1188. * ci = EXMOMOD lcoul ii2 ;
  1189. * ci = EXMOMOD lcoul ii ;
  1190. ci = EXMOMOD lcoul icou ;
  1191. APPEND toto 'EVOLUTION' ('COULEUR' evi ci) ;
  1192. 'FIN' iev ;
  1193. ev2 = toto . 'EVOLUTION' ;
  1194. 'FINSI' ;
  1195. *
  1196. 'REPETER' iev nev ;
  1197. ii = &iev ;
  1198. mi = EXMOMOD lmarq ii ;
  1199. ti = EXMOMOD ltirr ii ;
  1200. 'SI' ('OU' ('EGA' nb 2) ('EGA' nb 7)) ;
  1201. tev . ii = 'CHAINE' 'MARQ' ' ' mi ;
  1202. 'FINSI' ;
  1203. 'SI' ('EGA' nb 3) ;
  1204. tev . ii = 'CHAINE' 'MARQ' ' ' mi ' ' ti ;
  1205. 'FINSI' ;
  1206. 'SI' ('OU' ('EGA' nb 4) ('EGA' nb 8)) ;
  1207. tev . ii = 'CHAINE' 'MARQ' ' ' mi ' REGU' ;
  1208. 'FINSI' ;
  1209. 'SI' ('OU' ('EGA' nb 5) ('EGA' nb 6)) ;
  1210. tev . ii = 'CHAINE' 'MARQ' ' ' mi ' ' ti ' REGU' ;
  1211. 'FINSI' ;
  1212. 'FIN' iev ;
  1213. *
  1214. 'SI' ('EXISTE' lx) ;
  1215. dim4 = 'EGA' ('DIME' lx) 4 ;
  1216. xmin = 'EXTRAIRE' lx 1 ; xmax = 'EXTRAIRE' lx 2 ;
  1217. 'SI' dim4 ;
  1218. ymin = 'EXTRAIRE' lx 3 ; ymax = 'EXTRAIRE' lx 4 ;
  1219. 'FINSI' ;
  1220. 'SI' dim4 ;
  1221. 'SI' lnclk ;
  1222. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1223. 'XBOR' xmin xmax 'YBOR' ymin ymax 'NCLK' motopt ;
  1224. 'SINON' ;
  1225. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1226. 'XBOR' xmin xmax 'YBOR' ymin ymax motopt ;
  1227. 'FINSI' ;
  1228. 'SINON' ;
  1229. 'SI' lnclk ;
  1230. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1231. 'XBOR' xmin xmax 'NCLK' motopt ;
  1232. 'SINON' ;
  1233. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1234. 'XBOR' xmin xmax motopt ;
  1235. 'FINSI' ;
  1236. 'FINSI' ;
  1237. 'SINON' ;
  1238. 'SI' lnclk ;
  1239. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1240. 'NCLK' motopt ;
  1241. 'SINON' ;
  1242. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  1243. motopt ;
  1244. 'FINSI' ;
  1245. 'FINSI' ;
  1246. *
  1247. * End of procedure file DESSEVOL
  1248. *
  1249. 'FINPROC' ;
  1250. *ENDPROCEDUR dessevol
  1251. *BEGINPROCEDUR exmomod
  1252. ************************************************************************
  1253. * NOM : EXMOMOD
  1254. * DESCRIPTION : Extraction d'un mot d'un listmots
  1255. *
  1256. *
  1257. *
  1258. * LANGAGE : GIBIANE-CAST3M
  1259. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1260. * mél : gounand@semt2.smts.cea.fr
  1261. **********************************************************************
  1262. * VERSION : v1, 23/06/2003, version initiale
  1263. * HISTORIQUE : v1, 23/06/2003, création
  1264. * HISTORIQUE :
  1265. * HISTORIQUE :
  1266. ************************************************************************
  1267. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1268. * en cas de modification de ce sous-programme afin de faciliter
  1269. * la maintenance !
  1270. ************************************************************************
  1271. *
  1272. *
  1273. 'DEBPROC' EXMOMOD ;
  1274. 'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
  1275. j = 'DIME' lm ;
  1276. k = '+' (MODULO ('-' i 1) j) 1 ;
  1277. lemot = 'EXTRAIRE' lm k ;
  1278. * Usage de l'opérateur text pour éviter que lemot
  1279. * ne soit interprété comme un opérateur
  1280. 'RESPRO' 'TEXTE' lemot ;
  1281. *
  1282. * End of procedure file EXMOMOD
  1283. *
  1284. 'FINPROC' ;
  1285. *ENDPROCEDUR exmomod
  1286. *BEGINPROCEDUR modulo
  1287. ************************************************************************
  1288. * NOM : MODULO
  1289. * DESCRIPTION : Calcule un entier modulo un autre...
  1290. *
  1291. *
  1292. *
  1293. * LANGAGE : GIBIANE-CAST3M
  1294. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1295. * mél : gounand@semt2.smts.cea.fr
  1296. **********************************************************************
  1297. * VERSION : v1, 15/10/2002, version initiale
  1298. * HISTORIQUE : v1, 15/10/2002, création
  1299. * HISTORIQUE :
  1300. * HISTORIQUE :
  1301. ************************************************************************
  1302. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1303. * en cas de modification de ce sous-programme afin de faciliter
  1304. * la maintenance !
  1305. ************************************************************************
  1306. *
  1307. *
  1308. 'DEBPROC' MODULO ;
  1309. 'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
  1310. 'SI' ('EGA' j 0) ;
  1311. 'MESSAGE' 'Impossible de faire modulo 0' ;
  1312. 'ERREUR' 5 ;
  1313. 'SINON' ;
  1314. k=i '/' j ;
  1315. mod=i '-' ( k '*'j ) ;
  1316. 'RESPRO' mod ;
  1317. 'FINSI' ;
  1318. *
  1319. * End of procedure file MODULO
  1320. *
  1321. 'FINPROC' ;
  1322. *ENDPROCEDUR modulo
  1323. *BEGINPROCEDUR append
  1324. ************************************************************************
  1325. * NOM : APPEND
  1326. * DESCRIPTION : Rajoute :
  1327. * - un entier à un listentier
  1328. * - un réel à un listreel
  1329. * - un objet (liste, evolution, matrice ou chpoint)
  1330. * à un indice de table ('MOT' ou 'ENTIER')
  1331. * * si l'indice n'existe pas
  1332. * * 'ET' si l'indice existe
  1333. *
  1334. *
  1335. *
  1336. * LANGAGE : GIBIANE-CAST3M
  1337. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1338. * mél : gounand@semt2.smts.cea.fr
  1339. **********************************************************************
  1340. * VERSION : v1, 10/09/2004, version initiale
  1341. * HISTORIQUE : v1, 10/09/2004, création
  1342. * HISTORIQUE :
  1343. * HISTORIQUE :
  1344. ************************************************************************
  1345. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1346. * en cas de modification de ce sous-programme afin de faciliter
  1347. * la maintenance !
  1348. ************************************************************************
  1349. *
  1350. *
  1351. 'DEBPROC' APPEND ;
  1352. 'ARGUMENT' tab/'TABLE' ;
  1353. 'SI' ('EXISTE' tab) ;
  1354. 'ARGUMENT' itab/'MOT' ;
  1355. 'SI' ('NON' ('EXISTE' itab)) ;
  1356. 'ARGUMENT' itab*'ENTIER' ;
  1357. 'FINSI' ;
  1358. lobj = FAUX ;
  1359. 'SI' ('NON' lobj) ;
  1360. 'ARGUMENT' lr/'LISTREEL' ;
  1361. 'SI' ('EXISTE' lr) ;
  1362. obj = lr ; lobj = VRAI ;
  1363. 'FINSI' ;
  1364. 'FINSI' ;
  1365. 'SI' ('NON' lobj) ;
  1366. 'ARGUMENT' le/'LISTENTI' ;
  1367. 'SI' ('EXISTE' le) ;
  1368. obj = le ; lobj = VRAI ;
  1369. 'FINSI' ;
  1370. 'FINSI' ;
  1371. 'SI' ('NON' lobj) ;
  1372. 'ARGUMENT' lev/'EVOLUTION' ;
  1373. 'SI' ('EXISTE' lev) ;
  1374. obj = lev ; lobj = VRAI ;
  1375. 'FINSI' ;
  1376. 'FINSI' ;
  1377. 'SI' ('NON' lobj) ;
  1378. 'ARGUMENT' lm/'MAILLAGE' ;
  1379. 'SI' ('EXISTE' lm) ;
  1380. obj = lm ; lobj = VRAI ;
  1381. 'FINSI' ;
  1382. 'FINSI' ;
  1383. 'SI' ('NON' lobj) ;
  1384. 'ARGUMENT' chpo/'CHPOINT' ;
  1385. 'SI' ('EXISTE' chpo) ;
  1386. obj = chpo ; lobj = VRAI ;
  1387. 'FINSI' ;
  1388. 'FINSI' ;
  1389. 'SI' ('NON' lobj) ;
  1390. 'ARGUMENT' rig/'RIGIDITE' ;
  1391. 'SI' ('EXISTE' rig) ;
  1392. obj = rig ; lobj = VRAI ;
  1393. 'FINSI' ;
  1394. 'FINSI' ;
  1395. 'SI' ('NON' lobj) ;
  1396. 'ARGUMENT' matk/'MATRIK' ;
  1397. 'SI' ('EXISTE' matk) ;
  1398. obj = matk ; lobj = VRAI ;
  1399. 'FINSI' ;
  1400. 'FINSI' ;
  1401. 'SI' ('NON' lobj) ;
  1402. cherr = 'CHAINE'
  1403. 'Il faut fournir un objet liste, evolution, matrice ou chpoint.'
  1404. ;
  1405. 'ERREUR' cherr ;
  1406. 'FINSI' ;
  1407. 'SI' ('EXISTE' tab itab) ;
  1408. 'SI' ('EGA' ('TYPE' obj) 'CHPOINT') ;
  1409. tab . itab = '+' (tab . itab) obj ;
  1410. 'SINON' ;
  1411. tab . itab = 'ET' (tab . itab) obj ;
  1412. 'FINSI' ;
  1413. 'SINON' ;
  1414. tab . itab = obj ;
  1415. 'FINSI' ;
  1416. 'RESPRO' tab ;
  1417. 'FINSI' ;
  1418. 'ARGUMENT' lenti/'LISTENTI' ;
  1419. 'ARGUMENT' lreel/'LISTREEL' ;
  1420. 'SI' ('EXISTE' lenti) ;
  1421. 'ARGUMENT' enti*'ENTIER' ;
  1422. lenti = 'ET' lenti ('LECT' enti) ;
  1423. 'RESPRO' lenti ;
  1424. 'FINSI' ;
  1425. 'SI' ('EXISTE' lreel) ;
  1426. 'ARGUMENT' reel*'FLOTTANT' ;
  1427. lreel = 'ET' lreel ('PROG' reel) ;
  1428. 'RESPRO' lreel ;
  1429. 'FINSI' ;
  1430. *
  1431. * End of procedure file APPEND
  1432. *
  1433. 'FINPROC' ;
  1434. *ENDPROCEDUR append
  1435. *BEGINPROCEDUR histo
  1436. ************************************************************************
  1437. * NOM : HISTO
  1438. * DESCRIPTION : Construit une evolution représentant un histogramme
  1439. *
  1440. *
  1441. *
  1442. * LANGAGE : GIBIANE-CAST3M
  1443. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1444. * mél : gounand@semt2.smts.cea.fr
  1445. **********************************************************************
  1446. * VERSION : v1, 13/09/2004, version initiale
  1447. * HISTORIQUE : v1, 13/09/2004, création
  1448. * HISTORIQUE :
  1449. * HISTORIQUE :
  1450. ************************************************************************
  1451. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1452. * en cas de modification de ce sous-programme afin de faciliter
  1453. * la maintenance !
  1454. ************************************************************************
  1455. *
  1456. *
  1457. 'DEBPROC' HISTO ;
  1458. 'ARGUMENT' lx*'LISTREEL' ;
  1459. 'ARGUMENT' ly*'LISTREEL' ;
  1460. *
  1461. dlx = 'DIME' lx ;
  1462. dly = 'DIME' ly ;
  1463. *
  1464. 'SI' ('NEG' dly ('-' dlx 1)) ;
  1465. cherr = 'CHAINE' 'Dimension des arguments incorrecte' ;
  1466. 'MESSAGE' ('CHAINE' 'Dime lx=' dlx ' Dime ly=' dly) ;
  1467. 'ERREUR' cherr ;
  1468. 'FINSI' ;
  1469. *
  1470. lxn = 'PROG' ;
  1471. lyn = 'PROG' ;
  1472. *
  1473. 'REPETER' ii dly ;
  1474. vx = 'EXTRAIRE' lx &ii ;
  1475. vxp = 'EXTRAIRE' lx ('+' &ii 1) ;
  1476. vy = 'EXTRAIRE' ly &ii ;
  1477. pvx = 'PROG' vx ; pvxp = 'PROG' vxp ;
  1478. pvy = 'PROG' vy ; pv0 = 'PROG' 0.D0 ;
  1479. lxn = lxn 'ET' pvx 'ET' pvx 'ET' pvxp 'ET' pvxp ;
  1480. lyn = lyn 'ET' pv0 'ET' pvy 'ET' pvy 'ET' pv0 ;
  1481. 'FIN' ii ;
  1482. evhist = 'EVOL' 'MANU' lxn lyn ;
  1483. 'RESPRO' evhist ;
  1484. *
  1485. * End of procedure file HISTO
  1486. *
  1487. 'FINPROC' ;
  1488. *ENDPROCEDUR histo
  1489. *BEGINPROCEDUR gmail
  1490. ************************************************************************
  1491. * NOM : GMAIL
  1492. * DESCRIPTION : Extrait le maillage des points supports des degrés
  1493. * de liberté d'une inconnue
  1494. *
  1495. * Cette procédure est identique à GMAIL2 qui paraissait
  1496. * mieux que l'ancienne GMAIL
  1497. *
  1498. *
  1499. *
  1500. * LANGAGE : GIBIANE-CAST3M
  1501. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1502. * mél : gounand@semt2.smts.cea.fr
  1503. **********************************************************************
  1504. * VERSION : v1, 20/04/2012, version initiale
  1505. * HISTORIQUE :
  1506. * HISTORIQUE :
  1507. ************************************************************************
  1508. *
  1509. *
  1510. 'DEBPROC' GMAIL ;
  1511. 'ARGUMENT' _mt/'MAILLAGE' ;
  1512. 'ARGU' tdisc/'TABLE' ;
  1513. xmt = 'EXIS' _mt ;
  1514. xtdisc = 'EXIS' tdisc ;
  1515. *
  1516. 'SI' ('NON' xmt) ;
  1517. 'SI' ('NON' xtdisc) ;
  1518. 'ARGUMENT' tdisc*'TABLE' ;
  1519. xtdisc = vrai ;
  1520. 'FINS' ;
  1521. 'ARGUMENT' nmt*'MOT' ;
  1522. 'SI' ('NON' ('EXISTE' tdisc nmt)) ;
  1523. cherr = 'CHAINE' 'Le domaine ' nmt ' nest pas defini dans'
  1524. ' la table de discretisation' ;
  1525. 'ERREUR' cherr ;
  1526. 'FINSI' ;
  1527. _mt = tdisc . nmt . 'QUAF' ;
  1528. 'FINSI' ;
  1529. *
  1530. 'ARGU' dua*'MOT' ;
  1531. 'SI' ('NON' xtdisc) ;
  1532. discdua = dua ;
  1533. * nomdua = dua ;
  1534. 'SINO' ;
  1535. * nomdua = dua ;
  1536. discdua = tdisc . dua . 'DISC' ;
  1537. 'FINS' ;
  1538. *
  1539. *'ARGUMENT' nomdua*'MOT ' ;
  1540. *
  1541. * Raccourcis du 2019/01/25
  1542. * Est-ce vraiment astucieux ?...
  1543. *
  1544. 'SI' ('EGA' discdua 'QUAF') ;
  1545. 'RESP' _mt ;
  1546. 'QUIT' GMAIL ;
  1547. 'FINS' ;
  1548. 'SI' ('EGA' discdua 'LINE') ;
  1549. 'RESP' ('CHAN' _mt 'LINE') ;
  1550. 'QUIT' GMAIL ;
  1551. 'FINS' ;
  1552. 'SI' ('EGA' discdua 'QUAI') ;
  1553. 'RESP' ('CHAN' _mt 'QUAD') ;
  1554. 'QUIT' GMAIL ;
  1555. 'FINS' ;
  1556. *
  1557. mdim = DEADUTIL 'DIMM' _mt ;
  1558. *vdim = 'VALEUR' 'DIME' ;
  1559. 'SI' ('EGA' discdua 'LINM') ;
  1560. discdua = 'CSTE' ;
  1561. 'FINSI' ;
  1562. *
  1563. numop = 1 ; numder = mdim ; numvar = 1 ; numdat = 0 ; numcof = 0 ;
  1564. A = ININLIN numop numvar numdat numcof numder ;
  1565. A . 'VAR' . 1 . 'VALEUR' = 0. ;
  1566. *
  1567. A . 1 . 1 . 0 = 0 ;
  1568. *
  1569. B = ININLIN numop numvar numdat numcof numder ;
  1570. B . 'VAR' . 1 . 'NOMDDL' = 'DUMM' ;
  1571. B . 'VAR' . 1 . 'DISC' = discdua ;
  1572. *
  1573. B . 1 . 1 . 0 = 0 ;
  1574. *
  1575. gm = 'NLIN' 'LINE' _mt A B 'ERF1' 'GAU1' ;
  1576. dom = 'EXTRAIRE' gm 'MAIL' ;
  1577. *
  1578. 'RESPRO' dom ;
  1579. 'FINPROC' ;
  1580. *
  1581. * End of procedure file GMAIL
  1582. *
  1583. *ENDPROCEDUR gmail
  1584. *
  1585. ************************************************************************
  1586. * NOM : GHIA
  1587. * DESCRIPTION : Une partie des résultats de référence (profils U_x(y)
  1588. * et U_y(x) obtenus par Ghia et al. dans la référence :
  1589. *@Article{ghia,
  1590. * author = {U. Ghia and K.N. Ghia and C.T. Shin},
  1591. * title = {High-Re Solutions for Incompressible Flow Using the
  1592. * Navier-Stokes Equations and a Multigrid Method},
  1593. * journal = {JCP},
  1594. * year = {1982},
  1595. * volume = {48},
  1596. * pages = {387-411},
  1597. * endroit = {Classeur Benchmarks (I)}
  1598. *}
  1599. *
  1600. * LANGAGE : GIBIANE-CAST3M
  1601. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1602. * mél : gounand@semt2.smts.cea.fr
  1603. **********************************************************************
  1604. * VERSION : v1, 14/06/2007, version initiale
  1605. * HISTORIQUE : v1, 14/06/2007, création
  1606. * HISTORIQUE :
  1607. * HISTORIQUE :
  1608. ************************************************************************
  1609. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1610. * en cas de modification de ce sous-programme afin de faciliter
  1611. * la maintenance !
  1612. ************************************************************************
  1613. *
  1614. *
  1615. 'DEBPROC' GHIA ;
  1616. 'ARGUMENT' Re*'FLOTTANT' ;
  1617. lok = FAUX ;
  1618. iRe = 'ENTIER' ('+' Re 0.5D0) ;
  1619. ly = 'PROG' 0.0000 0.0547 0.0625 0.0703 0.1016 0.1719 0.2813 0.4531
  1620. 0.5000 0.6172 0.7344 0.8516 0.9531 0.9609 0.9688 0.9766
  1621. 1.0000 ;
  1622. lx = 'PROG' 0.0000 0.0625 0.0703 0.0781 0.0938 0.1563 0.2266 0.2344
  1623. 0.5000 0.8047 0.8594 0.9063 0.9453 0.9531 0.9609 0.9688
  1624. 1.0000 ;
  1625. 'SI' ('EGA' iRe 100) ;
  1626. lok = VRAI ;
  1627. lu = 'PROG' 0.00000 -0.03717 -0.04192 -0.04775 -0.06434 -0.10150
  1628. -0.15662 -0.21090
  1629. -0.20581 -0.13641 0.00332 0.23151 0.68717 0.73722 0.78871
  1630. 0.84123 1.00000 ;
  1631. lv = 'PROG' 0.00000 0.09233 0.10091 0.10890 0.12317 0.16077 0.17507
  1632. 0.17527
  1633. 0.05454 -0.24533 -0.22445 -0.16914 -0.10313 -0.08864
  1634. -0.07391 -0.05906 0.00000 ;
  1635. 'FINSI' ;
  1636. 'SI' ('EGA' iRe 400) ;
  1637. lok = VRAI ;
  1638. lu = 'PROG' 0.00000 -0.08186 -0.09266 -0.10338 -0.14612 -0.24299
  1639. -0.32726 -0.17119
  1640. -0.11477 0.02135 0.16256 0.29093 0.55892 0.61756 0.68439
  1641. 0.75837 1.00000 ;
  1642. lv = 'PROG' 0.00000 0.18360 0.19713 0.20920 0.22965 0.28124 0.30203
  1643. 0.30174
  1644. 0.05186 -0.38598 -0.44993 -0.3827 -0.22847 -0.19254
  1645. -0.15663 -0.12146 0.00000 ;
  1646. 'FINSI' ;
  1647. 'SI' ('EGA' iRe 1000) ;
  1648. lok = VRAI ;
  1649. lu = 'PROG' 0.00000 -0.18109 -0.20196 -0.22220 -0.29730 -0.38289
  1650. -0.27805 -0.10648
  1651. -0.06080 0.05702 0.18719 0.33304 0.46604 0.51117 0.57492
  1652. 0.65928 1.00000 ;
  1653. lv = 'PROG' 0.00000 0.27485 0.29012 0.30353 0.32627 0.37095 0.33075
  1654. 0.32235
  1655. 0.02526 -0.31966 -0.42665 -0.51550 -0.39188 -0.33714
  1656. -0.27669 -0.21388 0.00000 ;
  1657. 'FINSI' ;
  1658. 'SI' ('EGA' iRe 3200) ;
  1659. lok = VRAI ;
  1660. lu = 'PROG' 0.00000 -0.32407 -0.35344 -0.37827 -0.41933 -0.34323
  1661. -0.24427 -0.086636
  1662. -0.04272 0.07156 0.19791 0.34682 0.46101 0.46547 0.48296
  1663. 0.53236 1.00000 ;
  1664. lv = 'PROG' 0.00000 0.39560 0.40917 0.41906 0.42768 0.37119 0.29030
  1665. 0.28188
  1666. 0.00999 -0.31184 -0.37401 -0.44307 -0.54053 -0.52357
  1667. -0.47425 -0.39017 0.00000 ;
  1668. 'FINSI' ;
  1669. 'SI' ('EGA' iRe 5000) ;
  1670. lok = VRAI ;
  1671. lu = 'PROG' 0.00000 -0.41165 -0.42901 -0.43643 -0.40435 -0.33050
  1672. -0.22855 -0.07404
  1673. -0.03039 0.08183 0.20087 0.33556 0.46036 0.45992 0.46120
  1674. 0.48223 1.00000 ;
  1675. lv = 'PROG' 0.00000 0.42447 0.43329 0.43648 0.42951 0.35368 0.28066
  1676. 0.27280
  1677. 0.00945 -0.30018 -0.36214 -0.41442 -0.52876 -0.55408
  1678. -0.55069 -0.49774 0.00000 ;
  1679. 'FINSI' ;
  1680. 'SI' ('EGA' iRe 7500) ;
  1681. lok = VRAI ;
  1682. lu = 'PROG' 0.00000 -0.43154 -0.43590 -0.43025 -0.38324 -0.32393
  1683. -0.23176 -0.07503
  1684. -0.03800 0.08342 0.20591 0.34228 0.47167 0.47323 0.47048
  1685. 0.47244 1.00000 ;
  1686. lv = 'PROG' 0.00000 0.43979 0.44030 0.43564 0.41824 0.35060 0.28117
  1687. 0.27348
  1688. 0.00824 -0.30448 -0.36213 -0.41050 -0.48590 -0.52347
  1689. -0.55216 -0.53858 0.00000 ;
  1690. 'FINSI' ;
  1691. 'SI' ('EGA' iRe 10000) ;
  1692. lok = VRAI ;
  1693. lu = 'PROG' 0.00000 -0.42735 -0.42537 -0.41657 -0.38000 -0.32709
  1694. -0.23186 -0.07540
  1695. -0.03111 0.08344 0.20673 0.34635 0.47804 0.48070 0.47783
  1696. 0.47221 1.00000 ;
  1697. lv = 'PROG' 0.00000 0.43983 0.43733 0.43124 0.41487 0.35070 0.28003
  1698. 0.27224
  1699. 0.00831 -0.30719 -0.36737 -0.41496 -0.45863 -0.49099
  1700. -0.52987 -0.54302 0.00000 ;
  1701. 'FINSI' ;
  1702. 'SI' ('NON' lok) ;
  1703. cherr = 'CHAINE' 'Pas de sol tabulee pour Re = ' Re ;
  1704. 'ERREUR' cherr ;
  1705. 'FINSI' ;
  1706. 'RESPRO' ly lu lx lv ;
  1707. 'FINPROC' ;
  1708. *
  1709. * Calcul la condition à la limite sur le bord haut
  1710. *
  1711. * 1 ^
  1712. * | ________
  1713. * | / \
  1714. * | /pente= \pente = - pmax
  1715. * |/ pmax \
  1716. * 0 +------------------>
  1717. * 0 1
  1718. *
  1719. 'DEBPROC' CALCLIM ;
  1720. *
  1721. * ! Attention, gros problème de fuite avec la condition à la limite
  1722. * ! suivante
  1723. *
  1724. *ccli = '+' ('MANUEL' 'CHPO' hau 1 'UX' 1.D0)
  1725. * ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
  1726. *
  1727. * Celle-ci est bien smooth
  1728. *
  1729. *
  1730. * 'LISTE' ccli ;
  1731. *xhau = 'COORDONNEE' 1 hau ;
  1732. *phau = xhau '*' ('-' xhau 1) '*' -4.D0 ;
  1733. *ccli = '+' ('NOMC' 'UX' phau)
  1734. * ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
  1735. *
  1736. * Celle-ci est quasi singulière mais correspond au benchmark de ghia !
  1737. *
  1738. pmax = 100. ; ipmax = '/' 1. pmax ;
  1739. *
  1740. xhau = 'COORDONNEE' 1 hau ;
  1741. xm1 = '-' xhau ipmax ; axm1 = 'ABS' xm1 ;
  1742. f1 = '*' ('-' xm1 axm1) ('/' pmax 2.) ;
  1743. xm2 = '-' xhau ('-' 1. ipmax) ; axm2 = 'ABS' xm2 ;
  1744. f2 = '*' ('+' xm2 axm2) ('/' pmax -2.) ;
  1745. ft = '+' ('+' f1 f2) 1. ;
  1746. ccli = '+' ('NOMC' 'UX' ft)
  1747. ('MANUEL' 'CHPO' bor mxpri ('PROG' 0.D0 0.D0) ) ;
  1748. 'RESPRO' ccli ;
  1749. 'FINPROC' ;
  1750. *
  1751. * Calcul de l'incrément vitesse-pression NS incompressible
  1752. *
  1753. 'DEBPROC' SOLAPP ;
  1754. 'ARGUMENT' _mt*'MAILLAGE' ;
  1755. 'ARGUMENT' inco*'CHPOINT' ;
  1756. 'ARGUMENT' ccli*'CHPOINT' ;
  1757. *
  1758. mlapx = GLAPN _mt discg 'UX' discv 'FX' discv iRe ;
  1759. mlapx = '*' mlapx -1.D0 ;
  1760. mlapy = 'CHANGER' 'INCO' mlapx ('MOTS' 'UX') ('MOTS' 'UY')
  1761. ('MOTS' 'FX') ('MOTS' 'FY') ;
  1762. mcnvx = GUGRAD _mt discg 'UX' discv 'FX' discv inco mxpri discv 1. ;
  1763. mcnvy = 'CHANGER' 'INCO' mcnvx ('MOTS' 'UX') ('MOTS' 'UY')
  1764. ('MOTS' 'FX') ('MOTS' 'FY') ;
  1765. 'SI' lsupg ;
  1766. mdecx = GDECENT 2 _mt discg 'UX' discv 'FX' discv inco mxpri discv
  1767. csupg iRe 2.D0 ;
  1768. mdecy = 'CHANGER' 'INCO' mdecx ('MOTS' 'UX') ('MOTS' 'UY')
  1769. ('MOTS' 'FX') ('MOTS' 'FY') ;
  1770. 'FINSI' ;
  1771. mbbt = GBBT _mt discg discv discp -1. ;
  1772. * Régularisation de pression
  1773. mp = GMASS _mt discg 'LX' discp 'FLX' discp ('*' ap -1.D0) ;
  1774. * Blocage
  1775. mblo = 'BLOQUE' 'DEPL' bor ;
  1776. fblo = 'DEPIMPOSE' mblo ccli ;
  1777. mphy = mlapx 'ET' mlapy 'ET' mcnvx 'ET' mcnvy 'ET' mbbt 'ET' mblo ;
  1778. 'SI' lsupg ;
  1779. mphy = mphy 'ET' mdecx 'ET' mdecy ;
  1780. 'FINSI' ;
  1781. mtot = mphy 'ET' mp ;
  1782. *
  1783. ftot = '-' fblo ('*' mphy inc) ;
  1784. *
  1785. incr = 'KRES' mtot ftot ;
  1786. 'RESPRO' incr ;
  1787. 'FINPROC' ;
  1788. *
  1789. * Calcul de la métrique : on utilise la valeur iRe * grad v : gradtv
  1790. * (dissipation thermique = production locale d'entropie) pour réaliser
  1791. * l'adaptation
  1792. *
  1793. 'DEBPROC' TGDENT ;
  1794. 'ARGUMENT' _mt*'MAILLAGE' ;
  1795. 'ARGUMENT' vit*'CHPOINT' ;
  1796. 'ARGUMENT' beta*'FLOTTANT' ;
  1797. * Volume des éléments
  1798. vmtl = GMASS _mt discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
  1799. vmtml = GMASS _mtmoy discg 'SCAL' discg 'SCAL' discg 1. c1 c1 ;
  1800. vmtm = 'MAXIMUM' ('RESULT' vmtml) ;
  1801. discc = 'CSTE' ;
  1802. *
  1803. * Calcul de la dissipation thermique
  1804. *
  1805. fdtxi = GLAPN _mt discg 'UX' discv 'UX' discv iRe vit vit ;
  1806. fdtyi = GLAPN _mt discg 'UY' discv 'UY' discv iRe vit vit ;
  1807. fdtxi = '*' fdtxi -1. ;
  1808. fdtyi = '*' fdtyi -1. ;
  1809. fdtx = '/' fdtxi vmtl ;
  1810. fdty = '/' fdtyi vmtl ;
  1811. fdt = '+' fdtx fdty ;
  1812. 'SI' lsupgm ;
  1813. fdecxi = GDECENT 2 _mt discg 'UX' discv 'UX' discv vit mxpri discv
  1814. csupg iRe 2.D0 vit vit ;
  1815. fdecyi = GDECENT 2 _mt discg 'UY' discv 'UY' discv vit mxpri discv
  1816. csupg iRe 2.D0 vit vit ;
  1817. fdecx = '/' fdecxi vmtl ;
  1818. fdecy = '/' fdecyi vmtl ;
  1819. fdec = '+' fdecx fdecy ;
  1820. 'FINSI' ;
  1821. 'SI' (graph 'ET' debug) ;
  1822. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1823. tit = 'CHAINE' 'Dissipation thermique' ;
  1824. 'TRACER' rescal $mb 'TITR' tit ;
  1825. 'SI' lsupg ;
  1826. rescal = 'KCHA' $mt fdec 'CHAM' ;
  1827. tit = 'CHAINE' 'Dissipation numérique' ;
  1828. 'TRACER' rescal $mb 'TITR' tit ;
  1829. 'FINSI' ;
  1830. 'FINSI' ;
  1831. 'SI' lsupg ;
  1832. fdt = '+' fdt fdec ;
  1833. 'FINSI' ;
  1834. *
  1835. * Lissage de la dissipation
  1836. *
  1837. 'SI' lissd ;
  1838. mms = GMASS _mt discg 'SCAL' discg 'SCAL' discr 1. c1 ;
  1839. fdti = GMASS _mt discg 'SCAL' 'CSTE' 'SCAL' discr 1. fdt ;
  1840. fdts = '/' fdti mms ;
  1841. fdtsi = GMASS _mt discg 'SCAL' discr 'SCAL' 'CSTE' 1. fdts ;
  1842. fdt = '/' fdtsi vmtl ;
  1843. 'SI' (graph 'ET' debug) ;
  1844. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1845. tit = 'CHAINE' 'Dissipation apres lissage' ;
  1846. 'TRACER' rescal $mb 'TITR' tit ;
  1847. 'FINSI' ;
  1848. 'FINSI' ;
  1849. *
  1850. * Limitation de la dissipation
  1851. *
  1852. sfdti = GMASS _mtmoy discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
  1853. mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmtm ;
  1854. 'SI' verbose ;
  1855. 'MESSAGE' ('CHAINE' ' Diss. therm. moy.=' mfdt) ;
  1856. 'FINSI' ;
  1857. seuil = '*' limfdt mfdt ;
  1858. * Limitation des valeurs supérieures
  1859. m1 = 'MASQUE' fdt 'INFERIEUR' seuil ;
  1860. m0 = '*' ('-' m1 1.) -1. ;
  1861. fdt = '+' ('*' m1 fdt) ('*' m0 seuil) ;
  1862. 'SI' (graph 'ET' debug) ;
  1863. rescal = 'KCHA' $mt m0 'CHAM' ;
  1864. tit = 'CHAINE' 'Masquage de la dissipation' ;
  1865. 'TRACER' rescal $mb 'TITR' tit ;
  1866. rescal = 'KCHA' $mt fdt 'CHAM' ;
  1867. tit = 'CHAINE' 'Dissipation apres limitation' ;
  1868. 'TRACER' rescal $mb 'TITR' tit ;
  1869. 'FINSI' ;
  1870. *
  1871. * Scaling de la dissipation
  1872. *
  1873. sfdti = GMASS _mtmoy discg 'SCAL' 'CSTE' 'SCAL' 'CSTE' 1. fdt ;
  1874. mfdt = '/' ('MAXIMUM' ('RESULT' sfdti)) vmtm ;
  1875. 'SI' verbose ;
  1876. 'MESSAGE' ('CHAINE' ' Diss. therm. moy. apres limitation=' mfdt) ;
  1877. 'FINSI' ;
  1878. * D'où alpha :
  1879. alpha = '*' ('/' ('-' 1.D0 beta) beta) mfdt ;
  1880. 'SI' ('ET' debug verbose) ;
  1881. 'MESSAGE' ('CHAINE' ' Alpha = ' alpha) ;
  1882. 'FINSI' ;
  1883. *
  1884. * Calcul du gradient de la dissipation thermique et du tenseur directionnel
  1885. *
  1886. lmvit = 'MOTS' 'UX' 'UY' ;
  1887. mmgs = GMASS _mt discg lmvit discr lmvit discr 1. ;
  1888. gfdti = GGRADT _mt discg 'SCAL' 'CSTE' lmvit discr 1. fdt ;
  1889. *gfdt = '/' gfdti vmtl ;
  1890. gfdts = 'RESOUD' mmgs gfdti ;
  1891. gfdti = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
  1892. gfdt = '/' gfdti vmtl ;
  1893. 'SI' (graph 'ET' debug) ;
  1894. tit = 'CHAINE' 'Gradient de dissipation thermique ; i=' &bcl ;
  1895. vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
  1896. 'TRACER' vvit mt 'TITR' tit ;
  1897. 'FINSI' ;
  1898. *
  1899. * Lissage du gradient
  1900. *
  1901. 'SI' lissg ;
  1902. mms = GMASS _mt discg 'SCAL' discg 'SCAL' discr 1. c1 ;
  1903. gfdti = GMASS _mt discg lmvit 'CSTE' lmvit discr 1. gfdt ;
  1904. gfdts = '/' gfdti mms ;
  1905. gfdtsi = GMASS _mt discg lmvit discr lmvit 'CSTE' 1. gfdts ;
  1906. gfdt = '/' gfdtsi vmtl ;
  1907. 'SI' (graph 'ET' debug) ;
  1908. tit = 'CHAINE' 'Gradient apres lissage ; i=' &bcl ;
  1909. vvit = 'VECT' gfdt 'DEPL' 'JAUN' ;
  1910. 'TRACER' vvit mt 'TITR' tit ;
  1911. 'FINSI' ;
  1912. 'FINSI' ;
  1913. *
  1914. nfdt = 'PSCAL' gfdt gfdt lmvit lmvit ;
  1915. snfdt = '**' nfdt 0.5D0 ;
  1916. msnfdt = 'MAXIMUM' snfdt ;
  1917. 'SI' ('<' msnfdt 1.D-100) ;
  1918. binf = 1.D0 ;
  1919. 'SINON' ;
  1920. binf = '*' msnfdt 1.D-10 ;
  1921. 'FINSI' ;
  1922. snfdt = '+' snfdt binf ;
  1923. sgfdt = '/' gfdt snfdt ;
  1924. 'SI' (graph 'ET' debug) ;
  1925. tit = 'CHAINE' 'Gddt mis a lechelle ; i=' &bcl ;
  1926. vvit = 'VECT' sgfdt 'DEPL' 'JAUN' ;
  1927. 'TRACER' vvit mt 'TITR' tit ;
  1928. 'FINSI' ;
  1929. td11 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UX') ('MOTS' 'SCAL') ;
  1930. td22 = '*' sgfdt sgfdt ('MOTS' 'UY') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
  1931. td12 = '*' sgfdt sgfdt ('MOTS' 'UX') ('MOTS' 'UY') ('MOTS' 'SCAL') ;
  1932. * D'où le tenseur
  1933. gxx = '**' fdt 2 ;
  1934. vdim = 'VALEUR' 'DIME' ;
  1935. limgd2 = '**' limgd 2 ;
  1936. gd1 = '**' ('/' gxx ('*' alpha alpha))
  1937. ('/' 1.D0 vdim) ;
  1938. gd2 = '-' ('**' ('+' gd1 1.) vdim) 1. ;
  1939. *
  1940. * Considération pour les calculs de ngd :
  1941. * en 1D : gd1 = gd2, la partie anisotrope doit s'annuler
  1942. *
  1943. gdb = '-' ('*' ('**' ('+' gd1 1.) delta)
  1944. ('**' ('+' gd2 1.) ('-' 1. delta))) 1. ;
  1945. gda = '-' ('**' ('+' gd1 1.) delta) 1. ;
  1946. dgd = '-' gdb gda ;
  1947. *
  1948. 'SI' (graph 'ET' debug) ;
  1949. rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
  1950. tit = 'CHAINE' 'Partie isotrope de ladaptation' ;
  1951. 'TRACER' rescal $mb 'TITR' tit ;
  1952. rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
  1953. tit = 'CHAINE' 'Partie anisotrope de ladaptation' ;
  1954. 'TRACER' rescal $mb 'TITR' tit ;
  1955. 'FINSI' ;
  1956. *
  1957. * Limitation des valeurs supérieures
  1958. *
  1959. * de la partie isotrope
  1960. m1 = 'MASQUE' gda 'INFERIEUR' limgd2 ;
  1961. m0 = '*' ('-' m1 1.) -1. ;
  1962. gda = '+' ('*' m1 gda) ('*' m0 limgd2) ;
  1963. * de la partie anisotrope
  1964. gdb = gda '+' dgd ;
  1965. m1 = 'MASQUE' gdb 'INFERIEUR' limgd2 ;
  1966. m0 = '*' ('-' m1 1.) -1. ;
  1967. gdb = '+' ('*' m1 gdb) ('*' m0 limgd2) ;
  1968. dgd = '-' gdb gda ;
  1969. 'SI' (graph 'ET' debug) ;
  1970. rescal = 'KCHA' $mt ('**' gda 0.5D0) 'CHAM' ;
  1971. tit = 'CHAINE' 'Partie isotrope de ladaptation apres lim' ;
  1972. 'TRACER' rescal $mb 'TITR' tit ;
  1973. rescal = 'KCHA' $mt ('**' dgd 0.5D0) 'CHAM' ;
  1974. tit = 'CHAINE' 'Partie anisotrope de ladaptation apres lim' ;
  1975. 'TRACER' rescal $mb 'TITR' tit ;
  1976. 'FINSI' ;
  1977. *
  1978. * Le tenseur
  1979. *
  1980. g11 = 'NOMC' 'G11' (gda '+' ('*' dgd td11) '+' 1.D0) ;
  1981. g22 = 'NOMC' 'G22' (gda '+' ('*' dgd td22) '+' 1.D0) ;
  1982. g21 = 'NOMC' 'G21' ('*' dgd td12) ;
  1983. gtot = g11 '+' g22 '+' g21 ;
  1984. *
  1985. 'RESPRO' gtot fdt ;
  1986. 'FINPROC' ;
  1987. *
  1988. * Début du jeu de donnés
  1989. *
  1990. 'OPTION' 'DIME' 2 ;
  1991. 'SI' ('NON' interact) ;
  1992. 'OPTION' 'TRAC' 'PSC' ;
  1993. 'SINON' ;
  1994. 'OPTION' 'TRAC' 'X' ;
  1995. 'FINSI' ;
  1996. *
  1997. * Maillage
  1998. *
  1999. * Paramètres d'adaptation :
  2000. * beta :
  2001. * 0. pas d'adaptation ;
  2002. * 0.5 la moitié des mailles dans les régions où le paramètre de
  2003. * contrôle est grand
  2004. * 1. toutes les mailles dans les régions où le paramètre de
  2005. * contrôle est grand
  2006. * Usuellement, 0.5 < beta < 0.8
  2007. * lissd : lissage de la dissipation thermique
  2008. * limfdt : limitation de la dissipation thermique
  2009. * on limite les valeurs qui dépassent (moy. fdt) * limfdt
  2010. * limgd : limitation de la diagonale du tenseur métrique
  2011. * on limite les valeurs qui dépassent limgd
  2012. * delta : 0.D0 adaptation totalement anisotrope
  2013. * 1.D0 adaptation totalement isotrope
  2014. * omi : relaxation de l'incrément vitesse-pression
  2015. * omd : relaxation de l'incrément de déplacement du maillage
  2016. * theta et gamma : paramètres de l'adapteur de DEDU ADAP
  2017. omi = 0.5D0 ;
  2018. omd = 0.5D0 ;
  2019. 'OPTI' 'ELEM' 'QUA8' ;
  2020. 'SI' complet ;
  2021. nx = 25 ; ny = 25 ;
  2022. cvg = 2.D-3 ; nitmax = 85 ;
  2023. lRe = 'PROG' 100. 400. 1000. 3200. 5000. 7500. 10000. ;
  2024. * Les erreurs augmentent un peu suite correction bug fiche 10552
  2025. lerru = 'PROG' 3.E-03 1.2E-03 3.E-03 6.E-03
  2026. 6.E-03 1.5E-02 2.E-02 ;
  2027. lerrv = 'PROG' 6.E-03 2.E-03 4.E-03 9.E-03
  2028. 7.E-03 1.2E-02 2.E-02 ;
  2029. *old lerru = 'PROG' 3.E-03 1.E-03 3.E-03 6.E-03
  2030. *old 6.E-03 7.E-03 8.E-03 ;
  2031. *old lerrv = 'PROG' 6.E-03 2.E-03 4.E-03 6.E-03
  2032. *old 6.E-03 5.E-03 1.E-02 ;
  2033. beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
  2034. * beta = 0.8D0 ; lissd = FAUX ; limfdt = 7.D0 ;
  2035. * beta = 0.7D0 ; lissd = FAUX ; limfdt = 5.D0 ;
  2036. * theta = 0.5D0 ; gamma = 2.D0 ;
  2037. theta = 0.5D0 ; gamma = 2.D0 ;
  2038. lissg = FAUX ; limgd = 15.D0 ;
  2039. delta = 0.75D0 ;
  2040. * delta = 0.5D0 ;
  2041. 'SINON' ;
  2042. nx = 10 ; ny = 10 ;
  2043. * nx = 15 ; ny = 15 ;
  2044. cvg = 5.D-3 ; nitmax = 50 ;
  2045. lRe = 'PROG' 100. 400. 1000. ;
  2046. * lRe = 'PROG' 100. 400. 1000. 3200. 5000. ;
  2047. * Les erreurs augmentent un peu suite correction bug fiche 10552
  2048. lerru = 'PROG' 4.E-03 1.E-02 2.E-02 ;
  2049. lerrv = 'PROG' 5.E-03 1.2E-02 2.E-02 ;
  2050. *old lerru = 'PROG' 4.E-03 7.E-03 2.E-02 ;
  2051. *old lerrv = 'PROG' 5.E-03 9.E-03 2.E-02 ;
  2052. * lerru = 'PROG' 4.E-03 7.E-03 2.E-02 1. 1. ;
  2053. * lerrv = 'PROG' 5.E-03 9.E-03 2.E-02 1. 1. ;
  2054. beta = 0.7D0 ; lissd = FAUX ; limfdt = 7.D0 ;
  2055. theta = 0.5D0 ; gamma = 2.D0 ;
  2056. lissg = FAUX ; limgd = 15.D0 ;
  2057. delta = 0.75D0 ;
  2058. 'FINSI' ;
  2059. lerruc = 'PROG' ;
  2060. lerrvc = 'PROG' ;
  2061. pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ;
  2062. bas = 'DROIT' nx pA pB ; dro = 'DROIT' ny pB pC ;
  2063. hau = 'DROIT' nx pC pD ; gau = 'DROIT' ny pD pA ;
  2064. mt = 'DALLER' bas dro hau gau ;
  2065. bor = 'CONTOUR' mt ;
  2066. _mt = 'CHANGER' mt 'QUAF' ;
  2067. $mt = 'MODE' _mt 'NAVIER_STOKES' 'QUAF' ;
  2068. $mb = 'MODE' ('DOMA' $mt 'MAILLAGE') 'THERMIQUE' ;
  2069. mtl = 'CHANGER' mt 'LINEAIRE' ;
  2070. *
  2071. * Maillage sans les éléments de coin pour la prise des moyennes
  2072. *
  2073. _mtcoin = 'ELEM' _mt 'APPUYE' 'LARGEMENT' ('ET' pC pD) ;
  2074. _mtmoy = 'DIFF' _mt _mtcoin ;
  2075. * Paramètres pour le décentrement
  2076. * lsupg : VRAI=decentrement
  2077. * csupg : facteur multiplicatif
  2078. lsupg = FAUX ;
  2079. lsupgm = FAUX ;
  2080. csupg = 0.3D0 ;
  2081. *
  2082. * discg : discrétisation géométrique
  2083. * discv : discrétisation vitesse
  2084. * discp : discrétisation pression
  2085. * discr : discrétisation pour la mise au sommet du paramètre de contrôle
  2086. discg = 'QUAF' ;
  2087. discv = 'QUAF' ;
  2088. discp = 'LINE' ;
  2089. discr = 'LINE' ;
  2090. *
  2091. methgau = 'GAU7' ;
  2092. mxpri = 'MOTS' 'UX' 'UY' ;
  2093. mxdua = 'MOTS' 'FX' 'FY' ;
  2094. mppri = 'MOTS' 'LX' ;
  2095. mpdua = 'MOTS' 'FLX' ;
  2096. * Limitation du déplacement
  2097. ldmax = FAUX ;
  2098. dmax = 1. ;
  2099. echvit = 1. ;
  2100. echdx = 1. ;
  2101. *
  2102. *bug detecte fiche 10552 c1 = 'MANUEL' 'CHPO' mt ('MOTS' 'SCAL') ('PROG' 1.) ;
  2103. c1 = 'MANUEL' 'CHPO' _mt ('MOTS' 'SCAL') ('PROG' 1.) ;
  2104. *
  2105. lok = VRAI ;
  2106. *
  2107. ccli = CALCLIM ;
  2108. mailv = GMAIL _mt discv ;
  2109. inc = 'MANU' 'CHPO' mailv mxpri ('PROG' 0. 0.) ;
  2110. inc = inc '+' ('COPIER' ccli) ;
  2111. *
  2112. dRe = 'DIME' lRe ;
  2113. 'REPETER' iiRe dRe ;
  2114. Re = 'EXTRAIRE' lRe &iiRe ;
  2115. iRe = '/' 1. Re ;
  2116. * Numérique
  2117. ap= 1.D0 '*' iRe ;
  2118. *
  2119. * Résumé du cas
  2120. *
  2121. 'SAUTER' 1 'LIGN' ;
  2122. 'MESSAGE' ('CHAINE' '***********************************') ;
  2123. 'MESSAGE' ('CHAINE' 'Résumé du cas : ') ;
  2124. 'MESSAGE' ('CHAINE' 'Nombre de maille = ' nx ' x ' ny) ;
  2125. 'MESSAGE' ('CHAINE' 'Reynolds = ' Re) ;
  2126. 'MESSAGE' ('CHAINE' 'Param. adaptation = ' beta) ;
  2127. 'MESSAGE' ('CHAINE' '***********************************') ;
  2128. *
  2129. * Algorithme
  2130. *
  2131. 'REPETER' bcl nitmax ;
  2132. 'SI' verbose ;
  2133. 'MESSAGE' ('CHAINE' 'Itération : ' &bcl ) ;
  2134. 'FINSI' ;
  2135. * Mise à jour des conditions aux limites
  2136. ccli = CALCLIM ;
  2137. * Calcul des champs
  2138. dinc = SOLAPP _mt inc ccli ;
  2139. inc = inc '+' ('*' dinc omi) ;
  2140. vit = 'EXCO' mxpri inc ;
  2141. pre = 'EXCO' mppri inc ;
  2142. dvit = 'EXCO' mxpri dinc ;
  2143. echdvit = 'MAXIMUM' dvit 'ABS' ;
  2144. 'SI' verbose ;
  2145. 'MESSAGE' ('CHAINE' ' Echelle increment vitesse : ' echdvit) ;
  2146. 'FINSI' ;
  2147. *
  2148. 'SI' (graph 'ET' debug) ;
  2149. tit = 'CHAINE' 'Vitesse ; i=' &bcl ;
  2150. vvit = 'VECT' ('/' 1.D0 nx) vit 'DEPL' 'JAUN' ;
  2151. 'TRACER' vvit mt 'TITR' tit ;
  2152. 'FINSI' ;
  2153. 'SI' (graph 'ET' debug) ;
  2154. tit = 'CHAINE' 'Pression ; i=' &bcl ;
  2155. 'TRACER' pre mtl 'TITR' tit ;
  2156. 'FINSI' ;
  2157. *
  2158. * Calcul du champ de déplacement
  2159. *
  2160. * Construction de la métrique
  2161. tdcd fdt = TGDENT _mt vit beta ;
  2162. 'SI' graph ;
  2163. rescal = 'KCHA' $mt fdt 'CHAM' ;
  2164. vvit = 'VECT' ('/' 1.D0 nx) vit 'DEPL' 'JAUN' ;
  2165. tit = 'CHAINE' 'Diss. therm. + Vitesse ; i=' &bcl ' ; Re='
  2166. Re ;
  2167. 'SI' debug ;
  2168. 'TRACER' $mb rescal vvit _mt 'TITR' tit ;
  2169. 'SINON' ;
  2170. 'TRACER' $mb rescal vvit _mt 'TITR' tit 'NCLK' ;
  2171. 'FINSI' ;
  2172. 'FINSI' ;
  2173. * Champ de déplacement
  2174. mblox = 'BLOQUE' 'UX' (gau 'ET' dro) ;
  2175. mbloy = 'BLOQUE' 'UY' (bas 'ET' hau) ;
  2176. mblo = mblox 'ET' mbloy ;
  2177. dep = 'DEDU' 'ADAP' _mt mblo 'DISG' discg
  2178. 'METR' tdcd 'CSTE' 'THET' theta 'GAMM' gamma
  2179. 'NITM' 1 'METG' methgau ;
  2180. *
  2181. echdep = 'MAXIMUM' dep 'ABS' ;
  2182. 'SI' verbose ;
  2183. 'MESSAGE' ('CHAINE' ' Echelle des depl. : ' echdep) ;
  2184. 'FINSI' ;
  2185. *
  2186. 'SI' ldmax ;
  2187. 'SI' ('>' echdep dmax) ;
  2188. fdep = '/' dmax echdep ;
  2189. dep = '*' dep fdep ;
  2190. 'FINSI' ;
  2191. 'SI' verbose ;
  2192. 'MESSAGE'
  2193. ('CHAINE' ' Echelle des depl. apres lim : ' echdep) ;
  2194. 'FINSI' ;
  2195. 'FINSI' ;
  2196. dep = '*' dep omd ;
  2197. crit2 = '<' ('/' echdep echdx) cvg ;
  2198. 'SI' ('NON' crit2) ;
  2199. 'FORME' dep ;
  2200. 'FINSI' ;
  2201. ciso = DEADUTIL 'QISO' _mt discg 'GAU7' tdcd 'CSTE' ;
  2202. cequ = DEADUTIL 'QEQU' _mt discg 'GAU7' tdcd 'CSTE' ;
  2203. maciso = 'MAXIMUM' ciso ; miciso = 'MINIMUM' ciso ;
  2204. macequ = 'MAXIMUM' cequ ; micequ = 'MINIMUM' cequ ;
  2205. 'SI' verbose ;
  2206. 'MESSAGE' ('CHAINE'
  2207. ' CISO : max. = ' maciso ' min. = ' miciso) ;
  2208. 'MESSAGE' ('CHAINE'
  2209. ' CEQU : max. = ' macequ ' min. = ' micequ) ;
  2210. 'FINSI' ;
  2211. 'SI' (graph 'ET' debug) ;
  2212. cliso = 'KCHA' $mt ciso 'CHAM' ;
  2213. tit = 'CHAINE' 'Isotropie ; i=' &bcl ' ; Re=' Re ;
  2214. 'TRACER' cliso $mb 'TITR' tit ;
  2215. clequ = 'KCHA' $mt cequ 'CHAM' ;
  2216. tit = 'CHAINE' 'Equidis. ; i=' &bcl ' ; Re=' Re ;
  2217. 'TRACER' clequ $mb 'TITR' tit ;
  2218. 'FINSI' ;
  2219. * Critères de convergence :
  2220. * sur les incréments
  2221. crit1 = '<' ('/' echdvit echvit) cvg ;
  2222. crit2 = '<' ('/' echdep echdx) cvg ;
  2223. 'SI' ('ET' crit1 crit2) ;
  2224. 'QUITTER' bcl ;
  2225. 'FINSI' ;
  2226. 'FIN' bcl ;
  2227. 'SI' ('ET' graph interact) ;
  2228. tit = 'CHAINE' 'Vitesse ; Re=' Re ;
  2229. vvit = 'VECT' ('/' 2.D0 nx) vit 'DEPL' 'JAUN' ;
  2230. 'TRACER' vvit mt 'TITR' tit ;
  2231. 'FINSI' ;
  2232. *
  2233. ly lu lx lv = GHIA Re ;
  2234. lxd = 'PROG' ('DIME' ly) '*' 0.5D0 ;
  2235. lyd = 'PROG' ('DIME' lx) '*' 0.5D0 ;
  2236. lig1 = 'QUELCONQUE' 'SEG2' lxd ly ;
  2237. lig2 = 'QUELCONQUE' 'SEG2' lx lyd ;
  2238. *
  2239. chamvit = 'CHANGER' 'CHAM' vit _mt ;
  2240. *
  2241. * U(y)
  2242. *
  2243. lun = PROI lig1 ('EXCO' 'UX' chamvit) ;
  2244. evghia = 'EVOL' 'MANU' ly lu ;
  2245. evnum = 'EVOL' 'CHPO' lun 'UX' lig1 ;
  2246. 'SI' graph ;
  2247. evt = evghia 'ET' evnum ;
  2248. tabt = 'TABLE' ;
  2249. tabt . 1 = 'CHAINE' 'Ghia' ;
  2250. tabt . 2 = 'CHAINE' 'Nous' ;
  2251. tit = 'CHAINE' 'Profil U(y) ; Re=' Re ;
  2252. titx = 'CHAINE' 'y' ;
  2253. tity = 'CHAINE' 'U' ;
  2254. DESSEVOL evt tabt tit titx tity ;
  2255. 'FINSI' ;
  2256. erru = ('INTG' ('-' evghia evnum) 'ABSO') ;
  2257. 'MESSAGE' ('CHAINE' ' erru = ' erru) ;
  2258. lerruc = 'ET' lerruc ('PROG' erru) ;
  2259. verur = 'EXTRAIRE' lerru &iiRe ;
  2260. teru = ('<' erru verur) ;
  2261. 'SI' ('NON' teru) ;
  2262. cherr = 'CHAINE' '!!! Erreur, on aurait voulu erru < ' verur ;
  2263. 'MESSAGE' cherr ;
  2264. 'FINSI' ;
  2265. lok = 'ET' lok teru ;
  2266. *
  2267. * V(x)
  2268. *
  2269. lvn = PROI lig2 ('EXCO' 'UY' chamvit) ;
  2270. evghia = 'EVOL' 'MANU' lx lv ;
  2271. evnum = 'EVOL' 'CHPO' lvn 'UY' lig2 ;
  2272. 'SI' graph ;
  2273. evt = evghia 'ET' evnum ;
  2274. tabt = 'TABLE' ;
  2275. tabt . 1 = 'CHAINE' 'Ghia' ;
  2276. tabt . 2 = 'CHAINE' 'Nous' ;
  2277. tit = 'CHAINE' 'Profil V(x) ; Re=' Re ;
  2278. titx = 'CHAINE' 'x' ;
  2279. tity = 'CHAINE' 'V' ;
  2280. DESSEVOL evt tabt tit titx tity ;
  2281. 'FINSI' ;
  2282. errv = ('INTG' ('-' evghia evnum) 'ABSO') ;
  2283. 'MESSAGE' ('CHAINE' ' errv = ' errv) ;
  2284. lerrvc = 'ET' lerrvc ('PROG' errv) ;
  2285. vervr = 'EXTRAIRE' lerrv &iiRe ;
  2286. terv = ('<' errv vervr) ;
  2287. 'SI' ('NON' terv) ;
  2288. cherr = 'CHAINE' '!!! Erreur, on aurait voulu errv < ' vervr ;
  2289. 'MESSAGE' cherr ;
  2290. 'FINSI' ;
  2291. lok = 'ET' lok terv ;
  2292. 'FIN' iiRe ;
  2293. *
  2294. * Fin du jeu de donnees
  2295. *
  2296. 'SAUTER' 2 'LIGNE' ;
  2297. 'SI' lok ;
  2298. 'MESSAGE' 'Tout sest bien passe' ;
  2299. 'SINON' ;
  2300. 'MESSAGE' 'Il y a eu des erreurs' ;
  2301. 'FINSI' ;
  2302. 'SAUTER' 2 'LIGNE' ;
  2303. 'SI' interact ;
  2304. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  2305. 'FINSI' ;
  2306. 'SI' ('NON' lok) ;
  2307. 'ERREUR' 5 ;
  2308. 'FINSI' ;
  2309. *
  2310. * End of dgibi file DEDU_GHIA
  2311. *
  2312. 'FIN' ;
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.  
  2319.  
  2320.  
  2321.  
  2322.  
  2323.  
  2324.  
  2325.  
  2326.  
  2327.  
  2328.  

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