Télécharger nlin_lapncer.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : nlin_lapncer.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTION' 'ECHO' 0 ;
  5. *BEGINPROCEDUR gmass
  6. ************************************************************************
  7. * NOM : GMASS
  8. * DESCRIPTION : Une matrice de masse
  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 : v2, 14/03/2006, mise à jour NLIN évolué
  17. * VERSION : v1, 13/05/2004, version initiale
  18. * HISTORIQUE : v1, 13/05/2004, création
  19. * HISTORIQUE :
  20. * HISTORIQUE :
  21. ************************************************************************
  22. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  23. * en cas de modification de ce sous-programme afin de faciliter
  24. * la maintenance !
  25. ************************************************************************
  26. *
  27. *
  28. 'DEBPROC' GMASS ;
  29. 'ARGUMENT' _mt*'MAILLAGE' ;
  30. 'ARGUMENT' _smt/'MAILLAGE' ;
  31. 'ARGUMENT' gdisc*'MOT ' ;
  32. 'ARGUMENT' nomt*'MOT ' ;
  33. 'ARGUMENT' disct*'MOT ' ;
  34. 'ARGUMENT' nomq*'MOT ' ;
  35. 'ARGUMENT' discq*'MOT ' ;
  36. 'ARGUMENT' coef/'FLOTTANT' ;
  37. 'SI' ('NON' ('EXISTE' coef)) ;
  38. 'ARGUMENT' coef2/'CHPOINT ' ;
  39. 'SI' ('NON' ('EXISTE' coef2)) ;
  40. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  41. 'SINON' ;
  42. coef = coef2 ;
  43. 'ARGUMENT' discc*'MOT ' ;
  44. 'FINSI' ;
  45. 'SINON' ;
  46. discc = 'CSTE' ;
  47. 'FINSI' ;
  48. 'ARGUMENT' methgau/'MOT ' ;
  49. 'SI' ('NON' ('EXISTE' methgau)) ;
  50. methgau = 'GAU7' ;
  51. 'FINSI' ;
  52. 'ARGUMENT' chpop/'CHPOINT' ;
  53. 'ARGUMENT' chpod/'CHPOINT' ;
  54. *
  55. vdim = 'VALEUR' 'DIME' ;
  56. vmod = 'VALEUR' 'MODE' ;
  57. idim = 0 ;
  58. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  59. idim = 2 ;
  60. iaxi = FAUX ;
  61. 'FINSI' ;
  62. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  63. idim = 2 ;
  64. iaxi = VRAI ;
  65. 'FINSI' ;
  66. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  67. idim = 3 ;
  68. iaxi = FAUX ;
  69. 'FINSI' ;
  70. 'SI' ('EGA' vdim 1) ;
  71. idim = 1 ;
  72. iaxi = FAUX ;
  73. 'FINSI' ;
  74. 'SI' ('EGA' idim 0) ;
  75. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  76. 'FINSI' ;
  77. 'SI' iaxi ;
  78. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  79. 'FINSI' ;
  80. numop = 1 ;
  81. numder = idim ;
  82. mmt = 'MOTS' nomt ;
  83. mmq = 'MOTS' nomq ;
  84. numvar = 1 ;
  85. numdat = 1 ;
  86. numcof = 1 ;
  87. *
  88. A = ININLIN numop numvar numdat numcof numder ;
  89. A . 'VAR' . 1 . 'NOMDDL' = mmt ;
  90. A . 'VAR' . 1 . 'DISC' = disct ;
  91. 'SI' ('EXISTE' chpop) ;
  92. A . 'VAR' . 1 . 'VALEUR' = chpop ;
  93. 'FINSI' ;
  94. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  95. A . 'DAT' . 1 . 'DISC' = discc ;
  96. A . 'DAT' . 1 . 'VALEUR' = coef ;
  97. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  98. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  99. *
  100. A . 1 . 1 . 0 = 'LECT' 1 ;
  101. *
  102. 'SI' iaxi ;
  103. numdat = 1 ;
  104. numcof = 1 ;
  105. 'SINON' ;
  106. numdat = 0 ;
  107. numcof = 0 ;
  108. 'FINSI' ;
  109. B = ININLIN numop numvar numdat numcof numder ;
  110. B . 'VAR' . 1 . 'NOMDDL' = mmq ;
  111. B . 'VAR' . 1 . 'DISC' = discq ;
  112. 'SI' ('EXISTE' chpod) ;
  113. B . 'VAR' . 1 . 'VALEUR' = chpod ;
  114. 'FINSI' ;
  115. *
  116. 'SI' iaxi ;
  117. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  118. B . 'DAT' . 1 . 'DISC' = gdisc ;
  119. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  120. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  121. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  122. 'FINSI' ;
  123. 'SI' iaxi ;
  124. B . 1 . 1 . 0 = 'LECT' 1 ;
  125. 'SINON' ;
  126. B . 1 . 1 . 0 = 'LECT' ;
  127. 'FINSI' ;
  128. *
  129. 'SI' ('EXISTE' _smt) ;
  130. mgmass = 'NLIN' gdisc _mt _smt A B methgau ;
  131. 'SINON' ;
  132. mgmass = 'NLIN' gdisc _mt A B methgau ;
  133. 'FINSI' ;
  134. *
  135. 'RESPRO' mgmass ;
  136. 'FINPROC' ;
  137. *
  138. * End of procedure file GMASS
  139. *
  140. *ENDPROCEDUR gmass
  141. *BEGINPROCEDUR glapn
  142. ************************************************************************
  143. * NOM : GLAPN
  144. * DESCRIPTION : Un laplacien scalaire
  145. *
  146. *
  147. *
  148. * LANGAGE : GIBIANE-CAST3M
  149. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  150. * mél : gounand@semt2.smts.cea.fr
  151. **********************************************************************
  152. * VERSION : v2, 14/03/2006, mise à jour NLIN évolué
  153. * VERSION : v1, 13/05/2004, version initiale
  154. * HISTORIQUE : v1, 13/05/2004, création
  155. * HISTORIQUE :
  156. * HISTORIQUE :
  157. ************************************************************************
  158. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  159. * en cas de modification de ce sous-programme afin de faciliter
  160. * la maintenance !
  161. ************************************************************************
  162. *
  163. *
  164. 'DEBPROC' GLAPN ;
  165. 'ARGUMENT' _mt*'MAILLAGE' ;
  166. 'ARGUMENT' gdisc*'MOT ' ;
  167. 'ARGUMENT' nomt*'MOT ' ;
  168. 'ARGUMENT' disct*'MOT ' ;
  169. 'ARGUMENT' nomq*'MOT ' ;
  170. 'ARGUMENT' discq*'MOT ' ;
  171. 'ARGUMENT' coef/'FLOTTANT' ;
  172. 'SI' ('NON' ('EXISTE' coef)) ;
  173. 'ARGUMENT' coef2/'CHPOINT ' ;
  174. 'SI' ('NON' ('EXISTE' coef2)) ;
  175. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  176. 'SINON' ;
  177. coef = coef2 ;
  178. 'ARGUMENT' discc*'MOT ' ;
  179. 'FINSI' ;
  180. 'SINON' ;
  181. discc = 'CSTE' ;
  182. 'FINSI' ;
  183. 'ARGUMENT' methgau/'MOT ' ;
  184. 'SI' ('NON' ('EXISTE' methgau)) ;
  185. methgau = 'GAU7' ;
  186. 'FINSI' ;
  187. 'ARGUMENT' chpop/'CHPOINT' ;
  188. 'ARGUMENT' chpod/'CHPOINT' ;
  189. *
  190. vdim = 'VALEUR' 'DIME' ;
  191. vmod = 'VALEUR' 'MODE' ;
  192. idim = 0 ;
  193. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  194. idim = 2 ;
  195. iaxi = FAUX ;
  196. 'FINSI' ;
  197. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  198. idim = 2 ;
  199. iaxi = VRAI ;
  200. 'FINSI' ;
  201. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  202. idim = 3 ;
  203. iaxi = FAUX ;
  204. 'FINSI' ;
  205. 'SI' ('EGA' vdim 1) ;
  206. idim = 1 ;
  207. iaxi = FAUX ;
  208. 'FINSI' ;
  209. 'SI' ('EGA' idim 0) ;
  210. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  211. 'FINSI' ;
  212. 'SI' iaxi ;
  213. dprmt = '*' ('COORDONNEE' 1 _mt) ('*' PI 2.D0) ;
  214. 'FINSI' ;
  215. * Test bête...
  216. 'SI' ('EGA' ('TYPE' coef) 'CHPOINT ') ;
  217. mincoef = 'MINIMUM' coef ;
  218. 'SINON' ;
  219. mincoef = coef ;
  220. 'FINSI' ;
  221. 'SI' ('<' mincoef 0.D0) ;
  222. 'ERREUR' 'Le coef (une viscosité) doit etre positive' ;
  223. 'FINSI' ;
  224. *
  225. 'SI' iaxi ;
  226. lcoef = 'MOTS' 'NURR' 'NUZZ' ;
  227. 'SINON' ;
  228. 'SI' ('EGA' idim 2) ;
  229. lcoef = 'MOTS' 'NUXX' 'NUYY' ;
  230. 'SINON' ;
  231. lcoef = 'MOTS' 'NUXX' 'NUYY' 'NUZZ' ;
  232. 'FINSI' ;
  233. 'FINSI' ;
  234. *
  235. ltens = FAUX ;
  236. 'SI' ('EGA' ('TYPE' coef) 'CHPOINT') ;
  237. ncomp = 'DIME' ('EXTRAIRE' coef 'COMP') ;
  238. 'SI' ('EGA' ncomp idim) ;
  239. ltens = VRAI ;
  240. 'FINSI' ;
  241. 'FINSI' ;
  242. *
  243. tcoef = 'TABLE' ;
  244. 'SI' ltens ;
  245. 'REPETER' iidim idim ;
  246. tcoef . &iidim = 'EXCO' ('EXTRAIRE' lcoef &iidim) coef ;
  247. 'FIN' iidim ;
  248. 'SINON' ;
  249. 'REPETER' iidim idim ;
  250. tcoef . &iidim = coef ;
  251. 'FIN' iidim ;
  252. 'FINSI' ;
  253. *
  254. numop = idim ;
  255. numder = idim ;
  256. mmt = 'MOTS' nomt ;
  257. mmq = 'MOTS' nomq ;
  258. numvar = 1 ;
  259. numdat = idim ;
  260. numcof = idim ;
  261. *
  262. A = ININLIN numop numvar numdat numcof numder ;
  263. A . 'VAR' . 1 . 'NOMDDL' = mmt ;
  264. A . 'VAR' . 1 . 'DISC' = disct ;
  265. 'SI' ('EXISTE' chpop) ;
  266. A . 'VAR' . 1 . 'VALEUR' = chpop ;
  267. 'FINSI' ;
  268. 'REPETER' iidim idim ;
  269. A . 'DAT' . &iidim . 'NOMDDL' = 'MOTS' 'SCAL' ;
  270. A . 'DAT' . &iidim . 'DISC' = discc ;
  271. A . 'DAT' . &iidim . 'VALEUR' = tcoef . &iidim ;
  272. A . 'COF' . &iidim . 'COMPOR' = 'IDEN' ;
  273. A . 'COF' . &iidim . 'LDAT' = 'LECT' &iidim ;
  274. 'FIN' iidim ;
  275. *
  276. 'REPETER' iidim idim ;
  277. A . &iidim . 1 . &iidim = 'LECT' &iidim ;
  278. 'FIN' iidim ;
  279. *
  280. 'SI' iaxi ;
  281. numdat = 1 ;
  282. numcof = 1 ;
  283. 'SINON' ;
  284. numdat = 0 ;
  285. numcof = 0 ;
  286. 'FINSI' ;
  287. *
  288. B = ININLIN numop numvar numdat numcof numder ;
  289. B . 'VAR' . 1 . 'NOMDDL' = mmq ;
  290. B . 'VAR' . 1 . 'DISC' = discq ;
  291. 'SI' ('EXISTE' chpod) ;
  292. B . 'VAR' . 1 . 'VALEUR' = chpod ;
  293. 'FINSI' ;
  294. 'SI' iaxi ;
  295. B . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  296. B . 'DAT' . 1 . 'DISC' = gdisc ;
  297. B . 'DAT' . 1 . 'VALEUR' = dprmt ;
  298. B . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  299. B . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  300. 'FINSI' ;
  301. *
  302. 'REPETER' iidim idim ;
  303. 'SI' iaxi ;
  304. B . &iidim . 1 . &iidim = 'LECT' 1 ;
  305. 'SINON' ;
  306. B . &iidim . 1 . &iidim = 'LECT' ;
  307. 'FINSI' ;
  308. 'FIN' iidim ;
  309. *
  310. mglapn = 'NLIN' gdisc _mt A B methgau ;
  311. * Integration par parties
  312. mglapn = '*' mglapn -1.D0 ;
  313. *
  314. 'RESPRO' mglapn ;
  315. 'FINPROC' ;
  316. *
  317. * End of procedure file GLAPN
  318. *
  319. *ENDPROCEDUR glapn
  320. *BEGINPROCEDUR ggrad
  321. ************************************************************************
  322. * NOM : GGRAD
  323. * DESCRIPTION :
  324. *
  325. *
  326. *
  327. * LANGAGE : GIBIANE-CAST3M
  328. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  329. * mél : gounand@semt2.smts.cea.fr
  330. **********************************************************************
  331. * VERSION : v1, 08/03/2006, version initiale
  332. * HISTORIQUE : v1, 08/03/2006, création
  333. * HISTORIQUE :
  334. * HISTORIQUE :
  335. ************************************************************************
  336. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  337. * en cas de modification de ce sous-programme afin de faciliter
  338. * la maintenance !
  339. ************************************************************************
  340. *
  341. *
  342. 'DEBPROC' GGRAD ;
  343. 'ARGUMENT' _mt*'MAILLAGE' ;
  344. 'ARGUMENT' gdisc*'MOT ' ;
  345. 'ARGUMENT' discp*'MOT ' ;
  346. 'ARGUMENT' discv*'MOT ' ;
  347. 'ARGUMENT' coef/'FLOTTANT' ;
  348. 'SI' ('NON' ('EXISTE' coef)) ;
  349. 'ARGUMENT' coef2/'CHPOINT ' ;
  350. 'SI' ('NON' ('EXISTE' coef2)) ;
  351. 'ERREUR' 'Il faut donner un coef FLOTTANT ou CHPOINT' ;
  352. 'SINON' ;
  353. coef = coef2 ;
  354. 'ARGUMENT' discc*'MOT ' ;
  355. 'FINSI' ;
  356. 'SINON' ;
  357. discc = 'CSTE' ;
  358. 'FINSI' ;
  359. 'ARGUMENT' methgau/'MOT ' ;
  360. 'SI' ('NON' ('EXISTE' methgau)) ;
  361. methgau = 'GAU7' ;
  362. 'FINSI' ;
  363. *
  364. vdim = 'VALEUR' 'DIME' ;
  365. vmod = 'VALEUR' 'MODE' ;
  366. idim = 0 ;
  367. lpp = 'MOTS' 'LX' ; ldp = 'MOTS' 'FLX' ;
  368. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'PLANDEFO')) ;
  369. lpv = 'MOTS' 'UX' 'UY' ; ldv = 'MOTS' 'FX' 'FY' ;
  370. idim = 2 ;
  371. iaxi = FAUX ;
  372. 'FINSI' ;
  373. 'SI' ('ET' ('EGA' vdim 2) ('EGA' vmod 'AXIS')) ;
  374. lpv = 'MOTS' 'UR' 'UZ' ; ldv = 'MOTS' 'FR' 'FZ' ;
  375. idim = 2 ;
  376. iaxi = VRAI ;
  377. 'FINSI' ;
  378. 'SI' ('ET' ('EGA' vdim 3) ('EGA' vmod 'TRID')) ;
  379. lpv = 'MOTS' 'UX' 'UY' 'UZ' ; ldv = 'MOTS' 'FX' 'FY' 'FZ' ;
  380. idim = 3 ;
  381. iaxi = FAUX ;
  382. 'FINSI' ;
  383. 'SI' ('EGA' idim 0) ;
  384. 'ERREUR' ('CHAINE' 'vmod=' vmod ' et vdim=' vdim ' non prevu') ;
  385. 'FINSI' ;
  386. 'SI' iaxi ;
  387. dp = ('*' PI 2.D0) ;
  388. rmt = 'COORDONNEE' 1 _mt ;
  389. 'FINSI' ;
  390. *
  391. numop = 3 ;
  392. numder = idim ;
  393. numvar = 1 ;
  394. 'SI' iaxi ;
  395. numdat = 3 ;
  396. numcof = 3 ;
  397. 'SINON' ;
  398. numdat = 1 ;
  399. numcof = 1 ;
  400. 'FINSI' ;
  401. *
  402. A = ININLIN numop numvar numdat numcof numder ;
  403. A . 'VAR' . 1 . 'NOMDDL' = lpp ;
  404. A . 'VAR' . 1 . 'DISC' = discp ;
  405. A . 'DAT' . 1 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  406. A . 'DAT' . 1 . 'DISC' = discc ;
  407. A . 'DAT' . 1 . 'VALEUR' = coef ;
  408. A . 'COF' . 1 . 'COMPOR' = 'IDEN' ;
  409. A . 'COF' . 1 . 'LDAT' = 'LECT' 1 ;
  410. 'SI' iaxi ;
  411. A . 'DAT' . 2 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  412. A . 'DAT' . 2 . 'DISC' = 'CSTE' ;
  413. A . 'DAT' . 2 . 'VALEUR' = dp ;
  414. A . 'COF' . 2 . 'COMPOR' = 'IDEN' ;
  415. A . 'COF' . 2 . 'LDAT' = 'LECT' 2 ;
  416. A . 'DAT' . 3 . 'NOMDDL' = 'MOTS' 'SCAL' ;
  417. A . 'DAT' . 3 . 'DISC' = gdisc ;
  418. A . 'DAT' . 3 . 'VALEUR' = rmt ;
  419. A . 'COF' . 3 . 'COMPOR' = 'IDEN' ;
  420. A . 'COF' . 3 . 'LDAT' = 'LECT' 3 ;
  421. 'FINSI' ;
  422. *
  423. * 'LISTE' iaxi ; 'LISTE' idim ;
  424. 'SI' iaxi ;
  425. 'REPETER' iidim idim ;
  426. A . &iidim . 1 . &iidim = 'LECT' 1 2 3 ;
  427. 'FIN' iidim ;
  428. 'SINON' ;
  429. 'REPETER' iidim idim ;
  430. A . &iidim . 1 . &iidim = 'LECT' 1 ;
  431. 'FIN' iidim ;
  432. 'FINSI' ;
  433. *
  434. numvar = idim ;
  435. numdat = 0 ;
  436. numcof = 0 ;
  437. B = ININLIN numop numvar numdat numcof numder ;
  438. 'REPETER' iidim idim ;
  439. B . 'VAR' . &iidim . 'NOMDDL' = 'MOTS' ('EXTRAIRE' ldv &iidim) ;
  440. B . 'VAR' . &iidim . 'DISC' = discv ;
  441. 'FIN' iidim ;
  442. *
  443. 'REPETER' iidim idim ;
  444. B . &iidim . &iidim . 0 = 'LECT' ;
  445. 'FIN' iidim ;
  446. *
  447. mggrad = 'NLIN' gdisc _mt A B methgau ;
  448. *
  449. 'RESPRO' mggrad ;
  450. 'FINPROC' ;
  451. *
  452. * End of procedure file GGRAD
  453. *
  454. *ENDPROCEDUR ggrad
  455. *BEGINPROCEDUR formar
  456. ************************************************************************
  457. * NOM : FORMAR
  458. * DESCRIPTION : formate un réel de facon courte
  459. * pratique pour les noms de
  460. * sauvegarde
  461. * Exemples :
  462. * 'MESSAGE' ('CHAINE' (formar 2.9e5 1)) ;
  463. * 2.9E5
  464. * 'MESSAGE' ('CHAINE' (formar -2.9e5 1)) ;
  465. * -2.9E5
  466. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 1)) ;
  467. * 2.9E-5
  468. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 1)) ;
  469. * -2.9E-5
  470. * 'MESSAGE' ('CHAINE' (formar 2.9 1)) ;
  471. * 2.9
  472. * 'MESSAGE' ('CHAINE' (formar -2.9 1)) ;
  473. * -2.9
  474. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  475. * 0
  476. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  477. * 0
  478. * 'MESSAGE' ('CHAINE' (formar 2.9e5 0)) ;
  479. * 3E5
  480. * 'MESSAGE' ('CHAINE' (formar -2.9e5 0)) ;
  481. * -3E5
  482. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 0)) ;
  483. * 3E-5
  484. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 0)) ;
  485. * -3E-5
  486. * 'MESSAGE' ('CHAINE' (formar 2.9 0)) ;
  487. * 3
  488. * 'MESSAGE' ('CHAINE' (formar -2.9 0)) ;
  489. * -3
  490. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  491. * 0
  492. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  493. * 0
  494. *
  495. *
  496. *
  497. * LANGAGE : GIBIANE-CAST3M
  498. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  499. * mél : gounand@semt2.smts.cea.fr
  500. **********************************************************************
  501. * VERSION : v1, 18/02/2003, version initiale
  502. * HISTORIQUE : v1, 18/02/2003, création
  503. * HISTORIQUE :
  504. * HISTORIQUE :
  505. ************************************************************************
  506. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  507. * en cas de modification de ce sous-programme afin de faciliter
  508. * la maintenance !
  509. ************************************************************************
  510. *
  511. *
  512. 'DEBPROC' FORMAR ;
  513. 'ARGUMENT' fl*'FLOTTANT' ;
  514. 'ARGUMENT' vir/'ENTIER ' ;
  515. 'SI' ('NON' ('EXISTE' vir)) ;
  516. vir = 1 ;
  517. 'SINON' ;
  518. 'SI' ('<' vir 0) ;
  519. 'ERREUR' 'fournir un entier positif' ;
  520. 'FINSI' ;
  521. 'FINSI' ;
  522. 'SI' ('<' ('ABS' fl) 10.D-100) ;
  523. chfl = 'CHAINE' '0' ;
  524. 'SINON' ;
  525. *! sans le 1.D-10, ca ne fonctionne pas
  526. *! qd on entre pile poil une puissance de 10
  527. lfl = LOG10 ('ABS' fl) ;
  528. * lfl = '+' (LOG10 ('ABS' fl)) 1.D-10 ;
  529. slfl = 'SIGNE' ('ENTIER' lfl) ;
  530. 'SI' ('EGA' slfl 1) ;
  531. elfl = 'ENTIER' lfl ;
  532. 'SINON' ;
  533. elfl = '-' ('ENTIER' lfl) 1 ;
  534. 'FINSI' ;
  535. man = '/' fl ('**' 10.D0 elfl) ;
  536. *
  537. * Une verrue pour des histoires de précision...
  538. *
  539. 'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ;
  540. man = '/' man 10.D0 ;
  541. elfl = '+' elfl 1 ;
  542. 'FINSI' ;
  543. *
  544. sman = 'SIGNE' man ;
  545. 'SI' ('EGA' sman 1) ;
  546. fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ;
  547. 'SINON' ;
  548. fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ;
  549. 'FINSI' ;
  550. 'SI' ('NEG' vir 0) ;
  551. 'SI' ('NEG' elfl 0) ;
  552. chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ;
  553. 'SINON' ;
  554. chfl = 'CHAINE' 'FORMAT' fman man ;
  555. 'FINSI' ;
  556. 'SINON' ;
  557. man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ;
  558. 'SI' ('NEG' elfl 0) ;
  559. chfl = 'CHAINE' man2 'E' elfl ;
  560. 'SINON' ;
  561. chfl = 'CHAINE' man2 ;
  562. 'FINSI' ;
  563. 'FINSI' ;
  564. 'FINSI' ;
  565. 'RESPRO' chfl ;
  566. *
  567. * End of procedure file FORMAR
  568. *
  569. 'FINPROC' ;
  570. *ENDPROCEDUR formar
  571. *BEGINPROCEDUR log10
  572. ************************************************************************
  573. * NOM : LOG10
  574. * DESCRIPTION : Log_10
  575. *
  576. *
  577. *
  578. * LANGAGE : GIBIANE-CAST3M
  579. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  580. * mél : gounand@semt2.smts.cea.fr
  581. **********************************************************************
  582. * VERSION : v1, 18/02/2003, version initiale
  583. * HISTORIQUE : v1, 18/02/2003, création
  584. * HISTORIQUE :
  585. * HISTORIQUE :
  586. ************************************************************************
  587. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  588. * en cas de modification de ce sous-programme afin de faciliter
  589. * la maintenance !
  590. ************************************************************************
  591. *
  592. *
  593. 'DEBPROC' LOG10 ;
  594. 'REPETER' bouc ;
  595. ok = FAUX ;
  596. 'ARGUMENT' fl/'FLOTTANT' ;
  597. 'ARGUMENT' lr/'LISTREEL' ;
  598. 'ARGUMENT' cp/'CHPOINT ' ;
  599. 'ARGUMENT' cm/'MCHAML ' ;
  600. 'SI' ('EXISTE' fl) ;
  601. ok = VRAI ;
  602. 'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ;
  603. 'FINSI' ;
  604. 'SI' ('EXISTE' lr) ;
  605. ok = VRAI ;
  606. 'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ;
  607. 'FINSI' ;
  608. 'SI' ('EXISTE' cp) ;
  609. ok = VRAI ;
  610. 'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ;
  611. 'FINSI' ;
  612. 'SI' ('EXISTE' cm) ;
  613. ok = VRAI ;
  614. 'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ;
  615. 'FINSI' ;
  616. 'SI' ('NON' ok) ;
  617. 'QUITTER' bouc ;
  618. 'FINSI' ;
  619. 'FIN' bouc ;
  620. *
  621. * End of procedure file LOG10
  622. *
  623. 'FINPROC' ;
  624. *ENDPROCEDUR log10
  625. 'OPTION' 'ECHO' 1 ;
  626. ************************************************************************
  627. * NOM : NLIN_LAPNCER
  628. * DESCRIPTION : Vérification de NLIN : on résout un laplacien sur un
  629. * bout de cercle de rayon R en 2D. La solution exacte
  630. * est une fonction linéaire de l'abscisse curviligne
  631. * s = R \theta.
  632. * On obtient cette solution exacte par le calcul.
  633. * On vérifie également les ordres de convergence sur la
  634. * longueur du bout de cercle et sur le champ de vecteur
  635. * tangent à ce bout de cercle.
  636. *
  637. * LANGAGE : GIBIANE-CAST3M
  638. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  639. * mél : gounand@semt2.smts.cea.fr
  640. **********************************************************************
  641. * VERSION : v1, 25/10/2006, version initiale
  642. * HISTORIQUE : v1, 25/10/2006, création
  643. * HISTORIQUE :
  644. * HISTORIQUE :
  645. ************************************************************************
  646. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  647. * en cas de modification de ce sous-programme afin de faciliter
  648. * la maintenance !
  649. ************************************************************************
  650. *
  651. *
  652. interact = FAUX ;
  653. graph = FAUX ;
  654. *interact = VRAI ;
  655. *graph = VRAI ;
  656. 'OPTION' 'DIME' 2 ;
  657. 'SI' ('NON' interact) ;
  658. 'OPTION' 'TRAC' 'PS' 'ECHO' 0 ;
  659. 'SINON' ;
  660. 'OPTION' 'TRAC' 'X' 'ECHO' 1 ;
  661. 'FINSI' ;
  662. *
  663. * Paramètres
  664. *
  665. ldisc = 'MOTS' 'LINE' 'QUAI' ;
  666. tordlon = 'TABLE' ;
  667. tordvec = 'TABLE' ;
  668. tordsol = 'TABLE' ;
  669. ldens = 'PROG' 2.D-1 1.D-1 5.D-2 ;
  670. rayo = '**' 2. 0.5D0 ;
  671. tabev = 'TABLE' ;
  672. tabt = 'TABLE' ;
  673. itab = 0 ;
  674. ok = VRAI ;
  675. *
  676. * Boucle sur les discrétisations
  677. *
  678. 'REPETER' iidisc ('DIME' ldisc) ;
  679. idisc = &iidisc ;
  680. disc = 'EXTRAIRE' ldisc idisc ;
  681. tordlon . disc = 'TABLE' ;
  682. tordvec . disc = 'TABLE' ;
  683. discg = disc ;
  684. disct = disc ;
  685. 'SI' ('EGA' disc 'LINE') ;
  686. 'OPTION' 'ELEM' 'QUA4' ;
  687. 'SINON' ;
  688. 'OPTION' 'ELEM' 'QUA8' ;
  689. 'FINSI' ;
  690. lerrlon = 'PROG' ;
  691. lerrvec = 'PROG' ;
  692. lerrsol = 'PROG' ;
  693. 'REPETER' iidens ('DIME' ldens) ;
  694. idens = &iidens ;
  695. vdens = 'EXTRAIRE' ldens idens ;
  696. 'DENS' vdens ;
  697. tit = 'CHAINE' 'Discretisation :' disc ' Densité = ' vdens ;
  698. 'SAUTER' 1 'LIGNE' ;
  699. 'MESSAGE' tit ;
  700. * Maillage
  701. p0 = 'POIN' 0. 0. ;
  702. pA = POINTCYL rayo 0. ;
  703. pB = POINTCYL rayo 45. ;
  704. mt = 'CERCLE' pA p0 pB ;
  705. _mt = 'CHANGER' mt 'QUAF' ;
  706. * 1 : calcul de la longueur du segment
  707. ch1 = 'MANUEL' 'CHPO' mt 1 'T' 1. ;
  708. gmas = GMASS _mt discg 'T' disct 'Q' disct 1. ;
  709. lonana = '*' ('/' PI 4.D0) rayo ;
  710. lon = xtmx ch1 gmas ;
  711. 'MESSAGE' ('CHAINE' 'Longueur calculee =' lon) ;
  712. 'MESSAGE' ('CHAINE' 'Longueur attendue =' lonana) ;
  713. errlon = 'ABS' ('-' lon lonana) ;
  714. 'MESSAGE' ('CHAINE' 'Erreur sur la longueur =' errlon) ;
  715. lerrlon = 'ET' lerrlon ('PROG' errlon) ;
  716. * 2 : calcul du vecteur tangent
  717. xmt ymt = 'COORDONNEE' mt ;
  718. ang = 'ATG' ymt xmt ;
  719. cvecana = '+' ('NOMC' 'UX' ('*' ('SIN' ang) -1.D0))
  720. ('NOMC' 'UY' ('COS' ang)) ;
  721. * 2.1 : calcul de l'abscisse curviligne
  722. mat = GLAPN _mt discg 'T' disct 'Q' disct 1. ;
  723. mblo = 'BLOQUE' 'T' (pA 'ET' pB) ;
  724. cblo = '+' ('MANUEL' 'CHPO' pA 1 'T' 0.)
  725. ('MANUEL' 'CHPO' pB 1 'T' lon) ;
  726. fblo = 'DEPIMPOSE' mblo cblo ;
  727. *
  728. mtot = mat 'ET' mblo ;
  729. ftot = fblo ;
  730. solu = 'RESOUD' mtot ftot ;
  731. evsol = 'EVOL' 'CHPO' solu 'T' mt ;
  732. * 'DESSIN' evsol ;
  733. valt = 'EXCO' 'T' solu 'T' ;
  734. * 2.2 : vecteur tangent unitaire
  735. mux = GMASS _mt discg 'UX' disct 'FX' disct 1. ;
  736. muy = GMASS _mt discg 'UY' disct 'FY' disct 1. ;
  737. mtot = mux 'ET' muy ;
  738. *
  739. msmb = GGRAD _mt discg disct disct 1. ;
  740. fsmb = '*' msmb ('NOMC' 'LX' valt) ;
  741. *
  742. vvt = 'RESOUD' mtot fsmb ;
  743. 'SI' graph ;
  744. vvec = 'VECTEUR' vvt 'DEPL' 'JAUN' ;
  745. vvec2 = 'VECTEUR' cvecana 'DEPL' 'ROUG' ;
  746. 'TRACER' ('ET' vvec vvec2) mt ;
  747. 'FINSI' ;
  748. cvec = 'EXCO' ('MOTS' 'UX' 'UY') vvt ;
  749. * 2.3 : calcul de l'erreur
  750. errvec = '**' (xtmx ('-' cvec cvecana) mtot) 0.5D0 ;
  751. 'MESSAGE' ('CHAINE' 'Erreur sur le vecteur tangent =' errvec) ;
  752. lerrvec = 'ET' lerrvec ('PROG' errvec) ;
  753. * 3 : calcul d'une solution analytique (quasi-pareil que 2.1)
  754. *
  755. xmt ymt = 'COORDONNEE' mt ;
  756. solana = 'NOMC' 'T' ('/' ('ATG' ymt xmt) 45.D0) ;
  757. mat = GLAPN _mt discg 'T' disct 'Q' disct 1. ;
  758. mblo = 'BLOQUE' 'T' (pA 'ET' pB) ;
  759. cblo = '+' ('MANUEL' 'CHPO' pA 1 'T' 0.)
  760. ('MANUEL' 'CHPO' pB 1 'T' 1.) ;
  761. fblo = 'DEPIMPOSE' mblo cblo ;
  762. *
  763. mtot = mat 'ET' mblo ;
  764. ftot = fblo ;
  765. solu = 'RESOUD' mtot ftot ;
  766. sol = 'EXCO' 'T' solu 'T' ;
  767. matm = GMASS _mt discg 'T' disct 'Q' disct 1. ;
  768. errsol = '**' (xtmx ('-' sol solana) matm) 0.5D0 ;
  769. 'MESSAGE' ('CHAINE' 'Erreur sur la sol. analytique =' errsol) ;
  770. * Vérification qu'on obtient la solution exacte
  771. test = ('<' errsol 1.D-10) ;
  772. ok = ok 'ET' test ;
  773. 'SI' ('NON' test) ;
  774. 'MESSAGE' ('CHAINE' 'On aurait du avoir errsol=' errsol
  775. ' < 1.D-10') ;
  776. 'FINSI' ;
  777. lerrsol = 'ET' lerrsol ('PROG' errsol) ;
  778. 'FIN' iidens ;
  779. * Calcul des ordres
  780. lh lerrlon lerrvec lerrsol = LOG10 ldens lerrlon lerrvec lerrsol ;
  781. evlon = 'EVOL' 'MANU' lh lerrlon ;
  782. cpl dummy = @POMI evlon 1 'IDEM' ;
  783. ord = cpl . 1 ;
  784. tordlon . disc = ord ;
  785. itab = '+' itab 1 ;
  786. tabev . itab = evlon ;
  787. tabt . itab = 'CHAINE' 'lon;' disc ';ord=' (formar ord 1) ;
  788. *
  789. evvec = 'EVOL' 'MANU' lh lerrvec ;
  790. cpl dummy = @POMI evvec 1 'IDEM' ;
  791. ord = cpl . 1 ;
  792. tordvec . disc = ord ;
  793. itab = '+' itab 1 ;
  794. tabev . itab = evvec ;
  795. tabt . itab = 'CHAINE' 'vec;' disc ';ord=' (formar ord 1) ;
  796. *
  797. * On ne calcule pas l'ordre pour la solution car on a la solution exacte.
  798. *
  799. * evsol = 'EVOL' 'MANU' lh lerrsol ;
  800. * cpl dummy = @POMI evsol 1 'IDEM' ;
  801. * ord = cpl . 1 ;
  802. * itab = '+' itab 1 ;
  803. * tabev . itab = evsol ;
  804. * tabt . itab = 'CHAINE' 'sol;id=' idisc ';ord=' (formar ord 1) ;
  805. 'FIN' iidisc ;
  806. * Tracés
  807. 'SI' graph ;
  808. evt = @STBL tabev ;
  809. tit = 'CHAINE' 'Ordre de convergence sur : longueur, vect. tangent' ;
  810. tix = 'CHAINE' 'Log10 h' ;
  811. tiy = 'CHAINE' 'Log10 err' ;
  812. DESSEVOL evt tabt tit tix tiy ;
  813. 'FINSI' ;
  814. * Vérification des ordres
  815. valvoul = 1.5 ;
  816. valobt = tordlon . 'LINE' ;
  817. test = valobt '>' valvoul ;
  818. ok = ok 'ET' test ;
  819. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur la longueur'
  820. '(discretisation lineaire)=' valobt) ;
  821. 'SI' ('NON' test) ;
  822. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  823. 'FINSI' ;
  824. *
  825. valvoul = 0.5 ;
  826. valobt = tordvec . 'LINE' ;
  827. test = valobt '>' valvoul ;
  828. ok = ok 'ET' test ;
  829. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur le vecteur tangent '
  830. '(discretisation lineaire)=' valobt) ;
  831. 'SI' ('NON' test) ;
  832. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  833. 'FINSI' ;
  834. *
  835. valvoul = 2.5 ;
  836. valobt = tordlon . 'QUAI' ;
  837. test = valobt '>' valvoul ;
  838. ok = ok 'ET' test ;
  839. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur la longueur'
  840. '(discretisation quadratique)=' valobt) ;
  841. 'SI' ('NON' test) ;
  842. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  843. 'FINSI' ;
  844. *
  845. valvoul = 1.5 ;
  846. valobt = tordvec . 'QUAI' ;
  847. test = valobt '>' valvoul ;
  848. ok = ok 'ET' test ;
  849. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur le vecteur tangent '
  850. '(discretisation quadratique)=' valobt) ;
  851. 'SI' ('NON' test) ;
  852. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  853. 'FINSI' ;
  854. *
  855. 'SI' ('NON' ok) ;
  856. 'MESSAGE' ('CHAINE' 'Il y a eu des erreurs') ;
  857. 'ERREUR' 5 ;
  858. 'SINON' ;
  859. 'MESSAGE' ('CHAINE' 'Tout sest bien passe !') ;
  860. 'FINSI' ;
  861. *
  862. 'SI' interact ;
  863. 'OPTION' 'DONN' 5 ;
  864. 'FINSI' ;
  865. *
  866. * End of dgibi file NLIN_LAPNCER
  867. *
  868. 'FIN' ;
  869.  
  870.  
  871.  
  872.  
  873.  

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