Télécharger darcy1.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : darcy1.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. ***************** CAS TEST : darcy1.dgibi *************************
  5. *
  6. GRAPH = 'N' ;
  7. 'SAUT' 'PAGE' ;
  8. *
  9. *-------------------------------------------------------------------
  10. * TEST DARCY1
  11. *
  12. * CALCUL DARCY ISOTROPE
  13. * Résolution par une méthode d'éléments finis mixtes hybrides.
  14. *
  15. * Ce test permet de vérifier le bon fonctionnement des opérateurs
  16. * utilisés pour la résolution des équations de DARCY par une méthode
  17. * d'éléments finis mixtes hybrides dans CASTEM2000.
  18. *
  19. * On effectue trois calculs sur un domaine carré, maillé par des
  20. * quadrangles réguliers. Le phénomène étudié est monodimensionnel.
  21. * Les conditions aux limites varient suivant le cas considéré :
  22. * on impose le flux ou la charge sur les cotés du domaine.
  23. *
  24. * La solution analytique en charge étant un polynome de degré un
  25. * en x, la vitesse est constante et horizontale.
  26. * Si on note L la longueur du domaine, HD (resp. HG) la charge à
  27. * droite du domaine (resp. à gauche) et dH=HD-HG on a :
  28. * h(x) = (x-L) * dH/L + HD
  29. * Et par suite
  30. * V(x) = (-K*dH/L ; 0.)
  31. *
  32. * On s'attend à une précision de l'ordre de la précision machine.
  33. *
  34. *-------------------------------------------------------------------
  35. *
  36. 'SAUT' 'PAGE' ;
  37. *
  38. *- Options générales de calcul.
  39. *
  40. 'TITR' 'EFMH DARCY ISOTROPE 1D : darcy1.dgibi' ;
  41. * Dimension 2, éléments à générer quadrangulaires ou triangulaires :
  42. 'OPTI' 'DIME' 2 'ELEM' 'QUA4' ;
  43. * Pas d'affichage à l'écran des lignes de commandes lues :
  44. 'OPTI' 'ECHO' 1 ;
  45. * ------------
  46. * = MAILLAGE =
  47. * ------------
  48. *
  49. *- Création des points supports des DROITES
  50. *
  51. * Dimensions :
  52. L = 1.D0 ;
  53. HA = 1.D0 ;
  54.  
  55. * Coordonnées :
  56. XG = 0.D0 ;
  57. XD = XG + L ;
  58. YG = 0.D0 ;
  59. YD = YG + HA ;
  60.  
  61. * Points
  62. A1 = XG YG ;
  63. A3 = XD YG ;
  64. D1 = XG YD ;
  65. D3 = XD YD ;
  66. *
  67. *- Création des DROITES frontières
  68. *
  69. * Discrétisation dans les deux directions :
  70. INUMX = 9 ;
  71. INUMY = 4 ;
  72. * droites maillées :
  73. DRBAS = A3 'DROI' INUMX A1 ;
  74. DRGAU = A1 'DROI' INUMY D1 ;
  75. DRHAU = D1 'DROI' INUMX D3 ;
  76. DRDRO = D3 'DROI' INUMY A3 ;
  77. *
  78. *- Création maillage GEOMETRIQUE
  79. *
  80. * on va faire des parallèlépipèdes réguliers grâce à DALLER
  81. * Les points définissant les quadrangles sont appellés 'SOMMET'
  82. CARRE = 'DALLER' DRBAS DRGAU DRHAU DRDRO 'PLAN' ;
  83. *
  84. *- Création maillage HYBRIDE y compris sous-objets (cond. limites)
  85. * ce sont les maillages avec les points sommets + les points faces +
  86. * les points centres.
  87.  
  88. * on crée celui du maillage total
  89. DOMHYB = 'CHANGER' CARRE 'QUAF' ;
  90. * et ceux des droites sur lesquelles on voudra mettre des conditions
  91. * aux limites (en fait les quatre côtés, ici) :
  92. DOMGAU = 'CHANGER' DRGAU 'QUAF' ;
  93. DOMDRO = 'CHANGER' DRDRO 'QUAF' ;
  94. DOMHAU = 'CHANGER' DRHAU 'QUAF' ;
  95. DOMBAS = 'CHANGER' DRBAS 'QUAF' ;
  96.  
  97. * On a créé à chaque fois les points faces et centres.
  98. * Comme CARRE, DRGAU, DRDRO, DRHAU et DRBAS avaient des segments en
  99. * commun, les opérations précédentes ont créé beaucoup de points en
  100. * double. Il faut les éliminer pour qu'on parle bien de la même chose.
  101.  
  102. * critère d'élimination (inférieur à la plus petite dimension d'arête
  103. ELI0 = L / INUMX / 10.D0 ;
  104. * élimination proprement dite :
  105. 'ELIMINATION' ( DOMHYB ET DOMGAU ET DOMDRO ET DOMHAU ET DOMBAS) ELI0 ;
  106. * ----------------
  107. * = MODELISATION =
  108. * ----------------
  109. * Définition du modèle physique attaché au domaine d'étude :
  110. * Il servira d'une part pour la résolution,
  111. * d'autre part pour extraire les points faces, centres, et autres
  112. * informations utiles
  113. MODHYB = 'MODELE' DOMHYB 'DARCY' 'ISOTROPE' ;
  114.  
  115. * On voudra aussi disposer des points faces des frontières,
  116. * c'est-à-dire des points centres des lignes constituant ces
  117. * frontières. Pour cela, on attache à ces lignes une modélisation,
  118. * inutile en soi, mais qui dit implicitement (comme c'est un modèle
  119. * 'DARCY'), que l'on travaille en éléments finis mixte hybrides,
  120. * et donc qu'on aura besoin, à un moment ou à un autre, des points
  121. * centres, faces, et autres :
  122. MODGAU = 'MODELE' DOMGAU 'DARCY' 'ISOTROPE' ;
  123. MODDRO = 'MODELE' DOMDRO 'DARCY' 'ISOTROPE' ;
  124. MODHAU = 'MODELE' DOMHAU 'DARCY' 'ISOTROPE' ;
  125. MODBAS = 'MODELE' DOMBAS 'DARCY' 'ISOTROPE' ;
  126.  
  127. * On peut maintenant extraire via ces modèles, les points centre des
  128. * maillages 'QUAF' des frontières, qui sont en fait les points faces
  129. * en limite du domaine :
  130. CEDRO = 'DOMA' MODDRO 'CENTRE' ;
  131. CEHAU = 'DOMA' MODHAU 'CENTRE' ;
  132. CEBAS = 'DOMA' MODBAS 'CENTRE' ;
  133. CEGAU = 'DOMA' MODGAU 'CENTRE' ;
  134.  
  135. * Les autres petites informations, sur le domaine entier :
  136. * Maillage des points centres :
  137. HYCEN = 'DOMA' MODHYB 'CENTRE' ;
  138. * Maillage des points faces :
  139. HYFAC = 'DOMA' MODHYB 'FACE' ;
  140. * Longueur des arêtes (on est en 2D) :
  141. HYSUR = 'DOMA' MODHYB 'SURFACE' ;
  142. * Surface des mailles :
  143. HYVOL = 'DOMA' MODHYB 'VOLUME' ;
  144. * Vecteurs normaux aux faces, champ-points à autant de composantes que
  145. * la dimension de l'espace : 'UX' , 'UY' (, 'UZ').
  146. HYNOR = 'DOMA' MODHYB 'NORMALE' ;
  147. *
  148. * ------------------------------------
  149. * = Tenseur de perméabilité isotrope =
  150. * ------------------------------------
  151. * La grandeur physique correspondant au laplacien. C'est ici la
  152. * perméabilité hydraulique.
  153. VK = 0.75D0 ;
  154. * On la stoque dans un objet de type matériau
  155. MATI3 = 'MATERIAU' MODHYB 'K' VK ;
  156. * -----------------------
  157. * = Solution analytique =
  158. * -----------------------
  159. * Elle va servir à deux choses : définir les conditions aux limites,
  160. * et vérifier la précision de la résolution.
  161. *
  162. * Trace de charge aux faces
  163. * La charge étant linéaire, Th moyen est au centre de la face
  164. *
  165. XX YY = 'COOR' (DOMA MODHYB 'FACE') ;
  166. HG = 100.D0 ;
  167. HD = 20.D0 ;
  168. DH = HD - HG ;
  169. PANAF = (XX - L) * DH / L + HD ;
  170. *
  171. * Charge aux centres des éléments
  172. * La charge étant linéaire, la moyenne est au centre de l'élément
  173. *
  174. XXC YYC = 'COOR' (DOMA MODHYB 'CENTRE' ) ;
  175. PANAC = (XXC - L) * DH / L + HD ;
  176. *
  177. * Composantes scalaires de la vitesse
  178. *
  179. VXANA = ( -1.D0 ) * VK * DH / L ;
  180. VYANA = 0.D0 ;
  181. *
  182. * Vitesse aux faces et aux centres
  183. *
  184. VANAF = 'MANU' 'CHPO' (DOMA MODHYB 'FACE') 2 'VX' VXANA 'VY' VYANA ;
  185. VANAC = 'MANU' 'CHPO' (DOMA MODHYB 'CENTRE') 2 'VX' VXANA 'VY' VYANA ;
  186. *
  187. * -------------------------
  188. * = matrice Masse HYBride =
  189. * -------------------------
  190. * C'est l'inverse du tenseur de perméabilité. Il ne faut donc jamais
  191. * avoir mis une valeur de perméabilité nulle.
  192. CND1A = 'MHYB' MODHYB MATI3 ;
  193. * -------------------------
  194. * = MAtrice globale en TH =
  195. * -------------------------
  196. * La matrice correspondant à div (K 'GRAD').
  197. * C'est un objet de type RIGIDITE.
  198. HND1A = 'MATP' MODHYB CND1A ;
  199. * ----------------
  200. * = TH imposée =
  201. * ----------------
  202. * Les conditions aux limites de Dirichlet portent sur la charge.
  203. * On est en EFMH, donc ce sont les valeurs aux faces qu'on utilise.
  204. * On les appelle trace de charge. C'est un champ-point appuyé aux
  205. * face, de nom de composante 'TH'.
  206.  
  207. * Contribution au membre de gauche pour chaque sous-partie de la frontière
  208. BBGAU = 'BLOQ' CEGAU 'TH' ;
  209. BBDRO = 'BLOQ' CEDRO 'TH' ;
  210. BBHAU = 'BLOQ' CEHAU 'TH' ;
  211. BBBAS = 'BLOQ' CEBAS 'TH' ;
  212. * Contribution au membre de droite pour chaque sous-partie de la frontière
  213. TTIMP = 'REDU' PANAF CEGAU ;
  214. TTIM2 = 'EXCO' TTIMP 'SCAL' 'TH' ;
  215. EEGAU = 'DEPI' BBGAU TTIM2 ;
  216. *
  217. TTIMP = 'REDU' PANAF CEDRO ;
  218. TTIM2 = 'EXCO' TTIMP 'SCAL' 'TH' ;
  219. EEDRO = 'DEPI' BBDRO TTIM2 ;
  220. *
  221. TTIMP = 'REDU' PANAF CEBAS ;
  222. TTIM2 = 'EXCO' TTIMP 'SCAL' 'TH' ;
  223. EEBAS = 'DEPI' BBBAS TTIM2 ;
  224. *
  225. TTIMP = 'REDU' PANAF CEHAU ;
  226. TTIM2 = 'EXCO' TTIMP 'SCAL' 'TH' ;
  227. EEHAU = 'DEPI' BBHAU TTIM2 ;
  228. * ----------------
  229. * = Flux imposé =
  230. * ----------------
  231. * Conditions aux limites de Neuman.
  232. * En discrétisation EFMH comme ici, ce sont des débits intégrés aux
  233. * faces. C'est un champ-point de composante 'FLUX'
  234.  
  235. * Il faut tenir compte de l'orientation des normales aux faces,
  236. * toujours sortantes aux frontières du domaine. Une valeur de débit
  237. * positive correspond donc à un flux sortant.
  238.  
  239. * flux rentrant à gauche - (- K 'GRAD' h) :
  240. FG = VK * DH / L ;
  241. * champ de débit imposé à gauche, constant sur les faces de la
  242. * frontière de gauche (il faut multiplier le flux par la longueur des
  243. * arêtes pour obtenir le débit intégré) :
  244. FGAU = 'MANU' 'CHPO' CEGAU 1 'FLUX' FG ;
  245. LGAU = 'REDU' HYSUR CEGAU ;
  246. FLGAU = FGAU * LGAU ;
  247. * on en fait un champ de nature discret (diffus conviendrait tout aussi bien) :
  248. * pour que sa nature ne reste pas 'INDETERMINE'. Cela permettra de le
  249. * concaténer avec d'autres champs par la suite.
  250. FLGAU = 'CHAN' FLGAU 'ATTRIBUT' 'NATURE' 'DISCRET' ;
  251. *
  252. * idem pour le flux sortant à droite :
  253. FD = ( -1.D0 ) * FG ;
  254. FDRO = 'MANU' 'CHPO' CEDRO 1 'FLUX' FD ;
  255. LDRO = 'REDU' HYSUR CEDRO ;
  256. FLDRO = FDRO * LDRO ;
  257. FLDRO = 'CHAN' FLDRO 'ATTRIBUT' 'NATURE' 'DISCRET' ;
  258. * ----------------
  259. * = Assemblage =
  260. * ----------------
  261. * Création des membres de gauche et de droite de l'équation "A TH = B"
  262. * pour les trois jeux de conditions aux limites choisis.
  263. * CCC# correspond à A, FFF# correspond à B.
  264. * Les CL de Neuman n'ont pas de contribution au terme de gauche.
  265.  
  266. * CL de Dirichlet partout :
  267. CCC1 = HND1A 'ET' BBHAU 'ET' BBBAS 'ET' BBDRO 'ET' BBGAU ;
  268. FFF1 = EEHAU 'ET' EEBAS 'ET' EEDRO 'ET' EEGAU ;
  269. * CL de Dirichlet à gauche et à droite,
  270. * et flux nul imposé en haut et en bas (c'est ce qui se passe par
  271. * défaut, donc il suffit de ne rien mettre) :
  272. CCC2 = HND1A 'ET' BBDRO 'ET' BBGAU ;
  273. FFF2 = EEDRO 'ET' EEGAU ;
  274. * CL de Dirichlet en hau et en bas,
  275. * et flux imposés à gauche et à droite :
  276. CCC3 = HND1A 'ET' BBHAU 'ET' BBBAS ;
  277. FFF3 = EEHAU 'ET' EEBAS 'ET' FLDRO 'ET' FLGAU ;
  278. * -----------------
  279. * = Résolution TH =
  280. * -----------------
  281. * On résoud les trois systèmes d'équations (CL comprises)
  282. * On obtient en sortie la trace de charge, valeur moyenne de la charge
  283. * sur chaque arête.
  284. CHTER1 = 'RESO' CCC1 FFF1 ;
  285. CHTER2 = 'RESO' CCC2 FFF2 ;
  286. CHTER3 = 'RESO' CCC3 FFF3 ;
  287. * ----------------
  288. * = Résolution H =
  289. * ----------------
  290. * On en déduit la charge moyenne par élément, sous la forme d'un
  291. * champ-point de composante 'H' appuyé aux centres des éléments.
  292. PCEN1 = 'HYBP' MODHYB CND1A CHTER1 ;
  293. PCEN2 = 'HYBP' MODHYB CND1A CHTER2 ;
  294. PCEN3 = 'HYBP' MODHYB CND1A CHTER3 ;
  295. * ----------------
  296. * = Résolution V =
  297. * ----------------
  298. * On en déduit aussi pour chaque jeu de conditions aux limites,
  299. * les débits intégrés sur chaque arête, sous la forme d'un champ-point
  300. * de composante 'FLUX' appuyé aux centre des faces :
  301. QFACE1 = 'HDEB' MODHYB CND1A PCEN1 CHTER1 ;
  302. * La vitesse moyenne dans chaque élément, sous la forme d'un champ-point
  303. * de composantes 'VX', 'VY' (,'VZ') appuyé aux centres des éléments :
  304. VCENT1 = 'HVIT' MODHYB QFACE1 ;
  305. * La vitesse moyenne à travers chaque face, sous la forme d'un champ-point
  306. * de composante 'SCAL' appuyé aux centres des faces :
  307. VFACE1 = ('EXCO' QFACE1 'FLUX' 'SCAL') * HYNOR / HYSUR;
  308.  
  309. * de même pour le 2e jeux de CLs
  310. QFACE2 = 'HDEB' MODHYB CND1A PCEN2 CHTER2 ;
  311. VCENT2 = 'HVIT' MODHYB QFACE2 ;
  312. VFACE2 = ('EXCO' QFACE2 'FLUX' 'SCAL') * HYNOR / HYSUR;
  313.  
  314. * de même pour le 3e jeux de CLs
  315. QFACE3 = 'HDEB' MODHYB CND1A PCEN3 CHTER3 ;
  316. VCENT3 = 'HVIT' MODHYB QFACE3 ;
  317. VFACE3 = ('EXCO' QFACE3 'FLUX' 'SCAL') * HYNOR / HYSUR;
  318.  
  319. * -----------------
  320. * = Calcul ERREUR =
  321. * -----------------
  322. * Comparaison calcul analytique, calcul numérique :
  323.  
  324. * Erreur relative en trace de charge (moyenne aux faces)
  325. * Erreur relative en charge (moyenne aux centres des éléments)
  326. *
  327. * Jeu de CL n°1
  328. ERRTP1 = 'EXCO' CHTER1 'TH' 'SCAL' ;
  329. ERRTP1 = ERRTP1 - PANAF / PANAF ;
  330. ERRTP1 = 'ABS' ERRTP1 ;
  331. ERRP1 = 'EXCO' PCEN1 'H' 'SCAL' ;
  332. ERRP1 = ERRP1 - PANAC / PANAC ;
  333. ERRP1 = 'ABS' ERRP1 ;
  334. * Jeu de CL n°2
  335. ERRTP2 = 'EXCO' CHTER2 'TH' 'SCAL' ;
  336. ERRTP2 = ERRTP2 - PANAF / PANAF ;
  337. ERRTP2 = 'ABS' ERRTP2 ;
  338. ERRP2 = 'EXCO' PCEN2 'H' 'SCAL' ;
  339. ERRP2 = ERRP2 - PANAC / PANAC ;
  340. ERRP2 = 'ABS' ERRP2 ;
  341. * Jeu de CL n°3
  342. ERRTP3 = 'EXCO' CHTER3 'TH' 'SCAL' ;
  343. ERRTP3 = ERRTP3 - PANAF / PANAF ;
  344. ERRTP3 = 'ABS' ERRTP3 ;
  345. ERRP3 = 'EXCO' PCEN3 'H' 'SCAL' ;
  346. ERRP3 = ERRP3 - PANAC / PANAC ;
  347. ERRP3 = 'ABS' ERRP3 ;
  348. *
  349. * Erreur relative en vitesse aux centres des éléments
  350. MOT1 = 'MOTS' 'VX' 'VY' ;
  351. VDVD = 'PSCA' VANAC VANAC MOT1 MOT1 ;
  352. * Jeu de CL n°1
  353. VD1 = VANAC - VCENT1 ;
  354. VC1 = 'PSCA' VD1 VD1 MOT1 MOT1 ;
  355. SDC1 = 'ABS' ( VC1 / VDVD ) ;
  356. SDC1 = SDC1 '**' 0.5D0 ;
  357. * Jeu de CL n°2
  358. VD2 = VANAC - VCENT2 ;
  359. VC2 = 'PSCA' VD2 VD2 MOT1 MOT1 ;
  360. SDC2 = 'ABS' ( VC2 / VDVD ) ;
  361. SDC2 = SDC2 '**' 0.5D0 ;
  362. * Jeu de CL n°3
  363. VD3 = VANAC - VCENT3 ;
  364. VC3 = 'PSCA' VD3 VD3 MOT1 MOT1 ;
  365. SDC3 = 'ABS' ( VC3 / VDVD ) ;
  366. SDC3 = SDC3 '**' 0.5D0 ;
  367. *
  368. * -------------------
  369. * = Tracé resultats =
  370. * -------------------
  371. 'SI' ('NEG' GRAPH 'N') ;
  372. *
  373. *- Transformation des quantités aux centres en MCHAML
  374. *
  375. ERRP1 = 'KCHA' MODHYB 'CHAM' ERRP1 ;
  376. ERRP2 = 'KCHA' MODHYB 'CHAM' ERRP2 ;
  377. ERRP3 = 'KCHA' MODHYB 'CHAM' ERRP3 ;
  378. SDS1 = 'KCHA' MODHYB 'CHAM' SDC1 ;
  379. SDS2 = 'KCHA' MODHYB 'CHAM' SDC2 ;
  380. SDS3 = 'KCHA' MODHYB 'CHAM' SDC3 ;
  381. *
  382. * Dans chaque cas on trace
  383. * L'erreur relative sur la charge moyenne aux centres des éléments
  384. * L'erreur relative sur la Vitesse aux centres des éléments
  385. *
  386. 'TITR' 'darcy1/1 : Erreur relative sur la charge' ;
  387. 'TRAC' MODHYB ERRP1 ;
  388. 'TITR' 'darcy1/1 : Erreur relative sur la vitesse' ;
  389. 'TRAC' MODHYB SDS1 ;
  390. *
  391. 'TITR' 'darcy1/2 : Erreur relative sur la charge' ;
  392. 'TRAC' MODHYB ERRP2 ;
  393. 'TITR' 'darcy1/2 : Erreur relative sur la vitesse' ;
  394. 'TRAC' MODHYB SDS2 ;
  395. *
  396. 'TITR' 'darcy1/3 : Erreur relative sur la charge' ;
  397. 'TRAC' MODHYB ERRP3 ;
  398. 'TITR' 'darcy1/3 : Erreur relative sur la vitesse' ;
  399. 'TRAC' MODHYB SDS3 ;
  400. *
  401. 'FINSI' ;
  402. *
  403. * -------------------
  404. * = Gestion ERREURS =
  405. * -------------------
  406. MAXTP1 = 'MAXI' ERRTP1 ;
  407. MAXTP2 = 'MAXI' ERRTP2 ;
  408. MAXTP3 = 'MAXI' ERRTP3 ;
  409. MAXP1 = 'MAXI' ERRP1 ;
  410. MAXP2 = 'MAXI' ERRP2 ;
  411. MAXP3 = 'MAXI' ERRP3 ;
  412. MAXV1 = 'MAXI' SDC1 ;
  413. MAXV2 = 'MAXI' SDC2 ;
  414. MAXV3 = 'MAXI' SDC3 ;
  415. *
  416. 'SAUT' 'PAGE' ;
  417. 'SAUT' 2 'LIGNE' ;
  418. 'MESS' ' ERREURS RELATIVES ' ;
  419. 'SAUT' 1 'LIGNE' ;
  420. 'MESS' ' cas test TH H V' ;
  421. 'SAUT' 1 'LIGNE' ;
  422. 'MESS' ' numero1 ' maxtp1 ' ' maxp1 ' ' maxv1 ;
  423. 'SAUT' 1 'LIGNE' ;
  424. 'MESS' ' numero2 ' maxtp2 ' ' maxp2 ' ' maxv2 ;
  425. 'SAUT' 1 'LIGNE' ;
  426. 'MESS' ' numero3 ' maxtp3 ' ' maxp3 ' ' maxv3 ;
  427. 'SAUT' 2 'LIGNE' ;
  428. *
  429. EPS0 = 1.E-13 ;
  430. LOG1 = MAXTP1 > EPS0 ; LOG2 = MAXTP2 > EPS0 ; LOG3 = MAXTP3 > EPS0 ;
  431. LOG4 = MAXP1 > EPS0 ; LOG5 = MAXP2 > EPS0 ; LOG6 = MAXP3 > EPS0 ;
  432. LOG7 = MAXV1 > EPS0 ; LOG8 = MAXV2 > EPS0 ; LOG9 = MAXV3 > EPS0 ;
  433. LTP0 = LOG1 'OU' LOG2 'OU' LOG3 ;
  434. LP0 = LOG4 'OU' LOG5 'OU' LOG6 ;
  435. LV0 = LOG7 'OU' LOG8 'OU' LOG9 ;
  436. L0 = LTP0 'OU' LP0 'OU' LV0 ;
  437.  
  438. * Compte-rendu de fin et sortie
  439. 'SI' L0 ;
  440. 'ERREUR' 5 ;
  441. 'SINON' ;
  442. 'ERREUR' 0 ;
  443. 'FINSI' ;
  444. *
  445. 'FIN' ;
  446.  
  447.  
  448.  
  449.  
  450.  

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