Télécharger partition.dgibi

Retour à la liste

Numérotation des lignes :

  1. ************************************************************************
  2. * NOM : partition.dgibi
  3. * DESCRIPTION : Teste les options de partitionnement de maillage de
  4. * l'operateur PART
  5. ************************************************************************
  6. SMALL = 1.E-5 ;
  7. OPTI 'DIME' 3 ;
  8. * Affichages graphiques ?
  9. GRAPH = FAUX ;
  10.  
  11. * PROCEDURE PERMETTANT DE VALIDER QU'UNE PARTITION A LE NOMBRE ATTENDU
  12. * DE ZONES, OU QU'UN CONTOUR A LE NOMBRE ATTENDU D'ELEMENTS
  13. * On peu aussi preciser (lelok) la liste des types d'elements attendus
  14. DEBP VALIDER ENTI1*'ENTIER' ;
  15. ARGU TAB1/'TABLE' ;
  16. extab1 = 'EXIS' tab1 ;
  17. SI extab1 ;
  18. LOGI1 = (EGA (DIME TAB1) ENTI1) ;
  19. SINON ;
  20. ARGU MAIL1*'MAILLAGE' ;
  21. LOGI1 = (EGA (NBEL MAIL1) ENTI1) ;
  22. FINS ;
  23. *
  24. 'ARGU' LELOK/'LISTMOTS' ;
  25. 'SI' ('EXIS' lelok) ;
  26. 'SI' extab1 ; dtab1 = 'DIME' tab1 ; 'SINO' ; dtab1 = 1 ; 'FINS' ;
  27. LOGI2 = VRAI ;
  28. 'REPE' itab1 dtab1 ;
  29. 'SI' extab1 ; mymy = tab1 . &itab1 ; 'SINO' ; mymy = MAIL1 ; 'FINS' ;
  30. lisel = 'ELEM' mymy 'TYPE' ;
  31. tst = 'EXIS' lelok lisel 'ET' ;
  32. 'SI' ('NON' tst) ;
  33. 'LIST' lisel ;
  34. 'MESS' ' n''est pas inclus dans :' ;
  35. 'LIST' lelok ;
  36. 'FINS' ;
  37. LOGI2 = LOGI2 'ET' tst ;
  38. 'FIN' itab1 ;
  39. LOGI1 = LOGI1 'ET' LOGI2 ;
  40. 'FINS' ;
  41. *
  42. SI (NON LOGI1) ;
  43. ERRE 5 ;
  44. FINS ;
  45. FINP ;
  46.  
  47.  
  48. * +------------------------------------------------------------+
  49. * | MAILLAGES SURFACIQUES TYPE "LIVRETS DE QUELQUES PAGES" ... |
  50. * +------------------------------------------------------------+
  51.  
  52. NNN = 2 ;
  53.  
  54. OPTI 'ELEM' 'QUA4' ;
  55. A1 = (0. 0. 0.) DROI NNN (1. 0. 0.) TRAN NNN (0. 1. 0.) ;
  56.  
  57. OPTI 'ELEM' 'TRI3' ;
  58. B1 = (1. 0. 0.) DROI NNN (1. 0. 1.) TRAN NNN (0. 1. 0.) ;
  59.  
  60. C1 = A1 PLUS (1. 0. 0.) ;
  61.  
  62. D1 = B1 TOUR (1. 0. 0.) (1. 1. 0.) 80. ;
  63.  
  64. E1 = CHAN 'QUAD' D1 ;
  65.  
  66. F1 = CHAN 'QUAD' (A1 TOUR (1. 0. 0.) (1. 1. 0.) -70.) ;
  67.  
  68. G1 = CHAN 'QUAD' (A1 TOUR (1. 0. 0.) (1. 1. 0.) -10.) ;
  69.  
  70. ELIM (A1 ET B1 ET C1 ET D1 ET E1 ET F1 ET G1) SMALL ;
  71.  
  72. MAIL11 = A1 ET B1 ET C1 ;
  73. MAIL11D = 'CHAN' MAIL11 'QUAD' ;
  74. MAIL11F = 'CHAN' MAIL11D 'QUAF' ;
  75. a11_30 = ARET MAIL11 30. ;
  76. a11_30d = 'CHAN' a11_30 'QUAD' ;
  77.  
  78. MAIL12 = A1 ET B1 ET C1 ET D1 ;
  79. MAIL12D = 'CHAN' MAIL12 'QUAD' ;
  80. MAIL12F = 'CHAN' MAIL12D 'QUAF' ;
  81.  
  82. MAIL13 = A1 ET B1 ET C1 ET E1 ET F1 ET G1 ;
  83.  
  84. ELIM (MAIL11 'ET' MAIL11D 'ET' MAIL11F 'ET' a11_30 'ET' a11_30d 'ET'
  85. MAIL12 'ET' MAIL12D 'ET' MAIL12F 'ET' MAIL13) SMALL ;
  86.  
  87.  
  88. *******************************************************
  89. lline1d = 'MOTS' 'SEG2' ;
  90. lquad1d = 'MOTS' 'SEG3' ;
  91. *
  92. lline2d = 'MOTS' 'TRI3' 'QUA4' ;
  93. lquad2d = 'MOTS' 'TRI6' 'QUA8' ;
  94. lquaf2d = 'MOTS' 'TRI7' 'QUA9' ;
  95. *
  96. lline3d = 'MOTS' 'TET4' 'PYR5' 'PRI6' 'CUB8' ;
  97. lquad3d = 'MOTS' 'TE10' 'PY13' 'PR15' 'CU20' ;
  98. lquaf3d = 'MOTS' 'TE15' 'PY19' 'PR21' 'CU27' ;
  99.  
  100. 'REPE' iityp 3 ;
  101. ityp = &iityp ;
  102. 'SI' ('EGA' ityp 1) ;
  103. ma11 = mail11 ; a11 = a11_30 ; ma12 = mail12 ; txt = 'LINE' ; lelok2 = lline2d ; lelok1 = lline1d ;
  104. 'FINS' ;
  105. 'SI' ('EGA' ityp 2) ;
  106. ma11 = mail11d ; a11 = a11_30d ; ma12 = mail12d ; txt = 'QUAD' ; lelok2 = lquad2d ; lelok1 = lquad1d ;
  107. 'FINS' ;
  108. * Les QUAFs ne fonctionnent pas car en interne PART SEPA ANGL utilise un modele mecanique
  109. * sur les COQ6 ou COQ8 mais il n'y a pas COQ7 ou COQ9
  110. 'SI' ('EGA' ityp 3) ;
  111. ma11 = mail11f ; a11 = a11_30d ; ma12 = mail12f ; txt = 'QUAF' ; lelok2 = lquaf2d ; lelok1 = lquad1d ;
  112. 'FINS' ;
  113.  
  114. * LES DEUX PARTITIONS CI-DESSOUS NE SONT PAS EQUIVALENTES !
  115. 'SI' ('NEG' ityp 3) ;
  116. TAB11_1 = PART 'NESC' 'SEPA' MA11 'ANGL' 30. ;
  117. MESS 'PARTITION 11' ' ' txt ' POUR UN ANGLE DE 30 DEGRES' ;
  118. SI GRAPH ; TRACPART TAB11_1 'NCLK' ; FINS ;
  119. VALIDER TAB11_1 2 lelok2 ;
  120. 'FINS' ;
  121. *
  122. TAB11_2 = PART 'NESC' 'SEPA' MA11 'MAIL' a11 ;
  123. MESS 'PARTITION 11' ' ' txt ' LE LONG DES ARETES > 30 DEGRES' ;
  124. SI GRAPH ; TRACPART TAB11_2 'NCLK' ; FINS ;
  125. VALIDER TAB11_2 3 lelok2 ;
  126.  
  127.  
  128. * ON EN PROFITE POUR TESTER L'OPERATEUR CONTOUR
  129. BORI11 = CONT MA11 'INTE' ;
  130. BORE11 = CONT MA11 'EXTE' ;
  131. BORT11 = CONT MA11 'TOUT' ;
  132.  
  133. VALIDER BORI11 NNN lelok1 ;
  134. VALIDER BORE11 (9*NNN) lelok1 ;
  135. VALIDER BORT11 (10*NNN) lelok1 ;
  136.  
  137. SI GRAPH ;
  138. TRAC BORI11 'NOEU' 'TITR' ('CHAI' 'CONTOUR INTERIEUR DE MAIL11' ' ' txt) ;
  139. TRAC BORE11 'NOEU' 'TITR' ('CHAI' 'CONTOUR EXTERIEUR DE MAIL11' ' ' txt) ;
  140. TRAC BORT11 'NOEU' 'TITR' ('CHAI' 'CONTOUR COMPLET DE MAIL11' ' ' txt) ;
  141. FINS ;
  142.  
  143.  
  144. TAB11_3 = PART 'NESC' 'SEPA' MA11 'MAIL' BORI11 ;
  145. TAB11_4 = PART 'NESC' 'SEPA' MA11 'MAIL' BORE11 ;
  146. TAB11_5 = PART 'NESC' 'SEPA' MA11 'MAIL' BORT11 ;
  147.  
  148. MESS 'PARTITION 11' ' ' txt ' LE LONG DU CONTOUR INTERIEUR' ;
  149. SI GRAPH ; TRACPART TAB11_3 'NCLK' ; FINS ;
  150. MESS 'PARTITION 11' ' ' txt ' LE LONG DU CONTOUR INTERIEUR' ;
  151. SI GRAPH ; TRACPART TAB11_4 'NCLK' ; FINS ;
  152. MESS 'PARTITION 11' ' ' txt ' LE LONG DU CONTOUR INTERIEUR' ;
  153. SI GRAPH ; TRACPART TAB11_5 'NCLK' ; FINS ;
  154.  
  155. VALIDER TAB11_3 3 lelok2 ;
  156. VALIDER TAB11_4 1 lelok2 ;
  157. VALIDER TAB11_5 3 lelok2 ;
  158.  
  159. * ENCORE UNE AUTRE FACON D'OBTENIR LE MEME RESULTAT
  160. TAB11_6 = PART 'NESC' 'SEPA' MA11 'FACE' ;
  161.  
  162. MESS 'PARTITION 11' ' ' txt ' AVEC L OPTION "FACE"' ;
  163. SI GRAPH ; TRACPART TAB11_6 'NCLK' ; FINS ;
  164.  
  165. VALIDER TAB11_6 3 lelok2 ;
  166.  
  167. *******************************************************
  168.  
  169. * EFFET DE LA VALEUR DE L'ANGLE SUR LE NOMBRE DE PARTITIONS
  170. 'SI' ('NEG' ityp 3) ;
  171. TAB12_1 = PART 'NESC' MA12 'SEPA' 'ANGL' 5. ;
  172. TAB12_2 = PART 'NESC' MA12 'SEPA' 'ANGL' 30. ;
  173. TAB12_3 = PART 'NESC' MA12 'SEPA' 'ANGL' 100. ;
  174.  
  175. MESS 'PARTITION 12' ' ' txt ' POUR UN ANGLE DE 5 DEGRES' ;
  176. SI GRAPH ; TRACPART TAB12_1 'NCLK' ; FINS ;
  177. MESS 'PARTITION 12' ' ' txt ' POUR UN ANGLE DE 30 DEGRES' ;
  178. SI GRAPH ; TRACPART TAB12_2 'NCLK' ; FINS ;
  179. MESS 'PARTITION 12' ' ' txt ' POUR UN ANGLE DE 100 DEGRES' ;
  180. SI GRAPH ; TRACPART TAB12_3 'NCLK' ; FINS ;
  181.  
  182. VALIDER TAB12_1 3 lelok2 ;
  183. VALIDER TAB12_2 2 lelok2 ;
  184. VALIDER TAB12_3 1 lelok2 ;
  185. 'FINS' ;
  186.  
  187. 'FIN' iityp ;
  188.  
  189. *******************************************************
  190.  
  191. * PARTITION AVEC DES ELEMENTS D'ORDRE 1 ET 2 DANS LE MAILLAGE
  192. * SG 2026/07/29 : quel est le resultat attendu ?
  193.  
  194.  
  195. * CE CONTOUR CONTIENT A LA FOIS DES SEG2 ET DES SEG3...
  196. BORI13 = CONT MAIL13 'INTE' ;
  197. LIST BORI13 ;
  198. VALIDER BORI13 (2*NNN) (lline1d 'ET' lquad1d) ;
  199. * ...ALORS QUE CES ARETES NE CONTIENNENT QUE DES SEG2 (BUG ?)
  200. * SG 2026/07/29 : ARET, contrairement a PART qui calcule la normale au centre de gravite
  201. * de l'element prend un triangle dans chaque coin des elements quadratiques
  202. * pour calculer sa normale et renvoie en consequence des demi-SEG3 (SEG2)
  203. *
  204. ARET13 = ARET MAIL13 3. ;
  205. LIST ARET13 ;
  206.  
  207. TAB13_1 = PART 'NESC' 'SEPA' MAIL13 'ANGL' 3. ;
  208. TAB13_2 = PART 'NESC' 'SEPA' MAIL13 'MAIL' ARET13 ;
  209. TAB13_3 = PART 'NESC' 'SEPA' MAIL13 'FACE' ;
  210. TAB13_4 = PART 'NESC' 'SEPA' MAIL13 'MAIL' BORI13 ;
  211.  
  212. MESS 'PARTITION 13 POUR UN ANGLE DE 3 DEGRES' ;
  213. SI GRAPH ; TRACPART TAB13_1 'NCLK' ; FINS ;
  214. MESS 'PARTITION 13 LE LONG DES ARETES > 3 DEGRES' ;
  215. SI GRAPH ; TRACPART TAB13_2 'NCLK' ; FINS ;
  216. MESS 'PARTITION 13 AVEC L OPTION "FACE"' ;
  217. SI GRAPH ; TRACPART TAB13_3 'NCLK' ; FINS ;
  218. MESS 'PARTITION 13 LE LONG DU CONTOUR INTERIEUR' ;
  219. SI GRAPH ; TRACPART TAB13_4 'NCLK' ; FINS ;
  220.  
  221. VALIDER TAB13_1 4 (lline2d 'ET' lquad2d) ;
  222. VALIDER TAB13_2 4 (lline2d 'ET' lquad2d) ;
  223. VALIDER TAB13_3 6 (lline2d 'ET' lquad2d) ;
  224. VALIDER TAB13_4 6 (lline2d 'ET' lquad2d) ;
  225.  
  226. * +---------------------------------------+
  227. * | MAILLAGE LINEIQUE TYPE "TALISMAN" ... |
  228. * +---------------------------------------+
  229.  
  230. P0 = (0. 0. 0.) ;
  231. P1 = (1. 0. 0.) ;
  232. PTS2 = P0 ET P1 ;
  233. PK = P1 ;
  234. REPE K 11 ;
  235. PK = PK TOUR P0 (0. 0. 1.) 30. ;
  236. PTS2 = PTS2 ET PK ;
  237. FIN K ;
  238. MAIL2 = CHAN 'LIGN' (TRIA PTS2) ;
  239. MAIL2D = 'CHAN' MAIL2 'QUAD' ;
  240. ELIM (MAIL2 'ET' MAIL2D 'ET' PTS2) SMALL ;
  241.  
  242. 'REPE' iityp 2 ;
  243. ityp = &iityp ;
  244.  
  245. 'SI' ('EGA' ityp 1) ;
  246. ma2 = mail2 ; txt = 'LINE' ; lelok2 = lline2d ; lelok1 = lline1d ;
  247. 'FINS' ;
  248. 'SI' ('EGA' ityp 2) ;
  249. ma2 = mail2d ; txt = 'QUAD' ; lelok2 = lquad2d ; lelok1 = lquad1d ;
  250. 'FINS' ;
  251.  
  252. * ON COMMENCE PAR CHERCHER LES JONCTIONS...
  253. JONC2 = POIN MA2 'JONC' ;
  254. SI GRAPH ; TRAC (MA2 ET (COUL 'ROUG' JONC2)) ; FINS ;
  255. VALIDER JONC2 13 ('MOTS' 'POI1') ;
  256.  
  257.  
  258. * ...PUIS ON TESTE QUELQUES PARTITIONS
  259. TAB2_1 = PART 'NESC' 'SEPA' MA2 'LIGN' ;
  260. TAB2_2 = PART 'NESC' 'SEPA' MA2 'MAIL' JONC2 ;
  261. TAB2_3 = PART 'NESC' 'SEPA' MA2 'ANGL' 11. ;
  262. TAB2_4 = PART 'NESC' 'SEPA' MA2 'MAIL' (ELEM PTS2 (LECT 1 8 10)) ;
  263.  
  264. 'OPTI' 'TRAC' x ;
  265.  
  266. MESS 'PARTITION 2' ' ' txt ' AVEC L OPTION "LIGN"' ;
  267. SI GRAPH ; TRACPART TAB2_1 'NCLK' ; FINS ;
  268. MESS 'PARTITION 2' ' ' txt ' SELON LES NOEUDS DE JONCTION' ;
  269. SI GRAPH ; TRACPART TAB2_2 'NCLK' ; FINS ;
  270. MESS 'PARTITION 2' ' ' txt ' POUR UN ANGLE DE 10 DEGRES' ;
  271. SI GRAPH ; TRACPART TAB2_3 'NCLK' ; FINS ;
  272. MESS 'PARTITION 2' ' ' txt ' SELON 2 NOEUDS' ;
  273. SI GRAPH ; TRACPART TAB2_4 'NCLK' ; FINS ;
  274.  
  275. VALIDER TAB2_1 24 lelok1 ;
  276. VALIDER TAB2_2 24 lelok1 ;
  277. VALIDER TAB2_3 18 lelok1 ;
  278. VALIDER TAB2_4 4 lelok1 ;
  279.  
  280.  
  281. 'FIN' iityp ;
  282.  
  283. * +--------------------+
  284. * | MAILLAGE VOLUMIQUE |
  285. * +--------------------+
  286.  
  287. OPTI 'ELEM' 'CUB8' ;
  288.  
  289. SURF1 = (0. 0. 0.) DROI 4 (1. 0. 0.) TRAN 4 (0. 1. 0.) ;
  290. VOLU1 = SURF1 VOLU 'TRAN' 4 (0. 0. 1.) ;
  291. VOLU2 = VOLU1 PLUS (1. 0. 0.) ;
  292. * VOLU2 = CHAN 'TET4' VOLU2 ;
  293. VOLU3 = VOLU1 ET VOLU2 ;
  294.  
  295. COUP1 = SURF1 PLUS (0. 0. 0.25) ;
  296. COUP2 = SURF1 PLUS (1. 0. 0.75) ;
  297. * COUP2 = CHAN 'TRI3' COUP2 ;
  298. COUP3 = (COTE 2 COUP1) TRAN 2 (0. 0. 0.5) ;
  299. COUP4 = SURF1 PLUS (0.75 0. 0.75) ;
  300. COUP_A = COUL 'ROUG' (COUP1 ET COUP2 ET COUP3) ;
  301. COUP_B = COUL 'VERT' (COUP1 ET COUP4 ET COUP3) ;
  302.  
  303.  
  304. VOLU3D = 'CHAN' VOLU3 'QUAD' ; VOLU3F = 'CHAN' VOLU3D 'QUAF' ;
  305. COUP_AD = 'CHAN' COUP_A 'QUAD' ; COUP_AF = 'CHAN' COUP_AD 'QUAF' ;
  306. COUP_BD = 'CHAN' COUP_B 'QUAD' ; COUP_BF = 'CHAN' COUP_BD 'QUAF' ;
  307.  
  308. ELIM (VOLU3 ET COUP_A ET COUP_B 'ET' VOLU3D ET COUP_AD ET COUP_BD 'ET' VOLU3F ET COUP_AF ET COUP_BF ) SMALL ;
  309.  
  310. 'REPE' iityp 3 ;
  311. ityp = &iityp ;
  312. 'SI' ('EGA' ityp 1) ;
  313. vol3 = volu3 ; coupa = coup_a ; coupb = coup_b ; txt = 'LINE' ; lelok3 = lline3d ;
  314. 'FINS' ;
  315. 'SI' ('EGA' ityp 2) ;
  316. vol3 = volu3D ; coupa = coup_aD ; coupb = coup_bD ; txt = 'QUAD' ; lelok3 = lquad3d ;
  317. 'FINS' ;
  318. 'SI' ('EGA' ityp 3) ;
  319. vol3 = volu3F ; coupa = coup_aF ; coupb = coup_bF ; txt = 'QUAF' ; lelok3 = lquaf3d ;
  320. 'FINS' ;
  321.  
  322.  
  323. SI GRAPH ;
  324. TRAC (VOL3 ET COUPA) 'CACH' 'TITR' ('CHAI' 'MAILLAGE SEPARATEUR COUP_A' ' ' txt) ;
  325. TRAC (VOL3 ET COUPB) 'CACH' 'TITR' ('CHAI' 'MAILLAGE SEPARATEUR COUP_B' ' ' txt) ;
  326. FINS ;
  327.  
  328. TAB3_1 = PART 'NESC' 'OPTI' VOL3 8 ;
  329. TAB3_2 = PART 'NESC' 'ARLE' VOL3 5 ;
  330. TAB3_3 = PART 'NESC' 'CONN' VOL3 ;
  331. TAB3_4 = PART 'NESC' 'SEPA' VOL3 'MAIL' COUPA ;
  332. TAB3_5 = PART 'NESC' 'SEPA' VOL3 'MAIL' COUPB ;
  333.  
  334. MESS 'PARTITION 3' ' ' txt ' AVEC L OPTION "OPTI"' ;
  335. SI GRAPH ; TRACPART TAB3_1 'NCLK' ; FINS ;
  336. MESS 'PARTITION 3' ' ' txt ' AVEC L OPTION "ARLE"' ;
  337. SI GRAPH ; TRACPART TAB3_2 'NCLK' ; FINS ;
  338. MESS 'PARTITION 3' ' ' txt ' AVEC L OPTION "CONN"' ;
  339. SI GRAPH ; TRACPART TAB3_3 'NCLK' ; FINS ;
  340. MESS 'PARTITION 3' ' ' txt ' AVEC L OPTION "SEPA" "MAIL" COUP_A' ;
  341. SI GRAPH ; TRACPART TAB3_4 'NCLK' ; FINS ;
  342. MESS 'PARTITION 3' ' ' txt ' AVEC L OPTION "SEPA" "MAIL" COUP_B' ;
  343. SI GRAPH ; TRACPART TAB3_5 'NCLK' ; FINS ;
  344.  
  345. VALIDER TAB3_1 8 lelok3 ;
  346. VALIDER TAB3_2 5 lelok3 ;
  347. VALIDER TAB3_3 1 lelok3 ;
  348. VALIDER TAB3_4 2 lelok3 ;
  349. VALIDER TAB3_5 1 lelok3 ;
  350.  
  351. 'FIN' iityp ;
  352.  
  353.  
  354. 'FIN' ;
  355.  
  356.  
  357.  

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