Télécharger nlin_lapnssphe_axi.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : nlin_lapnssphe_axi.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 formar
  321. ************************************************************************
  322. * NOM : FORMAR
  323. * DESCRIPTION : formate un réel de facon courte
  324. * pratique pour les noms de
  325. * sauvegarde
  326. * Exemples :
  327. * 'MESSAGE' ('CHAINE' (formar 2.9e5 1)) ;
  328. * 2.9E5
  329. * 'MESSAGE' ('CHAINE' (formar -2.9e5 1)) ;
  330. * -2.9E5
  331. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 1)) ;
  332. * 2.9E-5
  333. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 1)) ;
  334. * -2.9E-5
  335. * 'MESSAGE' ('CHAINE' (formar 2.9 1)) ;
  336. * 2.9
  337. * 'MESSAGE' ('CHAINE' (formar -2.9 1)) ;
  338. * -2.9
  339. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  340. * 0
  341. * 'MESSAGE' ('CHAINE' (formar 0 1)) ;
  342. * 0
  343. * 'MESSAGE' ('CHAINE' (formar 2.9e5 0)) ;
  344. * 3E5
  345. * 'MESSAGE' ('CHAINE' (formar -2.9e5 0)) ;
  346. * -3E5
  347. * 'MESSAGE' ('CHAINE' (formar 2.9e-5 0)) ;
  348. * 3E-5
  349. * 'MESSAGE' ('CHAINE' (formar -2.9e-5 0)) ;
  350. * -3E-5
  351. * 'MESSAGE' ('CHAINE' (formar 2.9 0)) ;
  352. * 3
  353. * 'MESSAGE' ('CHAINE' (formar -2.9 0)) ;
  354. * -3
  355. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  356. * 0
  357. * 'MESSAGE' ('CHAINE' (formar 0 0)) ;
  358. * 0
  359. *
  360. *
  361. *
  362. * LANGAGE : GIBIANE-CAST3M
  363. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  364. * mél : gounand@semt2.smts.cea.fr
  365. **********************************************************************
  366. * VERSION : v1, 18/02/2003, version initiale
  367. * HISTORIQUE : v1, 18/02/2003, création
  368. * HISTORIQUE :
  369. * HISTORIQUE :
  370. ************************************************************************
  371. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  372. * en cas de modification de ce sous-programme afin de faciliter
  373. * la maintenance !
  374. ************************************************************************
  375. *
  376. *
  377. 'DEBPROC' FORMAR ;
  378. 'ARGUMENT' fl*'FLOTTANT' ;
  379. 'ARGUMENT' vir/'ENTIER ' ;
  380. 'SI' ('NON' ('EXISTE' vir)) ;
  381. vir = 1 ;
  382. 'SINON' ;
  383. 'SI' ('<' vir 0) ;
  384. 'ERREUR' 'fournir un entier positif' ;
  385. 'FINSI' ;
  386. 'FINSI' ;
  387. 'SI' ('<' ('ABS' fl) 10.D-100) ;
  388. chfl = 'CHAINE' '0' ;
  389. 'SINON' ;
  390. *! sans le 1.D-10, ca ne fonctionne pas
  391. *! qd on entre pile poil une puissance de 10
  392. lfl = LOG10 ('ABS' fl) ;
  393. * lfl = '+' (LOG10 ('ABS' fl)) 1.D-10 ;
  394. slfl = 'SIGNE' ('ENTIER' lfl) ;
  395. 'SI' ('EGA' slfl 1) ;
  396. elfl = 'ENTIER' lfl ;
  397. 'SINON' ;
  398. elfl = '-' ('ENTIER' lfl) 1 ;
  399. 'FINSI' ;
  400. man = '/' fl ('**' 10.D0 elfl) ;
  401. *
  402. * Une verrue pour des histoires de précision...
  403. *
  404. 'SI' ('EGA' man 10.D0 ('**' 10.D0 ('*' vir -1.D0))) ;
  405. man = '/' man 10.D0 ;
  406. elfl = '+' elfl 1 ;
  407. 'FINSI' ;
  408. *
  409. sman = 'SIGNE' man ;
  410. 'SI' ('EGA' sman 1) ;
  411. fman = 'CHAINE' '(F' ('+' vir 2) '.0' vir ')' ;
  412. 'SINON' ;
  413. fman = 'CHAINE' '(F' ('+' vir 3) '.0' vir ')' ;
  414. 'FINSI' ;
  415. 'SI' ('NEG' vir 0) ;
  416. 'SI' ('NEG' elfl 0) ;
  417. chfl = 'CHAINE' 'FORMAT' fman man 'E' elfl ;
  418. 'SINON' ;
  419. chfl = 'CHAINE' 'FORMAT' fman man ;
  420. 'FINSI' ;
  421. 'SINON' ;
  422. man2 = 'ENTIER' ('+' man ('*' 0.5D0 sman)) ;
  423. 'SI' ('NEG' elfl 0) ;
  424. chfl = 'CHAINE' man2 'E' elfl ;
  425. 'SINON' ;
  426. chfl = 'CHAINE' man2 ;
  427. 'FINSI' ;
  428. 'FINSI' ;
  429. 'FINSI' ;
  430. 'RESPRO' chfl ;
  431. *
  432. * End of procedure file FORMAR
  433. *
  434. 'FINPROC' ;
  435. *ENDPROCEDUR formar
  436. *BEGINPROCEDUR log10
  437. ************************************************************************
  438. * NOM : LOG10
  439. * DESCRIPTION : Log_10
  440. *
  441. *
  442. *
  443. * LANGAGE : GIBIANE-CAST3M
  444. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  445. * mél : gounand@semt2.smts.cea.fr
  446. **********************************************************************
  447. * VERSION : v1, 18/02/2003, version initiale
  448. * HISTORIQUE : v1, 18/02/2003, création
  449. * HISTORIQUE :
  450. * HISTORIQUE :
  451. ************************************************************************
  452. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  453. * en cas de modification de ce sous-programme afin de faciliter
  454. * la maintenance !
  455. ************************************************************************
  456. *
  457. *
  458. 'DEBPROC' LOG10 ;
  459. 'REPETER' bouc ;
  460. ok = FAUX ;
  461. 'ARGUMENT' fl/'FLOTTANT' ;
  462. 'ARGUMENT' lr/'LISTREEL' ;
  463. 'ARGUMENT' cp/'CHPOINT ' ;
  464. 'ARGUMENT' cm/'MCHAML ' ;
  465. 'SI' ('EXISTE' fl) ;
  466. ok = VRAI ;
  467. 'RESPRO' ('/' ('LOG' fl) ('LOG' 10.D0)) ;
  468. 'FINSI' ;
  469. 'SI' ('EXISTE' lr) ;
  470. ok = VRAI ;
  471. 'RESPRO' ('/' ('LOG' lr) ('LOG' 10.D0)) ;
  472. 'FINSI' ;
  473. 'SI' ('EXISTE' cp) ;
  474. ok = VRAI ;
  475. 'RESPRO' ('/' ('LOG' cp) ('LOG' 10.D0)) ;
  476. 'FINSI' ;
  477. 'SI' ('EXISTE' cm) ;
  478. ok = VRAI ;
  479. 'RESPRO' ('/' ('LOG' cm) ('LOG' 10.D0)) ;
  480. 'FINSI' ;
  481. 'SI' ('NON' ok) ;
  482. 'QUITTER' bouc ;
  483. 'FINSI' ;
  484. 'FIN' bouc ;
  485. *
  486. * End of procedure file LOG10
  487. *
  488. 'FINPROC' ;
  489. *ENDPROCEDUR log10
  490. 'OPTION' 'ECHO' 1 ;
  491. ************************************************************************
  492. * NOM : NLIN_LAPNSSPHE_AXI
  493. * DESCRIPTION : Vérification de NLIN : on résout un laplacien sur un
  494. * bout de surface de sphère de rayon R en 2D axi. La
  495. * solution exacte est une fonction du type :
  496. * a * ln (tan (\theta / 2)) + b
  497. * Il y a une singularité en theta = 0. Si on veut observer
  498. * l'ordre correct pour theta petit, il faut bien raffiner.
  499. *
  500. * c'est une primitive de a / sin (\theta).
  501. * On vérifie les ordres de convergence sur cette solution
  502. * et sur la surface calculée du bout de sphère.
  503. *
  504. * LANGAGE : GIBIANE-CAST3M
  505. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  506. * mél : gounand@semt2.smts.cea.fr
  507. **********************************************************************
  508. * VERSION : v1, 23/10/2006, version initiale
  509. * HISTORIQUE : v1, 23/10/2006, création
  510. * HISTORIQUE :
  511. * HISTORIQUE :
  512. ************************************************************************
  513. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  514. * en cas de modification de ce sous-programme afin de faciliter
  515. * la maintenance !
  516. ************************************************************************
  517. *
  518. *
  519. interact = FAUX ;
  520. graph = FAUX ;
  521. *interact = VRAI ;
  522. *graph = VRAI ;
  523. 'OPTION' 'DIME' 2 'MODE' 'AXIS' ;
  524. 'SI' ('NON' interact) ;
  525. 'OPTION' 'TRAC' 'PS' 'ECHO' 0 ;
  526. 'SINON' ;
  527. 'OPTION' 'TRAC' 'X' 'ECHO' 1 ;
  528. 'FINSI' ;
  529. *
  530. * Paramètres
  531. *
  532. ldisc = 'MOTS' 'LINE' 'QUAI' ;
  533. ttamin = 5. ;
  534. ttaminr = ttamin '*' ('/' PI 180.) ;
  535. tordsur = 'TABLE' ;
  536. tordsol = 'TABLE' ;
  537. ldens = 'PROG' 2.D-1 1.D-1 5.D-2 ;
  538. rayo = '**' 2. 0.5D0 ;
  539. tabev = 'TABLE' ;
  540. tabt = 'TABLE' ;
  541. itab = 0 ;
  542. ok = VRAI ;
  543. *
  544. * Boucle sur les discrétisations
  545. *
  546. 'REPETER' iidisc ('DIME' ldisc) ;
  547. idisc = &iidisc ;
  548. disc = 'EXTRAIRE' ldisc idisc ;
  549. tordsur . disc = 'TABLE' ;
  550. tordsol . disc = 'TABLE' ;
  551. discg = disc ;
  552. disct = disc ;
  553. 'SI' ('EGA' disc 'LINE') ;
  554. 'OPTION' 'ELEM' 'QUA4' ;
  555. 'SINON' ;
  556. 'OPTION' 'ELEM' 'QUA8' ;
  557. 'FINSI' ;
  558. lerrsur = 'PROG' ;
  559. lerrsol = 'PROG' ;
  560. 'REPETER' iidens ('DIME' ldens) ;
  561. idens = &iidens ;
  562. vdens = 'EXTRAIRE' ldens idens ;
  563. 'DENS' vdens ;
  564. tit = 'CHAINE' 'Discretisation :' disc ' Densité = ' vdens ;
  565. 'SAUTER' 1 'LIGNE' ;
  566. 'MESSAGE' tit ;
  567. * Maillage
  568. p0 = 'POIN' 0. 0. ;
  569. pA = POINTCYL rayo 0. ;
  570. pB = POINTCYL rayo ('-' 90. ttamin) ;
  571. mt = 'CERCLE' pB p0 pA ;
  572. _mt = 'CHANGER' mt 'QUAF' ;
  573. * 1 : calcul de la surface du bout de sphère
  574. ch1 = 'MANUEL' 'CHPO' mt 1 'T' 1. ;
  575. gmas = GMASS _mt discg 'T' disct 'Q' disct 1. ;
  576. surana = 2. '*' PI '*' rayo '*' rayo '*' ('COS' ttamin) ;
  577. sur = xtmx ch1 gmas ;
  578. 'MESSAGE' ('CHAINE' 'Surface calculee =' sur) ;
  579. 'MESSAGE' ('CHAINE' 'Surface attendue =' surana) ;
  580. errsur = 'ABS' ('-' sur surana) ;
  581. 'MESSAGE' ('CHAINE' 'Erreur sur la surface =' errsur) ;
  582. lerrsur = 'ET' lerrsur ('PROG' errsur) ;
  583. * 2 : calcul d'une solution analytique
  584. rmt zmt = 'COORDONNEE' mt ;
  585. tta = 'ATG' rmt zmt ;
  586. ttamsur2 = '/' ttamin 2. ;
  587. coef = 'LOG' ('/' ('SIN' ttamsur2) ('COS' ttamsur2)) ;
  588. ttasur2 = '/' tta 2.D0 ;
  589. solana = '/' ('LOG' ('/' ('SIN' ttasur2) ('COS' ttasur2))) coef ;
  590. solana = 'NOMC' 'T' solana ;
  591. mat = GLAPN _mt discg 'T' disct 'Q' disct 1. ;
  592. mblo = 'BLOQUE' 'T' (pA 'ET' pB) ;
  593. cblo = '+' ('MANUEL' 'CHPO' pA 1 'T' 0.)
  594. ('MANUEL' 'CHPO' pB 1 'T' 1.) ;
  595. fblo = 'DEPIMPOSE' mblo cblo ;
  596. *
  597. mtot = mat 'ET' mblo ;
  598. ftot = fblo ;
  599. solu = 'RESOUD' mtot ftot ;
  600. sol = 'EXCO' 'T' solu 'T' ;
  601. matm = GMASS _mt discg 'T' disct 'Q' disct 1. ;
  602. errsol = '**' (xtmx ('-' sol solana) matm) 0.5D0 ;
  603. 'MESSAGE' ('CHAINE' 'Erreur sur la sol. analytique =' errsol) ;
  604. 'SI' graph ;
  605. tt = 'TABLE' ;
  606. evana = 'EVOL' 'CHPO' solana 'T' mt ;
  607. tt . 1 = 'CHAINE' 'Exact' ;
  608. ev = 'EVOL' 'CHPO' sol 'T' mt ;
  609. tt . 2 = 'CHAINE' 'Approchée' ;
  610. evt = evana 'ET' ev ;
  611. tit = 'CHAINE' 'Solution du laplacien sur le bout de '
  612. 'surface de sphere' ;
  613. tix = 'CHAINE' 'theta' ;
  614. tiy = 'CHAINE' 'T' ;
  615. DESSEVOL evt tt tit tix tiy ;
  616. 'FINSI' ;
  617. lerrsol = 'ET' lerrsol ('PROG' errsol) ;
  618. 'FIN' iidens ;
  619. * Calcul des ordres
  620. lh lerrsur lerrsol = LOG10 ldens lerrsur lerrsol ;
  621. evsur = 'EVOL' 'MANU' lh lerrsur ;
  622. cpl dummy = @POMI evsur 1 'IDEM' ;
  623. ord = cpl . 1 ;
  624. tordsur . disc = ord ;
  625. itab = '+' itab 1 ;
  626. tabev . itab = evsur ;
  627. tabt . itab = 'CHAINE' 'sur;' disc ';ord=' (formar ord 1) ;
  628. *
  629. evsol = 'EVOL' 'MANU' lh lerrsol ;
  630. cpl dummy = @POMI evsol 1 'IDEM' ;
  631. ord = cpl . 1 ;
  632. tordsol . disc = ord ;
  633. itab = '+' itab 1 ;
  634. tabev . itab = evsol ;
  635. tabt . itab = 'CHAINE' 'sol;' disc ';ord=' (formar ord 1) ;
  636. 'FIN' iidisc ;
  637. * Tracés
  638. 'SI' graph ;
  639. evt = @STBL tabev ;
  640. tit = 'CHAINE' 'Ordre de convergence sur : surface, solution du '
  641. 'laplacien' ;
  642. tix = 'CHAINE' 'Log10 h' ;
  643. tiy = 'CHAINE' 'Log10 err' ;
  644. DESSEVOL evt tabt tit tix tiy ;
  645. 'FINSI' ;
  646. * Vérification des ordres
  647. valvoul = 1.5 ;
  648. valobt = tordsur . 'LINE' ;
  649. test = valobt '>' valvoul ;
  650. ok = ok 'ET' test ;
  651. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur la mesure de la surface'
  652. '(discretisation lineaire)=' valobt) ;
  653. 'SI' ('NON' test) ;
  654. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  655. 'FINSI' ;
  656. *
  657. valvoul = 1.5 ;
  658. valobt = tordsol . 'LINE' ;
  659. test = valobt '>' valvoul ;
  660. ok = ok 'ET' test ;
  661. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur la sol. du laplacien '
  662. '(discretisation lineaire)=' valobt) ;
  663. 'SI' ('NON' test) ;
  664. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  665. 'FINSI' ;
  666. *
  667. valvoul = 2.5 ;
  668. valobt = tordsur . 'QUAI' ;
  669. test = valobt '>' valvoul ;
  670. ok = ok 'ET' test ;
  671. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur la mesure de la surface'
  672. '(discretisation quadratique)=' valobt) ;
  673. 'SI' ('NON' test) ;
  674. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  675. 'FINSI' ;
  676. *
  677. valvoul = 2.5 ;
  678. valobt = tordsol . 'QUAI' ;
  679. test = valobt '>' valvoul ;
  680. ok = ok 'ET' test ;
  681. 'MESSAGE' ('CHAINE' 'Ordre de convergence sur la sol. du laplacien '
  682. '(discretisation quadratique)=' valobt) ;
  683. 'SI' ('NON' test) ;
  684. 'MESSAGE' ('CHAINE' 'On aurait voulu avoir :' valvoul) ;
  685. 'FINSI' ;
  686. *
  687. 'SI' ('NON' ok) ;
  688. 'MESSAGE' ('CHAINE' 'Il y a eu des erreurs') ;
  689. 'ERREUR' 5 ;
  690. 'SINON' ;
  691. 'MESSAGE' ('CHAINE' 'Tout sest bien passe !') ;
  692. 'FINSI' ;
  693. *
  694. 'SI' interact ;
  695. 'OPTION' 'DONN' 5 ;
  696. 'FINSI' ;
  697. *
  698. * End of dgibi file NLIN_LAPNSSPHE_AXI
  699. *
  700. 'FIN' ;
  701.  
  702.  
  703.  
  704.  
  705.  

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