Télécharger kreslap2.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : kreslap2.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTION' 'ECHO' 0 ;
  5. *BEGINPROCEDUR glapn
  6. ************************************************************************
  7. * NOM : GLAPN
  8. * DESCRIPTION : Un laplacien scalaire
  9. *
  10. *
  11. *
  12. * LANGAGE : GIBIANE-CAST3M
  13. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  14. * mél : gounand@semt2.smts.cea.fr
  15. **********************************************************************
  16. * VERSION : v1, 08/02/2006, version initiale
  17. * HISTORIQUE : v1, 08/02/2006, création
  18. * HISTORIQUE :
  19. * HISTORIQUE :
  20. ************************************************************************
  21. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  22. * en cas de modification de ce sous-programme afin de faciliter
  23. * la maintenance !
  24. ************************************************************************
  25. *
  26. *
  27. 'DEBPROC' GLAPN ;
  28. 'ARGUMENT' _mt*'MAILLAGE' ;
  29. 'ARGUMENT' gdisc*'MOT ' ;
  30. 'ARGUMENT' nomt*'MOT ' ;
  31. 'ARGUMENT' disct*'MOT ' ;
  32. 'ARGUMENT' nomq*'MOT ' ;
  33. 'ARGUMENT' discq*'MOT ' ;
  34. 'ARGUMENT' coef/'FLOTTANT' ;
  35. 'SI' ('NON' ('EXISTE' coef)) ;
  36. 'ARGUMENT' coef2/'CHPOINT ' ;
  37. 'SI' ('NON' ('EXISTE' coef2)) ;
  38. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  39. 'SINON' ;
  40. coef = coef2 ;
  41. 'ARGUMENT' discc*'MOT ' ;
  42. 'FINSI' ;
  43. 'SINON' ;
  44. discc = 'CSTE' ;
  45. 'FINSI' ;
  46. 'ARGUMENT' methgau/'MOT ' ;
  47. 'SI' ('NON' ('EXISTE' methgau)) ;
  48. methgau = 'GAU7' ;
  49. 'FINSI' ;
  50. *
  51. vdim = 'VALEUR' 'DIME' ;
  52. vmod = 'VALEUR' 'MODE' ;
  53. idim = 0 ;
  54. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  55. idim = 2 ;
  56. iaxi = FAUX ;
  57. 'FINSI' ;
  58. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  59. idim = 2 ;
  60. iaxi = VRAI ;
  61. 'FINSI' ;
  62. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  63. idim = 3 ;
  64. iaxi = FAUX ;
  65. 'FINSI' ;
  66. 'SI' ('EGA' vdim 1) ;
  67. idim = 1 ;
  68. iaxi = FAUX ;
  69. 'FINSI' ;
  70. 'SI' ('EGA' idim 0) ;
  71. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  72. 'FINSI' ;
  73. * Test bête...
  74. 'SI' ('EGA' ('TYPE' coef) 'CHPOINT ') ;
  75. mincoef = 'MINIMUM' coef ;
  76. 'SINON' ;
  77. mincoef = coef ;
  78. 'FINSI' ;
  79. 'SI' ('<' mincoef 0.D0) ;
  80. 'ERREUR' 'Le coef (une viscosité) doit etre positive' ;
  81. 'FINSI' ;
  82. 'SI' iaxi ;
  83. 'ERREUR' ('CHAINE' 'Axi non implémenté') ;
  84. 'FINSI' ;
  85. *
  86. numop = idim ;
  87. numvar = 1 ;
  88. numdat = 1 ;
  89. numcof = 1 ;
  90. numder = idim ;
  91. mmt = 'MOTS' nomt ;
  92. mmq = 'MOTS' nomq ;
  93. ms = 'MOTS' 'SCAL' ;
  94. *
  95. A = ININLIN numop numvar numdat numcof numder ;
  96. A . 'VAR' . 1 . 'NOMDDL' = mmt ;
  97. A . 'VAR' . 1 . 'DISC' = disct ;
  98. A . 'DAT' . 1 . 'NOMDDL' = ms ;
  99. A . 'DAT' . 1 . 'DISC' = discc ;
  100. A . 'DAT' . 1 . 'VALEUR' = coef ;
  101. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  102. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  103. *
  104. 'REPETER' iidim idim ;
  105. A . &iidim . 1 . &iidim = 'LECT' 1 ;
  106. 'FIN' iidim ;
  107. *
  108. numvar = 1 ;
  109. numdat = 0 ;
  110. numcof = 0 ;
  111. *
  112. B = ININLIN numop numvar numdat numcof numder ;
  113. B . 'VAR' . 1 . 'NOMDDL' = mmq ;
  114. B . 'VAR' . 1 . 'DISC' = discq ;
  115. *
  116. 'REPETER' iidim idim ;
  117. B . &iidim . 1 . &iidim = 'LECT' ;
  118. 'FIN' iidim ;
  119. *
  120. mglapn = 'NLIN' gdisc _mt A B methgau ;
  121. * Integration par parties
  122. mglapn = '*' mglapn -1.D0 ;
  123. *
  124. 'RESPRO' mglapn ;
  125. 'FINPROC' ;
  126. *
  127. * End of procedure file GLAPN
  128. *
  129. *ENDPROCEDUR glapn
  130. *BEGINPROCEDUR formar
  131. ************************************************************************
  132. * NOM : FORMAR
  133. * DESCRIPTION : formate un réel de facon courte
  134. * pratique pour les noms de
  135. * sauvegarde
  136. * Exemples :
  137. * 'MESSAGE' ('CHAINE' (formar 2.9e5 1)) ;
  138. * 2.9E5
  139. * 'MESSAGE' ('CHAINE' (formar -2.9e5 1)) ;
  140. * -2.9E5
  141. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 1)) ;
  142. * 2.9E-5
  143. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 1)) ;
  144. * -2.9E-5
  145. * 'MESSAGE' ('CHAINE' (formar 2.9 1)) ;
  146. * 2.9
  147. * 'MESSAGE' ('CHAINE' (formar -2.9 1)) ;
  148. * -2.9
  149. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  150. * 0
  151. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  152. * 0
  153. * 'MESSAGE' ('CHAINE' (formar 2.9e5 0)) ;
  154. * 3E5
  155. * 'MESSAGE' ('CHAINE' (formar -2.9e5 0)) ;
  156. * -3E5
  157. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 0)) ;
  158. * 3E-5
  159. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 0)) ;
  160. * -3E-5
  161. * 'MESSAGE' ('CHAINE' (formar 2.9 0)) ;
  162. * 3
  163. * 'MESSAGE' ('CHAINE' (formar -2.9 0)) ;
  164. * -3
  165. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  166. * 0
  167. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  168. * 0
  169. *
  170. *
  171. *
  172. * LANGAGE : GIBIANE-CAST3M
  173. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  174. * mél : gounand@semt2.smts.cea.fr
  175. **********************************************************************
  176. * VERSION : v1, 18/02/2003, version initiale
  177. * HISTORIQUE : v1, 18/02/2003, création
  178. * HISTORIQUE :
  179. * HISTORIQUE :
  180. ************************************************************************
  181. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  182. * en cas de modification de ce sous-programme afin de faciliter
  183. * la maintenance !
  184. ************************************************************************
  185. *
  186. *
  187. 'DEBPROC' FORMAR ;
  188. 'ARGUMENT' fl*'FLOTTANT' ;
  189. 'ARGUMENT' vir/'ENTIER ' ;
  190. 'SI' ('NON' ('EXISTE' vir)) ;
  191. vir = 1 ;
  192. 'SINON' ;
  193. 'SI' ('<' vir 0) ;
  194. 'ERREUR' 'fournir un entier positif' ;
  195. 'FINSI' ;
  196. 'FINSI' ;
  197. 'SI' ('<' ('ABS' fl) 10.D-100) ;
  198. chfl = 'CHAINE' '0' ;
  199. 'SINON' ;
  200. *! sans le 1.D-10, ca ne fonctionne pas
  201. *! qd on entre pile poil une puissance de 10
  202. lfl = LOG10 ('ABS' fl) ;
  203. * lfl = '+' (LOG10 ('ABS' fl)) 1.D-10 ;
  204. slfl = 'SIGNE' ('ENTIER' lfl) ;
  205. 'SI' ('EGA' slfl 1) ;
  206. elfl = 'ENTIER' lfl ;
  207. 'SINON' ;
  208. elfl = '-' ('ENTIER' lfl) 1 ;
  209. 'FINSI' ;
  210. man = '/' fl ('**' 10.D0 elfl) ;
  211. *
  212. * Une verrue pour des histoires de précision...
  213. *
  214. 'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ;
  215. man = '/' man 10.D0 ;
  216. elfl = '+' elfl 1 ;
  217. 'FINSI' ;
  218. *
  219. sman = 'SIGNE' man ;
  220. 'SI' ('EGA' sman 1) ;
  221. fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ;
  222. 'SINON' ;
  223. fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ;
  224. 'FINSI' ;
  225. 'SI' ('NEG' vir 0) ;
  226. 'SI' ('NEG' elfl 0) ;
  227. chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ;
  228. 'SINON' ;
  229. chfl = 'CHAINE' 'FORMAT' fman man ;
  230. 'FINSI' ;
  231. 'SINON' ;
  232. man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ;
  233. 'SI' ('NEG' elfl 0) ;
  234. chfl = 'CHAINE' man2 'E' elfl ;
  235. 'SINON' ;
  236. chfl = 'CHAINE' man2 ;
  237. 'FINSI' ;
  238. 'FINSI' ;
  239. 'FINSI' ;
  240. 'RESPRO' chfl ;
  241. *
  242. * End of procedure file FORMAR
  243. *
  244. 'FINPROC' ;
  245. *ENDPROCEDUR formar
  246. *BEGINPROCEDUR log10
  247. ************************************************************************
  248. * NOM : LOG10
  249. * DESCRIPTION : Log_10
  250. *
  251. *
  252. *
  253. * LANGAGE : GIBIANE-CAST3M
  254. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  255. * mél : gounand@semt2.smts.cea.fr
  256. **********************************************************************
  257. * VERSION : v1, 18/02/2003, version initiale
  258. * HISTORIQUE : v1, 18/02/2003, création
  259. * HISTORIQUE :
  260. * HISTORIQUE :
  261. ************************************************************************
  262. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  263. * en cas de modification de ce sous-programme afin de faciliter
  264. * la maintenance !
  265. ************************************************************************
  266. *
  267. *
  268. 'DEBPROC' LOG10 ;
  269. 'ARGUMENT' fl/'FLOTTANT' ;
  270. 'ARGUMENT' lr/'LISTREEL' ;
  271. 'ARGUMENT' cp/'CHPOINT ' ;
  272. 'ARGUMENT' cm/'MCHAML ' ;
  273. 'SI' ('EXISTE' fl) ;
  274. 'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ;
  275. 'FINSI' ;
  276. 'SI' ('EXISTE' lr) ;
  277. 'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ;
  278. 'FINSI' ;
  279. 'SI' ('EXISTE' cp) ;
  280. 'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ;
  281. 'FINSI' ;
  282. 'SI' ('EXISTE' cm) ;
  283. 'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ;
  284. 'FINSI' ;
  285. *
  286. * End of procedure file LOG10
  287. *
  288. 'FINPROC' ;
  289. *ENDPROCEDUR log10
  290. *BEGINPROCEDUR exmomod
  291. ************************************************************************
  292. * NOM : EXMOMOD
  293. * DESCRIPTION : Extraction d'un mot d'un listmots
  294. *
  295. *
  296. *
  297. * LANGAGE : GIBIANE-CAST3M
  298. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  299. * mél : gounand@semt2.smts.cea.fr
  300. **********************************************************************
  301. * VERSION : v1, 23/06/2003, version initiale
  302. * HISTORIQUE : v1, 23/06/2003, création
  303. * HISTORIQUE :
  304. * HISTORIQUE :
  305. ************************************************************************
  306. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  307. * en cas de modification de ce sous-programme afin de faciliter
  308. * la maintenance !
  309. ************************************************************************
  310. *
  311. *
  312. 'DEBPROC' EXMOMOD ;
  313. 'ARGUMENT' lm*'LISTMOTS' i*'ENTIER' ;
  314. j = 'DIME' lm ;
  315. k = '+' (MODULO ('-' i 1) j) 1 ;
  316. lemot = 'EXTRAIRE' lm k ;
  317. * Usage de l'opérateur text pour éviter que lemot
  318. * ne soit interprété comme un opérateur
  319. 'RESPRO' 'TEXTE' lemot ;
  320. *
  321. * End of procedure file EXMOMOD
  322. *
  323. 'FINPROC' ;
  324. *ENDPROCEDUR exmomod
  325. *BEGINPROCEDUR modulo
  326. ************************************************************************
  327. * NOM : MODULO
  328. * DESCRIPTION : Calcule un entier modulo un autre...
  329. *
  330. *
  331. *
  332. * LANGAGE : GIBIANE-CAST3M
  333. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  334. * mél : gounand@semt2.smts.cea.fr
  335. **********************************************************************
  336. * VERSION : v1, 15/10/2002, version initiale
  337. * HISTORIQUE : v1, 15/10/2002, création
  338. * HISTORIQUE :
  339. * HISTORIQUE :
  340. ************************************************************************
  341. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  342. * en cas de modification de ce sous-programme afin de faciliter
  343. * la maintenance !
  344. ************************************************************************
  345. *
  346. *
  347. 'DEBPROC' MODULO ;
  348. 'ARGUMENT' i*'ENTIER' j*'ENTIER' ;
  349. 'SI' ('EGA' j 0) ;
  350. 'MESSAGE' 'Impossible de faire modulo 0' ;
  351. 'ERREUR' 5 ;
  352. 'SINON' ;
  353. k=i '/' j ;
  354. mod=i '-' ( k '*'j ) ;
  355. 'RESPRO' mod ;
  356. 'FINSI' ;
  357. *
  358. * End of procedure file MODULO
  359. *
  360. 'FINPROC' ;
  361. *ENDPROCEDUR modulo
  362. *BEGINPROCEDUR dessevol
  363. ************************************************************************
  364. * NOM : DESSEVOL
  365. * DESCRIPTION : Dessine des évolutions : choisit automatiquement
  366. * les options, marqueurs, couleurs...
  367. *
  368. *
  369. * LANGAGE : GIBIANE-CAST3M
  370. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  371. * mél : gounand@semt2.smts.cea.fr
  372. **********************************************************************
  373. * VERSION : v1, 16/11/2004, version initiale
  374. * HISTORIQUE : v1, 16/11/2004, création
  375. * HISTORIQUE :
  376. * HISTORIQUE :
  377. ************************************************************************
  378. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  379. * en cas de modification de ce sous-programme afin de faciliter
  380. * la maintenance !
  381. ************************************************************************
  382. *
  383. *
  384. 'DEBPROC' DESSEVOL ;
  385. 'ARGUMENT' evtot*'EVOLUTION' ;
  386. 'ARGUMENT' tabt*'TABLE' ;
  387. 'ARGUMENT' tit*'MOT' ;
  388. 'ARGUMENT' tix*'MOT' ;
  389. 'ARGUMENT' tiy*'MOT' ;
  390. 'ARGUMENT' lnclk*'LOGIQUE' ;
  391. 'ARGUMENT' nb/'LOGIQUE' ;
  392. *
  393. 'SI' ('NON' ('EXISTE' nb)) ;
  394. nb = FAUX ;
  395. 'FINSI' ;
  396. *
  397. nt = 'DIME' tabt ;
  398. nev = 'DIME' evtot ;
  399. *
  400. * Attention, dans evtot, il y a une évolution avec des noms de points ?
  401. *
  402. *'SI' ('NEG' nev nt) ;
  403. * cherr = 'CHAINE' 'Evolution and title table : not same dim.' ;
  404. * 'ERREUR' cherr ;
  405. *'FINSI' ;
  406. *
  407. tev = 'TABLE' ;
  408. tev . 'TITRE' = tabt ;
  409. *
  410. toto = 'TABLE' ;
  411. *
  412. lcoul = 'MOTS' 'TURQ' 'VERT' 'JAUN' 'ROSE' 'ROUG' 'BLEU' ;
  413. lmarq = 'MOTS' 'TRIB' 'TRIA' 'LOSA' 'CARR' 'ETOI' 'PLUS' 'CROI' ;
  414. ltirr = 'MOTS' 'TIRR' 'TIRC' 'TIRL' 'TIRM' ;
  415. *
  416. 'SI' nb ;
  417. ev2 = evtot ;
  418. 'SINON' ;
  419. icou = 0 ;
  420. 'REPETER' iev nev ;
  421. ii = &iev ;
  422. evi = 'EXTRAIRE' evtot 'COUR' ii ;
  423. 'SI' ('NEG' ('TYPE' ('EXTRAIRE' evi 'ORDO')) 'LISTMOTS') ;
  424. icou = '+' icou 1 ;
  425. 'FINSI' ;
  426. * ii2 = '/' ('+' ii 1) 2 ;
  427. * ci = EXMOMOD lcoul ii2 ;
  428. * ci = EXMOMOD lcoul ii ;
  429. ci = EXMOMOD lcoul icou ;
  430. APPEND toto 'EVOLUTION' ('COULEUR' evi ci) ;
  431. 'FIN' iev ;
  432. ev2 = toto . 'EVOLUTION' ;
  433. 'FINSI' ;
  434. *
  435. 'REPETER' iev nev ;
  436. ii = &iev ;
  437. mi = EXMOMOD lmarq ii ;
  438. ti = EXMOMOD ltirr ii ;
  439. 'SI' nb ;
  440. tev . ii = 'CHAINE' 'MARQ' ' ' mi ' ' ti ;
  441. 'SINON' ;
  442. tev . ii = 'CHAINE' 'MARQ' ' ' mi ;
  443. 'FINSI' ;
  444. 'FIN' iev ;
  445. *
  446. 'SI' lnclk ;
  447. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev
  448. 'NCLK' ;
  449. 'SINON' ;
  450. 'DESSIN' ev2 'TITR' tit 'TITX' tix 'TITY' tiy 'LEGE' 'MIMA' tev ;
  451. 'FINSI' ;
  452. *
  453. * End of procedure file DESSEVOL
  454. *
  455. 'FINPROC' ;
  456. *ENDPROCEDUR dessevol
  457. *BEGINPROCEDUR append
  458. ************************************************************************
  459. * NOM : APPEND
  460. * DESCRIPTION : Rajoute :
  461. * - un entier à un listentier
  462. * - un réel à un listreel
  463. * - un objet (liste, evolution, matrice ou chpoint)
  464. * à un indice de table ('MOT' ou 'ENTIER')
  465. * * si l'indice n'existe pas
  466. * * 'ET' si l'indice existe
  467. *
  468. *
  469. *
  470. * LANGAGE : GIBIANE-CAST3M
  471. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  472. * mél : gounand@semt2.smts.cea.fr
  473. **********************************************************************
  474. * VERSION : v1, 10/09/2004, version initiale
  475. * HISTORIQUE : v1, 10/09/2004, création
  476. * HISTORIQUE :
  477. * HISTORIQUE :
  478. ************************************************************************
  479. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  480. * en cas de modification de ce sous-programme afin de faciliter
  481. * la maintenance !
  482. ************************************************************************
  483. *
  484. *
  485. 'DEBPROC' APPEND ;
  486. 'ARGUMENT' tab/'TABLE' ;
  487. 'SI' ('EXISTE' tab) ;
  488. 'ARGUMENT' itab/'MOT' ;
  489. 'SI' ('NON' ('EXISTE' itab)) ;
  490. 'ARGUMENT' itab*'ENTIER' ;
  491. 'FINSI' ;
  492. lobj = FAUX ;
  493. 'SI' ('NON' lobj) ;
  494. 'ARGUMENT' lr/'LISTREEL' ;
  495. 'SI' ('EXISTE' lr) ;
  496. obj = lr ; lobj = VRAI ;
  497. 'FINSI' ;
  498. 'FINSI' ;
  499. 'SI' ('NON' lobj) ;
  500. 'ARGUMENT' le/'LISTENTI' ;
  501. 'SI' ('EXISTE' le) ;
  502. obj = le ; lobj = VRAI ;
  503. 'FINSI' ;
  504. 'FINSI' ;
  505. 'SI' ('NON' lobj) ;
  506. 'ARGUMENT' lev/'EVOLUTION' ;
  507. 'SI' ('EXISTE' lev) ;
  508. obj = lev ; lobj = VRAI ;
  509. 'FINSI' ;
  510. 'FINSI' ;
  511. 'SI' ('NON' lobj) ;
  512. 'ARGUMENT' lm/'MAILLAGE' ;
  513. 'SI' ('EXISTE' lm) ;
  514. obj = lm ; lobj = VRAI ;
  515. 'FINSI' ;
  516. 'FINSI' ;
  517. 'SI' ('NON' lobj) ;
  518. 'ARGUMENT' chpo/'CHPOINT' ;
  519. 'SI' ('EXISTE' chpo) ;
  520. obj = chpo ; lobj = VRAI ;
  521. 'FINSI' ;
  522. 'FINSI' ;
  523. 'SI' ('NON' lobj) ;
  524. 'ARGUMENT' rig/'RIGIDITE' ;
  525. 'SI' ('EXISTE' rig) ;
  526. obj = rig ; lobj = VRAI ;
  527. 'FINSI' ;
  528. 'FINSI' ;
  529. 'SI' ('NON' lobj) ;
  530. 'ARGUMENT' matk/'MATRIK' ;
  531. 'SI' ('EXISTE' matk) ;
  532. obj = matk ; lobj = VRAI ;
  533. 'FINSI' ;
  534. 'FINSI' ;
  535. 'SI' ('NON' lobj) ;
  536. cherr = 'CHAINE'
  537. 'Il faut fournir un objet liste, evolution, matrice ou chpoint.'
  538. ;
  539. 'ERREUR' cherr ;
  540. 'FINSI' ;
  541. 'SI' ('EXISTE' tab itab) ;
  542. tab . itab = 'ET' (tab . itab) obj ;
  543. 'SINON' ;
  544. tab . itab = obj ;
  545. 'FINSI' ;
  546. 'RESPRO' tab ;
  547. 'FINSI' ;
  548. 'ARGUMENT' lenti/'LISTENTI' ;
  549. 'ARGUMENT' lreel/'LISTREEL' ;
  550. 'SI' ('EXISTE' lenti) ;
  551. 'ARGUMENT' enti*'ENTIER' ;
  552. lenti = 'ET' lenti ('LECT' enti) ;
  553. 'RESPRO' lenti ;
  554. 'FINSI' ;
  555. 'SI' ('EXISTE' lreel) ;
  556. 'ARGUMENT' reel*'FLOTTANT' ;
  557. lreel = 'ET' lreel ('PROG' reel) ;
  558. 'RESPRO' lreel ;
  559. 'FINSI' ;
  560. *
  561. * End of procedure file APPEND
  562. *
  563. 'FINPROC' ;
  564. *ENDPROCEDUR append
  565. * Laplacien avec CLIM
  566. 'DEBPROC' discr ;
  567. *
  568. * Solution
  569. *
  570. xm ym = 'COORDONNEE' mt ;
  571. sol = 'NOMC' 'T' (xm '*' ym) ;
  572. csol = 'REDU' sol cmt ;
  573. 'SI' graph ;
  574. tit = 'CHAINE' 'Sol exacte' ;
  575. 'TRACER' sol mt 'TITRE' tit ;
  576. 'FINSI' ;
  577. *
  578. * Matrice
  579. *
  580. disc = 'QUAI' ;
  581. nomt = 'T' ;
  582. nomq = 'Q' ;
  583. mat1 = GLAPN _mt 'LINE' nomt disc nomq disc 1. ;
  584. mtot = mat1 ;
  585. fcli = csol ;
  586. * SG CLIM ne marche plus avec les RIGIDITES
  587. *'LIST' mtot ;
  588. mtotr = 'KOPS' 'NINCDUPR' ('KOPS' 'RIMA' mtot) ;
  589. *'LIST' mtotr 3 ;
  590. *
  591. 'RESPRO' mtotr fcli sol ;
  592. 'FINPROC' ;
  593. *
  594. * Laplacien avec BLOQ
  595. 'DEBPROC' discr2 ;
  596. *
  597. * Solution
  598. *
  599. xm ym = 'COORDONNEE' mt ;
  600. sol = 'NOMC' 'T' (xm '*' ym) ;
  601. csol = 'REDU' sol cmt ;
  602. 'SI' graph ;
  603. tit = 'CHAINE' 'Sol exacte' ;
  604. 'TRACER' sol mt 'TITRE' tit ;
  605. 'FINSI' ;
  606. *
  607. * Matrice
  608. *
  609. disc = 'QUAI' ;
  610. nomt = 'T' ;
  611. nomq = 'Q' ;
  612. mat1 = GLAPN _mt 'LINE' nomt disc nomq disc 1. ;
  613. matc = 'BLOQUE' 'T' cmt ;
  614. fc = 'DEPIMPOSE' matc csol ;
  615. mtot = mat1 'ET' matc ;
  616. ftot = fc ;
  617. 'RESPRO' mtot ftot sol ;
  618. 'FINPROC' ;
  619. *
  620. ************************************************************************
  621. * NOM : KRESLAP2
  622. * DESCRIPTION : Test de KRES sur un laplacien avec CLIM ou BLOQ
  623. *
  624. *
  625. *
  626. * LANGAGE : GIBIANE-CAST3M
  627. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  628. * mél : gounand@semt2.smts.cea.fr
  629. **********************************************************************
  630. * VERSION : v1, 08/02/2006, version initiale
  631. * HISTORIQUE : v1, 08/02/2006, création
  632. * HISTORIQUE :
  633. * HISTORIQUE :
  634. ************************************************************************
  635. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  636. * en cas de modification de ce sous-programme afin de faciliter
  637. * la maintenance !
  638. ************************************************************************
  639. *
  640. complet = FAUX ;
  641. interact= FAUX ;
  642. graph = FAUX ;
  643. 'OPTION' 'DIME' 2 'ELEM' 'TRI6' ;
  644. 'SI' ('NON' interact) ;
  645. 'OPTION' 'TRAC' 'PS' ;
  646. 'SINON' ;
  647. 'OPTION' 'TRAC' 'X' ;
  648. 'FINSI' ;
  649. *
  650. * Maillage
  651. *
  652. 'SI' complet ;
  653. nm = 100 ;
  654. 'SINON' ;
  655. nm = 20 ;
  656. 'FINSI' ;
  657. p1 = 0. 0. ; p2 = 1. 0. ; p3 = 1. 1. ; p4 = 0. 1. ;
  658. d1 = 'DROIT' nm p1 p2 ; d2 = 'DROIT' nm p2 p3 ;
  659. d3 = 'DROIT' nm p3 p4 ; d4 = 'DROIT' nm p4 p1 ;
  660. cmt = d1 'ET' d2 'ET' d3 'ET' d4 ;
  661. *mt = 'DALLER' d1 d2 d3 d4 ;cmt = 'CONTOUR' mt ;
  662. mt = 'SURFACE' cmt ;
  663. _mt = 'CHANGER' 'QUAF' mt ;
  664.  
  665. tabmit = 'TABLE' ;
  666. tabmit . 1 = 'CHAINE' 'CG' ;
  667. tabmit . 2 = 'CHAINE' 'BiCGStab' ;
  668. tabmit . 3 = 'CHAINE' 'BiCGStab(4)' ;
  669. tabmit . 4 = 'CHAINE' 'GMRES(50)' ;
  670. tabmit . 5 = 'CHAINE' 'CGS' ;
  671. tabprec = 'TABLE' ;
  672. tabprec . 0 = 'CHAINE' 'Rien' ;
  673. tabprec . 1 = 'CHAINE' 'Diag' ;
  674. tabprec . 2 = 'CHAINE' 'DILU' ;
  675. tabprec . 3 = 'CHAINE' 'ILU(0)' ;
  676. tabprec . 4 = 'CHAINE' 'MILU(0)' ;
  677. tabprec . 5 = 'CHAINE' 'ILUT' ;
  678. tabprec . 6 = 'CHAINE' 'ILUT2' ;
  679. tabprec . 7 = 'CHAINE' 'ILUTP' ;
  680. tabprec . 8 = 'CHAINE' 'ILUTP+0' ;
  681. tabpec = 'TABLE' ;
  682. tabpec . 1 = 1.D-4 ;
  683. tabpec . 2 = 1.D-2 ;
  684. tabpec . 3 = 1.D-1 ;
  685. tabpec . 4 = 1.D0 ;
  686. tabpec . 5 = 5.D0 ;
  687. xini = 'NOMC' 'T' ('BRUIT' 'BLAN' 'UNIF' 0.5 0.5 mt) ;
  688. *
  689. * Toutes les méthodes avec ILU(0) (Laplacien + CLIM)
  690. *
  691. mtot fcli sol = DISCR ;
  692. tres = 'TABLE' ;
  693. tres . 'EVOS' = 'TABLE' ;
  694. tres . 'OK' = 'TABLE' ;
  695. tres . 'NIT' = 'TABLE' ;
  696. tres . 'TCPU' = 'TABLE' ;
  697. 'REPETER' imetit ('DIME' tabmit) ;
  698. 'TEMPS' 'ZERO' ;
  699. rv = 'EQEX' ; rvm = rv . 'METHINV' ;
  700. rvm . 'TYPINV' = &imetit '+' 1 ;
  701. rvm . 'PRECOND' = 3 ;
  702. rvm . 'CALRES' = 1 ;
  703. rvm . 'XINIT' = xini ;
  704. rvm . 'CLIM' = fcli ;
  705. res = 'EXCO' 'T' ('KRES' ('*' mtot 1.d0) 'TYPI' rvm) 'T' ;
  706. lnmv = 'FLOTTANT' (rvm . 'NMATVEC') ;
  707. lres = rvm . 'CONVINV' ;
  708. tres . 'EVOS' . &imetit = 'EVOL' 'MANU' lnmv (log10 lres) ;
  709. tres . 'OK' . &imetit = 'MAXIMUM' ('-' res sol) 'ABS' ;
  710. tres . 'NIT' . &imetit = 'EXTRAIRE' lnmv ('DIME' lnmv) ;
  711. TABTPS = TEMP 'NOEC';
  712. tres . 'TCPU' . &imetit = TABTPS.'TEMPS_CPU'.'INITIAL';
  713. 'FIN' imetit ;
  714. * Tableau récapitulatif
  715. 'SAUTER' 1 'LIGNE' ;
  716. cc = 'CHAINE' 'Laplacien + CLIM ILU(0)' ;
  717. 'MESSAGE' cc ;
  718. cc3 = 'CHAINE' 'Nb pmatvec'/20 'Temps CPU'/40 'Erreur'/60 ;
  719. 'MESSAGE' cc3 ;
  720. 'REPETER' imetit ('DIME' tabmit) ;
  721. nit = tres . 'NIT' . &imetit ;
  722. tcpu = tres . 'TCPU' . &imetit ;
  723. ok = tres . 'OK' . &imetit ;
  724. cc4 = 'CHAINE' (tabmit . &imetit)
  725. nit*30 (formar tcpu 2)*50
  726. (formar ok 4)*70 ;
  727. 'MESSAGE' cc4 ;
  728. 'FIN' imetit ;
  729. 'SAUTER' 1 'LIGNE' ;
  730. * Graphique
  731. 'SI' graph ;
  732. evtot = @STBL (tres . 'EVOS') ;
  733. tabt = 'TABLE' ;
  734. 'REPETER' imetit ('DIME' tabmit) ;
  735. tabt . &imetit = tabmit . &imetit ;
  736. 'FIN' imetit ;
  737. tit = 'CHAINE' 'Laplacien+CLIM ILU(0)' ;
  738. titx = 'CHAINE' 'Nb pmatvec' ;
  739. tity = 'CHAINE' 'Log10 critere' ;
  740. DESSEVOL evtot tabt tit titx tity FAUX ;
  741. 'FINSI' ;
  742. *
  743. * Le test vérifie que toutes les méthodes ont donné
  744. * une erreur inférieure à 1.D-8
  745. *
  746. test = VRAI ;
  747. 'REPETER' imetit ('DIME' tabmit) ;
  748. ok = tres . 'OK' . &imetit ;
  749. test = test 'ET' ('<' ok 5.D-7) ;
  750. 'FIN' imetit ;
  751. *
  752. * Tous les préconditionneurs BiCGSTAB(4) (Laplacien + CLIM)
  753. *
  754. mtot fcli sol = DISCR ;
  755. tres = 'TABLE' ;
  756. tres . 'EVOS' = 'TABLE' ;
  757. tres . 'OK' = 'TABLE' ;
  758. tres . 'NIT' = 'TABLE' ;
  759. tres . 'TCPU' = 'TABLE' ;
  760. 'REPETER' iprec ('DIME' tabprec) ;
  761. 'TEMPS' 'ZERO' ;
  762. rv = 'EQEX' ; rvm = rv . 'METHINV' ;
  763. rvm . 'TYPINV' = 4 ;
  764. rvm . 'PRECOND' = '-' &iprec 1 ;
  765. rvm . 'CALRES' = 1 ;
  766. rvm . 'XINIT' = xini ;
  767. rvm . 'CLIM' = fcli ;
  768. res = 'EXCO' 'T' ('KRES' ('*' mtot 1.) 'TYPI' rvm) 'T' ;
  769. lnmv = 'FLOTTANT' (rvm . 'NMATVEC') ;
  770. lres = rvm . 'CONVINV' ;
  771. tres . 'EVOS' . &iprec = 'EVOL' 'MANU' (log10 lnmv) (log10 lres) ;
  772. * tres . 'EVOS' . &iprec = 'EVOL' 'MANU' lnmv (log10 lres) ;
  773. tres . 'OK' . &iprec = 'MAXIMUM' ('-' res sol) 'ABS' ;
  774. tres . 'NIT' . &iprec = 'EXTRAIRE' lnmv ('DIME' lnmv) ;
  775. TABTPS = TEMP 'NOEC';
  776. tres . 'TCPU' . &iprec = TABTPS.'TEMPS_CPU'.'INITIAL';
  777. 'FIN' iprec ;
  778. * Tableau récapitulatif
  779. 'SAUTER' 1 'LIGN' ;
  780. cc = 'CHAINE' 'Laplacien + CLIM BiCGSTAB(4)' ;
  781. 'MESSAGE' cc ;
  782. cc3 = 'CHAINE' 'Nb pmatvec'/20 'Temps CPU'/40 'Erreur'/60 ;
  783. 'MESSAGE' cc3 ;
  784. 'REPETER' iprec ('DIME' tabprec) ;
  785. nit = tres . 'NIT' . &iprec ;
  786. tcpu = tres . 'TCPU' . &iprec ;
  787. ok = tres . 'OK' . &iprec ;
  788. cc4 = 'CHAINE' (tabprec . ('-' &iprec 1))
  789. nit*30 (formar tcpu 2)*50
  790. (formar ok 4)*70 ;
  791. 'MESSAGE' cc4 ;
  792. 'FIN' iprec ;
  793. 'SAUTER' 1 'LIGNE' ;
  794. * Graphique
  795. 'SI' graph ;
  796. evtot = @STBL (tres . 'EVOS') ;
  797. tabt = 'TABLE' ;
  798. 'REPETER' iprec ('DIME' tabprec) ;
  799. tabt . &iprec = tabprec . ('-' &iprec 1) ;
  800. 'FIN' iprec ;
  801. tit = 'CHAINE' 'Laplacien+CLIM BiGSTAB(4)' ;
  802. titx = 'CHAINE' 'Log10 Nb pmatvec' ;
  803. * titx = 'CHAINE' 'Nb pmatvec' ;
  804. tity = 'CHAINE' 'Log10 critere' ;
  805. DESSEVOL evtot tabt tit titx tity FAUX ;
  806. 'FINSI' ;
  807. *
  808. * Toutes les méthodes avec ILU(0) (Laplacien + BLOQ)
  809. *
  810. mtot ftot sol = DISCR2 ;
  811. tres = 'TABLE' ;
  812. tres . 'EVOS' = 'TABLE' ;
  813. tres . 'OK' = 'TABLE' ;
  814. tres . 'NIT' = 'TABLE' ;
  815. tres . 'TCPU' = 'TABLE' ;
  816. 'REPETER' imetit ('DIME' tabmit) ;
  817. 'TEMPS' 'ZERO' ;
  818. rv = 'EQEX' ; rvm = rv . 'METHINV' ;
  819. rvm . 'TYPINV' = &imetit '+' 1 ;
  820. rvm . 'PRECOND' = 3 ;
  821. rvm . 'CALRES' = 1 ;
  822. rvm . 'XINIT' = xini ;
  823. res = 'EXCO' 'T' ('KRES' ('*' mtot 1.d0) ftot 'TYPI' rvm) 'T' ;
  824. lnmv = 'FLOTTANT' (rvm . 'NMATVEC') ;
  825. lres = rvm . 'CONVINV' ;
  826. tres . 'EVOS' . &imetit = 'EVOL' 'MANU' lnmv (log10 lres) ;
  827. tres . 'OK' . &imetit = 'MAXIMUM' ('-' res sol) 'ABS' ;
  828. tres . 'NIT' . &imetit = 'EXTRAIRE' lnmv ('DIME' lnmv) ;
  829. TABTPS = TEMP 'NOEC';
  830. tres . 'TCPU' . &imetit = TABTPS.'TEMPS_CPU'.'INITIAL';
  831. 'FIN' imetit ;
  832. * Tableau récapitulatif
  833. 'SAUTER' 1 'LIGNE' ;
  834. cc = 'CHAINE' 'Laplacien + BLOQ ILU(0)' ;
  835. 'MESSAGE' cc ;
  836. cc3 = 'CHAINE' 'Nb pmatvec'/20 'Temps CPU'/40 'Erreur'/60 ;
  837. 'MESSAGE' cc3 ;
  838. 'REPETER' imetit ('DIME' tabmit) ;
  839. nit = tres . 'NIT' . &imetit ;
  840. tcpu = tres . 'TCPU' . &imetit ;
  841. ok = tres . 'OK' . &imetit ;
  842. cc4 = 'CHAINE' (tabmit . &imetit)
  843. nit*30 (formar tcpu 2)*50
  844. (formar ok 4)*70 ;
  845. 'MESSAGE' cc4 ;
  846. 'FIN' imetit ;
  847. 'SAUTER' 1 'LIGNE' ;
  848. * Graphique
  849. 'SI' graph ;
  850. evtot = @STBL (tres . 'EVOS') ;
  851. tabt = 'TABLE' ;
  852. 'REPETER' imetit ('DIME' tabmit) ;
  853. tabt . &imetit = tabmit . &imetit ;
  854. 'FIN' imetit ;
  855. tit = 'CHAINE' 'Laplacien+BLOQ ILU(0)' ;
  856. titx = 'CHAINE' 'Nb pmatvec' ;
  857. tity = 'CHAINE' 'Log10 critere' ;
  858. DESSEVOL evtot tabt tit titx tity FAUX ;
  859. 'FINSI' ;
  860. *
  861. * Le test vérifie que toutes les méthodes ont donné
  862. * une erreur inférieure à 1.D-8
  863. *
  864. test2 = VRAI ;
  865. 'REPETER' imetit ('DIME' tabmit) ;
  866. ok = tres . 'OK' . &imetit ;
  867. test2 = test2 'ET' ('<' ok 5.D-7) ;
  868. 'FIN' imetit ;
  869. *
  870. * Tous les préconditionneurs BiCGSTAB(4) (Laplacien + BLOQ)
  871. *
  872. mtot ftot sol = DISCR2 ;
  873. tres = 'TABLE' ;
  874. tres . 'EVOS' = 'TABLE' ;
  875. tres . 'OK' = 'TABLE' ;
  876. tres . 'NIT' = 'TABLE' ;
  877. tres . 'TCPU' = 'TABLE' ;
  878. *SG 2025/04/25 ILUTP ne marche plus en RIGIDITE
  879. dtprec = ('-' ('DIME' tabprec) 2) ;
  880. 'REPETER' iprec dtprec ;
  881. 'TEMPS' 'ZERO' ;
  882. rv = 'EQEX' ; rvm = rv . 'METHINV' ;
  883. rvm . 'TYPINV' = 4 ;
  884. rvm . 'PRECOND' = '-' &iprec 1 ;
  885. rvm . 'CALRES' = 1 ;
  886. rvm . 'XINIT' = xini ;
  887. res = 'EXCO' 'T' ('KRES' ('*' mtot 1.d0) ftot 'TYPI' rvm) 'T' ;
  888. lnmv = 'FLOTTANT' (rvm . 'NMATVEC') ;
  889. lres = rvm . 'CONVINV' ;
  890. tres . 'EVOS' . &iprec = 'EVOL' 'MANU' (log10 lnmv) (log10 lres) ;
  891. * tres . 'EVOS' . &iprec = 'EVOL' 'MANU' lnmv (log10 lres) ;
  892. tres . 'OK' . &iprec = 'MAXIMUM' ('-' res sol) 'ABS' ;
  893. tres . 'NIT' . &iprec = 'EXTRAIRE' lnmv ('DIME' lnmv) ;
  894. TABTPS = TEMP 'NOEC';
  895. tres . 'TCPU' . &iprec = TABTPS.'TEMPS_CPU'.'INITIAL';
  896. 'FIN' iprec ;
  897. * Tableau récapitulatif
  898. 'SAUTER' 1 'LIGN' ;
  899. cc = 'CHAINE' 'Laplacien + BLOQ BiCGSTAB(4)' ;
  900. 'MESSAGE' cc ;
  901. cc3 = 'CHAINE' 'Nb pmatvec'/20 'Temps CPU'/40 'Erreur'/60 ;
  902. 'MESSAGE' cc3 ;
  903. 'REPETER' iprec dtprec ;
  904. nit = tres . 'NIT' . &iprec ;
  905. tcpu = tres . 'TCPU' . &iprec ;
  906. ok = tres . 'OK' . &iprec ;
  907. cc4 = 'CHAINE' (tabprec . ('-' &iprec 1))
  908. nit*30 (formar tcpu 2)*50
  909. (formar ok 4)*70 ;
  910. 'MESSAGE' cc4 ;
  911. 'FIN' iprec ;
  912. 'SAUTER' 1 'LIGNE' ;
  913. * Graphique
  914. 'SI' graph ;
  915. evtot = @STBL (tres . 'EVOS') ;
  916. tabt = 'TABLE' ;
  917. 'REPETER' iprec ('DIME' tabprec) ;
  918. tabt . &iprec = tabprec . ('-' &iprec 1) ;
  919. 'FIN' iprec ;
  920. tit = 'CHAINE' 'Laplacien+BLOQ BiGSTAB(4)' ;
  921. titx = 'CHAINE' 'Log10 Nb pmatvec' ;
  922. * titx = 'CHAINE' 'Nb pmatvec' ;
  923. tity = 'CHAINE' 'Log10 critere' ;
  924. DESSEVOL evtot tabt tit titx tity FAUX ;
  925. 'FINSI' ;
  926. *
  927. 'SI' ('NON' ('ET' test test2)) ;
  928. 'ERREUR' 5 ;
  929. 'FINSI' ;
  930. *
  931. 'SI' interact ;
  932. 'OPTION' 'DONN' 5 ;
  933. 'FINSI' ;
  934. *
  935. * End of dgibi file KRESLAP2
  936. *
  937. 'FIN' ;
  938.  
  939.  
  940.  

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