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

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