Télécharger sudden_expansion.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : sudden_expansion.dgibi
  2. *
  3. 'OPTI' 'ECHO' 0 ;
  4. *
  5. 'SAUTER' 2 'LIGNE' ;
  6. 'MESSAGE' ' Execution de sudden_expansion.dgibi' ;
  7. 'SAUTER' 2 'LIGNE' ;
  8. *
  9. graph = faux ;
  10. complet = faux ;
  11. interact = faux ;
  12. ************************************************************************
  13. * NOM : SUDDEN_EXPANSION
  14. * DESCRIPTION : Ecoulement dans un tube débouchant dans un autre de plus
  15. * gros diamètre en 2D plan et en 2D axisymétrique.
  16. *
  17. * Références :
  18. *@article{Oliveira1998655,
  19. *author = "P. J. Oliveira and F. T. Pinho and A. Schulte",
  20. *title = "A general correlation for the local loss coefficient in Newtonian axisymmetric sudden expansions",
  21. *journal = "International Journal of Heat and Fluid Flow",
  22. *year = "1998",
  23. *volume = "19",
  24. *number = "6",
  25. *pages = "655 - 660"}
  26. *
  27. *@Article{scott_mirza,
  28. * author = {P.S. Scott and F.A. Mirza and J. Vlachopoulos},
  29. * title = {A Finite Element Analysis of Laminar Flows through Planar and Axisymmetric abrupt expansions},
  30. * journal = {Computers & Fluids},
  31. * year = {1986},
  32. * volume = {14},
  33. * number = {4},
  34. * pages = {423 - 432}}
  35. *
  36. *@Article{fletcher_maskell,
  37. * author = {D.F. Fletcher and S.J. Maskell and M.A. Patrick},
  38. * title = {Heat and Mass Transfer computations for laminar flows in an axisymmetric sudden expansion},
  39. * journal = {Computers and Fluids},
  40. * year = {1985},
  41. * volume = {13},
  42. * number = {2},
  43. * pages = {207-221}}
  44. *
  45. *@Article{macagno_hung,
  46. * author = {Enzo O. Macagno and Tin-Kan Hung},
  47. * title = {Computational and experimental study of a captive annular eddy},
  48. * journal = {Journal of Fluid Mechanics},
  49. * year = {1967},
  50. * volume = {28},
  51. * number = {1},
  52. * pages = {43-64}}
  53. *
  54. *
  55. *
  56. * LANGAGE : GIBIANE-CAST3M
  57. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  58. * mél : gounand@semt2.smts.cea.fr
  59. **********************************************************************
  60. * VERSION : v1, 04/01/2011, version initiale
  61. * HISTORIQUE : v1, 04/01/2011, création
  62. * HISTORIQUE :
  63. * HISTORIQUE :
  64. ************************************************************************
  65. 'SI' ('NON' interact) ;
  66. 'OPTION' 'TRAC' 'PS' ;
  67. 'SINON' ;
  68. 'OPTION' 'TRAC' 'X' ;
  69. 'FINSI' ;
  70. *
  71. ******************************************
  72. * *
  73. * Procédures utilitaires *
  74. * *
  75. ******************************************
  76. *BEGINPROCEDUR errrel
  77. ************************************************************************
  78. * NOM : ERRREL
  79. * DESCRIPTION : Calcul d'une erreur relative
  80. *
  81. *
  82. *
  83. * LANGAGE : GIBIANE-CAST3M
  84. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  85. * mél : gounand@semt2.smts.cea.fr
  86. **********************************************************************
  87. * VERSION : v1, 23/04/2003, version initiale
  88. * HISTORIQUE : v1, 23/04/2003, création
  89. * HISTORIQUE :
  90. * HISTORIQUE :
  91. ************************************************************************
  92. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  93. * en cas de modification de ce sous-programme afin de faciliter
  94. * la maintenance !
  95. ************************************************************************
  96. *
  97. *
  98. 'DEBPROC' ERRREL ;
  99. 'ARGUMENT' val*'FLOTTANT' ;
  100. 'ARGUMENT' valref*'FLOTTANT' ;
  101. *
  102. 'SI' ('<' ('ABS' valref) 1.D-10) ;
  103. echref = 1.D0 ;
  104. 'SINON' ;
  105. echref = valref ;
  106. 'FINSI' ;
  107. *
  108. errabs = 'ABS' ('/' ('-' val valref) echref);
  109. *
  110. 'RESPRO' errabs ;
  111. *
  112. * End of procedure file ERRREL
  113. *
  114. 'FINPROC' ;
  115. *ENDPROCEDUR errrel
  116. *BEGINPROCEDUR exmomod
  117. ************************************************************************
  118. * NOM : EXMOMOD
  119. * DESCRIPTION : Extraction d'un mot d'un listmots
  120. *
  121. *
  122. *
  123. * LANGAGE : GIBIANE-CAST3M
  124. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  125. * mél : gounand@semt2.smts.cea.fr
  126. **********************************************************************
  127. * VERSION : v1, 23/06/2003, version initiale
  128. * HISTORIQUE : v1, 23/06/2003, création
  129. * HISTORIQUE :
  130. * HISTORIQUE :
  131. ************************************************************************
  132. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  133. * en cas de modification de ce sous-programme afin de faciliter
  134. * la maintenance !
  135. ************************************************************************
  136. *
  137. *
  138. 'DEBPROC' EXMOMOD ;
  139. 'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
  140. j = 'DIME' lm ;
  141. k = '+' (MODULO ('-' i 1) j) 1 ;
  142. lemot = 'EXTRAIRE' lm k ;
  143. * Usage de l'opérateur text pour éviter que lemot
  144. * ne soit interprété comme un opérateur
  145. 'RESPRO' 'TEXTE' lemot ;
  146. *
  147. * End of procedure file EXMOMOD
  148. *
  149. 'FINPROC' ;
  150. *ENDPROCEDUR exmomod
  151. *BEGINPROCEDUR formar
  152. ************************************************************************
  153. * NOM : FORMAR
  154. * DESCRIPTION : formate un réel de facon courte
  155. * pratique pour les noms de
  156. * sauvegarde
  157. * Exemples :
  158. * 'MESSAGE' ('CHAINE' (formar 2.9e5 1)) ;
  159. * 2.9E5
  160. * 'MESSAGE' ('CHAINE' (formar -2.9e5 1)) ;
  161. * -2.9E5
  162. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 1)) ;
  163. * 2.9E-5
  164. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 1)) ;
  165. * -2.9E-5
  166. * 'MESSAGE' ('CHAINE' (formar 2.9 1)) ;
  167. * 2.9
  168. * 'MESSAGE' ('CHAINE' (formar -2.9 1)) ;
  169. * -2.9
  170. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  171. * 0
  172. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  173. * 0
  174. * 'MESSAGE' ('CHAINE' (formar 2.9e5 0)) ;
  175. * 3E5
  176. * 'MESSAGE' ('CHAINE' (formar -2.9e5 0)) ;
  177. * -3E5
  178. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 0)) ;
  179. * 3E-5
  180. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 0)) ;
  181. * -3E-5
  182. * 'MESSAGE' ('CHAINE' (formar 2.9 0)) ;
  183. * 3
  184. * 'MESSAGE' ('CHAINE' (formar -2.9 0)) ;
  185. * -3
  186. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  187. * 0
  188. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  189. * 0
  190. *
  191. *
  192. *
  193. * LANGAGE : GIBIANE-CAST3M
  194. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  195. * mél : gounand@semt2.smts.cea.fr
  196. **********************************************************************
  197. * VERSION : v1, 18/02/2003, version initiale
  198. * HISTORIQUE : v1, 18/02/2003, création
  199. * HISTORIQUE :
  200. * HISTORIQUE :
  201. ************************************************************************
  202. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  203. * en cas de modification de ce sous-programme afin de faciliter
  204. * la maintenance !
  205. ************************************************************************
  206. *
  207. *
  208. 'DEBPROC' FORMAR ;
  209. 'ARGUMENT' fl*'FLOTTANT' ;
  210. 'ARGUMENT' vir/'ENTIER ' ;
  211. 'SI' ('NON' ('EXISTE' vir)) ;
  212. vir = 1 ;
  213. 'SINON' ;
  214. 'SI' ('<' vir 0) ;
  215. 'ERREUR' 'fournir un entier positif' ;
  216. 'FINSI' ;
  217. 'FINSI' ;
  218. 'SI' ('<' ('ABS' fl) 10.D-100) ;
  219. chfl = 'CHAINE' '0' ;
  220. 'SINON' ;
  221. *! sans le 1.D-10, ca ne fonctionne pas
  222. *! qd on entre pile poil une puissance de 10
  223. lfl = LOG10 ('ABS' fl) ;
  224. * lfl = '+' (LOG10 ('ABS' fl)) 1.D-10 ;
  225. slfl = 'SIGNE' ('ENTIER' lfl) ;
  226. 'SI' ('EGA' slfl 1) ;
  227. elfl = 'ENTIER' lfl ;
  228. 'SINON' ;
  229. elfl = '-' ('ENTIER' lfl) 1 ;
  230. 'FINSI' ;
  231. man = '/' fl ('**' 10.D0 elfl) ;
  232. *
  233. * Une verrue pour des histoires de précision...
  234. *
  235. 'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ;
  236. man = '/' man 10.D0 ;
  237. elfl = '+' elfl 1 ;
  238. 'FINSI' ;
  239. *
  240. sman = 'SIGNE' man ;
  241. 'SI' ('EGA' sman 1) ;
  242. fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ;
  243. 'SINON' ;
  244. fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ;
  245. 'FINSI' ;
  246. 'SI' ('NEG' vir 0) ;
  247. 'SI' ('NEG' elfl 0) ;
  248. chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ;
  249. 'SINON' ;
  250. chfl = 'CHAINE' 'FORMAT' fman man ;
  251. 'FINSI' ;
  252. 'SINON' ;
  253. man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ;
  254. 'SI' ('NEG' elfl 0) ;
  255. chfl = 'CHAINE' man2 'E' elfl ;
  256. 'SINON' ;
  257. chfl = 'CHAINE' man2 ;
  258. 'FINSI' ;
  259. 'FINSI' ;
  260. 'FINSI' ;
  261. 'RESPRO' chfl ;
  262. *
  263. * End of procedure file FORMAR
  264. *
  265. 'FINPROC' ;
  266. *ENDPROCEDUR formar
  267. *BEGINPROCEDUR gdiv2
  268. ************************************************************************
  269. * NOM : GDIV2
  270. * DESCRIPTION : Une matrice de masse
  271. *
  272. *
  273. *
  274. * LANGAGE : GIBIANE-CAST3M
  275. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  276. * mél : gounand@semt2.smts.cea.fr
  277. **********************************************************************
  278. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  279. * VERSION : v1, 13/05/2004, version initiale
  280. * HISTORIQUE : v1, 13/05/2004, création
  281. * HISTORIQUE :
  282. * HISTORIQUE :
  283. ************************************************************************
  284. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  285. * en cas de modification de ce sous-programme afin de faciliter
  286. * la maintenance !
  287. ************************************************************************
  288. *
  289. *
  290. 'DEBPROC' GDIV2 ;
  291. 'ARGUMENT' _mt*'MAILLAGE' ;
  292. 'ARGUMENT' _smt/'MAILLAGE' ;
  293. 'ARGUMENT' tdisc*'TABLE' ;
  294. *
  295. * Lectures
  296. *
  297. debug = FAUX ;
  298. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  299. 'NCOF' 'FCOF' 'CCOF' 'GBBT' 'GMBT' ;
  300. * Il faut initialiser valt et valq, sinon on peut capturer ceux de
  301. * la procédure appelante
  302. valt = 'valt' ; valq = 'valq' ;
  303. lbbt = 0 ;
  304. *
  305. 'REPETER' imotcle ;
  306. 'ARGUMENT' motcle/'MOT' ;
  307. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  308. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  309. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  310. 'FINSI' ;
  311. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  312. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  313. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  314. 'SI' ('EGA' motcle 'FPRI') ; 'ARGUMENT' valt*'LISTREEL' ; 'FINSI' ;
  315. 'SI' ('EGA' motcle 'FDUA') ; 'ARGUMENT' valq*'FLOTTANT' ; 'FINSI' ;
  316. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  317. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  318. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  319. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  320. 'SI' ('EGA' motcle 'GBBT') ; lbbt = 1 ; 'FINSI' ;
  321. 'SI' ('EGA' motcle 'GMBT') ; lbbt = 2 ; 'FINSI' ;
  322. 'FIN' imotcle ;
  323. *
  324. * Tests
  325. *
  326. discg = TDISC . 'GEOM' . 'DISC' ;
  327. methgau = 'GAU7' ;
  328. tnomt = TDISC . nomt ;
  329. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  330. tnomq = TDISC . nomq ;
  331. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  332. *
  333. lcof = 'EXISTE' TDISC nomo ;
  334. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  335. 'SINON' ; ncof = 0 ;
  336. 'FINSI' ;
  337. *
  338. 'SI' debug ;
  339. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  340. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  341. 'FINSI' ;
  342. 'FINSI' ;
  343. *
  344. vdim = 'VALEUR' 'DIME' ;
  345. vmod = 'VALEUR' 'MODE' ;
  346. idim = 0 ;
  347. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  348. idim = 2 ;
  349. iaxi = FAUX ;
  350. 'FINSI' ;
  351. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  352. idim = 2 ;
  353. iaxi = VRAI ;
  354. 'FINSI' ;
  355. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  356. idim = 3 ;
  357. iaxi = FAUX ;
  358. 'FINSI' ;
  359. 'SI' ('EGA' vdim 1) ;
  360. idim = 1 ;
  361. iaxi = FAUX ;
  362. 'FINSI' ;
  363. 'SI' ('EGA' idim 0) ;
  364. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  365. 'FINSI' ;
  366. 'SI' iaxi ;
  367. dp = ('*' PI 2.D0) ;
  368. rmt = 'COORDONNEE' 1 _mt ;
  369. ncof = ncof '+' 2 ;
  370. 'FINSI' ;
  371. * Scalaire ou vecteur
  372. ninct = 'DIME' (tnomt . 'NOMINC') ;
  373. nincq = 'DIME' (tnomq . 'NOMINC') ;
  374. 'SI' ('NEG' ninct idim) ;
  375. cherr = 'CHAINE'
  376. 'la primale doit etre un vecteur' ;
  377. 'ERREUR' cherr ;
  378. 'FINSI' ;
  379. 'SI' ('NEG' nincq 1) ;
  380. cherr = 'CHAINE'
  381. 'la duale doit etre un scalaire' ;
  382. 'ERREUR' cherr ;
  383. 'FINSI' ;
  384. *
  385. numop = 1 ; numder = idim ; numvar = ninct ;
  386. numdat = ncof ; numcof = ncof ;
  387. A = ININLIN numop numvar numdat numcof numder ;
  388. *
  389. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  390. 'REPETER' iiinct ninct ;
  391. iinct = &iiinct ;
  392. A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMINC' . iinct ;
  393. A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
  394. 'SI' lvalt ;
  395. 'SI' lvt ;
  396. A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
  397. 'SINON' ;
  398. A . 'VAR' . iinct . 'VALEUR' = valt ;
  399. 'FINSI' ;
  400. 'FINSI' ;
  401. 'FIN' iiinct ;
  402. *
  403. icof = 0 ;
  404. 'SI' lcof ;
  405. icof = '+' icof 1 ;
  406. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
  407. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  408. A . 'DAT' . icof . 'VALEUR' = valo ;
  409. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  410. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  411. ll = 'LECT' 1 ;
  412. 'SINON' ;
  413. ll = 'LECT' ;
  414. 'FINSI' ;
  415. *
  416. 'SI' iaxi ;
  417. icof = '+' icof 1 ;
  418. A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  419. A . 'DAT' . icof . 'DISC' = 'CSTE' ;
  420. A . 'DAT' . icof . 'VALEUR' = dp ;
  421. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  422. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  423. icof = '+' icof 1 ;
  424. A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  425. A . 'DAT' . icof . 'DISC' = discg ;
  426. A . 'DAT' . icof . 'VALEUR' = rmt ;
  427. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  428. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  429. lldpr = ll 'ET' ('LECT' ('-' icof 1) icof) ;
  430. lldp = ll 'ET' ('LECT' ('-' icof 1)) ;
  431. 'FINSI' ;
  432. *
  433. 'SI' iaxi ;
  434. 'REPETER' iidim idim ;
  435. A . 1 . &iidim . &iidim = lldpr ;
  436. 'FIN' iidim ;
  437. A . 1 . 1 . 0 = lldp ;
  438. 'SINON' ;
  439. 'REPETER' iidim idim ;
  440. A . 1 . &iidim . &iidim = ll ;
  441. 'FIN' iidim ;
  442. 'FINSI' ;
  443. *
  444. numvar = 1 ;
  445. numdat = 0 ;
  446. numcof = 0 ;
  447. *
  448. B = ININLIN numop numvar numdat numcof numder ;
  449. B . 'VAR' . 1 . 'NOMDDL' = tnomq . 'NOMINC' . 1 ;
  450. B . 'VAR' . 1 . 'DISC' = tnomq . 'DISC' ;
  451. 'SI' lvalq ;
  452. B . 'VAR' . 1 . 'VALEUR' = valq ;
  453. 'FINSI' ;
  454. B . 1 . 1 . 0 = 'LECT' ;
  455. *
  456. 'SI' ('OU' ('EGA' lbbt 0) ('EGA' lbbt 1)) ;
  457. 'SI' ('EXISTE' _smt) ;
  458. mgdiv2 = 'NLIN' discg _mt _smt A B methgau ;
  459. 'SINON' ;
  460. mgdiv2 = NLINP discg _mt A B methgau ;
  461. 'FINSI' ;
  462. 'SI' ('EGA' lbbt 1) ;
  463. 'SI' ('EXISTE' _smt) ;
  464. mgdiv3 = 'NLIN' discg _mt _smt B A methgau ;
  465. 'SINON' ;
  466. mgdiv3 = NLINP discg _mt B A methgau ;
  467. 'FINSI' ;
  468. mgdiv2 = 'ET' mgdiv2 mgdiv3 ;
  469. 'FINSI' ;
  470. 'FINSI' ;
  471. 'SI' ('EGA' lbbt 2) ;
  472. 'SI' ('EXISTE' _smt) ;
  473. mgdiv2 = 'NLIN' discg _mt _smt B A methgau ;
  474. 'SINON' ;
  475. mgdiv2 = NLINP discg _mt B A methgau ;
  476. 'FINSI' ;
  477. 'FINSI' ;
  478. *
  479. 'RESPRO' mgdiv2 ;
  480. 'FINPROC' ;
  481. *
  482. * End of procedure file GDIV2
  483. *
  484. *ENDPROCEDUR gdiv2
  485. *BEGINPROCEDUR glno
  486. ************************************************************************
  487. * NOM : GLNO
  488. * DESCRIPTION : Une matrice de masse
  489. *
  490. *
  491. *
  492. * LANGAGE : GIBIANE-CAST3M
  493. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  494. * mél : gounand@semt2.smts.cea.fr
  495. **********************************************************************
  496. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  497. * VERSION : v1, 13/05/2004, version initiale
  498. * HISTORIQUE : v1, 13/05/2004, création
  499. * HISTORIQUE :
  500. * HISTORIQUE :
  501. ************************************************************************
  502. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  503. * en cas de modification de ce sous-programme afin de faciliter
  504. * la maintenance !
  505. ************************************************************************
  506. *
  507. *
  508. 'DEBPROC' GLNO ;
  509. 'ARGUMENT' _mt*'MAILLAGE' ;
  510. 'ARGUMENT' tdisc*'TABLE' ;
  511. *
  512. 'ARGUMENT' nomt*'MOT' ;
  513. 'ARGUMENT' valt*'CHPOINT' ;
  514. 'ARGUMENT' nomq/'MOT' ;
  515. *
  516. 'SI' ('NON' ('EXISTE' nomq)) ;
  517. nomq = 'QUAF' ;
  518. 'FINSI' ;
  519. *
  520. * Second membre
  521. *
  522. smb = GMASS2 _mt tdisc 'NPRI' nomt 'CPRI' valt 'NDUA' nomq ;
  523. mat = GMASS2 _mt tdisc 'NPRI' nomq 'NDUA' nomq ;
  524. cpro = 'KRES' mat smb ;
  525. *
  526. 'RESPRO' cpro ;
  527. 'FINPROC' ;
  528. *
  529. * End of procedure file GLNO
  530. *
  531. *ENDPROCEDUR glno
  532. *BEGINPROCEDUR gmass2
  533. ************************************************************************
  534. * NOM : GMASS2
  535. * DESCRIPTION : Une matrice de masse
  536. *
  537. *
  538. *
  539. * LANGAGE : GIBIANE-CAST3M
  540. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  541. * mél : gounand@semt2.smts.cea.fr
  542. **********************************************************************
  543. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  544. * VERSION : v1, 13/05/2004, version initiale
  545. * HISTORIQUE : v1, 13/05/2004, création
  546. * HISTORIQUE :
  547. * HISTORIQUE :
  548. ************************************************************************
  549. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  550. * en cas de modification de ce sous-programme afin de faciliter
  551. * la maintenance !
  552. ************************************************************************
  553. *
  554. *
  555. 'DEBPROC' GMASS2 ;
  556. 'ARGUMENT' _mt*'MAILLAGE' ;
  557. 'ARGUMENT' _smt/'MAILLAGE' ;
  558. 'ARGUMENT' tdisc*'TABLE' ;
  559. *
  560. * Lectures
  561. *
  562. debug = FAUX ;
  563. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  564. 'NCOF' 'FCOF' 'CCOF' ;
  565. * Il faut initialiser valt et valq, sinon on peut capturer ceux de
  566. * la procédure appelante
  567. valt = 'valt' ; valq = 'valq' ;
  568. 'REPETER' imotcle ;
  569. 'ARGUMENT' motcle/'MOT' ;
  570. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  571. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  572. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  573. 'FINSI' ;
  574. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  575. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  576. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  577. tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
  578. tst = tst1 'OU' tst2 ;
  579. 'SI' tst ;
  580. 'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
  581. 'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
  582. isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
  583. 'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
  584. 'ARGUMENT' valv*'FLOTTANT' ;
  585. 'FINSI' ;
  586. 'SI' tst1 ; valt = valv ; 'FINSI' ;
  587. 'SI' tst2 ; valq = valv ; 'FINSI' ;
  588. 'FINSI' ;
  589. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  590. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  591. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  592. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  593. 'FIN' imotcle ;
  594. *
  595. * Tests
  596. *
  597. discg = TDISC . 'GEOM' . 'DISC' ;
  598. methgau = 'GAU7' ;
  599. tnomt = TDISC . nomt ;
  600. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  601. tnomq = TDISC . nomq ;
  602. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  603. * Scalaire ou vecteur
  604. ninct = 'DIME' (tnomt . 'NOMINC') ;
  605. nincq = 'DIME' (tnomq . 'NOMINC') ;
  606. 'SI' ('NEG' ninct nincq) ;
  607. cherr = 'CHAINE'
  608. 'les primales et duales nont pas le meme nombre de composantes' ;
  609. 'ERREUR' cherr ;
  610. 'FINSI' ;
  611. ninc = ninct ;
  612. *
  613. lcof = 'EXISTE' TDISC nomo ;
  614. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  615. 'SINON' ; ncof = 0 ;
  616. 'FINSI' ;
  617. *
  618. 'SI' debug ;
  619. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  620. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  621. 'FINSI' ;
  622. 'FINSI' ;
  623. *
  624. vdim = 'VALEUR' 'DIME' ;
  625. vmod = 'VALEUR' 'MODE' ;
  626. idim = 0 ;
  627. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  628. idim = 2 ;
  629. iaxi = FAUX ;
  630. 'FINSI' ;
  631. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  632. idim = 2 ;
  633. iaxi = VRAI ;
  634. 'FINSI' ;
  635. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  636. idim = 3 ;
  637. iaxi = FAUX ;
  638. 'FINSI' ;
  639. 'SI' ('EGA' vdim 1) ;
  640. idim = 1 ;
  641. iaxi = FAUX ;
  642. 'FINSI' ;
  643. * 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
  644. 'SI' ('EGA' idim 0) ;
  645. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  646. 'FINSI' ;
  647. 'SI' iaxi ;
  648. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  649. 'FINSI' ;
  650. *
  651. * Optimisation possible : construire la matrice par blocs
  652. * qd valt et valq ne sont pas donnés
  653. *
  654. numop = ninc ; numder = idim ; numvar = ninc ;
  655. numdat = ncof ; numcof = ncof ;
  656. A = ININLIN numop numvar numdat numcof numder ;
  657. 'SI' lcof ;
  658. A . 'DAT' . 1 . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
  659. A . 'DAT' . 1 . 'DISC' = tcof . 'DISC' ;
  660. A . 'DAT' . 1 . 'VALEUR' = valo ;
  661. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  662. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  663. ll = 'LECT' 1 ;
  664. 'SINON' ;
  665. ll = 'LECT' ;
  666. 'FINSI' ;
  667. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  668. 'REPETER' iiinc ninc ;
  669. iinc = &iiinc ;
  670. A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMINC' . iinc ;
  671. A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
  672. 'SI' lvalt ;
  673. 'SI' lvt ;
  674. A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
  675. 'SINON' ;
  676. A . 'VAR' . iinc . 'VALEUR' = valt ;
  677. 'FINSI' ;
  678. 'FINSI' ;
  679. A . iinc . iinc . 0 = ll ;
  680. 'FIN' iiinc ;
  681. *
  682. 'SI' iaxi ;
  683. numdat = 1 ;
  684. numcof = 1 ;
  685. 'SINON' ;
  686. numdat = 0 ;
  687. numcof = 0 ;
  688. 'FINSI' ;
  689. B = ININLIN numop numvar numdat numcof numder ;
  690. 'SI' iaxi ;
  691. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  692. B . 'DAT' . 1 . 'DISC' = discg ;
  693. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  694. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  695. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  696. ll = 'LECT' 1 ;
  697. 'SINON' ;
  698. ll = 'LECT' ;
  699. 'FINSI' ;
  700. lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
  701. 'REPETER' iiinc ninc ;
  702. iinc = &iiinc ;
  703. B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMINC' . iinc ;
  704. B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
  705. 'SI' lvalq ;
  706. 'SI' lvq ;
  707. B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
  708. 'SINON' ;
  709. B . 'VAR' . iinc . 'VALEUR' = valq ;
  710. 'FINSI' ;
  711. 'FINSI' ;
  712. B . iinc . iinc . 0 = ll ;
  713. 'FIN' iiinc ;
  714. *
  715. 'SI' ('EXISTE' _smt) ;
  716. mgmass2 = 'NLIN' discg _mt _smt A B methgau ;
  717. 'SINON' ;
  718. mgmass2 = NLINP discg _mt A B methgau ;
  719. 'FINSI' ;
  720. *
  721. 'RESPRO' mgmass2 ;
  722. 'FINPROC' ;
  723. *
  724. * End of procedure file GMASS2
  725. *
  726. *ENDPROCEDUR gmass2
  727. *BEGINPROCEDUR grig
  728. ************************************************************************
  729. * NOM : GRIG
  730. * DESCRIPTION :
  731. *
  732. *
  733. *
  734. * LANGAGE : GIBIANE-CAST3M
  735. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  736. * mél : gounand@semt2.smts.cea.fr
  737. **********************************************************************
  738. * VERSION : v1, ??/??/2007, version initiale
  739. * HISTORIQUE : v1, ??/??/2007, création
  740. * HISTORIQUE :
  741. * HISTORIQUE :
  742. ************************************************************************
  743. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  744. * en cas de modification de ce sous-programme afin de faciliter
  745. * la maintenance !
  746. ************************************************************************
  747. *
  748. *
  749. 'DEBPROC' GRIG ;
  750. 'ARGUMENT' _mt*'MAILLAGE' ;
  751. 'ARGUMENT' tdisc*'TABLE' ;
  752. *
  753. * Lectures
  754. *
  755. debug = FAUX ;
  756. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  757. 'NCOF' 'FCOF' 'CCOF' 'LAPN' 'GMBT' ;
  758. * Il faut initialiser valt et valq, sinon on peut capturer ceux de
  759. * la procédure appelante
  760. valt = 'valt' ; valq = 'valq' ;
  761. llapn = 0 ;
  762. 'REPETER' imotcle ;
  763. 'ARGUMENT' motcle/'MOT' ;
  764. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  765. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  766. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  767. 'FINSI' ;
  768. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  769. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  770. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  771. tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
  772. tst = tst1 'OU' tst2 ;
  773. 'SI' tst ;
  774. 'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
  775. 'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
  776. isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
  777. 'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
  778. 'ARGUMENT' valv*'FLOTTANT' ;
  779. 'FINSI' ;
  780. 'SI' tst1 ; valt = valv ; 'FINSI' ;
  781. 'SI' tst2 ; valq = valv ; 'FINSI' ;
  782. 'FINSI' ;
  783. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  784. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  785. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  786. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  787. 'SI' ('EGA' motcle 'LAPN') ; llapn = 1 ; 'FINSI' ;
  788. 'SI' ('EGA' motcle 'GMBT') ; llapn = 2 ; 'FINSI' ;
  789. 'FIN' imotcle ;
  790. *
  791. * Tests
  792. *
  793. discg = TDISC . 'GEOM' . 'DISC' ;
  794. methgau = 'GAU7' ;
  795. tnomt = TDISC . nomt ;
  796. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  797. tnomq = TDISC . nomq ;
  798. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  799. * Scalaire ou vecteur
  800. ninct = 'DIME' (tnomt . 'NOMINC') ;
  801. nincq = 'DIME' (tnomq . 'NOMINC') ;
  802. 'SI' ('NEG' ninct nincq) ;
  803. cherr = 'CHAINE'
  804. 'les primales et duales nont pas le meme nombre de composantes' ;
  805. 'ERREUR' cherr ;
  806. 'FINSI' ;
  807. 'SI' ('NEG' ninct ('VALEUR' 'DIME')) ;
  808. cherr = 'CHAINE'
  809. 'les inconnues doivent etre vectorielles' ;
  810. 'ERREUR' cherr ;
  811. 'FINSI' ;
  812. *
  813. ninc = ninct ;
  814. *
  815. lcof = 'EXISTE' TDISC nomo ;
  816. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  817. 'SINON' ; ncof = 0 ;
  818. 'FINSI' ;
  819. *
  820. 'SI' debug ;
  821. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  822. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  823. 'FINSI' ;
  824. 'FINSI' ;
  825. *
  826. vdim = 'VALEUR' 'DIME' ;
  827. vmod = 'VALEUR' 'MODE' ;
  828. idim = 0 ;
  829. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  830. idim = 2 ;
  831. iaxi = FAUX ;
  832. 'FINSI' ;
  833. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  834. idim = 2 ;
  835. iaxi = VRAI ;
  836. 'FINSI' ;
  837. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  838. idim = 3 ;
  839. iaxi = FAUX ;
  840. 'FINSI' ;
  841. 'SI' ('EGA' vdim 1) ;
  842. idim = 1 ;
  843. iaxi = FAUX ;
  844. 'FINSI' ;
  845. * 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
  846. 'SI' ('EGA' idim 0) ;
  847. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  848. 'FINSI' ;
  849. 'SI' iaxi ;
  850. rmt = 'COORDONNEE' 1 _mt ;
  851. deupi = '*' PI 2.D0 ;
  852. 'FINSI' ;
  853. *
  854. * Optimisation possible : construire la matrice par blocs
  855. * qd valt et valq ne sont pas donnés
  856. *
  857. *
  858. *Bug ? numop = ('**' ninc 2) '+' 1 ;
  859. numop = '**' ninc 2 ;
  860. 'SI' iaxi ; numop = '+' numop 1 ; 'FINSI' ;
  861. numder = idim ;
  862. numvar = ninc ;
  863. ncof = '+' ncof 1 ;
  864. *delete 'SI' iaxi ; ncof = '+' ncof 1 ; 'FINSI' ;
  865. numdat = ncof ;
  866. numcof = ncof ;
  867. *
  868. A = ININLIN numop numvar numdat numcof numder ;
  869. *
  870. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  871. 'REPETER' iiinc ninc ;
  872. iinc = &iiinc ;
  873. A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMINC' . iinc ;
  874. A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
  875. 'SI' lvalt ;
  876. 'SI' lvt ;
  877. A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
  878. 'SINON' ;
  879. A . 'VAR' . iinc . 'VALEUR' = valt ;
  880. 'FINSI' ;
  881. 'FINSI' ;
  882. 'FIN' iiinc ;
  883. *
  884. icof = 0 ;
  885. ll = 'LECT' ;
  886. icof = '+' icof 1 ;
  887. A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  888. A . 'DAT' . icof . 'DISC' = 'CSTE' ;
  889. A . 'DAT' . icof . 'VALEUR' = 2.D0 ;
  890. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  891. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  892. ll = 'LECT' ;
  893. ll2 = 'LECT' icof ;
  894. 'SI' lcof ;
  895. icof = '+' icof 1 ;
  896. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
  897. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  898. A . 'DAT' . icof . 'VALEUR' = valo ;
  899. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  900. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  901. ll = 'ET' ll ('LECT' icof) ;
  902. ll2 = 'ET' ll2 ('LECT' icof) ;
  903. 'FINSI' ;
  904. *
  905. iop = 0 ;
  906. 'REPETER' iidim idim ;
  907. 'REPETER' jidim idim ;
  908. iop = '+' iop 1 ;
  909. 'SI' ('EGA' &iidim &jidim) ;
  910. 'SI' ('EGA' llapn 0) ;
  911. A . iop . &iidim . &jidim = ll2 ;
  912. 'SINON' ;
  913. A . iop . &iidim . &jidim = ll ;
  914. 'FINSI' ;
  915. 'SINON' ;
  916. 'SI' ('NEG' llapn 2) ;
  917. A . iop . &iidim . &jidim = ll ;
  918. 'FINSI' ;
  919. 'SI' ('NEG' llapn 1) ;
  920. A . iop . &jidim . &iidim = ll ;
  921. 'FINSI' ;
  922. 'FINSI' ;
  923. 'FIN' jidim ;
  924. 'FIN' iidim ;
  925. 'SI' iaxi ;
  926. iop = '+' iop 1 ;
  927. 'SI' ('EGA' llapn 0) ;
  928. A . iop . 1 . 0 = ll2 ;
  929. 'SINON' ;
  930. A . iop . 1 . 0 = ll ;
  931. 'FINSI' ;
  932. 'FINSI' ;
  933. *
  934. 'SI' iaxi ;
  935. numdat = 2 ;
  936. numcof = 2 ;
  937. 'SINON' ;
  938. numdat = 0 ;
  939. numcof = 0 ;
  940. 'FINSI' ;
  941. *
  942. B = ININLIN numop numvar numdat numcof numder ;
  943. *
  944. icof = 0 ;
  945. *
  946. 'SI' iaxi ;
  947. icof = '+' icof 1 ;
  948. B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  949. B . 'DAT' . icof . 'DISC' = discg ;
  950. B . 'DAT' . icof . 'VALEUR' = rmt ;
  951. B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  952. B . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  953. icof = '+' icof 1 ;
  954. B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  955. B . 'DAT' . icof . 'DISC' = 'CSTE' ;
  956. B . 'DAT' . icof . 'VALEUR' = deupi ;
  957. B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  958. B . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  959. ll = 'LECT' ('-' icof 1) icof ;
  960. mic = '*' ('-' icof 1) -1 ;
  961. llb = 'LECT' mic icof ;
  962. 'FINSI' ;
  963. *
  964. lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
  965. 'REPETER' iiinc ninc ;
  966. iinc = &iiinc ;
  967. B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMINC' . iinc ;
  968. B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
  969. 'SI' lvalq ;
  970. 'SI' lvq ;
  971. B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
  972. 'SINON' ;
  973. B . 'VAR' . iinc . 'VALEUR' = valq ;
  974. 'FINSI' ;
  975. 'FINSI' ;
  976. 'FIN' iiinc ;
  977. *
  978. iop = 0 ;
  979. 'REPETER' iidim idim ;
  980. 'REPETER' jidim idim ;
  981. iop = '+' iop 1 ;
  982. B . iop . &iidim . &jidim = ll ;
  983. 'FIN' jidim ;
  984. 'FIN' iidim ;
  985. 'SI' iaxi ;
  986. iop = '+' iop 1 ;
  987. B . iop . 1 . 0 = llb ;
  988. * B . iop . 1 . 0 = ll ;
  989. 'FINSI' ;
  990. *
  991. mgrig = NLINP discg _mt A B methgau ;
  992. * Integration par parties
  993. * mgrig = '*' mgrig -1.D0 ;
  994. *
  995. 'RESPRO' mgrig ;
  996. 'FINPROC' ;
  997. *
  998. * End of procedure file GRIG
  999. *
  1000. *ENDPROCEDUR grig
  1001. *BEGINPROCEDUR gugrad2
  1002. ************************************************************************
  1003. * NOM : GUGRAD2
  1004. * DESCRIPTION : Une matrice de convection
  1005. *
  1006. *
  1007. *
  1008. * LANGAGE : GIBIANE-CAST3M
  1009. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1010. * mél : gounand@semt2.smts.cea.fr
  1011. **********************************************************************
  1012. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  1013. * VERSION : v1, 13/05/2004, version initiale
  1014. * HISTORIQUE : v1, 13/05/2004, création
  1015. * HISTORIQUE :
  1016. * HISTORIQUE :
  1017. ************************************************************************
  1018. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1019. * en cas de modification de ce sous-programme afin de faciliter
  1020. * la maintenance !
  1021. ************************************************************************
  1022. *
  1023. *
  1024. 'DEBPROC' GUGRAD2 ;
  1025. 'ARGUMENT' _mt*'MAILLAGE' ;
  1026. 'ARGUMENT' _smt/'MAILLAGE' ;
  1027. 'ARGUMENT' tdisc*'TABLE' ;
  1028. *
  1029. * Lectures
  1030. *
  1031. debug = FAUX ;
  1032. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  1033. 'NVIT' 'FVIT' 'CVIT' 'NCOF' 'FCOF' 'CCOF' ;
  1034. 'REPETER' imotcle ;
  1035. 'ARGUMENT' motcle/'MOT' ;
  1036. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  1037. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  1038. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  1039. 'FINSI' ;
  1040. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  1041. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  1042. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  1043. 'SI' ('EGA' motcle 'NVIT') ; 'ARGUMENT' nomu*'MOT' ; 'FINSI' ;
  1044. tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
  1045. tst = tst1 'OU' tst2 ;
  1046. 'SI' tst ;
  1047. 'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
  1048. 'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
  1049. isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
  1050. 'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
  1051. 'ARGUMENT' valv*'FLOTTANT' ;
  1052. 'FINSI' ;
  1053. 'SI' tst1 ; valt = valv ; 'FINSI' ;
  1054. 'SI' tst2 ; valq = valv ; 'FINSI' ;
  1055. 'FINSI' ;
  1056. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  1057. 'SI' ('EGA' motcle 'FVIT') ; 'ARGUMENT' valu*'LISTREEL' ; 'FINSI' ;
  1058. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  1059. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  1060. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  1061. 'SI' ('EGA' motcle 'CVIT') ; 'ARGUMENT' valu*'CHPOINT' ; 'FINSI' ;
  1062. 'FIN' imotcle ;
  1063. *
  1064. * Tests
  1065. *
  1066. discg = TDISC . 'GEOM' . 'DISC' ;
  1067. methgau = 'GAU7' ;
  1068. tnomt = TDISC . nomt ;
  1069. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  1070. tnomq = TDISC . nomq ;
  1071. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  1072. tnomu = TDISC . nomu ;
  1073. * Scalaire ou vecteur
  1074. ninct = 'DIME' (tnomt . 'NOMINC') ;
  1075. nincq = 'DIME' (tnomq . 'NOMINC') ;
  1076. 'SI' ('NEG' ninct nincq) ;
  1077. cherr = 'CHAINE'
  1078. 'les primales et duales nont pas le meme nombre de composantes' ;
  1079. 'ERREUR' cherr ;
  1080. 'FINSI' ;
  1081. ninc = ninct ;
  1082. *
  1083. lcof = 'EXISTE' TDISC nomo ;
  1084. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  1085. 'SINON' ; ncof = 0 ;
  1086. 'FINSI' ;
  1087. *
  1088. 'SI' debug ;
  1089. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  1090. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  1091. 'FINSI' ;
  1092. 'FINSI' ;
  1093. *
  1094. vdim = 'VALEUR' 'DIME' ;
  1095. vmod = 'VALEUR' 'MODE' ;
  1096. idim = 0 ;
  1097. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  1098. idim = 2 ;
  1099. iaxi = FAUX ;
  1100. 'FINSI' ;
  1101. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  1102. idim = 2 ;
  1103. iaxi = VRAI ;
  1104. 'FINSI' ;
  1105. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  1106. idim = 3 ;
  1107. iaxi = FAUX ;
  1108. 'FINSI' ;
  1109. 'SI' ('EGA' vdim 1) ;
  1110. idim = 1 ;
  1111. iaxi = FAUX ;
  1112. 'FINSI' ;
  1113. 'SI' ('EGA' idim 0) ;
  1114. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  1115. 'FINSI' ;
  1116. 'SI' iaxi ;
  1117. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  1118. 'FINSI' ;
  1119. * Scalaire ou vecteur
  1120. nincu = 'DIME' (tnomu . 'NOMINC') ;
  1121. 'SI' ('NEG' nincu idim) ;
  1122. cherr = 'CHAINE'
  1123. 'la vitesse doit etre un vecteur' ;
  1124. 'ERREUR' cherr ;
  1125. 'FINSI' ;
  1126. ncof = '+' ncof nincu ;
  1127. *
  1128. * Optimisation possible : construire la matrice par blocs
  1129. * qd valt et valq ne sont pas donnés
  1130. *
  1131. numop = ninc ; numder = idim ; numvar = ninc ;
  1132. numdat = ncof ; numcof = ncof ;
  1133. A = ININLIN numop numvar numdat numcof numder ;
  1134. *
  1135. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  1136. 'REPETER' iiinc ninc ;
  1137. iinc = &iiinc ;
  1138. A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMINC' . iinc ;
  1139. A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
  1140. 'SI' lvalt ;
  1141. 'SI' lvt ;
  1142. A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
  1143. 'SINON' ;
  1144. A . 'VAR' . iinc . 'VALEUR' = valt ;
  1145. 'FINSI' ;
  1146. 'FINSI' ;
  1147. 'FIN' iiinc ;
  1148. *
  1149. lvu = 'EGA' ('TYPE' valu) 'LISTREEL' ;
  1150. icof = 0 ;
  1151. 'REPETER' iiincu nincu ;
  1152. iincu = &iiincu ;
  1153. icof = icof '+' 1 ;
  1154. A . 'DAT' . icof . 'NOMDDL' = tnomu . 'NOMINC' . iincu ;
  1155. A . 'DAT' . icof . 'DISC' = tnomu . 'DISC' ;
  1156. 'SI' lvu ;
  1157. A . 'DAT' . icof . 'VALEUR' = 'EXTRAIRE' valu iincu ;
  1158. 'SINON' ;
  1159. A . 'DAT' . icof . 'VALEUR' = valu ;
  1160. 'FINSI' ;
  1161. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  1162. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  1163. 'FIN' iiincu ;
  1164. 'SI' lcof ;
  1165. icof = icof '+' 1 ;
  1166. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMINC' . 1 ;
  1167. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  1168. A . 'DAT' . icof . 'VALEUR' = valo ;
  1169. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  1170. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  1171. ll = 'LECT' icof ;
  1172. 'SINON' ;
  1173. ll = 'LECT' ;
  1174. 'FINSI' ;
  1175. *
  1176. 'REPETER' iiinc ninc ;
  1177. iinc = &iiinc ;
  1178. 'REPETER' iiidim idim ;
  1179. iidim = &iiidim ;
  1180. A . iinc . iinc . iidim = ('ET' ('LECT' iidim) ll) ;
  1181. 'FIN' iiidim ;
  1182. 'FIN' iiinc ;
  1183. *
  1184. 'SI' iaxi ;
  1185. numdat = 1 ;
  1186. numcof = 1 ;
  1187. 'SINON' ;
  1188. numdat = 0 ;
  1189. numcof = 0 ;
  1190. 'FINSI' ;
  1191. B = ININLIN numop numvar numdat numcof numder ;
  1192. 'SI' iaxi ;
  1193. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  1194. B . 'DAT' . 1 . 'DISC' = discg ;
  1195. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  1196. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  1197. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  1198. ll = 'LECT' 1 ;
  1199. 'SINON' ;
  1200. ll = 'LECT' ;
  1201. 'FINSI' ;
  1202. lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
  1203. 'REPETER' iiinc ninc ;
  1204. iinc = &iiinc ;
  1205. B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMINC' . iinc ;
  1206. B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
  1207. 'SI' lvalq ;
  1208. 'SI' lvq ;
  1209. B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
  1210. 'SINON' ;
  1211. B . 'VAR' . iinc . 'VALEUR' = valq ;
  1212. 'FINSI' ;
  1213. 'FINSI' ;
  1214. B . iinc . iinc . 0 = ll ;
  1215. 'FIN' iiinc ;
  1216. *
  1217. 'SI' ('EXISTE' _smt) ;
  1218. mgugrad2 = 'NLIN' discg _mt _smt A B methgau ;
  1219. 'SINON' ;
  1220. mgugrad2 = NLINP discg _mt A B methgau ;
  1221. 'FINSI' ;
  1222. *
  1223. 'RESPRO' mgugrad2 ;
  1224. 'FINPROC' ;
  1225. *
  1226. * End of procedure file GUGRAD2
  1227. *
  1228. *ENDPROCEDUR gugrad2
  1229. *BEGINPROCEDUR log10
  1230. ************************************************************************
  1231. * NOM : LOG10
  1232. * DESCRIPTION : Log_10
  1233. *
  1234. *
  1235. *
  1236. * LANGAGE : GIBIANE-CAST3M
  1237. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1238. * mél : gounand@semt2.smts.cea.fr
  1239. **********************************************************************
  1240. * VERSION : v1, 18/02/2003, version initiale
  1241. * HISTORIQUE : v1, 18/02/2003, création
  1242. * HISTORIQUE :
  1243. * HISTORIQUE :
  1244. ************************************************************************
  1245. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1246. * en cas de modification de ce sous-programme afin de faciliter
  1247. * la maintenance !
  1248. ************************************************************************
  1249. *
  1250. *
  1251. 'DEBPROC' LOG10 ;
  1252. 'REPETER' bouc ;
  1253. ok = FAUX ;
  1254. 'ARGUMENT' fl/'FLOTTANT' ;
  1255. 'ARGUMENT' lr/'LISTREEL' ;
  1256. 'ARGUMENT' cp/'CHPOINT ' ;
  1257. 'ARGUMENT' cm/'MCHAML ' ;
  1258. 'SI' ('EXISTE' fl) ;
  1259. ok = VRAI ;
  1260. 'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ;
  1261. 'FINSI' ;
  1262. 'SI' ('EXISTE' lr) ;
  1263. ok = VRAI ;
  1264. 'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ;
  1265. 'FINSI' ;
  1266. 'SI' ('EXISTE' cp) ;
  1267. ok = VRAI ;
  1268. 'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ;
  1269. 'FINSI' ;
  1270. 'SI' ('EXISTE' cm) ;
  1271. ok = VRAI ;
  1272. 'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ;
  1273. 'FINSI' ;
  1274. 'SI' ('NON' ok) ;
  1275. 'QUITTER' bouc ;
  1276. 'FINSI' ;
  1277. 'FIN' bouc ;
  1278. *
  1279. * End of procedure file LOG10
  1280. *
  1281. 'FINPROC' ;
  1282. *ENDPROCEDUR log10
  1283. *BEGINPROCEDUR modulo
  1284. ************************************************************************
  1285. * NOM : MODULO
  1286. * DESCRIPTION : Calcule un entier modulo un autre...
  1287. *
  1288. *
  1289. *
  1290. * LANGAGE : GIBIANE-CAST3M
  1291. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1292. * mél : gounand@semt2.smts.cea.fr
  1293. **********************************************************************
  1294. * VERSION : v1, 15/10/2002, version initiale
  1295. * HISTORIQUE : v1, 15/10/2002, création
  1296. * HISTORIQUE :
  1297. * HISTORIQUE :
  1298. ************************************************************************
  1299. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1300. * en cas de modification de ce sous-programme afin de faciliter
  1301. * la maintenance !
  1302. ************************************************************************
  1303. *
  1304. *
  1305. 'DEBPROC' MODULO ;
  1306. 'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
  1307. 'SI' ('EGA' j 0) ;
  1308. 'MESSAGE' 'Impossible de faire modulo 0' ;
  1309. 'ERREUR' 5 ;
  1310. 'SINON' ;
  1311. k=i '/' j ;
  1312. mod=i '-' ( k '*'j ) ;
  1313. 'RESPRO' mod ;
  1314. 'FINSI' ;
  1315. *
  1316. * End of procedure file MODULO
  1317. *
  1318. 'FINPROC' ;
  1319. *ENDPROCEDUR modulo
  1320. *BEGINPROCEDUR mydal
  1321. ************************************************************************
  1322. * NOM : MYDAL
  1323. * DESCRIPTION :
  1324. *
  1325. *
  1326. *
  1327. * LANGAGE : GIBIANE-CAST3M
  1328. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1329. * mél : gounand@semt2.smts.cea.fr
  1330. **********************************************************************
  1331. * VERSION : v1, ??/??/2007, version initiale
  1332. * HISTORIQUE : v1, ??/??/2007, création
  1333. * HISTORIQUE :
  1334. * HISTORIQUE :
  1335. ************************************************************************
  1336. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1337. * en cas de modification de ce sous-programme afin de faciliter
  1338. * la maintenance !
  1339. ************************************************************************
  1340. *
  1341. *
  1342. 'DEBPROC' MYDAL ;
  1343. 'ARGUMENT' p1*'POINT' p2*'POINT' p3*'POINT' p4*'POINT' ;
  1344. lden = 'PROG' ;
  1345. 'REPETER' bcl ;
  1346. 'ARGUMENT' den/'FLOTTANT' ;
  1347. 'SI' ('EXISTE' den) ;
  1348. lden = 'ET' lden den ;
  1349. 'SINON' ;
  1350. 'QUITTER' bcl ;
  1351. 'FINSI' ;
  1352. 'FIN' bcl ;
  1353. dlden = 'DIME' lden ;
  1354. 'SI' ('EGA' dlden 1) ;
  1355. den = 'EXTRAIRE' lden 1 ;
  1356. denxg = den ; denxd = den ;
  1357. denyb = den ; denyh = den ;
  1358. 'FINSI' ;
  1359. 'SI' ('EGA' dlden 2) ;
  1360. denx = 'EXTRAIRE' lden 1 ;
  1361. denxg = denx ; denxd = denx ;
  1362. deny = 'EXTRAIRE' lden 2 ;
  1363. denyb = deny ; denyh = deny ;
  1364. 'FINSI' ;
  1365. 'SI' ('EGA' dlden 4) ;
  1366. denxg = 'EXTRAIRE' lden 1 ;
  1367. denxd = 'EXTRAIRE' lden 2 ;
  1368. denyb = 'EXTRAIRE' lden 3 ;
  1369. denyh = 'EXTRAIRE' lden 4 ;
  1370. 'FINSI' ;
  1371. l1 = 'DROIT' p1 p2 'DINI' denxg 'DFIN' denxd ;
  1372. l2 = 'DROIT' p2 p3 'DINI' denyb 'DFIN' denyh ;
  1373. l3 = 'DROIT' p3 p4 'DINI' denxd 'DFIN' denxg ;
  1374. l4 = 'DROIT' p4 p1 'DINI' denyh 'DFIN' denyb ;
  1375. mt = 'DALLER' l1 l2 l3 l4 ;
  1376. 'RESPRO' mt ;
  1377. *
  1378. * End of procedure file MYDAL
  1379. *
  1380. 'FINPROC' ;
  1381. *ENDPROCEDUR mydal
  1382. *BEGINPROCEDUR quafme
  1383. ************************************************************************
  1384. * NOM : QUAFME
  1385. * DESCRIPTION :
  1386. *
  1387. *
  1388. *
  1389. * LANGAGE : GIBIANE-CAST3M
  1390. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1391. * mél : gounand@semt2.smts.cea.fr
  1392. **********************************************************************
  1393. * VERSION : v1, 01/12/2004, version initiale
  1394. * HISTORIQUE : v1, 01/12/2004, création
  1395. * HISTORIQUE :
  1396. * HISTORIQUE :
  1397. ************************************************************************
  1398. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1399. * en cas de modification de ce sous-programme afin de faciliter
  1400. * la maintenance !
  1401. ************************************************************************
  1402. *
  1403. *
  1404. 'DEBPROC' QUAFME ;
  1405. 'REPETER' bcl ;
  1406. 'ARGUMENT' mquad/'MAILLAGE' ;
  1407. 'SI' ('EXISTE' mquad) ;
  1408. mquaf = 'CHANGER' mquad 'QUAF' ;
  1409. * mlin = 'CHANGER' mquad 'LINEAIRE' ;
  1410. 'RESPRO' mquaf ;
  1411. 'SINON' ;
  1412. 'QUITTER' bcl ;
  1413. 'FINSI' ;
  1414. 'FIN' bcl ;
  1415. 'FINPROC' ;
  1416. *
  1417. * End of procedure file QUAFME
  1418. *
  1419. *ENDPROCEDUR quafme
  1420. *BEGINPROCEDUR redus
  1421. ************************************************************************
  1422. * NOM : REDUS
  1423. * DESCRIPTION :
  1424. *
  1425. *
  1426. *
  1427. * LANGAGE : GIBIANE-CAST3M
  1428. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1429. * mél : gounand@semt2.smts.cea.fr
  1430. **********************************************************************
  1431. * VERSION : v1, 01/12/2004, version initiale
  1432. * HISTORIQUE : v1, 01/12/2004, création
  1433. * HISTORIQUE :
  1434. * HISTORIQUE :
  1435. ************************************************************************
  1436. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1437. * en cas de modification de ce sous-programme afin de faciliter
  1438. * la maintenance !
  1439. ************************************************************************
  1440. *
  1441. *
  1442. 'DEBPROC' REDUS ;
  1443. 'ARGUMENT' mred*'MAILLAGE' ;
  1444. 'REPETER' bcl ;
  1445. 'ARGUMENT' chpo/'CHPOINT' ;
  1446. 'SI' ('EXISTE' chpo) ;
  1447. chpor = 'REDU' chpo mred ;
  1448. 'RESPRO' chpor ;
  1449. 'SINON' ;
  1450. 'QUITTER' bcl ;
  1451. 'FINSI' ;
  1452. 'FIN' bcl ;
  1453. 'FINPROC' ;
  1454. *
  1455. * End of procedure file REDUS
  1456. *
  1457. *ENDPROCEDUR redus
  1458. *BEGINPROCEDUR scottm
  1459. ************************************************************************
  1460. * NOM : SCOTTM
  1461. * DESCRIPTION :
  1462. * Corrélations issues de
  1463. *@Article{scottmirza,
  1464. * author = {P.S. Scott and F.A. Mirza and J. Vlachopoulos},
  1465. * title = {A Finite Element Analysis of Laminar Flows through Planar and Axisymmetric abrupt expansions},
  1466. * journal = {Computers & Fluids},
  1467. * year = {1986},
  1468. * volume = {14},
  1469. * number = {4},
  1470. * pages = {423 - 432},
  1471. *}
  1472. * donnant respectivement : Lr : longueur de la recirculation
  1473. * Lc : centre de la recirculation
  1474. * Rei : intensité relative de la recirculation
  1475. * en fonction de : exprat (expansion ratio)
  1476. * Re (Reynolds basé sur le diamètre d'entrée)
  1477. *
  1478. *
  1479. *
  1480. * LANGAGE : GIBIANE-CAST3M
  1481. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1482. * mél : stephane.gounand@cea.fr
  1483. **********************************************************************
  1484. * VERSION : v1, 13/01/2011, version initiale
  1485. * HISTORIQUE : v1, 13/01/2011, création
  1486. * HISTORIQUE :
  1487. * HISTORIQUE :
  1488. ************************************************************************
  1489. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1490. * en cas de modification de ce sous-programme afin de faciliter
  1491. * la maintenance !
  1492. ************************************************************************
  1493. *
  1494. *
  1495. 'DEBPROC' SCOTTM ;
  1496. 'ARGUMENT' exprat*'FLOTTANT' ;
  1497. 'ARGUMENT' Re*'FLOTTANT' ;
  1498. vmod = 'VALEUR' 'MODE' ;
  1499. alpha = 'alpha' ;
  1500. 'SI' ('EGA' vmod 'AXIS') ;
  1501. 'SI' ('EGA' exprat 1.5 1.D-6) ;
  1502. alpha = 0.0125 ;
  1503. beta = 0.1695e-2 ;
  1504. lambda = 0.085 ;
  1505. theta = 0.0374 ;
  1506. epsilon = 0.0117 ;
  1507. 'FINSI' ;
  1508. 'SI' ('EGA' exprat 2. 1.D-6) ;
  1509. alpha = 0.0455 ;
  1510. beta = 0.552e-2 ;
  1511. lambda = 0.325 ;
  1512. theta = 0.126 ;
  1513. epsilon = 0.0229 ;
  1514. 'FINSI' ;
  1515. 'SI' ('EGA' exprat 3. 1.D-6) ;
  1516. alpha = 0.11 ;
  1517. beta = 2.65e-2 ;
  1518. lambda = 0.105 ;
  1519. theta = 0.378 ;
  1520. epsilon = 0.0354 ;
  1521. 'FINSI' ;
  1522. 'SI' ('EGA' exprat 4. 1.D-6) ;
  1523. alpha = 0.17 ;
  1524. beta = 4.93e-2 ;
  1525. lambda = 0.0 ;
  1526. theta = 0.65 ;
  1527. epsilon = 0.0455 ;
  1528. 'FINSI' ;
  1529. 'SINON' ;
  1530. 'SI' ('EGA' exprat 1.5 1.D-6) ;
  1531. alpha = 0.0093 ;
  1532. beta = 0.133e-2 ;
  1533. lambda = 0.08 ;
  1534. theta = 0.006 ;
  1535. epsilon = 0.011 ;
  1536. 'FINSI' ;
  1537. 'SI' ('EGA' exprat 2. 1.D-6) ;
  1538. alpha = 0.0347 ;
  1539. beta = 0.58e-2 ;
  1540. lambda = 0.125 ;
  1541. theta = 0.025 ;
  1542. epsilon = 0.0171 ;
  1543. 'FINSI' ;
  1544. 'SI' ('EGA' exprat 3. 1.D-6) ;
  1545. alpha = 0.101 ;
  1546. beta = 2.73e-2 ;
  1547. lambda = -0.05 ;
  1548. theta = 0.0735 ;
  1549. epsilon = 0.0311 ;
  1550. 'FINSI' ;
  1551. 'SI' ('EGA' exprat 4. 1.D-6) ;
  1552. alpha = 0.178 ;
  1553. beta = 5.78e-2 ;
  1554. lambda = -0.398 ;
  1555. theta = 0.125 ;
  1556. epsilon = 0.039 ;
  1557. 'FINSI' ;
  1558. 'FINSI' ;
  1559. 'SI' ('NEG' ('TYPE' alpha) 'FLOTTANT') ;
  1560. cherr = 'CHAINE' 'exprat=' exprat ' incorrect' ;
  1561. 'ERREUR' cherr ;
  1562. 'FINS' ;
  1563. Lr = '*' alpha Re ;
  1564. Lc = '+' ('*' beta Re) lambda ;
  1565. rei = '*' ('-' 1. ('EXP' ('*' ('*' Re epsilon) -1.)))
  1566. theta ;
  1567. 'RESPRO' rei Lc Lr ;
  1568. *
  1569. * End of procedure file SCOTTM
  1570. *
  1571. 'FINPROC' ;
  1572. *ENDPROCEDUR scottm
  1573. *BEGINPROCEDUR trvec
  1574. ************************************************************************
  1575. * NOM : TRVEC
  1576. * DESCRIPTION : Trace des champs de vecteurs
  1577. *
  1578. *
  1579. *
  1580. * LANGAGE : GIBIANE-CAST3M
  1581. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1582. * mél : gounand@semt2.smts.cea.fr
  1583. **********************************************************************
  1584. * VERSION : v1, ??/??/2007, version initiale
  1585. * HISTORIQUE : v1, ??/??/2007, création
  1586. * HISTORIQUE :
  1587. * HISTORIQUE :
  1588. ************************************************************************
  1589. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1590. * en cas de modification de ce sous-programme afin de faciliter
  1591. * la maintenance !
  1592. ************************************************************************
  1593. *
  1594. *
  1595. 'DEBPROC' TRVEC ;
  1596. *'ARGUMENT' tdisc*'TABLE' ;
  1597. *'ARGUMENT' motdom*'MOT' ;
  1598. 'ARGUMENT' tdom*'MAILLAGE' ;
  1599. *
  1600. tvec = 'TABLE' ; ttit = 'TABLE' ;
  1601. i = 0 ;
  1602. lcoul = 'MOTS' 'JAUN' 'ROUG' 'BLAN' 'TURQ' 'VERT' 'OLIV'
  1603. 'AZUR' 'ORAN' 'VIOL' 'GRIS' 'OCEA' ;
  1604. *
  1605. 'REPETER' livec ;
  1606. 'SI' ('EGA' i 0) ;
  1607. 'ARGUMENT' ccvec*'CHPOINT' ;
  1608. 'SINON' ;
  1609. 'ARGUMENT' ccvec/'CHPOINT' ;
  1610. 'FINSI' ;
  1611. 'SI' ('EXISTE' ccvec) ;
  1612. 'ARGUMENT' ttvec*'MOT' ;
  1613. 'SINON' ;
  1614. 'QUITTER' livec ;
  1615. 'FINSI' ;
  1616. i = '+' i 1 ;
  1617. * 'MESSAGE' ('CHAINE' 'i=' i) ;
  1618. * 'LISTE' ccvec ;
  1619. * 'LISTE' tvec ;
  1620. tvec . i = ccvec ;
  1621. ttit . i = ttvec ;
  1622. 'FIN' livec ;
  1623. 'ARGUMENT' echv/'FLOTTANT' ;
  1624. 'ARGUMENT' lnclk/'LOGIQUE' ;
  1625. 'SI' ('NON' ('EXISTE' lnclk)) ;
  1626. lnclk = faux ;
  1627. 'FINSI' ;
  1628. *
  1629. lmax = 'PROG' ;
  1630. 'REPETER' ii i ;
  1631. mm = 'MAXIMUM' (tvec . &ii) 'ABS' ;
  1632. lmax = 'ET' lmax ('PROG' mm) ;
  1633. 'FIN' ii ;
  1634. mm = '+' ('MAXIMUM' lmax) 1.D-60 ;
  1635. 'SI' ('NON' ('EXISTE' echv)) ;
  1636. vmodo = 'EGA' ('VALEUR' 'MODE') 'AXIS' ;
  1637. 'SI' vmodo ; 'OPTI' 'MODE' 'PLAN' ; 'FINSI' ;
  1638. ctail = gmass2 ('CHANGER' tdom 'QUAF') tdisc
  1639. 'NPRI' 'CSTE' 'FPRI' 1. 'NDUA' 'CSTE' 'FDUA' 1. ;
  1640. * 'LISTE' ctail ;
  1641. 'SI' vmodo ; 'OPTI' 'MODE' 'AXIS' ; 'FINSI' ;
  1642. vdim = 'VALEUR' 'DIME' ;
  1643. dimm = DEADUTIL 'DIMM' tdom ;
  1644. * ctail = '**' ctail ('/' 1. ('-' vdim 1)) ;
  1645. ctail = '**' ctail ('/' 1. dimm) ;
  1646. tail = '**' ('*' ('MAXIMUM' ctail) ('MINIMUM' ctail)) 0.5 ;
  1647. *'LISTE' tail ;
  1648. *'LISTE' mm ;
  1649. echv = '/' ('*' 0.9 tail) mm ;
  1650. 'FINSI' ;
  1651. tit = 'CHAINE' 'Max. =' (formar mm 2) ;
  1652. 'REPETER' ii i ;
  1653. cou = EXMOMOD lcoul &ii ;
  1654. tvec . &ii = 'VECT' (tvec . &ii) echv 'DEPL' cou ;
  1655. tit = 'CHAINE' tit ' ' cou '=' (ttit . &ii) ;
  1656. 'FIN' ii ;
  1657. 'SI' lnclk ;
  1658. 'TRACER' (@stbl tvec) tdom 'TITR' tit 'NCLK' ;
  1659. 'SINON' ;
  1660. 'TRACER' (@stbl tvec) tdom 'TITR' tit ;
  1661. 'FINSI' ;
  1662. *
  1663. * End of procedure file TRVEC
  1664. *
  1665. 'FINPROC' ;
  1666. *ENDPROCEDUR trvec
  1667. *BEGINPROCEDUR gmail
  1668. ************************************************************************
  1669. * NOM : GMAIL
  1670. * DESCRIPTION : Extrait le maillage des points supports des degrés
  1671. * de liberté d'une inconnue
  1672. *
  1673. * Cette procédure est identique à GMAIL2 qui paraissait
  1674. * mieux que l'ancienne GMAIL
  1675. *
  1676. *
  1677. *
  1678. * LANGAGE : GIBIANE-CAST3M
  1679. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1680. * mél : gounand@semt2.smts.cea.fr
  1681. **********************************************************************
  1682. * VERSION : v1, 20/04/2012, version initiale
  1683. * HISTORIQUE :
  1684. * HISTORIQUE :
  1685. ************************************************************************
  1686. *
  1687. *
  1688. 'DEBPROC' GMAIL ;
  1689. 'ARGUMENT' _mt/'MAILLAGE' ;
  1690. 'ARGU' tdisc/'TABLE' ;
  1691. xmt = 'EXIS' _mt ;
  1692. xtdisc = 'EXIS' tdisc ;
  1693. *
  1694. 'SI' ('NON' xmt) ;
  1695. 'SI' ('NON' xtdisc) ;
  1696. 'ARGUMENT' tdisc*'TABLE' ;
  1697. xtdisc = vrai ;
  1698. 'FINS' ;
  1699. 'ARGUMENT' nmt*'MOT' ;
  1700. 'SI' ('NON' ('EXISTE' tdisc nmt)) ;
  1701. cherr = 'CHAINE' 'Le domaine ' nmt ' nest pas defini dans'
  1702. ' la table de discretisation' ;
  1703. 'ERREUR' cherr ;
  1704. 'FINSI' ;
  1705. _mt = tdisc . nmt . 'QUAF' ;
  1706. 'FINSI' ;
  1707. *
  1708. 'ARGU' dua*'MOT' ;
  1709. 'SI' ('NON' xtdisc) ;
  1710. discdua = dua ;
  1711. * nomdua = dua ;
  1712. 'SINO' ;
  1713. * nomdua = dua ;
  1714. discdua = tdisc . dua . 'DISC' ;
  1715. 'FINS' ;
  1716. *
  1717. *'ARGUMENT' nomdua*'MOT ' ;
  1718. *
  1719. * Raccourcis du 2019/01/25
  1720. * Est-ce vraiment astucieux ?...
  1721. *
  1722. 'SI' ('EGA' discdua 'QUAF') ;
  1723. 'RESP' _mt ;
  1724. 'QUIT' GMAIL ;
  1725. 'FINS' ;
  1726. 'SI' ('EGA' discdua 'LINE') ;
  1727. 'RESP' ('CHAN' _mt 'LINE') ;
  1728. 'QUIT' GMAIL ;
  1729. 'FINS' ;
  1730. 'SI' ('EGA' discdua 'QUAI') ;
  1731. 'RESP' ('CHAN' _mt 'QUAD') ;
  1732. 'QUIT' GMAIL ;
  1733. 'FINS' ;
  1734. *
  1735. mdim = DEADUTIL 'DIMM' _mt ;
  1736. *vdim = 'VALEUR' 'DIME' ;
  1737. 'SI' ('EGA' discdua 'LINM') ;
  1738. discdua = 'CSTE' ;
  1739. 'FINSI' ;
  1740. *
  1741. numop = 1 ; numder = mdim ; numvar = 1 ; numdat = 0 ; numcof = 0 ;
  1742. A = ININLIN numop numvar numdat numcof numder ;
  1743. A . 'VAR' . 1 . 'VALEUR' = 0. ;
  1744. *
  1745. A . 1 . 1 . 0 = 0 ;
  1746. *
  1747. B = ININLIN numop numvar numdat numcof numder ;
  1748. B . 'VAR' . 1 . 'NOMDDL' = 'DUMM' ;
  1749. B . 'VAR' . 1 . 'DISC' = discdua ;
  1750. *
  1751. B . 1 . 1 . 0 = 0 ;
  1752. *
  1753. gm = 'NLIN' 'LINE' _mt A B 'ERF1' 'GAU1' ;
  1754. dom = 'EXTRAIRE' gm 'MAIL' ;
  1755. *
  1756. 'RESPRO' dom ;
  1757. 'FINPROC' ;
  1758. *
  1759. * End of procedure file GMAIL
  1760. *
  1761. *ENDPROCEDUR gmail
  1762. *
  1763. ******************************************
  1764. * *
  1765. * Procédure principale de CALCUL *
  1766. * *
  1767. ******************************************
  1768. *
  1769. 'DEBPROC' CALCUL ;
  1770. 'ARGUMENT' exprat*'FLOTTANT' ;
  1771. 'ARGUMENT' nr*'ENTIER' ;
  1772. 'ARGUMENT' Re*'FLOTTANT' ;
  1773. 'ARGUMENT' iaxi*'LOGIQUE' ;
  1774. *
  1775. 'SAUTER' 2 'LIGNE' ;
  1776. 'MESSAGE' ('CHAINE' '************ Sudden expansion ***********') ;
  1777. 'MESSAGE' ('CHAINE' 'expansion ratio =' (formar exprat 2)) ;
  1778. 'MESSAGE' ('CHAINE' 'nr =' (formar nr 2)) ;
  1779. 'MESSAGE' ('CHAINE' 'Re =' (formar Re 2)) ;
  1780. 'MESSAGE' ('CHAINE' 'iaxi =' iaxi) ;
  1781. *
  1782. titg = 'CHAINE' 'xr=' (formar exprat 1) ';Re='(formar Re 2) ;
  1783. 'SI' iaxi ;
  1784. titg = 'CHAINE' ' Axi;' titg ;
  1785. 'SINON' ;
  1786. titg = 'CHAINE' ' Plan;' titg ;
  1787. 'FINSI' ;
  1788. *
  1789. 'OPTION' 'DIME' 2 'ISOV' 'SULI' ;
  1790. 'SI' iaxi ; 'OPTI' 'MODE' 'AXIS' ; 'FINSI' ;
  1791. *
  1792. 'OPTI' 'ELEM' 'QUA8' ;
  1793. methgau = 'GAU7' ;
  1794. nitermax = 40 ;
  1795. 'SI' ('<' Re 10.) ; omeg = 1.0 ; 'SINON' ; omeg = 0.75 ; 'FINSI' ;
  1796. mdvquit = 1.D-4 ;
  1797. *
  1798. **************************************
  1799. * Modèle *
  1800. **************************************
  1801. *
  1802. discg = 'LINE' ; discv = 'QUAF' ; discp = 'LINM' ;
  1803. vdim = 'VALEUR' 'DIME' ;
  1804. vmod = 'VALEUR' 'MODE' ;
  1805. laxi = 'EGA' vmod 'AXIS' ;
  1806. 'SI' laxi ;
  1807. nomvit = 'MOTS' 'UR' 'UZ' ;
  1808. nomfor = 'MOTS' 'FR' 'FZ' ;
  1809. 'SINON' ;
  1810. nomvit = 'MOTS' 'UX' 'UY' ;
  1811. nomfor = 'MOTS' 'FX' 'FY' ;
  1812. 'FINSI' ;
  1813. nv1 = 'EXTRAIRE' nomvit 1 ;
  1814. nv2 = 'EXTRAIRE' nomvit 2 ;
  1815. nomul = 'MOTS' 'LX' ;
  1816. nomuld = 'MOTS' 'FLX' ;
  1817. 'SI' ('EGA' discp 'LINM') ;
  1818. nompre = 'MOTS' 'LX1' 'LX2' 'LX3' ;
  1819. nomprd = 'MOTS' 'FLX1' 'FLX2' 'FLX3' ;
  1820. 'SINON' ;
  1821. nompre = 'MOTS' 'LXP' ;
  1822. nomprd = 'MOTS' 'FLXP' ;
  1823. 'FINSI' ;
  1824. nomsca = 'MOTS' 'SCAL' ;
  1825. mpri = nomvit 'ET' nomul 'ET' nompre ;
  1826. mdua = nomfor 'ET' nomuld 'ET' nomprd ;
  1827. *
  1828. TDISC = 'TABLE' ;
  1829. TDISC . 'GEOM' = 'TABLE' ;
  1830. TDISC . 'GEOM' . 'DISC' = discg ;
  1831. TDISC . 'UN' = 'TABLE' ;
  1832. TDISC . 'UN' . 'DISC' = discv ;
  1833. TDISC . 'UN' . 'NOMINC' = 'TABLE' ;
  1834. 'REPETER' idim vdim ;
  1835. TDISC . 'UN' . 'NOMINC' . &idim = 'MOTS' ('EXTRAIRE' nomvit &idim) ;
  1836. 'FIN' idim ;
  1837. TDISC . 'PN' = 'TABLE' ;
  1838. TDISC . 'PN' . 'DISC' = discp ;
  1839. TDISC . 'PN' . 'NOMINC' = 'TABLE' ;
  1840. TDISC . 'PN' . 'NOMINC' . 1 = nompre ;
  1841. lmdisc = 'MOTS' 'CSTE' 'LINE' 'LINB' 'QUAF' ;
  1842. 'REPETER' iidisc ('DIME' lmdisc) ;
  1843. mdisc = 'EXTRAIRE' lmdisc &iidisc ;
  1844. tdisc . mdisc = 'TABLE' ;
  1845. tdisc . mdisc . 'DISC' = mdisc ;
  1846. tdisc . mdisc . 'NOMINC' = 'TABLE' ;
  1847. tdisc . mdisc . 'NOMINC' . 1 = nomsca ;
  1848. mdiscv = 'CHAINE' mdisc 'V' ;
  1849. tdisc . mdiscv = 'TABLE' ;
  1850. tdisc . mdiscv . 'DISC' = mdisc ;
  1851. tdisc . mdiscv . 'NOMINC' = 'TABLE' ;
  1852. 'REPETER' idim vdim ;
  1853. TDISC . mdiscv. 'NOMINC' . &idim =
  1854. 'MOTS' ('EXTRAIRE' nomvit &idim) ;
  1855. 'FIN' idim ;
  1856. 'FIN' iidisc ;
  1857. *
  1858. **************************************
  1859. * Maillage *
  1860. **************************************
  1861. *
  1862. D1 = 1. ; D2 = exprat ;
  1863. L1 = 2. ; mL1 = '*' L1 -1. ;
  1864. * Estimation de la longueur d'après Scott et Mirza
  1865. 'SI' complet ;
  1866. ree = 'MAXIMUM' ('PROG' 200. Re) ;
  1867. 'SINON' ;
  1868. ree = 'MAXIMUM' ('PROG' 100. Re) ;
  1869. 'FINSI' ;
  1870. L2 = 0.044 '*' exprat '*' ree ;
  1871. R2 = '/' D2 2. ;
  1872. R1 = '/' D1 2. ;
  1873. R12 = '-' R2 R1 ;
  1874. reia Lca Lra = SCOTTM exprat Re ;
  1875. 'MESSAGE' ('CHAINE' 'Channel length =' (formar L2 2)) ;
  1876. 'MESSAGE' ('CHAINE' 'Predicted Rel. eddy int. =' (formar reia 3)) ;
  1877. 'MESSAGE' ('CHAINE' 'Predicted eddy center =' (formar Lca 3)) ;
  1878. 'MESSAGE' ('CHAINE' 'Predicted Reatt. length =' (formar Lra 3)) ;
  1879. yc = 'MAXIMUM' ('PROG' Lra 0.4) ;
  1880. *
  1881. lr = 'PROG' R1 R12 ;
  1882. milr = 'MINIMUM' lr ;
  1883. dx = '/' milr nr ;
  1884. dyp = dx ; dyg1 = '/' L1 nr ; dyg2 = '/' L2 nr ;
  1885. *
  1886. pA = 0. mL1 ; pB = R1 mL1 ;
  1887. pC = 0. 0. ; pD = R1 0. ; pE = R2 0. ;
  1888. pF = 0. yc ; pG = R1 yc ; pH = R2 yc ;
  1889. poI = 0. L2 ; pJ = R1 L2 ; pK = R2 L2 ;
  1890. *
  1891. mt1 = MYDAL pA pB pD pC dx dx dyg1 dyp ;
  1892. mt2 = MYDAL pC pD pG pF dx dx dyp dyp ;
  1893. mt3 = MYDAL pD pE pH pG dx dx dyp dyp ;
  1894. mt4 = MYDAL pF pG pJ poI dx dx dyp dyg2 ;
  1895. mt5 = MYDAL pG pH pK pJ dx dx dyp dyg2 ;
  1896. *
  1897. mt = mt1 'ET' mt2 'ET' mt3 'ET' mt4 'ET' mt5 ;
  1898. 'ELIMINATION' mt 1.D-6 ;
  1899. 'SI' graph ;
  1900. tit = 'CHAINE' 'Maillage : ' ('NBEL' mt) ' elements' ;
  1901. 'TRACER' mt 'TITR' tit ;
  1902. 'FINSI' ;
  1903. cmt = 'CONTOUR' mt ;
  1904. *
  1905. bas = 'ELEM' cmt 'COMPRIS' pA pB ;
  1906. dro = 'ELEM' cmt 'COMPRIS' pB pK ;
  1907. dror = 'ELEM' cmt 'COMPRIS' pE pK ;
  1908. hau = 'ELEM' cmt 'COMPRIS' pK poI ;
  1909. gau = 'ELEM' cmt 'COMPRIS' poI pA ;
  1910. *
  1911. 'SI' graph ;
  1912. tit = 'CHAINE' 'Bords du Maillage ' ;
  1913. 'TRACER' (bas 'ET' hau 'ET' dro 'ET' gau) 'TITR' tit ;
  1914. 'FINSI' ;
  1915. *
  1916. 'SI' ('EGA' discv 'LINB') ;
  1917. 'ERREUR' 5 ;
  1918. 'FINSI' ;
  1919. _bas _dro _dror _hau _gau _mt = QUAFME bas dro dror hau gau mt ;
  1920. *'ELIMINATION' (_bas 'ET' _dro 'ET' _hau 'ET' _gau 'ET' _cmt 'ET' _mt)
  1921. * 1.D-5 ;
  1922. _cmt = 'CONTOUR' _mt ;
  1923. _zmt = 'COORDONNEE' 2 _mt ;
  1924. _ptmt = 'POIN' _zmt 'COMPRIS' -1. ('*' yc 1.5) ;
  1925. _tmt = 'ELEM' _mt 'APPUYE' _ptmt ;
  1926. _ctmt = 'CONTOUR' _tmt ;
  1927. *
  1928. *
  1929. **************************************
  1930. * Matrices des opérateurs linéaires *
  1931. **************************************
  1932. *
  1933. *
  1934. * Rigidité
  1935. *
  1936. gri = GRIG _mt tdisc 'NPRI' 'UN' 'NDUA' 'UN' ;
  1937. * gri = GRIG _mt tdisc 'NPRI' 'UN' 'NDUA' 'UN' 'LAPN' ;
  1938. gri = 'CHANGER' 'INCO' gri mpri mpri mpri mdua ;
  1939. *gri = '*' gri ('/' 1. Re) ;
  1940. *
  1941. * Contrainte de divergence nulle
  1942. *
  1943. gdiv = GDIV2 _mt tdisc 'NPRI' 'UN' 'NDUA' 'PN' 'GBBT' ;
  1944. gdiv = 'CHANGER' 'INCO' gdiv mpri mpri mpri mdua ;
  1945. gdiv = '*' gdiv -1. ;
  1946. *
  1947. **************************************
  1948. * Conditions aux limites *
  1949. **************************************
  1950. *
  1951. *
  1952. * Blocages :
  1953. mur = _cmt ;
  1954. muz = _bas 'ET' _dro ;
  1955. rbas = 'COORDONNEE' 1 _bas ;
  1956. 'SI' laxi ; alpha = 2. ; 'SINON' ; alpha = 1.5 ; 'FINSI' ;
  1957. fuz = '/' rbas R1 ;
  1958. *fuz = rbas ;
  1959. fuz = '*' fuz fuz ;
  1960. fuz = '-' fuz 1. ;
  1961. fuz = '*' fuz ('*' -1. alpha) ;
  1962. * Vérification du débit
  1963. cdeb = GMASS2 _bas tdisc 'NPRI' discv 'CPRI' fuz 'NDUA' discv ;
  1964. deb = 'MAXIMUM' ('RESULT' cdeb) ;
  1965. csinj = GMASS2 _bas tdisc 'NPRI' 'CSTE' 'FPRI' 1.
  1966. 'NDUA' 'CSTE' 'FDUA' 1. ;
  1967. sinj = 'MAXIMUM' ('RESULT' csinj) ;
  1968. 'MESSAGE' ('CHAINE' 'deb=' deb) ;
  1969. 'MESSAGE' ('CHAINE' 'sinj=' sinj) ;
  1970. 'SI' ('NEG' deb sinj ('*' sinj 1.D-6)) ;
  1971. 'ERREUR' 'Erreur dans le calcul du profil de vitesse entrant' ;
  1972. 'FINSI' ;
  1973. cuz = 'NOMC' nv2 fuz ;
  1974. vcuz = 'VECT' cuz 'DEPL' 'JAUN' ;
  1975. tit = 'CHAINE' 'Profil dentree' ;
  1976. 'SI' graph ;
  1977. 'TRACER' vcuz bas 'TITR' tit ;
  1978. 'FINSI' ;
  1979. cuzt = '+' cuz ('MANUEL' 'CHPO' muz 1 nv2 0.) ;
  1980. *
  1981. mblor = 'BLOQUE' nv1 mur ;
  1982. mbloz = 'BLOQUE' nv2 muz ;
  1983. fbloz = 'DEPIMPOSE' mbloz cuzt ;
  1984. *
  1985. mblot = mblor 'ET' mbloz ;
  1986. fblot = fbloz ;
  1987. * Conditions aux limites pour la fonction de courant
  1988. blfcou = 'BLOQ' 'T' pB ;
  1989. * Matrice masse pour calculer la force non intégrée sur le bord
  1990. * droit
  1991. mdro = 'KOPS' 'RIMA'
  1992. (GMASS2 _dro tdisc 'NPRI' 'QUAF' 'NDUA' 'QUAF') ;
  1993. *
  1994. **************************************
  1995. * Boucle d'itérations non linéaires *
  1996. * Méthode incrémentale *
  1997. **************************************
  1998. *
  1999. *
  2000. mailv = GMAIL _mt tdisc 'UN' ;
  2001. sol = 'MANU' 'CHPO' mailv nomvit ('PROG' 0. 0.) ;
  2002. sol = sol '+' ('COPIER' cuzt) ;
  2003. *
  2004. 'REPETER' it nitermax ;
  2005. *
  2006. * Convection (dans la boucle car non-linéaire)
  2007. *
  2008. gugr = gugrad2 _mt tdisc 'NPRI' 'UN' 'NDUA' 'UN'
  2009. 'NCOF' 'CSTE' 'FCOF' Re
  2010. 'NVIT' 'UN' 'CVIT' sol ;
  2011. gugr = 'CHANGER' 'INCO' gugr mpri mpri mpri mdua ;
  2012. *
  2013. * Assemblage des matrices et second membres
  2014. *
  2015. ktot = gugr 'ET' gri 'ET' gdiv 'ET' mblot ;
  2016. ktg = ('*' (gugr 'ET' gri) ('/' 1. omeg))
  2017. 'ET' gdiv 'ET' mblot ;
  2018. ftot = fblot '-' ('*' ktot sol) ;
  2019. * ftot = '*' ('*' ktot -1.) sol ;
  2020. ktgk = 'CHANGER' 'INCO' ('KOPS' 'RIMA' ktg) mpri mpri mdua mpri ;
  2021. ftot = 'NOMC' mdua mpri ftot ;
  2022. * Résolution
  2023. dsol = 'KRES' ktgk ftot ;
  2024. sol = '+' sol dsol ;
  2025. * Solution
  2026. dvit = 'EXCO' nomvit dsol ;
  2027. vit = 'EXCO' nomvit sol ;
  2028. pre = 'EXCO' nompre sol ;
  2029. prep = GLNO _mt tdisc 'PN' pre discv ;
  2030. * prep = '-' prep ('MINIMUM' prep) ;
  2031. mdv = 'MAXIMUM' dsol 'ABS' 'AVEC' nomvit ;
  2032. *
  2033. * Calcul des quantités pour comparaison avec les références
  2034. *
  2035. mt = 'CHAN' _mt discv ;
  2036. fcou = FCOURANT mt vit blfcou ;
  2037. mifcou = 'MINIMUM' fcou ;
  2038. mafcou = 'MAXIMUM' fcou ;
  2039. rei = '*' (mafcou '/' mifcou) -1. ;
  2040. Lc = 'MAXIMUM' ('COORDONNEE' 2 (fcou 'POIN' 'MAXI')) ;
  2041. * Frottement sur dror
  2042. fblo = 'EXCO' nomfor nomvit ('*' ('*' mblot -1.) sol) 'NOID' ;
  2043. fzi = 'EXCO' nv2 ('REDU' fblo _dro) ;
  2044. fz = 'KRES' mdro fzi ;
  2045. evf = 'EVOL' 'CHPO' fz _dror ;
  2046. 'SI' graph ;
  2047. chtit = 'CHAINE' 'Force de frottement sur _dror' titg ;
  2048. 'DESSIN' evf 'XBOR' 0. ('*' yc 2.) 'TITR' chtit 'AXES' 'NCLK' ;
  2049. 'FINSI' ;
  2050. evf = 'EXTRAIRE' evf 'APRE' ('*' yc 0.5) ;
  2051. evf = 'EXTRAIRE' evf 'AVAN' ('*' yc 1.5) ;
  2052. xevf = 'EXTRAIRE' evf 'ABSC' ;
  2053. yevf = 'EXTRAIRE' evf 'ORDO' ;
  2054. evv = 'EVOL' 'MANU' yevf xevf ;
  2055. * 'DESSIN' evv ;
  2056. yevf2 xevf2 = 'ORDONNER' 'DECROISSANT' yevf xevf ;
  2057. 'SI' ('>' ('MAXIMUM' ('-' yevf2 yevf) 'ABS') 0.) ;
  2058. Lr = -10000. ;
  2059. 'SINON' ;
  2060. Lr = 'IPOL' 0. yevf xevf ;
  2061. 'FINSI' ;
  2062. *
  2063. 'MESSAGE' ('CHAINE' ' It=' &it
  2064. ' mdv=' (formar mdv 2)
  2065. ' rei=' (formar rei 3)
  2066. ' Lc=' (formar Lc 3)
  2067. ' Lr=' (formar Lr 3)
  2068. ) ;
  2069. 'SI' ('<' mdv mdvquit) ;
  2070. *
  2071. * Graphiques
  2072. *
  2073. 'SI' graph ;
  2074. * Vitesse
  2075. TRVEC cmt vit ('CHAINE' 'Vitesse' titg) ;
  2076. * Pression
  2077. 'TRACER' mt prep _cmt 'TITR' ('CHAINE' 'Pression' titg) ;
  2078. * Fonction de courant
  2079. * TRVEC _mt dvit ('CHAINE' 'Increm. Vitesse') ;
  2080. TRVEC _ctmt ('REDU' vit _tmt)
  2081. ('CHAINE' 'Vitesse' titg) ;
  2082. 'TRACER' _tmt ('REDU' fcou _tmt) _ctmt
  2083. 'TITR' ('CHAINE' 'Fonction de courant' titg) ;
  2084. lprg = 'PROG' mifcou ('/' mifcou 2.) 0. ('/' mafcou 2.) mafcou
  2085. ;
  2086. 'TRACER' _tmt ('REDU' fcou _tmt) _ctmt lprg
  2087. 'TITR' ('CHAINE' 'Fonction de courant' titg) ;
  2088. * Bilan des forces sur le contour et interne
  2089. fpre = 'EXCO' nomfor nomvit ('*' ('*' gdiv -1.) sol) ;
  2090. fblo = 'EXCO' nomfor nomvit ('*' ('*' mblot -1.) sol) 'NOID' ;
  2091. frig = 'EXCO' nomfor nomvit ('*' ('*' gri -1.) sol) ;
  2092. fugr = 'EXCO' nomfor nomvit ('*' ('*' gugr -1.) sol) 'NOID' ;
  2093. desf = fpre '+' frig '+' fugr '+' fblo ;
  2094.  
  2095. *
  2096. fprec frigc desfc fugrc fbloc =
  2097. REDUS _cmt
  2098. fpre frig desf fugr fblo ;
  2099. * TRVEC cmt fprec 'Bord pr' frigc 'ri' desfc 'des' fugrc 'co'
  2100. * fbloc 'bl' ;
  2101. TRVEC cmt fpre 'Bord pr' frig 'ri' desf 'des' fugr 'co'
  2102. fblo 'bl' ;
  2103. mint = 'DIFF' ('CHANGER' _mt 'POI1')
  2104. ('CHANGER' _cmt 'POI1') ;
  2105. * 'TRACER' ('ET' mint mt) ;
  2106. fprei frigi desfi fugri fbloi = REDUS mint
  2107. fpre frig desf fugr fblo ;
  2108. TRVEC cmt fprei 'Int pr' frigi 'ri' desfi 'des' fugri 'co'
  2109. fbloi 'bl' ;
  2110. * TRVEC cmt frigi ' Int ri' desfi 'des' ;
  2111. 'FINSI' ;
  2112. 'QUITTER' it ;
  2113. 'FINSI' ;
  2114. 'FIN' it ;
  2115. *
  2116. tres = 'TABLE' ;
  2117. tres . '_mt' = _mt ;
  2118. tres . 'vit' = vit ;
  2119. tres . 'fcou' = fcou ;
  2120. tres . 'prep' = prep ;
  2121. tres . 'rei' = rei ; tres . 'reia' = reia ;
  2122. tres . 'Lc' = Lc ; tres . 'Lca' = Lca ;
  2123. tres . 'Lr' = Lr ; tres . 'Lra' = Lra ;
  2124. 'RESPRO' tres ;
  2125. 'FINPROC' ;
  2126. *
  2127. ******************************************
  2128. * *
  2129. * Les tests *
  2130. * *
  2131. ******************************************
  2132. 'OPTI' echo 0 ;
  2133. lok = VRAI ;
  2134. * Macagno Hung fexp = 2 Re = 0 Axi ; Lr = 0.27
  2135. 'SI' complet ;
  2136. nr = 12 ; errv = 5.D-4 ;
  2137. 'SINON' ;
  2138. nr = 7 ; errv = 5.D-2 ;
  2139. 'FINSI' ;
  2140. t1 = calcul 2 nr 0. vrai ;
  2141. Lr = t1 . 'Lr' ;
  2142. err = errrel Lr 0.266 ; tst = '<' err errv ;
  2143. 'SI' tst ;
  2144. 'MESSAGE' 'Test 1 : err = ' err ' ok ' ;
  2145. 'SINON' ;
  2146. 'MESSAGE' '!!! Test 1 : err = ' err ' PAS BIEN ! ' ;
  2147. 'FINSI' ;
  2148. lok = lok 'ET' tst ;
  2149. * Scott Mirza fexp = 1.5 Re = 200 Plan
  2150. 'SI' complet ;
  2151. nr = 6 ; errv1 = 3.D-2 ; errv2 = 7.D-2 ; errv3 = 2.D-3 ;
  2152. 'SINON' ;
  2153. nr = 3 ; errv1 = 4.D-2 ; errv2 = 0.2 ; errv3 = 2.D-2 ;
  2154. 'FINSI' ;
  2155. t2 = calcul 1.5 nr 200. faux ;
  2156. Lr = t2 . 'Lr' ; Lc = t2 . 'Lc' ; rei = t2 . 'rei' ;
  2157. Lra = t2 . 'Lra' ; Lca = t2 . 'Lca' ; reia = t2 . 'reia' ;
  2158. err1 = errrel Lr Lra ; tst1 = '<' err1 errv1 ;
  2159. err2 = errrel Lc Lca ; tst2 = '<' err2 errv2 ;
  2160. err3 = errrel rei reia ; tst3 = '<' err3 errv3 ;
  2161. tst = tst1 'ET' tst2 'ET' tst3 ;
  2162. 'SI' tst ;
  2163. 'MESSAGE' 'Test 2 : err1 = ' err1 ;
  2164. 'MESSAGE' ' err2 = ' err2 ;
  2165. 'MESSAGE' ' err3 = ' err3 ' ok ' ;
  2166. 'SINON' ;
  2167. 'MESSAGE' '!!! Test 2 : err1 = ' err1 ;
  2168. 'MESSAGE' '!!! err2 = ' err2 ;
  2169. 'MESSAGE' '!!! err3 = ' err3 ' PAS BIEN ! ' ;
  2170. 'FINSI' ;
  2171. lok = lok 'ET' tst ;
  2172. * Oliveira fexp = 3. Re = 50 Axis ; Lr = 5.33
  2173. 'SI' complet ;
  2174. nr = 6 ; errv1 = 6.D-2 ; errv2 = 5.D-2 ; errv3 = 2.D-2 ;
  2175. 'SINON' ;
  2176. nr = 3 ; errv1 = 1.D-3 ; errv2 = 5.D-2 ; errv3 = 3.D-2 ;
  2177. 'FINSI' ;
  2178. t3 = calcul 3. nr 50. vrai ;
  2179. Lr = t3 . 'Lr' ; Lc = t3 . 'Lc' ; rei = t3 . 'rei' ;
  2180. Lra = 5.33 ; Lca = t3 . 'Lca' ; reia = t3 . 'reia' ;
  2181. err1 = errrel Lr Lra ; tst1 = '<' err1 errv1 ;
  2182. err2 = errrel Lc Lca ; tst2 = '<' err2 errv2 ;
  2183. err3 = errrel rei reia ; tst3 = '<' err3 errv3 ;
  2184. tst = tst1 'ET' tst2 'ET' tst3 ;
  2185. 'SI' tst ;
  2186. 'MESSAGE' 'Test 3 : err1 = ' err1 ;
  2187. 'MESSAGE' ' err2 = ' err2 ;
  2188. 'MESSAGE' ' err3 = ' err3 ' ok ' ;
  2189. 'SINON' ;
  2190. 'MESSAGE' '!!! Test 3 : err1 = ' err1 ;
  2191. 'MESSAGE' '!!! err2 = ' err2 ;
  2192. 'MESSAGE' '!!! err3 = ' err3 ' PAS BIEN ! ' ;
  2193. 'FINSI' ;
  2194. lok = lok 'ET' tst ;
  2195.  
  2196.  
  2197. *
  2198. * Fin du jeu de donnees
  2199. *
  2200. 'SAUTER' 2 'LIGNE' ;
  2201. 'SI' lok ;
  2202. 'MESSAGE' 'Tout sest bien passe' ;
  2203. 'SINON' ;
  2204. 'MESSAGE' 'Il y a eu des erreurs' ;
  2205. 'FINSI' ;
  2206. 'SAUTER' 2 'LIGNE' ;
  2207. 'SI' interact ;
  2208. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  2209. 'FINSI' ;
  2210. 'SI' ('NON' lok) ;
  2211. 'ERREUR' 5 ;
  2212. 'FINSI' ;
  2213. *
  2214. * End of dgibi file SUDDEN_EXPANSION
  2215. *
  2216. 'FIN' ;
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222.  
  2223.  
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.  

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