Télécharger gravite.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : gravite.dgibi
  2. 'OPTI' 'ECHO' 0 ;
  3. ************************************************************************
  4. * NOM : GRAVITE
  5. * DESCRIPTION : Cas-test gravité servant à tester la méthode
  6. * méthode de projection incrémentale.
  7. * On doit trouver vitesse nulle et pression
  8. * hydrostatique
  9. *
  10. * LANGAGE : GIBIANE-CAST3M
  11. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SFME/LTMF)
  12. * mél : gounand@semt2.smts.cea.fr
  13. **********************************************************************
  14. * VERSION : v1, 21/11/2007, version initiale
  15. * HISTORIQUE : v1, 21/11/2007, création
  16. * HISTORIQUE :
  17. * HISTORIQUE :
  18. ************************************************************************
  19. * Prière de PRENDRE LE TEMPS de compléter les commentaires
  20. * en cas de modification de ce sous-programme afin de faciliter
  21. * la maintenance !
  22. ************************************************************************
  23. 'SAUTER' 2 'LIGNE' ;
  24. 'MESSAGE' ' Execution de gravite.dgibi' ;
  25. 'SAUTER' 2 'LIGNE' ;
  26. *
  27. interact = FAUX ;
  28. graph = FAUX ;
  29. *
  30. *
  31. * Procédure pour afficher la résultante d'un chpoint et de sa valeur
  32. * absolue (utile pour debugger sans lister le CHPOINT en question)
  33. *
  34. *'DEBPROC' HCHPO ;
  35. *'ARGUMENT' chp*'CHPOINT' ;
  36. *'ARGUMENT' tit*'MOT' ;
  37. **
  38. *achp = 'ABS' chp ;
  39. *nachp = 'MAXIMUM' achp ;
  40. **'SI' ('<EG' nachp 1.D-60) ; nachp= 1.D0 ; 'FINSI' ;
  41. *nachp = 1.D0 ;
  42. *cc = '/' achp nachp ;
  43. **hh = '+' cc 1. ;
  44. *hh = 'ABS' cc ;
  45. *rcc = 'RESULT' cc ;
  46. *rhh = 'RESULT' hh ;
  47. *mrrcc = 'MAXIMUM' rcc 'ABS' ;
  48. *'MESSAGE' ('CHAINE' 'Resultante de ' tit ' ' mrrcc) ;
  49. **'LISTE' rcc ;
  50. **'LISTE' rhh ;
  51. *'FINPROC' ;
  52.  
  53. *
  54. 'DEBP' TRACVP;
  55. 'ARGUMENT' RVX*'TABLE';
  56. rv = rvx . 'EQEX' ;
  57. un = rv . 'INCO' . 'UN' ;
  58. pn = rv . 'INCO' . 'PN' ;
  59. maxun = 'MAXIMUM' un 'ABS' ;
  60. echvit = 'MAXIMUM' ('PROG' maxun 1.D-10) ;
  61. cm = '/' 1. ('*' nmail echvit) ;
  62. vn = 'VECT' un cm 'UX' 'UY' 'JAUN' ;
  63. ppn = 'ELNO' $mt pn kpre ;
  64. tit = 'CHAINE' 'V-P echvit=' echvit ;
  65. 'TRACER' ppn mt cmt vn 'TITR' tit 'NCLK' ;
  66. as2 ama1 = 'KOPS' 'MATRIK';
  67. 'RESPRO' as2 ama1;
  68. 'FINP';
  69. *
  70. 'DEBP' MULDT ;
  71. 'ARGUMENT' RVX*'TABLE';
  72. rv = rvx . 'EQEX' ;
  73. fdt = rvx . 'ARG1' ;
  74. rv . 'INCO' . 'DT' = '*' (rv . 'INCO' . 'DT') fdt ;
  75. 'MESSAGE' ('CHAINE' 'dt = ' (rv . 'INCO' . 'DT')) ;
  76. as2 ama1 = 'KOPS' 'MATRIK';
  77. 'RESPRO' as2 ama1;
  78. 'FINP';
  79. *
  80. *
  81. 'OPTION' 'DIME' 2 ;
  82. 'SI' ('NON' interact) ;
  83. 'OPTION' 'TRAC' 'PS' ;
  84. 'SINON' ;
  85. 'OPTION' 'TRAC' 'X' ;
  86. 'FINSI' ;
  87. *
  88. * Paramètres du calcul
  89. *
  90. ttit = 'TABLE' ;
  91. tresu = 'TABLE' ;
  92. tresp = 'TABLE' ;
  93. tresd = 'TABLE' ;
  94. tymesh = 3 ;
  95. kvit = 'QUAF' ;
  96. kpre = 'CENTREP1' ;
  97. Re = 1. ;
  98. dtini = 0.01 ;
  99. fdt = 0.98 ;
  100. *fdt = 0.8 ;
  101. 'REPETER' imesh 2 ;
  102. 'SI' ('EGA' &imesh 1) ;
  103. tymesh = 3 ;
  104. 'MESSAGE' '**************' ;
  105. 'MESSAGE' 'Maillage carré' ;
  106. 'MESSAGE' '**************' ;
  107. 'FINSI' ;
  108. 'SI' ('EGA' &imesh 2) ;
  109. tymesh = 4 ;
  110. 'MESSAGE' '**************' ;
  111. 'MESSAGE' 'Maillage rond ' ;
  112. 'MESSAGE' '**************' ;
  113. 'FINSI' ;
  114. *
  115. * Maillage
  116. *
  117. 'SI' ('EGA' tymesh 1) ;
  118. 'OPTI' 'ELEM' 'QUA8' ;
  119. nmail = 2 ;
  120. 'FINSI' ;
  121. 'SI' ('EGA' tymesh 2) ;
  122. 'OPTI' 'ELEM' 'QUA8' ;
  123. nmail = 5 ;
  124. 'FINSI' ;
  125. 'SI' ('EGA' tymesh 3) ;
  126. 'OPTI' 'ELEM' 'TRI6' ;
  127. nmail = 10 ;
  128. 'FINSI' ;
  129. 'SI' ('EGA' tymesh 4) ;
  130. 'OPTI' 'ELEM' 'QUA8' 'MODE' 'PLAN' ;
  131. nmail = 10 ;
  132. 'FINSI' ;
  133. p0 = 0. 0. ; p1 = 1. 0. ;
  134. lt = 'DROIT' nmail p0 p1 ;
  135. mt = 'TRANSLATION' lt nmail (0. 1.) ;
  136. *mt = 'TRANSLATION' lt nmail (0. iang) ;
  137. cmt = 'CONTOUR' mt ;
  138. bas dro hau gau = 'COTE' mt ;
  139. 'SI' ('EGA' tymesh 4) ;
  140. xhau = 'COORDONNEE' 1 hau ;
  141. sxhau = '*' ('SIN' ('*' xhau 180.)) 0.2 ;
  142. cshau = 'NOMC' 'UY' sxhau ;
  143. 'FORME' cshau ;
  144. 'FINSI' ;
  145. 'SI' ('OU' ('EGA' tymesh 3) ('EGA' tymesh 4)) ;
  146. mt = 'SURFACE' cmt ;
  147. 'FINSI' ;
  148. *'TRACER' mt ;
  149. hau = 'INVERSE' hau ;
  150. _bas = 'CHANGER' bas 'QUAF' ; _dro = 'CHANGER' dro 'QUAF' ;
  151. _hau = 'CHANGER' hau 'QUAF' ; _gau = 'CHANGER' gau 'QUAF' ;
  152. _mt = 'CHANGER' mt 'QUAF' ;
  153. 'ELIMINATION' (_mt 'ET' _bas 'ET' _gau 'ET' _dro 'ET' _hau) 1.D-6 ;
  154. $mt = 'MODE' _mt 'NAVIER_STOKES' kvit ;
  155. $gau = 'MODE' _gau 'NAVIER_STOKES' kvit ;
  156. $dro = 'MODE' _dro 'NAVIER_STOKES' kvit ;
  157. $hau = 'MODE' _hau 'NAVIER_STOKES' kvit ;
  158. $bas = 'MODE' _bas 'NAVIER_STOKES' kvit ;
  159. mt = 'DOMA' $mt 'MAILLAGE' ; gau = 'DOMA' $gau 'MAILLAGE' ;
  160. dro = 'DOMA' $dro 'MAILLAGE' ; hau = 'DOMA' $hau 'MAILLAGE' ;
  161. bas = 'DOMA' $bas 'MAILLAGE' ;
  162. cmt = bas 'ET' dro 'ET' hau 'ET' gau ;
  163. mpres = 'DOMA' $mt kpre ;
  164. mp1 = 'ELEM' mpres 1 ;
  165. pp1 = 'POIN' mp1 1 ;
  166. * Calcul de pexact
  167. pexact = '-' ('COORDONNEE' 2 mpres) ('COORDONNEE' 2 pp1) ;
  168. *
  169. lok = VRAI ;
  170. *
  171. 'REPETER' iaxi 2 ;
  172. 'SAUTER' 2 'LIGN' ;
  173. 'SI' ('EGA' &iaxi 1) ;
  174. 'OPTI' 'MODE' 'PLAN' ;
  175. 'MESSAGE' ' *********' ;
  176. 'MESSAGE' ' Mode plan' ;
  177. 'MESSAGE' ' *********' ;
  178. 'FINSI' ;
  179. 'SI' ('EGA' &iaxi 2) ;
  180. 'OPTI' 'MODE' 'AXIS' ;
  181. 'MESSAGE' ' ********' ;
  182. 'MESSAGE' ' Mode axi' ;
  183. 'MESSAGE' ' ********' ;
  184. 'FINSI' ;
  185.  
  186. nmet = 5 ;
  187. 'REPETER' imet nmet ;
  188. *GOON'REPETER' imet 3 ;
  189. 'SAUTER' 1 'LIGN' ;
  190. 'SI' ('EGA' &imet 1) ;
  191. tit = 'CHAINE' 'Methode directe' ;
  192. mproj = FAUX ; lprec = FAUX ;
  193. 'FINSI' ;
  194. 'SI' ('EGA' &imet 2) ;
  195. tit = 'CHAINE' 'Methode projection' ;
  196. mproj = VRAI ; lprec = FAUX ; doubl = FAUX ;
  197. 'FINSI' ;
  198. 'SI' ('EGA' &imet 3) ;
  199. tit= 'CHAINE' 'Methode projection preconditionnee' ;
  200. mproj = VRAI ; lprec = VRAI ; doubl = FAUX ;
  201. 'FINSI' ;
  202. 'SI' ('EGA' &imet 4) ;
  203. tit = 'CHAINE' 'Methode double projection' ;
  204. mproj = VRAI ; lprec = FAUX ; doubl = VRAI ;
  205. 'FINSI' ;
  206. 'SI' ('EGA' &imet 5) ;
  207. tit = 'CHAINE' 'Methode double projection preconditionnee' ;
  208. mproj = VRAI ; lprec = VRAI ; doubl = VRAI ;
  209. 'FINSI' ;
  210. 'MESSAGE' tit ;
  211. 'SAUTER' 1 'LIGN' ;
  212. ttit . &imet = tit ;
  213. *
  214. * table EQEX
  215. *
  216. 'SI' mproj ;
  217. 'SI' ('NON' doubl) ;
  218. * Simple proj
  219. *GOON
  220. * niter = 3 ;
  221. niter = 5 ;
  222. 'SINON' ;
  223. * Double proj : 1 suffit mais on met 3 car ca teste
  224. * le préconditionnement du calcul de la
  225. * matrice de pression
  226. * niter = 3 ;
  227. niter = 3 ;
  228. 'FINSI' ;
  229. 'SINON' ;
  230. niter = 1 ;
  231. 'FINSI' ;
  232. rv = 'EQEX' 'NITER' niter 'OMEGA' 1. 'ITMA' 1 ;
  233. 'SI' graph ;
  234. rv = 'EQEX' rv 'ZONE' $mt 'OPER' TRACVP ;
  235. 'FINSI' ;
  236. rv = 'EQEX' rv
  237. 'OPTI' 'EF' 'IMPL' 'CENTREE'
  238. 'ZONE' $mt 'OPER' 'DFDT' 1. 'UNM1' 'DT' 'INCO' 'UN'
  239. 'ZONE' $mt 'OPER' MULDT fdt
  240. 'OPTI' 'EF' 'IMPL' 'CENTREE'
  241. 'ZONE' $mt 'OPER' 'NS' 1. 'UN' ('/' 1. Re)
  242. (0. -1.) 'TN' 0. 'INCO' 'UN'
  243. 'OPTI' 'EF' 'IMPL' 'CENTREE' kpre
  244. 'ZONE' $mt 'OPER' 'KBBT' 1. 'INCO' 'UN' 'PN'
  245. ;
  246. rv = 'EQEX' rv
  247. 'CLIM' 'UN' 'UIMP' cmt 0.
  248. 'CLIM' 'UN' 'VIMP' cmt 0.
  249. 'CLIM' 'PN' 'TIMP' mp1 0.
  250. ;
  251. rv . 'INCO' = 'TABLE' 'INCO' ;
  252. rv . 'INCO' . 'UNM1' = 'KCHT' $mt 'VECT' 'SOMMET' (0. 0.) ;
  253. rv . 'INCO' . 'UN' = 'KCHT' $mt 'VECT' 'SOMMET' (0. 0.) ;
  254. rv . 'INCO' . 'PN' = 'KCHT' $mt 'SCAL' kpre 0. ;
  255. rv . 'INCO' . 'TN' = 'KCHT' $mt 'SCAL' 'SOMMET' 1. ;
  256. rv . 'INCO' . 'DT' = dtini ;
  257. *
  258. 'SI' mproj ;
  259. rv . 'GPROJ' = 'TABLE' ;
  260. rv . 'GPROJ' . 'NOMVIT' = 'UN' ;
  261. rv . 'GPROJ' . 'NOMPRES' = 'PN' ;
  262. 'SI' ('NON' lprec) ;
  263. rv . 'GPROJ' . 'NOPREC' = VRAI ;
  264. 'FINSI' ;
  265. 'SI' ('NON' doubl) ;
  266. rv . 'GPROJ' . 'dblproj' = doubl ;
  267. 'FINSI' ;
  268. 'FINSI' ;
  269. *
  270. EXEC rv ;
  271. *
  272. un = rv . 'INCO' . 'UN' ;
  273. pn = '-' (rv . 'INCO' . 'PN') pexact ;
  274. 'SI' graph ;
  275. bidon matkbbt = 'KBBT' (rv . '5KBBT') ;
  276. 'SINON' ;
  277. bidon matkbbt = 'KBBT' (rv . '4KBBT') ;
  278. 'FINSI' ;
  279. nomavv = 'MOTS' 'UX' 'UY' ;
  280. nomapv = 'MOTS' '1UN' '2UN' ;
  281. nomavp = 'MOTS' 'SCAL' ;
  282. nomapp = 'MOTS' 'PN' ;
  283. vit = 'NOMC' nomavv nomapv un ;
  284. fordiv = 'KOPS' matkbbt '*' vit ;
  285. *'LISTE' ('EXTRAIRE' fordiv 'COMP') ;
  286. *'LISTE' ('MAXIMUM' fordiv 'ABS') ;
  287. *'LISTE' ('MAXIMUM' ('RESULT' ('ABS' fordiv))) ;
  288. tresu . &imet = un ;
  289. tresp . &imet = pn ;
  290. tresd . &imet = fordiv ;
  291. *
  292. maxun = 'MAXIMUM' un 'ABS' ;
  293. echvit = 'MAXIMUM' ('PROG' maxun 1.D-10) ;
  294. cm = '/' 1. ('*' nmail echvit) ;
  295. *vn = 'VECT' un cm 'DEPL' 'JAUN' ;
  296. vn = 'VECT' un cm 'UX' 'UY' 'JAUN' ;
  297. ppn = 'ELNO' $mt pn kpre ;
  298. *
  299. 'SI' graph ;
  300. titg = 'CHAINE' 'Erreur V-P echvit=' echvit ' mproj=' mproj
  301. ' lprec=' lprec ;
  302. 'TRACER' ppn mt mt vn 'TITR' titg ;
  303. * 'TRACER' ('ELNO' $mt (rv . 'INCO' . 'PN') kpre) mt mt 'TITR' tit ;
  304. * 'TRACER' ('ELNO' $mt pexact kpre) mt mt 'TITR' tit ;
  305. 'FINSI' ;
  306. 'FIN' imet ;
  307. *
  308. * Tests
  309. *
  310. *
  311. * Tolérance pour chaque méthode
  312. *
  313. 'SI' ('EGA' &imesh 1) ;
  314. 'SI' ('EGA' &iaxi 1) ;
  315. lerru = 'PROG' 1.D-12 1.D-4 1.D-12 1.D-12 1.D-12 ;
  316. lerrp = 'PROG' 2.D-12 4.D-2 1.D-12 2.D-12 1.D-12 ;
  317. lerrd = 'PROG' 1.D-14 1.D-14 1.D-14 1.D-14 1.D-14 ;
  318. 'FINSI' ;
  319. 'SI' ('EGA' &iaxi 2) ;
  320. lerru = 'PROG' 1.D-12 3.D-4 1.D-12 1.D-12 1.D-12 ;
  321. lerrp = 'PROG' 2.D-12 5.D-2 1.D-12 2.D-12 1.D-10 ;
  322. lerrd = 'PROG' 1.D-14 1.D-14 1.D-14 1.D-14 1.D-14 ;
  323. 'FINSI' ;
  324. 'FINSI' ;
  325. 'SI' ('EGA' &imesh 2) ;
  326. 'SI' ('EGA' &iaxi 1) ;
  327. lerru = 'PROG' 1.5D-4 1.5D-4 1.D-12 1.5D-4 1.D-12 ;
  328. lerrp = 'PROG' 1.D-2 4.0D-2 1.D-12 1.D-2 1.D-12 ;
  329. lerrd = 'PROG' 1.D-14 1.D-14 1.D-14 1.D-14 1.D-14 ;
  330. 'FINSI' ;
  331. 'SI' ('EGA' &iaxi 2) ;
  332. lerru = 'PROG' 1.5D-4 5.D-4 1.D-12 1.5D-4 1.D-12 ;
  333. lerrp = 'PROG' 1.D-2 4.0D-2 1.D-12 1.D-2 1.D-12 ;
  334. lerrd = 'PROG' 3.D-10 1.D-9 1.D-9 3.D-10 3.D-10 ;
  335. 'FINSI' ;
  336. 'FINSI' ;
  337.  
  338. *
  339. *
  340. *
  341.  
  342. 'SAUTER' 1 'LIGN' ;
  343. *
  344. 'REPETER' imet nmet ;
  345. und = tresu . &imet ;
  346. 'SI' ('OU' ('EGA' &imet 3) ('EGA' &imet 5)) ;
  347. undd = tresu . ('-' &imet 1) ;
  348. errud = ('MAXIMUM' ('-' und undd) 'ABS') ;
  349. vv = 'MAXIMUM' undd 'ABS' ;
  350. 'SI' ('>' vv 1.D-10) ; errud = '/' errud vv ; 'FINSI' ;
  351. tit = 'CHAINE' (ttit . &imet) '/non prec' ;
  352. 'SINON' ;
  353. errud = 'MAXIMUM' und 'ABS' ;
  354. tit = 'CHAINE' (ttit . &imet) ;
  355. 'FINSI' ;
  356. chmes = 'CHAINE' tit ' max err. vitesse =' errud ;
  357. 'MESSAGE' chmes ;
  358. erruda = 'EXTRAIRE' lerru &imet ;
  359. tst = ('<' errud erruda) ;
  360. 'SI' ('NON' tst) ;
  361. chmes = 'CHAINE' '!!! Erreur, pas inferieure a ' erruda ;
  362. 'MESSAGE' chmes ;
  363. 'FINSI' ;
  364. lok = lok 'ET' tst ;
  365. *
  366. pnd = tresp . &imet ;
  367. 'SI' ('OU' ('EGA' &imet 3) ('EGA' &imet 5)) ;
  368. pndd = tresp . ('-' &imet 1) ;
  369. errpd = 'MAXIMUM' ('-' pnd pndd) 'ABS' ;
  370. vv = 'MAXIMUM' pndd 'ABS' ;
  371. 'SI' ('>' vv 1.D-10) ; errpd = '/' errpd vv ; 'FINSI' ;
  372. tit = 'CHAINE' (ttit . &imet) '/non prec' ;
  373. 'SINON' ;
  374. errpd = 'MAXIMUM' pnd 'ABS' ;
  375. tit = 'CHAINE' (ttit . &imet) ;
  376. 'FINSI' ;
  377. chmes = 'CHAINE' tit ' max err. pression =' errpd ;
  378. 'MESSAGE' chmes ;
  379. errpda = 'EXTRAIRE' lerrp &imet ;
  380. tst = ('<' errpd errpda) ;
  381. 'SI' ('NON' tst) ;
  382. chmes = 'CHAINE' '!!! Erreur, pas inferieure a ' errpda ;
  383. 'MESSAGE' chmes ;
  384. 'FINSI' ;
  385. lok = lok 'ET' tst ;
  386. *
  387. dnd = tresd . &imet ;
  388. errdd = 'MAXIMUM' dnd 'ABS' ;
  389. chmes = 'CHAINE' (ttit . &imet) ' max err. divergence =' errdd ;
  390. 'MESSAGE' chmes ;
  391. errdda = 'EXTRAIRE' lerrd &imet ;
  392. tst = ('<' errdd errdda) ;
  393. 'SI' ('NON' tst) ;
  394. chmes = 'CHAINE' '!!! Erreur, pas inferieure a ' errdda ;
  395. 'MESSAGE' chmes ;
  396. 'FINSI' ;
  397. lok = lok 'ET' tst ;
  398. 'FIN' imet ;
  399. *
  400. 'FIN' iaxi ;
  401. 'FIN' imesh ;
  402. *
  403. 'SAUTER' 2 'LIGNE' ;
  404. 'SI' lok ;
  405. 'MESSAGE' 'Tout sest bien passe' ;
  406. 'SINON' ;
  407. 'MESSAGE' 'Il y a eu des erreurs' ;
  408. 'FINSI' ;
  409. 'SAUTER' 2 'LIGNE' ;
  410. *
  411. 'SI' interact ;
  412. 'OPTION' 'DONN' 5 'ECHO' 1 ;
  413. 'FINSI' ;
  414. 'SI' ('NON' lok) ;
  415. 'ERREUR' 5 ;
  416. 'FINSI' ;
  417. *
  418. * End of dgibi file GRAVITE
  419. *
  420. 'FIN' ;
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  

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