Télécharger ns_kreso.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : ns_kreso.dgibi
  2. *
  3. 'OPTI' 'ECHO' 0 ;
  4. *
  5. 'SAUTER' 2 'LIGNE' ;
  6. 'MESSAGE' ' Execution de ns_kreso.dgibi' ;
  7. 'SAUTER' 2 'LIGNE' ;
  8. *
  9. graph = faux ;
  10. complet = faux ;
  11. interact = faux ;
  12. ************************************************************************
  13. * NOM : NS_KRESO
  14. * DESCRIPTION : Cas-test équations de Navier-Stokes incompressibles.
  15. * Cavité carrée entrainee
  16. * On utilise KRES et RESO et on vérifie que les
  17. * résultats obtenus sont identiques.
  18. *
  19. * LANGAGE : GIBIANE-CAST3M
  20. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  21. * mél : gounand@semt2.smts.cea.fr
  22. **********************************************************************
  23. * VERSION : v1, 27/05/2011, version initiale
  24. * HISTORIQUE : v1, 27/05/2011, création
  25. * HISTORIQUE :
  26. * HISTORIQUE :
  27. ************************************************************************
  28. *
  29. 'OPTION' 'DIME' 2 'MODE' 'PLAN' 'ISOV' 'SURF' ;
  30. ************************************************************************
  31. *
  32. *
  33. * PROCEDURES
  34. *
  35. *
  36. ************************************************************************
  37. *BEGINPROCEDUR gdiv2
  38. ************************************************************************
  39. * NOM : GDIV2
  40. * DESCRIPTION : Une matrice de masse
  41. *
  42. *
  43. *
  44. * LANGAGE : GIBIANE-CAST3M
  45. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  46. * mél : gounand@semt2.smts.cea.fr
  47. **********************************************************************
  48. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  49. * VERSION : v1, 13/05/2004, version initiale
  50. * HISTORIQUE : v1, 13/05/2004, création
  51. * HISTORIQUE :
  52. * HISTORIQUE :
  53. ************************************************************************
  54. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  55. * en cas de modification de ce sous-programme afin de faciliter
  56. * la maintenance !
  57. ************************************************************************
  58. *
  59. *
  60. 'DEBPROC' GDIV2 ;
  61. 'ARGUMENT' _mt*'MAILLAGE' ;
  62. 'ARGUMENT' _smt/'MAILLAGE' ;
  63. 'ARGUMENT' tdisc*'TABLE' ;
  64. *
  65. * Lectures
  66. *
  67. debug = FAUX ;
  68. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  69. 'NCOF' 'FCOF' 'CCOF' 'GBBT' 'GMBT' ;
  70. * Il faut initialiser valt et valq, sinon on peut capturer ceux de
  71. * la procédure appelante
  72. valt = 'valt' ; valq = 'valq' ;
  73. lbbt = 0 ;
  74. *
  75. 'REPETER' imotcle ;
  76. 'ARGUMENT' motcle/'MOT' ;
  77. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  78. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  79. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  80. 'FINSI' ;
  81. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  82. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  83. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  84. 'SI' ('EGA' motcle 'FPRI') ; 'ARGUMENT' valt*'LISTREEL' ; 'FINSI' ;
  85. 'SI' ('EGA' motcle 'FDUA') ; 'ARGUMENT' valq*'FLOTTANT' ; 'FINSI' ;
  86. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  87. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  88. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  89. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  90. 'SI' ('EGA' motcle 'GBBT') ; lbbt = 1 ; 'FINSI' ;
  91. 'SI' ('EGA' motcle 'GMBT') ; lbbt = 2 ; 'FINSI' ;
  92. 'FIN' imotcle ;
  93. *
  94. * Tests
  95. *
  96. discg = TDISC . 'GEOM' . 'DISC' ;
  97. 'SI' ('EXISTE' tdisc 'methgau') ;
  98. methgau = tdisc . 'methgau' . 'amor' ;
  99. 'SINON' ;
  100. methgau = 'GAU7' ;
  101. 'FINSI' ;
  102. tnomt = TDISC . nomt ;
  103. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  104. tnomq = TDISC . nomq ;
  105. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  106. *
  107. lcof = 'EXISTE' TDISC nomo ;
  108. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  109. 'SINON' ; ncof = 0 ;
  110. 'FINSI' ;
  111. *
  112. 'SI' debug ;
  113. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  114. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  115. 'FINSI' ;
  116. 'FINSI' ;
  117. *
  118. vdim = 'VALEUR' 'DIME' ;
  119. vmod = 'VALEUR' 'MODE' ;
  120. idim = 0 ;
  121. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  122. idim = 2 ;
  123. iaxi = FAUX ;
  124. 'FINSI' ;
  125. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  126. idim = 2 ;
  127. iaxi = VRAI ;
  128. 'FINSI' ;
  129. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  130. idim = 3 ;
  131. iaxi = FAUX ;
  132. 'FINSI' ;
  133. 'SI' ('EGA' vdim 1) ;
  134. idim = 1 ;
  135. iaxi = FAUX ;
  136. 'FINSI' ;
  137. 'SI' ('EGA' idim 0) ;
  138. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  139. 'FINSI' ;
  140. 'SI' iaxi ;
  141. dp = ('*' PI 2.D0) ;
  142. rmt = 'COORDONNEE' 1 _mt ;
  143. ncof = ncof '+' 2 ;
  144. 'FINSI' ;
  145. * Scalaire ou vecteur
  146. ninct = 'DIME' (tnomt . 'NOMPRI') ;
  147. nincq = 'DIME' (tnomq . 'NOMPRI') ;
  148. 'SI' ('NEG' ninct idim) ;
  149. cherr = 'CHAINE'
  150. 'la primale doit etre un vecteur' ;
  151. 'ERREUR' cherr ;
  152. 'FINSI' ;
  153. 'SI' ('NEG' nincq 1) ;
  154. cherr = 'CHAINE'
  155. 'la duale doit etre un scalaire' ;
  156. 'ERREUR' cherr ;
  157. 'FINSI' ;
  158. *
  159. numop = 1 ; numder = idim ; numvar = ninct ;
  160. numdat = ncof ; numcof = ncof ;
  161. A = ININLIN numop numvar numdat numcof numder ;
  162. *
  163. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  164. 'REPETER' iiinct ninct ;
  165. iinct = &iiinct ;
  166. A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMPRI' . iinct ;
  167. A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
  168. 'SI' lvalt ;
  169. 'SI' lvt ;
  170. A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
  171. 'SINON' ;
  172. A . 'VAR' . iinct . 'VALEUR' = valt ;
  173. 'FINSI' ;
  174. 'FINSI' ;
  175. 'FIN' iiinct ;
  176. *
  177. icof = 0 ;
  178. 'SI' lcof ;
  179. icof = '+' icof 1 ;
  180. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
  181. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  182. A . 'DAT' . icof . 'VALEUR' = valo ;
  183. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  184. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  185. ll = 'LECT' 1 ;
  186. 'SINON' ;
  187. ll = 'LECT' ;
  188. 'FINSI' ;
  189. *
  190. 'SI' iaxi ;
  191. icof = '+' icof 1 ;
  192. A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  193. A . 'DAT' . icof . 'DISC' = 'CSTE' ;
  194. A . 'DAT' . icof . 'VALEUR' = dp ;
  195. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  196. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  197. icof = '+' icof 1 ;
  198. A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  199. A . 'DAT' . icof . 'DISC' = discg ;
  200. A . 'DAT' . icof . 'VALEUR' = rmt ;
  201. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  202. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  203. lldpr = ll 'ET' ('LECT' ('-' icof 1) icof) ;
  204. lldp = ll 'ET' ('LECT' ('-' icof 1)) ;
  205. 'FINSI' ;
  206. *
  207. 'SI' iaxi ;
  208. 'REPETER' iidim idim ;
  209. A . 1 . &iidim . &iidim = lldpr ;
  210. 'FIN' iidim ;
  211. A . 1 . 1 . 0 = lldp ;
  212. 'SINON' ;
  213. 'REPETER' iidim idim ;
  214. A . 1 . &iidim . &iidim = ll ;
  215. 'FIN' iidim ;
  216. 'FINSI' ;
  217. *
  218. numvar = 1 ;
  219. numdat = 0 ;
  220. numcof = 0 ;
  221. *
  222. B = ININLIN numop numvar numdat numcof numder ;
  223. B . 'VAR' . 1 . 'NOMDDL' = tnomq . 'NOMDUA' . 1 ;
  224. B . 'VAR' . 1 . 'DISC' = tnomq . 'DISC' ;
  225. 'SI' lvalq ;
  226. B . 'VAR' . 1 . 'VALEUR' = valq ;
  227. 'FINSI' ;
  228. B . 1 . 1 . 0 = 'LECT' ;
  229. *
  230. 'SI' ('OU' ('EGA' lbbt 0) ('EGA' lbbt 1)) ;
  231. 'SI' ('EXISTE' _smt) ;
  232. mgdiv2 = 'NLIN' discg _mt _smt A B methgau ;
  233. 'SINON' ;
  234. mgdiv2 = NLINP discg _mt A B methgau ;
  235. 'FINSI' ;
  236. 'FINSI' ;
  237. 'SI' ('OU' ('EGA' lbbt 1) ('EGA' lbbt 2)) ;
  238. B . 'VAR' . 1 . 'NOMDDL' = tnomq . 'NOMPRI' . 1 ;
  239. 'REPETER' iiinct ninct ;
  240. iinct = &iiinct ;
  241. A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMDUA' . iinct ;
  242. 'FIN' iiinct ;
  243. 'SI' ('EXISTE' _smt) ;
  244. mgdiv3 = 'NLIN' discg _mt _smt B A methgau ;
  245. 'SINON' ;
  246. mgdiv3 = NLINP discg _mt B A methgau ;
  247. 'FINSI' ;
  248. 'FINSI' ;
  249. 'SI' ('EGA' lbbt 0) ;
  250. mgdiv = mgdiv2 ;
  251. 'FINSI' ;
  252. 'SI' ('EGA' lbbt 1) ;
  253. mgdiv = mgdiv2 'ET' mgdiv3 ;
  254. 'FINSI' ;
  255. 'SI' ('EGA' lbbt 2) ;
  256. mgdiv = mgdiv3 ;
  257. 'FINSI' ;
  258. 'RESPRO' mgdiv ;
  259. 'FINPROC' ;
  260. *
  261. * End of procedure file GDIV2
  262. *
  263. *ENDPROCEDUR gdiv2
  264. *BEGINPROCEDUR gnor2
  265. ************************************************************************
  266. * NOM : GNOR2
  267. * DESCRIPTION : Calcule le champ de normales à une surface.
  268. * Peut servir à calculer une pression, un potentiel
  269. * lié à la gravité, un volume contenu dans une surface.
  270. * Attention à l'orientation de la surface !
  271. *
  272. * Computes a field of normal to a surface.
  273. * Also useful to compute a pressure field,
  274. * a gravity potential field, a volume enclosed
  275. * by a surface.
  276. * WARNING : The orientation of the surface matters !
  277. *
  278. *
  279. *
  280. *
  281. * LANGAGE : GIBIANE-CAST3M
  282. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  283. * mél : gounand@semt2.smts.cea.fr
  284. **********************************************************************
  285. * VERSION : v1, 22/04/2011
  286. * HISTORIQUE : v1, 22/04/2011, création
  287. * HISTORIQUE :
  288. * HISTORIQUE :
  289. ************************************************************************
  290. *
  291. *
  292. 'DEBPROC' GNOR2 ;
  293. 'ARGUMENT' _mt*'MAILLAGE' ;
  294. 'ARGUMENT' tdisc*'TABLE' ;
  295. *
  296. * Lectures
  297. *
  298. dim = 'VALEUR' 'DIME' ;
  299. debug = FAUX ;
  300. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  301. 'NCOF' 'FCOF' 'CCOF' ;
  302. * Il faut initialiser valt et valq, sinon on peut capturer ceux de
  303. * la procédure appelante
  304. valt = 'valt' ; valq = 'valq' ;
  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. tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
  315. tst3 = 'EGA' motcle 'FCOF' ;
  316. tst = tst1 'OU' tst2 'OU' tst3 ;
  317. 'SI' tst ;
  318. 'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
  319. 'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
  320. 'SI' tst3 ; tt = TDISC . nomo ; 'FINSI' ;
  321. isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
  322. 'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
  323. 'ARGUMENT' valv*'FLOTTANT' ;
  324. 'FINSI' ;
  325. 'SI' tst1 ; valt = valv ; 'FINSI' ;
  326. 'SI' tst2 ; valq = valv ; 'FINSI' ;
  327. 'SI' tst3 ; valo = valv ; 'FINSI' ;
  328. 'FINSI' ;
  329. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  330. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  331. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  332. 'FIN' imotcle ;
  333. *
  334. * Tests
  335. *
  336. discg = TDISC . 'GEOM' . 'DISC' ;
  337. 'SI' ('EXISTE' tdisc 'methgau') ;
  338. methgau = tdisc . 'methgau' . 'mass' ;
  339. 'SINON' ;
  340. methgau = 'GAU7' ;
  341. 'FINSI' ;
  342. tnomt = TDISC . nomt ;
  343. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  344. tnomq = TDISC . nomq ;
  345. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  346. * Scalaire ou vecteur
  347. ninct = 'DIME' (tnomt . 'NOMPRI') ;
  348. nincq = 'DIME' (tnomq . 'NOMDUA') ;
  349. 'SI' ('ET' ('NEG' ninct 1) ('NEG' ninct dim)) ;
  350. cherr = 'CHAINE'
  351. 'la primale doit etre un scalaire ou un vecteur' ;
  352. 'ERREUR' cherr ;
  353. 'FINSI' ;
  354. 'SI' ('NEG' nincq dim) ;
  355. cherr = 'CHAINE'
  356. 'la duale doit etre un vecteur' ;
  357. 'ERREUR' cherr ;
  358. 'FINSI' ;
  359. *ninc = ninct ;
  360. *
  361. lcof = 'EXISTE' TDISC nomo ;
  362. 'SI' lcof ; tcof = TDISC . nomo ;
  363. ncof = 'DIME' (tcof . 'NOMPRI') ;
  364. 'SINON' ; ncof = 0 ;
  365. 'FINSI' ;
  366. *
  367. 'SI' debug ;
  368. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  369. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  370. 'FINSI' ;
  371. 'FINSI' ;
  372. *
  373. vdim = 'VALEUR' 'DIME' ;
  374. vmod = 'VALEUR' 'MODE' ;
  375. idim = 0 ;
  376. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  377. idim = 2 ;
  378. iaxi = FAUX ;
  379. 'FINSI' ;
  380. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  381. idim = 2 ;
  382. iaxi = VRAI ;
  383. 'FINSI' ;
  384. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  385. idim = 3 ;
  386. iaxi = FAUX ;
  387. 'FINSI' ;
  388. 'SI' ('EGA' vdim 1) ;
  389. idim = 1 ;
  390. iaxi = FAUX ;
  391. 'FINSI' ;
  392. * 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
  393. 'SI' ('EGA' idim 0) ;
  394. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  395. 'FINSI' ;
  396. 'SI' iaxi ;
  397. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  398. 'FINSI' ;
  399. *
  400. * Optimisation possible : construire la matrice par blocs
  401. * qd valt et valq ne sont pas donnés
  402. *
  403. numop = nincq ; numder = idim ; numvar = ninct ;
  404. numdat = ncof ; numcof = ncof ;
  405. A = ININLIN numop numvar numdat numcof numder ;
  406. 'SI' lcof ;
  407. lvo = 'EGA' ('TYPE' valo) 'LISTREEL' ;
  408. 'REPETER' iicof ncof ;
  409. icof = &iicof ;
  410. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . icof ;
  411. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  412. 'SI' lvo ;
  413. A . 'DAT' . icof . 'VALEUR' = 'EXTRAIRE' valo icof ;
  414. 'SINON' ;
  415. A . 'DAT' . icof . 'VALEUR' = valo ;
  416. 'FINSI' ;
  417. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  418. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  419. 'FIN' iicof ;
  420. 'SINON' ;
  421. ll = 'LECT' ;
  422. 'FINSI' ;
  423. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  424. 'REPETER' iiincq nincq ;
  425. iincq = &iiincq ;
  426. iinct = 'MINIMUM' ('LECT' iincq ninct) ;
  427. A . 'VAR' . iinct . 'NOMDDL' = tnomt . 'NOMPRI' . iinct ;
  428. A . 'VAR' . iinct . 'DISC' = tnomt . 'DISC' ;
  429. 'SI' lvalt ;
  430. 'SI' lvt ;
  431. A . 'VAR' . iinct . 'VALEUR' = 'EXTRAIRE' valt iinct ;
  432. 'SINON' ;
  433. A . 'VAR' . iinct . 'VALEUR' = valt ;
  434. 'FINSI' ;
  435. 'FINSI' ;
  436. 'SI' lcof ;
  437. icof = 'MINIMUM' ('LECT' iincq ncof) ;
  438. A . iincq . iinct . 0 = 'LECT' icof ;
  439. 'SINON' ;
  440. A . iincq . iinct . 0 = ll ;
  441. 'FINSI' ;
  442. 'FIN' iiincq ;
  443. *
  444. 'SI' iaxi ;
  445. numdat = 1 ;
  446. numcof = dim '+' 1 ;
  447. 'SINON' ;
  448. numdat = 0 ;
  449. numcof = dim ;
  450. 'FINSI' ;
  451. numvar = nincq ;
  452. B = ININLIN numop numvar numdat numcof numder ;
  453. icof = 0 ;
  454. 'REPETER' iiidim idim ;
  455. icof = '+' icof 1 ;
  456. B . 'COF' . icof . 'COMPOR' = 'CHAINE' 'VNOR' &iiidim ;
  457. B . 'COF' . icof . 'LDAT' = 'LECT' ;
  458. 'FIN' iiidim ;
  459. *
  460. 'SI' iaxi ;
  461. icof = '+' icof 1 ;
  462. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  463. B . 'DAT' . 1 . 'DISC' = discg ;
  464. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  465. B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  466. B . 'COF' . icof . 'LDAT' = 'LECT' 1 ;
  467. ll = 'LECT' icof ;
  468. 'SINON' ;
  469. ll = 'LECT' ;
  470. 'FINSI' ;
  471. lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
  472. 'REPETER' iiincq nincq ;
  473. iincq = &iiincq ;
  474. B . 'VAR' . iincq . 'NOMDDL' = tnomq . 'NOMDUA' . iincq ;
  475. B . 'VAR' . iincq . 'DISC' = tnomq . 'DISC' ;
  476. 'SI' lvalq ;
  477. 'SI' lvq ;
  478. B . 'VAR' . iincq . 'VALEUR' = 'EXTRAIRE' valq iincq ;
  479. 'SINON' ;
  480. B . 'VAR' . iincq . 'VALEUR' = valq ;
  481. 'FINSI' ;
  482. 'FINSI' ;
  483. B . iincq . iincq . 0 = ('LECT' iincq) 'ET' ll ;
  484. 'FIN' iiincq ;
  485. *
  486. mgnor2 = NLIN discg _mt A B methgau ;
  487. *
  488. 'RESPRO' mgnor2 ;
  489. 'FINPROC' ;
  490. *
  491. * End of procedure file GNOR2
  492. *
  493. *ENDPROCEDUR gnor2
  494. *BEGINPROCEDUR grig2
  495. ************************************************************************
  496. * NOM : GRIG2
  497. * DESCRIPTION :
  498. *
  499. *
  500. *
  501. * LANGAGE : GIBIANE-CAST3M
  502. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  503. * mél : gounand@semt2.smts.cea.fr
  504. **********************************************************************
  505. * VERSION : v1, ??/??/2007, version initiale
  506. * HISTORIQUE : v1, ??/??/2007, création
  507. * HISTORIQUE :
  508. * HISTORIQUE :
  509. ************************************************************************
  510. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  511. * en cas de modification de ce sous-programme afin de faciliter
  512. * la maintenance !
  513. ************************************************************************
  514. *
  515. *
  516. 'DEBPROC' GRIG2 ;
  517. 'ARGUMENT' _mt*'MAILLAGE' ;
  518. 'ARGUMENT' tdisc*'TABLE' ;
  519. *
  520. * Lectures
  521. *
  522. debug = FAUX ;
  523. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  524. 'NCOF' 'FCOF' 'CCOF' 'LAPN' 'GMBT' ;
  525. * Il faut initialiser valt et valq, sinon on peut capturer ceux de
  526. * la procédure appelante
  527. valt = 'valt' ; valq = 'valq' ;
  528. llapn = 0 ;
  529. 'REPETER' imotcle ;
  530. 'ARGUMENT' motcle/'MOT' ;
  531. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  532. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  533. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  534. 'FINSI' ;
  535. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  536. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  537. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  538. tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
  539. tst = tst1 'OU' tst2 ;
  540. 'SI' tst ;
  541. 'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
  542. 'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
  543. isvec = ('>' ('DIME' (tt. 'NOMPRI')) 1) ;
  544. 'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
  545. 'ARGUMENT' valv*'FLOTTANT' ;
  546. 'FINSI' ;
  547. 'SI' tst1 ; valt = valv ; 'FINSI' ;
  548. 'SI' tst2 ; valq = valv ; 'FINSI' ;
  549. 'FINSI' ;
  550. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  551. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  552. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  553. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  554. 'SI' ('EGA' motcle 'LAPN') ; llapn = 1 ; 'FINSI' ;
  555. 'SI' ('EGA' motcle 'GMBT') ; llapn = 2 ; 'FINSI' ;
  556. 'FIN' imotcle ;
  557. *
  558. * Tests
  559. *
  560. discg = TDISC . 'GEOM' . 'DISC' ;
  561. 'SI' ('EXISTE' tdisc 'methgau') ;
  562. methgau = tdisc . 'methgau' . 'rigi' ;
  563. 'SINON' ;
  564. methgau = 'GAU7' ;
  565. 'FINSI' ;
  566. tnomt = TDISC . nomt ;
  567. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  568. tnomq = TDISC . nomq ;
  569. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  570. * Scalaire ou vecteur
  571. ninct = 'DIME' (tnomt . 'NOMPRI') ;
  572. nincq = 'DIME' (tnomq . 'NOMPRI') ;
  573. 'SI' ('NEG' ninct nincq) ;
  574. cherr = 'CHAINE'
  575. 'les primales et duales nont pas le meme nombre de composantes' ;
  576. 'ERREUR' cherr ;
  577. 'FINSI' ;
  578. 'SI' ('NEG' ninct ('VALEUR' 'DIME')) ;
  579. cherr = 'CHAINE'
  580. 'les inconnues doivent etre vectorielles' ;
  581. 'ERREUR' cherr ;
  582. 'FINSI' ;
  583. *
  584. ninc = ninct ;
  585. *
  586. lcof = 'EXISTE' TDISC nomo ;
  587. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  588. 'SINON' ; ncof = 0 ;
  589. 'FINSI' ;
  590. *
  591. 'SI' debug ;
  592. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  593. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  594. 'FINSI' ;
  595. 'FINSI' ;
  596. *
  597. vdim = 'VALEUR' 'DIME' ;
  598. vmod = 'VALEUR' 'MODE' ;
  599. idim = 0 ;
  600. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  601. idim = 2 ;
  602. iaxi = FAUX ;
  603. 'FINSI' ;
  604. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  605. idim = 2 ;
  606. iaxi = VRAI ;
  607. 'FINSI' ;
  608. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  609. idim = 3 ;
  610. iaxi = FAUX ;
  611. 'FINSI' ;
  612. 'SI' ('EGA' vdim 1) ;
  613. idim = 1 ;
  614. iaxi = FAUX ;
  615. 'FINSI' ;
  616. * 'MESSAGE' ('CHAINE' 'iaxi=' iaxi );
  617. 'SI' ('EGA' idim 0) ;
  618. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  619. 'FINSI' ;
  620. 'SI' iaxi ;
  621. rmt = 'COORDONNEE' 1 _mt ;
  622. deupi = '*' PI 2.D0 ;
  623. 'FINSI' ;
  624. *
  625. * Optimisation possible : construire la matrice par blocs
  626. * qd valt et valq ne sont pas donnés
  627. *
  628. *
  629. *Bug ? numop = ('**' ninc 2) '+' 1 ;
  630. numop = '**' ninc 2 ;
  631. 'SI' iaxi ; numop = '+' numop 1 ; 'FINSI' ;
  632. numder = idim ;
  633. numvar = ninc ;
  634. ncof = '+' ncof 1 ;
  635. *delete 'SI' iaxi ; ncof = '+' ncof 1 ; 'FINSI' ;
  636. numdat = ncof ;
  637. numcof = ncof ;
  638. *
  639. A = ININLIN numop numvar numdat numcof numder ;
  640. *
  641. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  642. 'REPETER' iiinc ninc ;
  643. iinc = &iiinc ;
  644. A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMPRI' . iinc ;
  645. A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
  646. 'SI' lvalt ;
  647. 'SI' lvt ;
  648. A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
  649. 'SINON' ;
  650. A . 'VAR' . iinc . 'VALEUR' = valt ;
  651. 'FINSI' ;
  652. 'FINSI' ;
  653. 'FIN' iiinc ;
  654. *
  655. icof = 0 ;
  656. ll = 'LECT' ;
  657. icof = '+' icof 1 ;
  658. A . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  659. A . 'DAT' . icof . 'DISC' = 'CSTE' ;
  660. A . 'DAT' . icof . 'VALEUR' = 2.D0 ;
  661. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  662. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  663. ll = 'LECT' ;
  664. ll2 = 'LECT' icof ;
  665. 'SI' lcof ;
  666. icof = '+' icof 1 ;
  667. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
  668. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  669. A . 'DAT' . icof . 'VALEUR' = valo ;
  670. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  671. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  672. ll = 'ET' ll ('LECT' icof) ;
  673. ll2 = 'ET' ll2 ('LECT' icof) ;
  674. 'FINSI' ;
  675. *
  676. iop = 0 ;
  677. 'REPETER' iidim idim ;
  678. 'REPETER' jidim idim ;
  679. iop = '+' iop 1 ;
  680. 'SI' ('EGA' &iidim &jidim) ;
  681. 'SI' ('EGA' llapn 0) ;
  682. A . iop . &iidim . &jidim = ll2 ;
  683. 'SINON' ;
  684. A . iop . &iidim . &jidim = ll ;
  685. 'FINSI' ;
  686. 'SINON' ;
  687. 'SI' ('NEG' llapn 2) ;
  688. A . iop . &iidim . &jidim = ll ;
  689. 'FINSI' ;
  690. 'SI' ('NEG' llapn 1) ;
  691. A . iop . &jidim . &iidim = ll ;
  692. 'FINSI' ;
  693. 'FINSI' ;
  694. 'FIN' jidim ;
  695. 'FIN' iidim ;
  696. 'SI' iaxi ;
  697. iop = '+' iop 1 ;
  698. 'SI' ('EGA' llapn 0) ;
  699. A . iop . 1 . 0 = ll2 ;
  700. 'SINON' ;
  701. A . iop . 1 . 0 = ll ;
  702. 'FINSI' ;
  703. 'FINSI' ;
  704. *
  705. 'SI' iaxi ;
  706. numdat = 2 ;
  707. numcof = 2 ;
  708. 'SINON' ;
  709. numdat = 0 ;
  710. numcof = 0 ;
  711. 'FINSI' ;
  712. *
  713. B = ININLIN numop numvar numdat numcof numder ;
  714. *
  715. icof = 0 ;
  716. *
  717. 'SI' iaxi ;
  718. icof = '+' icof 1 ;
  719. B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  720. B . 'DAT' . icof . 'DISC' = discg ;
  721. B . 'DAT' . icof . 'VALEUR' = rmt ;
  722. B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  723. B . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  724. icof = '+' icof 1 ;
  725. B . 'DAT' . icof . 'NOMDDL' = 'MOTS' 'SCAL' ;
  726. B . 'DAT' . icof . 'DISC' = 'CSTE' ;
  727. B . 'DAT' . icof . 'VALEUR' = deupi ;
  728. B . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  729. B . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  730. ll = 'LECT' ('-' icof 1) icof ;
  731. mic = '*' ('-' icof 1) -1 ;
  732. llb = 'LECT' mic icof ;
  733. 'FINSI' ;
  734. *
  735. lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
  736. 'REPETER' iiinc ninc ;
  737. iinc = &iiinc ;
  738. B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMDUA' . iinc ;
  739. B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
  740. 'SI' lvalq ;
  741. 'SI' lvq ;
  742. B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
  743. 'SINON' ;
  744. B . 'VAR' . iinc . 'VALEUR' = valq ;
  745. 'FINSI' ;
  746. 'FINSI' ;
  747. 'FIN' iiinc ;
  748. *
  749. iop = 0 ;
  750. 'REPETER' iidim idim ;
  751. 'REPETER' jidim idim ;
  752. iop = '+' iop 1 ;
  753. B . iop . &iidim . &jidim = ll ;
  754. 'FIN' jidim ;
  755. 'FIN' iidim ;
  756. 'SI' iaxi ;
  757. iop = '+' iop 1 ;
  758. B . iop . 1 . 0 = llb ;
  759. * B . iop . 1 . 0 = ll ;
  760. 'FINSI' ;
  761. *
  762. mgrig = NLINP discg _mt A B methgau ;
  763. * Integration par parties
  764. * mgrig = '*' mgrig -1.D0 ;
  765. *
  766. 'RESPRO' mgrig ;
  767. 'FINPROC' ;
  768. *
  769. * End of procedure file GRIG2
  770. *
  771. *ENDPROCEDUR grig2
  772. *BEGINPROCEDUR gugrad2
  773. ************************************************************************
  774. * NOM : GUGRAD2
  775. * DESCRIPTION : Une matrice de convection
  776. *
  777. *
  778. *
  779. * LANGAGE : GIBIANE-CAST3M
  780. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  781. * mél : gounand@semt2.smts.cea.fr
  782. **********************************************************************
  783. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  784. * VERSION : v1, 13/05/2004, version initiale
  785. * HISTORIQUE : v1, 13/05/2004, création
  786. * HISTORIQUE :
  787. * HISTORIQUE :
  788. ************************************************************************
  789. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  790. * en cas de modification de ce sous-programme afin de faciliter
  791. * la maintenance !
  792. ************************************************************************
  793. *
  794. *
  795. 'DEBPROC' GUGRAD2 ;
  796. 'ARGUMENT' _mt*'MAILLAGE' ;
  797. 'ARGUMENT' _smt/'MAILLAGE' ;
  798. 'ARGUMENT' tdisc*'TABLE' ;
  799. *
  800. * Lectures
  801. *
  802. debug = FAUX ;
  803. lmotcle = 'MOTS' 'NPRI' 'FPRI' 'CPRI' 'NDUA' 'FDUA' 'CDUA'
  804. 'NVIT' 'FVIT' 'CVIT' 'NCOF' 'FCOF' 'CCOF' ;
  805. 'REPETER' imotcle ;
  806. 'ARGUMENT' motcle/'MOT' ;
  807. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  808. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  809. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  810. 'FINSI' ;
  811. 'SI' ('EGA' motcle 'NPRI') ; 'ARGUMENT' nomt*'MOT' ; 'FINSI' ;
  812. 'SI' ('EGA' motcle 'NDUA') ; 'ARGUMENT' nomq*'MOT' ; 'FINSI' ;
  813. 'SI' ('EGA' motcle 'NCOF') ; 'ARGUMENT' nomo*'MOT' ; 'FINSI' ;
  814. 'SI' ('EGA' motcle 'NVIT') ; 'ARGUMENT' nomu*'MOT' ; 'FINSI' ;
  815. tst1 = 'EGA' motcle 'FPRI' ; tst2 = 'EGA' motcle 'FDUA' ;
  816. tst = tst1 'OU' tst2 ;
  817. 'SI' tst ;
  818. 'SI' tst1 ; tt = TDISC . nomt ; 'FINSI' ;
  819. 'SI' tst2 ; tt = TDISC . nomq ; 'FINSI' ;
  820. isvec = ('>' ('DIME' (tt. 'NOMINC')) 1) ;
  821. 'SI' isvec ; 'ARGUMENT' valv*'LISTREEL' ; 'SINON' ;
  822. 'ARGUMENT' valv*'FLOTTANT' ;
  823. 'FINSI' ;
  824. 'SI' tst1 ; valt = valv ; 'FINSI' ;
  825. 'SI' tst2 ; valq = valv ; 'FINSI' ;
  826. 'FINSI' ;
  827. 'SI' ('EGA' motcle 'FCOF') ; 'ARGUMENT' valo*'FLOTTANT' ; 'FINSI' ;
  828. 'SI' ('EGA' motcle 'FVIT') ; 'ARGUMENT' valu*'LISTREEL' ; 'FINSI' ;
  829. 'SI' ('EGA' motcle 'CPRI') ; 'ARGUMENT' valt*'CHPOINT' ; 'FINSI' ;
  830. 'SI' ('EGA' motcle 'CDUA') ; 'ARGUMENT' valq*'CHPOINT' ; 'FINSI' ;
  831. 'SI' ('EGA' motcle 'CCOF') ; 'ARGUMENT' valo*'CHPOINT' ; 'FINSI' ;
  832. 'SI' ('EGA' motcle 'CVIT') ; 'ARGUMENT' valu*'CHPOINT' ; 'FINSI' ;
  833. 'FIN' imotcle ;
  834. *
  835. * Tests
  836. *
  837. discg = TDISC . 'GEOM' . 'DISC' ;
  838. 'SI' ('EXISTE' tdisc 'methgau') ;
  839. methgau = tdisc . 'methgau' . 'amor' ;
  840. 'SINON' ;
  841. methgau = 'GAU7' ;
  842. 'FINSI' ;
  843. tnomt = TDISC . nomt ;
  844. lvalt = 'NEG' ('TYPE' valt) 'MOT' ;
  845. tnomq = TDISC . nomq ;
  846. lvalq = 'NEG' ('TYPE' valq) 'MOT' ;
  847. tnomu = TDISC . nomu ;
  848. * Scalaire ou vecteur
  849. ninct = 'DIME' (tnomt . 'NOMPRI') ;
  850. nincq = 'DIME' (tnomq . 'NOMPRI') ;
  851. 'SI' ('NEG' ninct nincq) ;
  852. cherr = 'CHAINE'
  853. 'les primales et duales nont pas le meme nombre de composantes' ;
  854. 'ERREUR' cherr ;
  855. 'FINSI' ;
  856. ninc = ninct ;
  857. *
  858. lcof = 'EXISTE' TDISC nomo ;
  859. 'SI' lcof ; ncof = 1 ; tcof = TDISC . nomo ;
  860. 'SINON' ; ncof = 0 ;
  861. 'FINSI' ;
  862. *
  863. 'SI' debug ;
  864. 'SI' lcof ; 'MESSAGE' 'Un coef a ete detecte' ;
  865. 'SINON' ; 'MESSAGE' 'pas de coef detecte' ;
  866. 'FINSI' ;
  867. 'FINSI' ;
  868. *
  869. vdim = 'VALEUR' 'DIME' ;
  870. vmod = 'VALEUR' 'MODE' ;
  871. idim = 0 ;
  872. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  873. idim = 2 ;
  874. iaxi = FAUX ;
  875. 'FINSI' ;
  876. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  877. idim = 2 ;
  878. iaxi = VRAI ;
  879. 'FINSI' ;
  880. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  881. idim = 3 ;
  882. iaxi = FAUX ;
  883. 'FINSI' ;
  884. 'SI' ('EGA' vdim 1) ;
  885. idim = 1 ;
  886. iaxi = FAUX ;
  887. 'FINSI' ;
  888. 'SI' ('EGA' idim 0) ;
  889. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  890. 'FINSI' ;
  891. 'SI' iaxi ;
  892. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  893. 'FINSI' ;
  894. * Scalaire ou vecteur
  895. nincu = 'DIME' (tnomu . 'NOMPRI') ;
  896. 'SI' ('NEG' nincu idim) ;
  897. cherr = 'CHAINE'
  898. 'la vitesse doit etre un vecteur' ;
  899. 'ERREUR' cherr ;
  900. 'FINSI' ;
  901. ncof = '+' ncof nincu ;
  902. *
  903. * Optimisation possible : construire la matrice par blocs
  904. * qd valt et valq ne sont pas donnés
  905. *
  906. numop = ninc ; numder = idim ; numvar = ninc ;
  907. numdat = ncof ; numcof = ncof ;
  908. A = ININLIN numop numvar numdat numcof numder ;
  909. *
  910. lvt = 'EGA' ('TYPE' valt) 'LISTREEL' ;
  911. 'REPETER' iiinc ninc ;
  912. iinc = &iiinc ;
  913. A . 'VAR' . iinc . 'NOMDDL' = tnomt . 'NOMPRI' . iinc ;
  914. A . 'VAR' . iinc . 'DISC' = tnomt . 'DISC' ;
  915. 'SI' lvalt ;
  916. 'SI' lvt ;
  917. A . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valt iinc ;
  918. 'SINON' ;
  919. A . 'VAR' . iinc . 'VALEUR' = valt ;
  920. 'FINSI' ;
  921. 'FINSI' ;
  922. 'FIN' iiinc ;
  923. *
  924. lvu = 'EGA' ('TYPE' valu) 'LISTREEL' ;
  925. icof = 0 ;
  926. 'REPETER' iiincu nincu ;
  927. iincu = &iiincu ;
  928. icof = icof '+' 1 ;
  929. A . 'DAT' . icof . 'NOMDDL' = tnomu . 'NOMPRI' . iincu ;
  930. A . 'DAT' . icof . 'DISC' = tnomu . 'DISC' ;
  931. 'SI' lvu ;
  932. A . 'DAT' . icof . 'VALEUR' = 'EXTRAIRE' valu iincu ;
  933. 'SINON' ;
  934. A . 'DAT' . icof . 'VALEUR' = valu ;
  935. 'FINSI' ;
  936. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  937. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  938. 'FIN' iiincu ;
  939. 'SI' lcof ;
  940. icof = icof '+' 1 ;
  941. A . 'DAT' . icof . 'NOMDDL' = tcof . 'NOMPRI' . 1 ;
  942. A . 'DAT' . icof . 'DISC' = tcof . 'DISC' ;
  943. A . 'DAT' . icof . 'VALEUR' = valo ;
  944. A . 'COF' . icof . 'COMPOR' = 'IDEN' ;
  945. A . 'COF' . icof . 'LDAT' = 'LECT' icof ;
  946. ll = 'LECT' icof ;
  947. 'SINON' ;
  948. ll = 'LECT' ;
  949. 'FINSI' ;
  950. *
  951. 'REPETER' iiinc ninc ;
  952. iinc = &iiinc ;
  953. 'REPETER' iiidim idim ;
  954. iidim = &iiidim ;
  955. A . iinc . iinc . iidim = ('ET' ('LECT' iidim) ll) ;
  956. 'FIN' iiidim ;
  957. 'FIN' iiinc ;
  958. *
  959. 'SI' iaxi ;
  960. numdat = 1 ;
  961. numcof = 1 ;
  962. 'SINON' ;
  963. numdat = 0 ;
  964. numcof = 0 ;
  965. 'FINSI' ;
  966. B = ININLIN numop numvar numdat numcof numder ;
  967. 'SI' iaxi ;
  968. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  969. B . 'DAT' . 1 . 'DISC' = discg ;
  970. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  971. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  972. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  973. ll = 'LECT' 1 ;
  974. 'SINON' ;
  975. ll = 'LECT' ;
  976. 'FINSI' ;
  977. lvq = 'EGA' ('TYPE' valq) 'LISTREEL' ;
  978. 'REPETER' iiinc ninc ;
  979. iinc = &iiinc ;
  980. B . 'VAR' . iinc . 'NOMDDL' = tnomq . 'NOMDUA' . iinc ;
  981. B . 'VAR' . iinc . 'DISC' = tnomq . 'DISC' ;
  982. 'SI' lvalq ;
  983. 'SI' lvq ;
  984. B . 'VAR' . iinc . 'VALEUR' = 'EXTRAIRE' valq iinc ;
  985. 'SINON' ;
  986. B . 'VAR' . iinc . 'VALEUR' = valq ;
  987. 'FINSI' ;
  988. 'FINSI' ;
  989. B . iinc . iinc . 0 = ll ;
  990. 'FIN' iiinc ;
  991. *
  992. 'SI' ('EXISTE' _smt) ;
  993. mgugrad2 = 'NLIN' discg _mt _smt A B methgau ;
  994. 'SINON' ;
  995. mgugrad2 = NLINP discg _mt A B methgau ;
  996. 'FINSI' ;
  997. *
  998. 'RESPRO' mgugrad2 ;
  999. 'FINPROC' ;
  1000. *
  1001. * End of procedure file GUGRAD2
  1002. *
  1003. *ENDPROCEDUR gugrad2
  1004. *BEGINPROCEDUR modenlin
  1005. ************************************************************************
  1006. * NOM : MODENLIN
  1007. * DESCRIPTION :
  1008. *
  1009. *
  1010. *
  1011. * LANGAGE : GIBIANE-CAST3M
  1012. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1013. * mél : gounand@semt2.smts.cea.fr
  1014. **********************************************************************
  1015. * VERSION : v1, ??/??/2007, version initiale
  1016. * HISTORIQUE : v1, ??/??/2007, création
  1017. * HISTORIQUE :
  1018. * HISTORIQUE :
  1019. ************************************************************************
  1020. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1021. * en cas de modification de ce sous-programme afin de faciliter
  1022. * la maintenance !
  1023. ************************************************************************
  1024. *
  1025. *
  1026. 'DEBPROC' MODENLIN ;
  1027. *
  1028. vdim = 'VALEUR' 'DIME' ;
  1029. vmod = 'VALEUR' 'MODE' ;
  1030. *
  1031. 'SI' ('ET' ('NEG' vdim 2) ('NEG' vdim 3)) ;
  1032. 'ERREUR' ('CHAINE' 'vdim=' vdim) ;
  1033. 'FINSI' ;
  1034. *
  1035. * Noms par défaut
  1036. *
  1037. 'SI' ('EGA' vdim 2) ;
  1038. 'SI' ('NEG' vmod 'AXIS') ;
  1039. nomvec = 'MOTS' 'UX' 'UY' ;
  1040. nomfor = 'MOTS' 'FX' 'FY' ;
  1041. 'SINON' ;
  1042. nomvec = 'MOTS' 'UR' 'UZ' ;
  1043. nomfor = 'MOTS' 'FR' 'FZ' ;
  1044. 'FINSI' ;
  1045. 'FINSI' ;
  1046. 'SI' ('EGA' vdim 3) ;
  1047. nomvec = 'MOTS' 'UX' 'UY' 'UZ' ;
  1048. nomfor = 'MOTS' 'FX' 'FY' 'FZ' ;
  1049. 'FINSI' ;
  1050. *
  1051. nomsca = 'MOTS' 'SCAL' ;
  1052. *nomflu = 'MOTS' 'SCAL' ;
  1053. *
  1054. 'ARGUMENT' tmode/'TABLE' ;
  1055. 'SI' ('NON' ('EXISTE' tmode)) ;
  1056. tmode = 'TABLE' ;
  1057. *
  1058. * Initialisation des inconnues par défaut
  1059. *
  1060. lmdisc = 'MOTS' 'CSTE' 'LINE' 'QUAF' ;
  1061. 'REPETER' iidisc ('DIME' lmdisc) ;
  1062. mdisc = 'EXTRAIRE' lmdisc &iidisc ;
  1063. tmode . mdisc = 'TABLE' ;
  1064. tmode . mdisc . 'DISC' = mdisc ;
  1065. tmode . mdisc . 'NOMPRI' = 'TABLE' ;
  1066. tmode . mdisc . 'NOMPRI' . 1 = nomsca ;
  1067. tmode . mdisc . 'NOMDUA' = 'TABLE' ;
  1068. tmode . mdisc . 'NOMDUA' . 1 = nomsca ;
  1069. mdiscv = 'CHAINE' mdisc 'V' ;
  1070. tmode . mdiscv = 'TABLE' ;
  1071. tmode . mdiscv . 'DISC' = mdisc ;
  1072. tmode . mdiscv . 'NOMPRI' = 'TABLE' ;
  1073. 'REPETER' idim vdim ;
  1074. TMODE . mdiscv. 'NOMPRI' . &idim =
  1075. 'MOTS' ('EXTRAIRE' nomvec &idim) ;
  1076. 'FIN' idim ;
  1077. tmode . mdiscv . 'NOMDUA' = 'TABLE' ;
  1078. 'REPETER' idim vdim ;
  1079. TMODE . mdiscv. 'NOMDUA' . &idim =
  1080. 'MOTS' ('EXTRAIRE' nomfor &idim) ;
  1081. 'FIN' idim ;
  1082. 'FIN' iidisc ;
  1083. 'FINSI' ;
  1084. *
  1085. * Lecture des mots clés et des inconnues
  1086. *
  1087. lmotcle = 'MOTS' 'GEOM' 'INCO' ;
  1088. ldiscdd = 'MOTS' 'LINM' 'CUBI' ;
  1089. ltypinc = 'MOTS' 'SCAL' 'VECT' ;
  1090. 'REPETER' imotcle ;
  1091. 'ARGUMENT' motcle/'MOT' ;
  1092. 'SI' ('NON' ('EXISTE' motcle)) ; 'QUITTER' imotcle ; 'FINSI' ;
  1093. 'SI' ('NON' ('EXISTE' lmotcle motcle)) ;
  1094. cherr = 'CHAINE' 'Keyword ' motcle ' unknown.' ; 'ERREUR' cherr ;
  1095. 'FINSI' ;
  1096. 'SI' ('EGA' motcle 'GEOM') ;
  1097. 'ARGUMENT' discg*'MOT' ;
  1098. TMODE . 'GEOM' = 'TABLE' ;
  1099. TMODE . 'GEOM' . 'DISC' = discg ;
  1100. 'FINSI' ;
  1101. 'SI' ('EGA' motcle 'INCO') ;
  1102. 'ARGUMENT' nominc*'MOT' ;
  1103. 'SI' ('EGA' nominc 'GEOM') ;
  1104. 'ERREUR' 'GEOM nest pas un nom dinconnu acceptable' ;
  1105. 'FINSI' ;
  1106. TMODE . nominc = 'TABLE' ;
  1107. 'ARGUMENT' disinc*'MOT' ;
  1108. TMODE . nominc . 'DISC' = disinc ;
  1109. ldd = 'EXISTE' ldiscdd disinc ;
  1110. 'ARGUMENT' typinc*'MOT' ;
  1111. 'SI' ('NON' ('EXISTE' ltypinc typinc)) ;
  1112. cherr = 'CHAINE' 'Type=' typinc ' unknown.' ;
  1113. 'ERREUR' cherr ;
  1114. 'FINSI' ;
  1115. 'SI' ('EGA' typinc 'SCAL') ;
  1116. nbinc = 1 ;
  1117. 'SINON' ;
  1118. nbinc = vdim ;
  1119. 'FINSI' ;
  1120. TMODE . nominc . 'NOMPRI' = 'TABLE' ;
  1121. 'REPETER' ibinc nbinc ;
  1122. 'SI' ldd ;
  1123. 'ARGUMENT' nomcom*'LISTMOTS' ;
  1124. 'SINON' ;
  1125. 'ARGUMENT' nomcom*'MOT' ;
  1126. nomcom = 'MOTS' nomcom ;
  1127. 'FINSI' ;
  1128. TMODE . nominc . 'NOMPRI' . &ibinc = nomcom ;
  1129. 'FIN' ibinc ;
  1130. TMODE . nominc . 'NOMDUA' = 'TABLE' ;
  1131. 'REPETER' ibinc nbinc ;
  1132. 'SI' ldd ;
  1133. 'ARGUMENT' nomcom*'LISTMOTS' ;
  1134. 'SINON' ;
  1135. 'ARGUMENT' nomcom*'MOT' ;
  1136. nomcom = 'MOTS' nomcom ;
  1137. 'FINSI' ;
  1138. TMODE . nominc . 'NOMDUA' . &ibinc = nomcom ;
  1139. 'FIN' ibinc ;
  1140. 'FINSI' ;
  1141. 'FIN' imotcle ;
  1142. *
  1143. 'RESPRO' tmode ;
  1144. *
  1145. * End of procedure file MODENLIN
  1146. *
  1147. 'FINPROC' ;
  1148. *ENDPROCEDUR modenlin
  1149. *BEGINPROCEDUR quafme
  1150. ************************************************************************
  1151. * NOM : QUAFME
  1152. * DESCRIPTION :
  1153. *
  1154. *
  1155. *
  1156. * LANGAGE : GIBIANE-CAST3M
  1157. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1158. * mél : gounand@semt2.smts.cea.fr
  1159. **********************************************************************
  1160. * VERSION : v1, 01/12/2004, version initiale
  1161. * HISTORIQUE : v1, 01/12/2004, création
  1162. * HISTORIQUE :
  1163. * HISTORIQUE :
  1164. ************************************************************************
  1165. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  1166. * en cas de modification de ce sous-programme afin de faciliter
  1167. * la maintenance !
  1168. ************************************************************************
  1169. *
  1170. *
  1171. 'DEBPROC' QUAFME ;
  1172. 'ARGUMENT' tmail/'TABLE' ;
  1173. 'SI' ('NON' ('EXISTE' tmail)) ;
  1174. tmail = 'TABLE' ;
  1175. 'FINSI' ;
  1176. 'REPETER' bcl ;
  1177. 'ARGUMENT' mquad/'MAILLAGE' ;
  1178. 'SI' ('EXISTE' mquad) ;
  1179. 'REPETER' bbcl 1 ;
  1180. 'ARGUMENT' nom*'MOT' ;
  1181. tmail . nom = 'TABLE' ;
  1182. dimm = DEADUTIL 'DIMM' mquad ;
  1183. 'SI' ('EGA' dimm 0) ;
  1184. mquaf = mquad ;
  1185. tmail . nom = mquad ;
  1186. 'QUITTER' bbcl ;
  1187. 'FINSI' ;
  1188. typm = DEADUTIL 'TYPM' mquad ;
  1189. 'SI' ('EGA' typm 'QUAF') ;
  1190. mquaf = mquad ;
  1191. tmail . nom . 'QUAF' = mquaf ;
  1192. 'SI' ('EGA' dimm 2) ;
  1193. tmail . nom . 'QUAI' = mquaf ;
  1194. tmail . nom . 'QUAD' = mquaf ;
  1195. 'FINSI' ;
  1196. 'QUITTER' bbcl ;
  1197. 'FINSI' ;
  1198. 'SI' ('EGA' typm 'QUAI') ;
  1199. mquaf = 'CHANGER' mquad 'QUAF' ;
  1200. tmail . nom . 'QUAF' = mquaf ;
  1201. tmail . nom . 'QUAI' = mquad ;
  1202. tmail . nom . 'LINE' = 'CHANGER' 'LINEAIRE' mquad ;
  1203. 'QUITTER' bbcl ;
  1204. 'FINSI' ;
  1205. 'SI' ('EGA' typm 'LINE') ;
  1206. mquai = 'CHANGER' 'QUADRATIQUE' mquad ;
  1207. mquaf = 'CHANGER' mquai 'QUAF' ;
  1208. tmail . nom . 'QUAF' = mquaf ;
  1209. tmail . nom . 'QUAI' = mquai ;
  1210. tmail . nom . 'LINE' = mquad ;
  1211. 'QUITTER' bbcl ;
  1212. 'FINSI' ;
  1213. 'FIN' bbcl ;
  1214. * ielim = '+' ielim 1 ;
  1215. * telim . ielim = mquaf ;
  1216. 'SINON' ;
  1217. 'QUITTER' bcl ;
  1218. 'FINSI' ;
  1219. 'FIN' bcl ;
  1220. *
  1221. *
  1222. telim = 'TABLE' 'ESCLAVE' ;
  1223. ielim = 0 ;
  1224. tidx = 'INDEX' tmail ;
  1225. 'REPETER' iidx ('DIME' tidx) ;
  1226. idx = tidx . &iidx ;
  1227. val = tmail . idx ;
  1228. tval = 'TYPE' val ;
  1229. 'SI' ('EGA' tval 'MAILLAGE') ;
  1230. ielim = '+' ielim 1 ;
  1231. telim . ielim = val ;
  1232. 'FINSI' ;
  1233. 'SI' ('EGA' tval 'TABLE') ;
  1234. 'SI' ('EXISTE' val 'QUAF') ;
  1235. ielim = '+' ielim 1 ;
  1236. telim . ielim = val . 'QUAF' ;
  1237. 'FINSI' ;
  1238. 'FINSI' ;
  1239. 'FIN' iidx ;
  1240. *
  1241. *
  1242. 'ARGUMENT' tol*'FLOTTANT' ;
  1243. 'ELIMINATION' ('ET' telim) tol ;
  1244. *
  1245. 'RESPRO' tmail ;
  1246. 'FINPROC' ;
  1247. *
  1248. * End of procedure file QUAFME
  1249. *
  1250. *ENDPROCEDUR quafme
  1251. *BEGINPROCEDUR gmail
  1252. ************************************************************************
  1253. * NOM : GMAIL
  1254. * DESCRIPTION : Extrait le maillage des points supports des degrés
  1255. * de liberté d'une inconnue
  1256. *
  1257. * Cette procédure est identique à GMAIL2 qui paraissait
  1258. * mieux que l'ancienne GMAIL
  1259. *
  1260. *
  1261. *
  1262. * LANGAGE : GIBIANE-CAST3M
  1263. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  1264. * mél : gounand@semt2.smts.cea.fr
  1265. **********************************************************************
  1266. * VERSION : v1, 20/04/2012, version initiale
  1267. * HISTORIQUE :
  1268. * HISTORIQUE :
  1269. ************************************************************************
  1270. *
  1271. *
  1272. 'DEBPROC' GMAIL ;
  1273. 'ARGUMENT' _mt/'MAILLAGE' ;
  1274. 'ARGU' tdisc/'TABLE' ;
  1275. xmt = 'EXIS' _mt ;
  1276. xtdisc = 'EXIS' tdisc ;
  1277. *
  1278. 'SI' ('NON' xmt) ;
  1279. 'SI' ('NON' xtdisc) ;
  1280. 'ARGUMENT' tdisc*'TABLE' ;
  1281. xtdisc = vrai ;
  1282. 'FINS' ;
  1283. 'ARGUMENT' nmt*'MOT' ;
  1284. 'SI' ('NON' ('EXISTE' tdisc nmt)) ;
  1285. cherr = 'CHAINE' 'Le domaine ' nmt ' nest pas defini dans'
  1286. ' la table de discretisation' ;
  1287. 'ERREUR' cherr ;
  1288. 'FINSI' ;
  1289. _mt = tdisc . nmt . 'QUAF' ;
  1290. 'FINSI' ;
  1291. *
  1292. 'ARGU' dua*'MOT' ;
  1293. 'SI' ('NON' xtdisc) ;
  1294. discdua = dua ;
  1295. * nomdua = dua ;
  1296. 'SINO' ;
  1297. * nomdua = dua ;
  1298. discdua = tdisc . dua . 'DISC' ;
  1299. 'FINS' ;
  1300. *
  1301. *'ARGUMENT' nomdua*'MOT ' ;
  1302. *
  1303. * Raccourcis du 2019/01/25
  1304. * Est-ce vraiment astucieux ?...
  1305. *
  1306. 'SI' ('EGA' discdua 'QUAF') ;
  1307. 'RESP' _mt ;
  1308. 'QUIT' GMAIL ;
  1309. 'FINS' ;
  1310. 'SI' ('EGA' discdua 'LINE') ;
  1311. 'RESP' ('CHAN' _mt 'LINE') ;
  1312. 'QUIT' GMAIL ;
  1313. 'FINS' ;
  1314. 'SI' ('EGA' discdua 'QUAI') ;
  1315. 'RESP' ('CHAN' _mt 'QUAD') ;
  1316. 'QUIT' GMAIL ;
  1317. 'FINS' ;
  1318. *
  1319. mdim = DEADUTIL 'DIMM' _mt ;
  1320. *vdim = 'VALEUR' 'DIME' ;
  1321. 'SI' ('EGA' discdua 'LINM') ;
  1322. discdua = 'CSTE' ;
  1323. 'FINSI' ;
  1324. *
  1325. numop = 1 ; numder = mdim ; numvar = 1 ; numdat = 0 ; numcof = 0 ;
  1326. A = ININLIN numop numvar numdat numcof numder ;
  1327. A . 'VAR' . 1 . 'VALEUR' = 0. ;
  1328. *
  1329. A . 1 . 1 . 0 = 0 ;
  1330. *
  1331. B = ININLIN numop numvar numdat numcof numder ;
  1332. B . 'VAR' . 1 . 'NOMDDL' = 'DUMM' ;
  1333. B . 'VAR' . 1 . 'DISC' = discdua ;
  1334. *
  1335. B . 1 . 1 . 0 = 0 ;
  1336. *
  1337. gm = 'NLIN' 'LINE' _mt A B 'ERF1' 'GAU1' ;
  1338. dom = 'EXTRAIRE' gm 'MAIL' ;
  1339. *
  1340. 'RESPRO' dom ;
  1341. 'FINPROC' ;
  1342. *
  1343. * End of procedure file GMAIL
  1344. *
  1345. *ENDPROCEDUR gmail
  1346. ************************************************************************
  1347. *
  1348. *
  1349. * MAIN : 1) MESH
  1350. * 2) COMPUTATIONAL LOOP
  1351. * 3) TESTs
  1352. *
  1353. ************************************************************************
  1354. *
  1355. * Maillage et modèle
  1356. *
  1357. *'DEBPROC' calcul ;
  1358. *'ARGUMENT' nx*'ENTIER' ;
  1359. nx = 10 ;
  1360. pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ;
  1361. ang = 28.5 ;
  1362. *ang = 90. ;
  1363. Re = 100. ;
  1364.  
  1365. pA pB pC pD = 'TOURNER' pA pB pC pD ang pA ;
  1366. discu = 'QUAF' ; discp = 'LINE' ;
  1367. 'OPTI' 'ELEM' 'QUA4' ;
  1368. tol = 1.D-6 ;
  1369. bas = 'DROIT' nx pA pB ;
  1370. dro = 'DROIT' nx pB pC ;
  1371. hau = 'DROIT' nx pC pD ;
  1372. gau = 'DROIT' nx pD pA ;
  1373. mt = 'DALLER' bas dro hau gau ;
  1374. *
  1375. tmail = QUAFME mt 'mt' tol ;
  1376. tmail = QUAFME tmail bas 'bas' dro 'dro' hau 'hau' gau 'gau' tol ;
  1377. _mt = tmail . 'mt' . 'QUAF' ;
  1378. mt = tmail . 'mt' . discu ;
  1379. mtp = tmail . 'mt' . discp ;
  1380. cmt = 'CONTOUR' mt ;
  1381. bas = tmail . 'bas' . discu ;
  1382. dro = tmail . 'dro' . discu ;
  1383. hau = tmail . 'hau' . discu ;
  1384. gau = tmail . 'gau' . discu ;
  1385. _bas = tmail . 'bas' . 'QUAF' ;
  1386. _dro = tmail . 'dro' . 'QUAF' ;
  1387. _hau = tmail . 'hau' . 'QUAF' ;
  1388. _gau = tmail . 'gau' . 'QUAF' ;
  1389. *
  1390. tmode = MODENLIN 'GEOM' 'LINE'
  1391. 'INCO' 'UN' discu 'VECT' 'UX' 'UY' 'FX' 'FY'
  1392. 'INCO' 'PN' discp 'SCAL' 'LX' 'FLX'
  1393. ;
  1394. nompp = 'EXTRAIRE' (tmode . 'PN' .'NOMPRI' . 1) 1 ;
  1395. nomvp = 'ET' (tmode . 'UN' .'NOMPRI' . 1)
  1396. (tmode . 'UN' .'NOMPRI' . 2) ;
  1397. nomvd = 'ET' (tmode . 'UN' .'NOMDUA' . 1)
  1398. (tmode . 'UN' .'NOMDUA' . 2) ;
  1399. discg = tmode . 'GEOM' . 'DISC' ;
  1400. *
  1401. * Matrice de rigidité
  1402. *
  1403. *rig = GRIG2 _mt tmode 'NPRI' 'UN' 'NDUA' 'UN' 'LAPN' ;
  1404. rig = GRIG2 _mt tmode 'NPRI' 'UN' 'NDUA' 'UN' ;
  1405. *
  1406. * Matrice de la contrainte de divergence nulle et sa transposée
  1407. *
  1408. cnt1 = GDIV2 _mt tmode 'NPRI' 'UN' 'NDUA' 'PN' ;
  1409. cnt2 = GDIV2 _mt tmode 'NPRI' 'UN' 'NDUA' 'PN' 'GMBT' ;
  1410. mcnt = cnt1 'ET' cnt2 ;
  1411. mcntr = 'KOPS' 'RELA' cnt1 ;
  1412. *
  1413. * Conditions aux limites
  1414. *
  1415. * On relache la contrainte sur la vitesse normale en 1 point (pmil) pour
  1416. * fixer le mode de pression constante
  1417. pmil = * ('PLUS' pC pD) 0.5 ;
  1418. pmil = 'POIN' hau 'PROC' pmil ;
  1419. haur = 'DIFF' ('CHANGER' 'POI1' hau)
  1420. ('MANUEL' 'POI1' pmil) ;
  1421. gaur = 'DIFF' ('CHANGER' 'POI1' gau)
  1422. ('MANUEL' 'POI1' pA) ;
  1423. dror = 'DIFF' ('CHANGER' 'POI1' dro)
  1424. ('MANUEL' 'POI1' pB) ;
  1425. xbas ybas = 'COORDONNEE' bas ;
  1426. sbas = '**' ('+' ('**' xbas 2.) ('**' ybas 2)) 0.5 ;
  1427. *sbas = 'REDU' sbas basr ;
  1428. *sbas = ('LOG' ('+' ('**' ('SIN' ('*' xbas 90.)) 2.) 1.))
  1429. * '/' ('LOG' 2.) ;
  1430. sbas = '**' ('SIN' ('*' sbas 180.)) 2. ;
  1431. *sbas = '+' ('*' sbas -1.) 1. ;
  1432. *sbas = '/' ('TANH' sbas) ('TANH' 1.) ;
  1433. ssbas = 'SIN' ('*' 90. sbas) ;
  1434. vAB = 'MOIN' pB pA ;
  1435. xab = 'COORDONNEE' 1 vAB ;
  1436. yab = 'COORDONNEE' 2 vAB ;
  1437. ssbas = '+' ('NOMC' 'UX' ('*' ssbas xab))
  1438. ('NOMC' 'UY' ('*' ssbas yab)) ;
  1439. *
  1440. * Construction de la normale
  1441. *
  1442. vnorh = GNOR2 _hau tmode 'NPRI' discg 'FPRI' 1. 'NDUA' 'UN' ;
  1443. vnorg = GNOR2 _gau tmode 'NPRI' discg 'FPRI' 1. 'NDUA' 'UN' ;
  1444. vnord = GNOR2 _dro tmode 'NPRI' discg 'FPRI' 1. 'NDUA' 'UN' ;
  1445. vnorh = 'NOMC' nomvd nomvp vnorh ;
  1446. vnorg = 'NOMC' nomvd nomvp vnorg ;
  1447. vnord = 'NOMC' nomvd nomvp vnord ;
  1448. *
  1449. mblh = 'BLOQUE' 'DEPL' 'DIRE' vnorh haur ;
  1450. mblg = 'BLOQUE' 'DEPL' 'DIRE' vnorg gaur ;
  1451. mbld = 'BLOQUE' 'DEPL' 'DIRE' vnord dror ;
  1452. mblb = 'BLOQUE' 'DEPL' bas ;
  1453. *
  1454. bltot = mblh 'ET' mblg 'ET' mbld 'ET' mblb ;
  1455. fbltot = 'DEPIMPOSE' mblb ssbas ;
  1456. *
  1457. * Algorithme itératif et tests
  1458. *
  1459. *sol1 = vide 'CHPO' ;
  1460. *sol2 = vide 'CHPO' ;
  1461. mailun = GMAIL _mt tmode 'UN' ;
  1462. sol1 = 'MANU' 'CHPO' mailun 2 'UX' 0. 'UY' 0. ;
  1463. sol2 = 'MANU' 'CHPO' mailun 2 'UX' 0. 'UY' 0. ;
  1464. lpass = vrai ;
  1465. errv = 1.D-10 ;
  1466. 'REPETER' it 4 ;
  1467. * Matrice de convection
  1468. ugrad1 = GUGRAD2 _mt tmode
  1469. 'NPRI' 'UN' 'NDUA' 'UN'
  1470. 'NVIT' 'UN' 'CVIT' sol1
  1471. 'NCOF' 'CSTE' 'FCOF' Re
  1472. ;
  1473. mtot = rig 'ET' ugrad1 'ET' mcnt 'ET' bltot ;
  1474. res = fbltot '-' ('*' mtot sol1) ;
  1475. dsol1 = 'KRES' mtot res 'IMPR' 2 ;
  1476. sol1 = '+' sol1 dsol1 ;
  1477. ugrad2 = GUGRAD2 _mt tmode
  1478. 'NPRI' 'UN' 'NDUA' 'UN'
  1479. 'NVIT' 'UN' 'CVIT' sol2
  1480. 'NCOF' 'CSTE' 'FCOF' Re
  1481. ;
  1482. mtot = rig 'ET' ugrad2 'ET' mcntr 'ET' bltot ;
  1483. res = fbltot '-' ('*' mtot sol2) ;
  1484. dsol2 = 'RESOUD' mtot res ;
  1485. sol2 = '+' sol2 dsol2 ;
  1486. err = maxi (- sol1 sol2) 'ABS' 'AVEC' nomvp ;
  1487. 'MESSAGE' 'err=' err ;
  1488. tst = '<' err errv ;
  1489. lpass = lpass 'ET' tst ;
  1490. 'SI' graph ;
  1491. vit = 'EXCO' ('MOTS' 'UX' 'UY') sol1 ;
  1492. vvit = 'VECT' vit 'DEPL' 'JAUN' ;
  1493. vvitt = vvit ;
  1494. 'TRACER' vvitt cmt 'TITR' 'Vitesse' ;
  1495. 'FINSI' ;
  1496. 'FIN' it ;
  1497.  
  1498. 'SAUTER' 2 'LIGNE' ;
  1499. 'SI' lpass ;
  1500. 'MESSAGE' 'Tout sest bien passe' ;
  1501. 'SINON' ;
  1502. 'MESSAGE' 'Il y a eu des erreurs' ;
  1503. 'FINSI' ;
  1504. 'SAUTER' 2 'LIGNE' ;
  1505. 'SI' ('NON' lpass) ;
  1506. 'ERREUR' 5 ;
  1507. 'FINSI' ;
  1508. 'SI' interact ;
  1509. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  1510. 'FINSI' ;
  1511. *
  1512. 'FIN' ;
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  

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