Télécharger tp3.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : tp3.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. *
  5. ************************************************************************
  6. * Cours MF307 - Tp3
  7. * Diffusion d'un champ scalaire
  8. * Solution stationnaire de l'équation de la chaleur
  9. ************************************************************************
  10. *
  11. * Pour la non-regression, on vérifie que dans le cas d'une solution
  12. * bilinéaire sur un maillage régulier de quadrangles la solution
  13. * calculée est exacte à la précision machine près.
  14. *
  15. 'OPTI' 'ECHO' 1 ;
  16. GRAPH = faux ;
  17. *
  18. *-----------------------------------------------------------------------
  19. 'DEBP' CALCUL ;
  20. *-----------------------------------------------------------------------
  21. * Cette procédure, utilisée comme un opérateur, calcule la différence
  22. * entre deux pas de temps toutes les 5 itérations.
  23. * L'evolution de cette différence (erreur absolue) au cours du temps
  24. * est conservée en vue d'un post-traitement.
  25. *-----------------------------------------------------------------------
  26. 'ARGU' RVX*'TABLE' ;
  27. *
  28. RV = RVX . 'EQEX' ;
  29. TN = RV . 'INCO' . 'TN' ;
  30. *
  31. 'SI' ( 'EXIS' RVX 'COMPT') ;
  32. RVX . 'COMPT' = RVX . 'COMPT' + 1 ;
  33. 'SINO' ;
  34. RVX . 'COMPT' = 1 ;
  35. RV . 'INCO' . 'IT' = 'PROG' 1 ;
  36. RV . 'INCO' . 'ER' = 'PROG' 0. ;
  37. RV . 'INCO' . 'TBIS' = 'COPI' RV . 'INCO' . 'TN' ;
  38. * 'FINS' ;
  39. 'FINS' ;
  40. *
  41. DD = RVX . 'COMPT' ;
  42. NN = DD / 5 ;
  43. LO = (DD-(5*NN)) 'EGA' 0 ;
  44. 'SI' LO ;
  45. ERR = (RV . 'INCO' . 'TN') - (RV . 'INCO' . 'TBIS') ;
  46. RV . 'INCO' . 'TBIS' = 'COPI' (RV . 'INCO' . 'TN') ;
  47. ERRINF = 'MAXI' ERR 'ABS' ;
  48. ELI = ('LOG' (ERRINF + 1.0E-50))/('LOG' 10.) ;
  49. 'MESS' 'ITERATION ' (RVX . 'COMPT') ' LOG10 ERREUR ' ELI ;
  50. IT = 'PROG' RVX . 'COMPT' ;
  51. ER = 'PROG' ELI ;
  52. RV . 'INCO' . 'IT' = (RV . 'INCO' . 'IT') 'ET' IT ;
  53. RV . 'INCO' . 'ER' = (RV . 'INCO' . 'ER') 'ET' ER ;
  54.  
  55. 'FINS' ;
  56. *-----------------------------------------------------------------------
  57. mat1 chp1 = 'KOPS' 'MATRIK' ;
  58. 'FINP' mat1 chp1;
  59. *-----------------------------------------------------------------------
  60. *
  61. *
  62. *===================================
  63. * OPTIONS FOURNIES PAR L'UTILISATEUR
  64. *===================================
  65. * (les choix par menus sont à réactiver en interactif)
  66. *
  67. *
  68. *- Choix du type de problème
  69. *
  70. 'SAUT' 15 'LIGN' ;
  71. 'MESS' 'Choix du problème à traiter :' ;
  72. 'MESS' ' 1 -> Problème linéaire' ;
  73. 'MESS' ' 2 -> Problème bilinéaire' ;
  74. 'MESS' ' 3 -> Sinusoide amortie' ;
  75. **** 'OBTE' ISOL0 ;
  76. ISOL0 = 2 ;
  77. TEST1 = (ISOL0 '>' 3) 'OU' (ISOL0 '<' 1) ;
  78. 'SI' TEST1 ;
  79. 'MESS' 'Erreur lors de la saisie du choix.';
  80. 'FIN';
  81. 'FINS' ;
  82. *
  83. *- Choix du type d'éléments
  84. *
  85. 'SAUT' 15 'LIGN' ;
  86. 'MESS' 'Choix des elements maillant le domaine :' ;
  87. 'MESS' ' 1 -> Triangles' ;
  88. 'MESS' ' 2 -> Rectangles' ;
  89. 'MESS' ' 3 -> Quadrilateres quelconques' ;
  90. **** 'OBTE' CHOIX ;
  91. CHOIX = 2 ;
  92. TEST1 = (CHOIX '>' 3) 'OU' (CHOIX '<' 1) ;
  93. 'SI' TEST1 ;
  94. 'MESS' 'Erreur lors de la saisie du choix.';
  95. 'FIN';
  96. 'FINS' ;
  97. *
  98. *- Choix du type d'interpolation
  99. *
  100. 'SAUT' 15 'LIGN' ;
  101. 'MESS' 'Choix des degrés des éléments finis :' ;
  102. 'MESS' ' 1 -> Degré 1' ;
  103. 'MESS' ' 2 -> Degré 2' ;
  104. **** 'OBTE' IDEGR ;
  105. IDEGR = 1 ;
  106. TEST1 = (IDEGR '>' 2) 'OU' (IDEGR '<' 1) ;
  107. 'SI' TEST1 ;
  108. 'MESS' 'Erreur lors de la saisie du choix.';
  109. 'FIN';
  110. 'FINS' ;
  111. *
  112. *- Choix du nombre d'éléments
  113. *
  114. 'SAUT' 15 'LIGN' ;
  115. 'MESS' 'Nombre d elements par cote :';
  116. **** 'OBTE' NX ;
  117. NX = 10 ;
  118. 'SI' (NX '<' 1) ;
  119. 'MESS' 'Erreur lors de la saisie du choix.';
  120. 'FIN';
  121. 'FINS' ;
  122. NY = NX ;
  123. *
  124. *- Choix de la méthode
  125. *
  126. 'SAUT' 15 'LIGN' ;
  127. 'MESS' 'Type de methode de resolution :' ;
  128. 'MESS' ' 1 -> Instationnaire explicite' ;
  129. 'MESS' ' 2 -> Instationnaire implicite' ;
  130. 'MESS' ' 3 -> Stationnaire' ;
  131. **** 'OBTE' IMETH ;
  132. IMETH = 3 ;
  133. TEST1 = (IMETH '>' 3) 'OU' (IMETH '<' 1) ;
  134. 'SI' TEST1 ;
  135. 'MESS' 'Erreur lors de la saisie du choix.';
  136. 'FIN';
  137. 'FINS' ;
  138. 'SI' (('EGA' IMETH 1) 'ET' ('EGA' IDEGR 2));
  139. 'MESS' 'Seul degré 1 autorisé avec méthode explicite.';
  140. 'FIN';
  141. 'FINS' ;
  142. *
  143. *- Nombre de pas de temps
  144. *
  145. 'SI' ('NEG' IMETH 3) ;
  146. 'SAUT' 15 'LIGN' ;
  147. 'MESS' 'Nombre de pas de temps :';
  148. 'OBTE' NITER ;
  149. 'SI' (NX '<' 1) ;
  150. 'MESS' 'Erreur lors de la saisie du choix.';
  151. 'FIN';
  152. 'FINS' ;
  153. 'FINS' ;
  154. *
  155. *- Choix de la méthode d'inversion
  156. *
  157. 'SAUT' 15 'LIGN' ;
  158. 'MESS' 'Type de resolution matricielle :' ;
  159. 'MESS' ' 1 -> Méthode directe (Crout)' ;
  160. 'MESS' ' 2 -> Gradient conjugué' ;
  161. 'MESS' ' 3 -> Bi gradient conjugué' ;
  162. **** 'OBTE' ININV ;
  163. ININV = 1 ;
  164. TEST1 = (ININV '>' 3) 'OU' (ININV '<' 1) ;
  165. 'SI' TEST1 ;
  166. 'MESS' 'Erreur lors de la saisie du choix.';
  167. 'FIN';
  168. 'FINS' ;
  169. 'SAUT' 15 'LIGN' ;
  170. *
  171. *
  172. *=========
  173. * MAILLAGE
  174. *=========
  175. *
  176. *
  177. *- Initialisation des options
  178. *
  179. 'SI' (CHOIX 'EGA' 1) ;
  180. 'OPTI' 'DIME' 2 'ELEM' 'TRI3' ;
  181. 'SINO' ;
  182. 'OPTI' 'DIME' 2 'ELEM' 'QUA4' ;
  183. FINSI;
  184. *
  185. *- Definition des sommets de la plaque
  186. *
  187. LX = 1.D0 ;
  188. LY = 1.D0 ;
  189. XMIN = 0.D0 ;
  190. YMIN = 0.D0 ;
  191. XMAX = XMIN + LX ;
  192. YMAX = YMIN + LY ;
  193. *
  194. A1 = XMIN YMIN ;
  195. A2 = XMAX YMIN ;
  196. A3 = XMAX YMAX ;
  197. A4 = XMIN YMAX ;
  198. *
  199. *- Definition des aretes
  200. *
  201. 'SI' (CHOIX 'EGA' 3) ;
  202. R = 10. ** (1. / (NX - 1));
  203. DA = 1. * ((R - 1.) / ((R ** NX) - 1));
  204. DB = 10. * DA ;
  205. FBAS = 'DROI' A1 A2 'DINI' DA 'DFIN' DB ;
  206. FDRO = 'DROI' A2 A3 'DINI' DB 'DFIN' DA ;
  207. FHAU = 'DROI' A3 A4 'DINI' DA 'DFIN' DB ;
  208. FGAU = 'DROI' A4 A1 'DINI' DB 'DFIN' DA ;
  209. 'SINO' ;
  210. FBAS = A1 'DROI' NX A2 ;
  211. FDRO = A2 'DROI' NY A3 ;
  212. FHAU = A3 'DROI' NX A4 ;
  213. FGAU = A4 'DROI' NY A1 ;
  214. 'FINS' ;
  215. *
  216. *- Maillage de la plaque
  217. *
  218. SI (CHOIX EGA 1);
  219. CNT = FBAS ET FDRO ET FHAU ET FGAU ;
  220. MT = CNT 'SURF' 'PLAN' ;
  221. SINON;
  222. MT = 'DALLER' FBAS FDRO FHAU FGAU 'PLAN' ;
  223. FINSI;
  224. *
  225. *- MODELE NAVIER_STOKES
  226. *
  227. MT = 'CHANGER' QUAF mt;
  228. 'SI' ('EGA' IDEGR 1);
  229. $MT = 'MODE' MT 'NAVIER_STOKES' 'LINE';
  230. SINON ;
  231. $MT = 'MODE' MT 'NAVIER_STOKES' 'QUAF';
  232. 'FINSI';
  233. MT = 'DOMA' $MT 'MAILLAGE' ;
  234. CNT = 'CONTOUR' MT;
  235. *
  236. *
  237. *================
  238. * SOLUTION EXACTE
  239. *================
  240. *
  241. *
  242. XX YY = 'COOR' MT ;
  243. 'SI' (ISOL0 '<' 3) ;
  244. *
  245. *-> T(x,y) = 11xy + 7x + 5y + 3 + NORMALISATION
  246. *
  247. 'SI' (ISOL0 'EGA' 1) ;
  248. AXY = 0. ;
  249. 'SINO' ;
  250. AXY = 11. ;
  251. 'FINSI' ;
  252. SOLEX = AXY*XX*YY + (7.*XX) + (5.*YY) + 3. ;
  253. SOLEX = SOLEX / (MAXI SOLEX) ;
  254. 'SINO' ;
  255. *
  256. *-> T(x,y) = 0.2 + sin(180*x) * e(-PI*y)
  257. *
  258. SINUS = 'SIN' ( XX * 180.) ;
  259. EXPON = 'EXP' ( YY * (0. - PI)) ;
  260. SOLEX = SINUS * EXPON + 0.2 ;
  261. 'FINSI' ;
  262. *
  263. *
  264. *==================
  265. * SOLUTION CALCULEE
  266. *==================
  267. *
  268. *
  269. * La structure du bloc de chaque méthode est identique :
  270. * -> description de la modélisation physique et numérique (EQEX)
  271. * -> conditions aux limites (EQEX, option CLIM)
  272. * -> initialisations des champs (table INCO)
  273. * -> initialisations des données numériques (table RV)
  274. * -> resolution (EXEC)
  275. * Les données numériques suivantes permettent de piloter le calcul :
  276. * NITER : Nombre d'iterations internes (cas non-lineaire)
  277. * OMEGA : Coefficient de relaxation (cas non-linéaire)
  278. * IMPR : Flag d'impression (1 pour oui, 0 pour non)
  279. * ITMA : Nombre de pas de temps
  280. * EPS : Critere de convergence pour les iterations internes
  281. * DT : Pas de temps
  282. *
  283. *------------------------------------------------
  284. * Méthode de résolution instationnaire explicite
  285. * Utilisation de l'opérateur TSCAL
  286. *------------------------------------------------
  287. *
  288. 'SI' (IMETH 'EGA' 1) ;
  289. RV = 'EQEX' $MT 'ITMA' NITER 'ALFA' 0.9
  290. 'ZONE' $MT 'OPER' CALCUL
  291. 'OPTI' 'EFM1' 'CENTREE' 'EXPL'
  292. 'ZONE' $MT 'OPER' 'TSCA' 1. 'UN' 0.0 'INCO' 'TN'
  293. 'OPTI' 'EFM1' 'CENTREE' 'EXPL'
  294. 'ZONE' $MT 'OPER' 'DFDT' 1. 'TN' 'DELTAT' 'INCO' 'TN'
  295. ;
  296.  
  297. RV = 'EQEX' RV 'CLIM' CNT 'TN' 'TIMP' ('REDU' SOLEX CNT) ;
  298. RV . 'INCO' = 'TABLE' 'INCO' ;
  299. RV . 'INCO' . 'TN' = 'KCHT' $MT 'SCAL' 'SOMMET' 0. ;
  300. RV . 'INCO' . 'UN' = 'KCHT' $MT 'VECT' 'SOMMET' (0. 0.) ;
  301. 'FINS' ;
  302. *
  303. *------------------------------------------------
  304. * Méthode de résolution instationnaire implicite
  305. * Utilisation des opérateurs DFDT et LAPN
  306. *------------------------------------------------
  307. *
  308. 'SI' (IMETH 'EGA' 2) ;
  309. RV = 'EQEX' $MT 'OPTI' 'EF' 'IMPL' 'CENTREE'
  310. * 'ZONE' $MT 'OPER' 'DFDT' 1. 'TNM' 'DT' (0. 0.) 0. 'INCO' 'TN'
  311. 'ZONE' $MT 'OPER' 'DFDT' 1. 'TNM' 'DT' 'INCO' 'TN'
  312. 'ZONE' $MT 'OPER' 'LAPN' 1. 'INCO' 'TN'
  313. 'ZONE' $MT 'OPER' CALCUL
  314. ;
  315. RV = 'EQEX' RV 'CLIM' CNT 'TN' 'TIMP' ('REDU' SOLEX CNT) ;
  316. RV . 'INCO' = 'TABLE' 'INCO' ;
  317. RV . 'INCO' . 'TN' = 'KCHT' $MT 'SCAL' 'SOMMET' 0. ;
  318. RV . 'INCO' . 'TNM' = 'KCHT' $MT 'SCAL' 'SOMMET' 0. ;
  319. RV . 'NITER' = 1 ;
  320. RV . 'OMEGA' = 1.D0 ;
  321. RV . 'IMPR' = 1 ;
  322. RV . 'ITMA' = NITER ;
  323. RV . 'EPS' = 1.D-15 ;
  324. RV . 'DT' = 1.D-1 ;
  325. RV . 'INCO' . 'DT' = RV . 'DT' ;
  326. 'FINS' ;
  327. *
  328. *------------------------------------------------
  329. * Méthode de résolution stationnaire (implicite)
  330. * Utilisation de l'opérateur LAPN
  331. *------------------------------------------------
  332. *
  333. 'SI' (IMETH 'EGA' 3) ;
  334. RV = 'EQEX' $MT 'OPTI' 'EF' 'IMPL'
  335. 'ZONE' $MT 'OPER' 'LAPN' 1.D0 'INCO' 'TN' ;
  336. RV = 'EQEX' RV 'CLIM' CNT 'TN' 'TIMP' ('REDU' SOLEX CNT) ;
  337. RV . 'INCO' = 'TABLE' 'INCO' ;
  338. RV . 'INCO' .'TN' = 'KCHT' $MT 'SCAL' 'SOMMET' 0.D0 ;
  339. RV . 'NITER' = 2 ;
  340. RV . 'OMEGA' = 1.D0 ;
  341. RV . 'IMPR' = 1 ;
  342. RV . 'ITMA' = 1 ;
  343. RV . 'EPS' = 1.D-15 ;
  344. RV . 'DT' = 1.D3 ;
  345. RV . 'INCO' . 'DT' = RV . 'DT' ;
  346. 'FINS' ;
  347. *
  348. *
  349. rv. 'METHINV' . 'TYPINV' = ININV ;
  350. rv. 'METHINV' . 'IMPINV' = 2 ;
  351. rv. 'METHINV' . 'NITMAX' = 1500 ;
  352. rv. 'METHINV' . 'PRECOND' = 3 ;
  353. rv. 'METHINV' . 'RESID' = 1.e-14 ;
  354. rv. 'METHINV' . 'FCPRECT' = 1 ;
  355. rv. 'METHINV' . 'FCPRECI' = 1 ;
  356. rv. 'METHINV' . 'XINIT' = RV.INCO.'TN';
  357. rv. 'METHINV' . 'TYRENU' = 'SLOANE' ;
  358. *
  359. EXEC rv;
  360. *
  361. *
  362. *==================================
  363. * POST TRAITEMENT ET VISUALISATIONS
  364. *==================================
  365. *
  366. * ER0 : Erreur absolue
  367. * ER1 : Erreur relative
  368. * ER2 : Erreur absolue au carrée
  369. * ERR : Erreur L2 discrète
  370. *
  371. ER0 = 'ABS' (RV.INCO.'TN' - SOLEX) ;
  372. ER1 = ER0 '/' SOLEX ;
  373. ER2 = ER0 '*' ER0 ;
  374. ERR = ('MAXI' ('RESU' ER2)) / ('NBEL' mt) ** 0.5 ;
  375. *
  376. *------------------------> Début des tracés
  377. 'SI' GRAPH ;
  378. 'TRAC' MT 'TITR' 'Maillage' 'NCLK' ;
  379. 'TRAC' SOLEX MT CNT 'TITR' 'Solution exacte' 'NCLK' ;
  380. 'TRAC' (RV . 'INCO' . 'TN') MT CNT 'TITR' 'Solution castem' 'NCLK' ;
  381. 'TRAC' ER0 MT CNT 'TITR' 'Erreur absolue' 'NCLK' ;
  382. 'TRAC' ER1 MT CNT 'TITR' 'Erreur relative' 'NCLK' ;
  383. * Evolution de l'erreur au cours des itérations
  384. 'SI' ('NEG' IMETH 3) ;
  385. EVO1 = 'EVOL' 'MANU' 'n' RV.INCO.'IT' 'Log Epsi' RV.INCO.'ER';
  386. 'DESS' EVO1 'TITRE' 'Histoire de l erreur absolue'
  387. 'TITX' 'Iterations' 'TITY' 'Log(Erreur)';
  388. 'FINSI' ;
  389. * Tracé de la solution exacte en faux 3D
  390. 'OPTI' 'ISOV' 'SULI' ;
  391. 'SI' ('<' ISOL0 3) ;
  392. OEIL = 'PROG' -0.5 -1.2 2. ;
  393. 'SINON' ;
  394. OEIL = 'PROG' -0.5 1.2 0.4 ;
  395. 'FINSI' ;
  396. MONTAGNE SOLEX MT 1.0 OEIL 'TITRE' 'Solution exacte' 'CACHE' ;
  397. 'FINSI' ;
  398. *------------------------> Fin des tracés
  399. *
  400. *
  401. *=======================
  402. * TEST DE NON-REGRESSION
  403. *=======================
  404. *
  405. TEST1 = ERR < 1E-15 ;
  406. si test1 ;
  407. erre 0 ;
  408. sinon ;
  409. erre 5 ;
  410. finsi ;
  411. 'FIN' ;
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420.  
  421.  
  422.  

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