Télécharger stokes_rima.dgibi

Retour à la liste

Numérotation des lignes :

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

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