Télécharger mato-2d2.dgibi

Retour à la liste

Numérotation des lignes :

  1. * fichier : mato-2d2.dgibi
  2. ************************************************************************
  3. ************************************************************************
  4. 'OPTION' 'ECHO' 0 ;
  5. ************************************************************************
  6. * NOM : MATO-2D2
  7. * DESCRIPTION : Test du MAilleur TOpologique pour mailler un carré avec
  8. * raffinement isotrope dans un coin.
  9. *
  10. * On teste la qualité des éléments obtenus dans la
  11. * métrique voulue.
  12. * On ne teste pas la r-adaptation (DEDU ADAP) car il
  13. * manque les termes de dérivées en espace de la métrique.
  14. *
  15. * Repris de raft1.dgibi qui utilise TRIA
  16. * et de 2d_1.dgibi+tests
  17. *
  18. *
  19. * LANGAGE : GIBIANE-CAST3M
  20. * AUTEUR : Stéphane GOUNAND (CEA/DEN/DM2S/SEMT/LTA)
  21. * mél : stephane.gounand@cea.fr
  22. **********************************************************************
  23. * VERSION : v1, 04/04/2020, version initiale
  24. * HISTORIQUE : v1, 04/04/2020, création
  25. * HISTORIQUE :
  26. * HISTORIQUE :
  27. ************************************************************************
  28. *
  29. interact = faux ;
  30. graph = FAUX ;
  31. complet = FAUX ;
  32. *
  33. 'OPTION' 'DIME' 2 'ELEM' 'TRI3' ;
  34. *
  35. 'SI' ('NON' interact) ;
  36. 'OPTION' 'TRAC' 'PSC' ;
  37. 'SINON' ;
  38. 'OPTION' 'TRAC' 'X' ;
  39. 'FINSI' ;
  40. lqual = 'PROG' 0.5 'PAS' 0.025 1. ;
  41. *
  42. ******************************************************************
  43. * P R O C E D U R E S
  44. *
  45. * MESUELEM
  46. *
  47. * Calcul d'une mesure de maille aux noeuds
  48. * Je sais le faire de trois manières (équivalentes pour les SEG2
  49. * mais pas pour les TRI3)
  50. * 1) Avec l'opérateur MESU (boucle sur les éléments en GIBIANE)
  51. * + CHAN 'CHPO'
  52. * 2) En intégrant (par éléments) un champ par élément valant 1
  53. * + CHAN 'CHPO'
  54. * 3) Matrice de masse diagonalisée
  55. * Ici, c'est la méthode 3.
  56. *
  57. 'DEBPROC' MESUELEM ;
  58. 'ARGUMENT' mm*'MAILLAGE' ;
  59. 'SI' faux ;
  60. * Méthode 2
  61. mod = 'MODE' mm 'MECANIQUE' 'ELASTIQUE' ;
  62. c1 = 'MANU' 'CHML' mod 'SCAL' 1. 'GRAVITE' ;
  63. ctai = 'INTG' 'ELEM' mod c1 ;
  64. cctai = 'CHANGER' 'CHPO' mod ctai 'MOYE' ;
  65. 'FINSI' ;
  66. * Méthode 3
  67. cctai = 'DOMA' ('MODE' ('CHANGER' mm 'QUAF') 'NAVIER_STOKES' 'LINE')
  68. 'XXDIAGSI' ;
  69. *
  70. 'RESPRO' cctai ;
  71. 'FINPROC' ;
  72. *
  73. * CALTAIL
  74. *
  75. * Calcul du champ de taille de maille voulue T par un problème de
  76. * thermique, on résout :
  77. * Laplacien T = 0
  78. * avec T_bord = taille des mailles du bord
  79. *
  80. *
  81. 'DEBPROC' CALTAIL ;
  82. 'ARGUMENT' mt*'MAILLAGE' ;
  83. *
  84. cmt = 'CONTOUR' mt ;
  85. *
  86. cdt = MESUELEM cmt ;
  87. * En fait, on résout le problème au laplacien pour le log
  88. * des tailles de maille.
  89. lcdt = 'LOG' cdt ;
  90. modt = 'MODELISER' mt 'THERMIQUE' 'ISOTROPE' ;
  91. cart = 'MATERIAU' modt 'K' 1.D0 ;
  92. matt = 'COND' modt cart ;
  93. mcdt = 'EXTRAIRE' lcdt 'MAIL' ;
  94. matb = 'BLOQUE' 'T' mcdt ;
  95. fb = 'DEPIMPOSE' matb ('NOMC' 'T' lcdt) ;
  96. clden = 'EXCO' 'T' ('RESOUD' ('ET' matt matb) fb) ;
  97. cden = 'EXP' clden ;
  98. *'TRACER' cden mt ;
  99. 'RESPRO' cden ;
  100. 'FINPROC' ;
  101. * Fin des P R O C E D U R E S
  102. ******************************************************************
  103. *
  104. * Création du contour
  105. *
  106. d1 = 0.01 ; d2 = 0.1 ;
  107. pA = 0. 0. ; pB = 1. 0. ; pC = 1. 1. ; pD = 0. 1. ;
  108. lAB = 'DROI' pA pB 'DINI' d1 'DFIN' d2 ;
  109. lBC = 'DROI' pB pC 'DINI' d2 'DFIN' d2 ;
  110. lCD = 'DROI' pC pD 'DINI' d2 'DFIN' d2 ;
  111. lDA = 'DROI' pD pA 'DINI' d2 'DFIN' d1 ;
  112. *
  113. cnt = lAB 'ET' lBC 'ET' lCD 'ET' lDA ;
  114. *
  115. tt = 'CHAI' 'Iteration ' itcou ;
  116. 'SI' graph ;
  117. tit = 'CHAI' 'Contour ' ;
  118. 'TRACER' 'CACH' cnt 'TITR' tit 'NOEU' ;
  119. 'FINSI' ;
  120. *
  121. * Tests divers (consistance...)
  122. *
  123. lok = VRAI ;
  124. *
  125. * TEST 1 Création d'un maillage sans ajouter de noeuds
  126. *
  127. mail1 = 'TRIA' 'TOPO' cnt 'NOAJ' ;
  128. 'SI' graph ;
  129. tit = 'CHAI' 'Maillage genere sans noeud supplémentaire' ;
  130. 'TRAC' mail1 'TITR' tit 'NOEU' ;
  131. 'FINSI' ;
  132. * Test 1 : on vérifie que le nombre de noeuds est conservé
  133. nno1 = 'NBNO' cnt ;
  134. nno2 = 'NBNO' mail1 ;
  135. 'SI' ('NEG' nno1 nno2) ;
  136. 'MESS' '!!! TEST 1 : nombre de noeuds non conserve' ;
  137. lok = lok 'ET' faux ;
  138. 'FINS' ;
  139. *
  140. * TEST 2 Création d'un maillage en ajoutant des noeuds interieurs
  141. *
  142. mail2 = 'TRIA' 'TOPO' cnt 'AJNO' ;
  143. 'SI' graph ;
  144. tit = 'CHAI' 'Maillage genere en ajoutant des noeuds interieurs' ;
  145. 'TRAC' mail2 'TITR' tit 'NOEU' ;
  146. 'FINSI' ;
  147. * Test 2 : on vérifie que les qualités mini, moyenne et maxi des éléments sont bonnes
  148. qmail2 = 'INDI' 'TOPO' mail2 ;
  149. miq = 'MINI' qmail2 ; moq = MATOUTIL 'MOYECHAM' qmail2 ;
  150. maq = 'MAXI' qmail2 ;
  151. 'MESS' 'FORMAT' '(E9.2)' 'TEST 2 : Qmin=' miq ' Qmoy=' moq ' Qmax=' maq ;
  152. 'SI' graph ;
  153. momail2 = 'MODE' mail2 'THERMIQUE' ;
  154. tit = 'CHAI' 'Qualite maillage avec noeuds interieurs' ;
  155. 'TRAC' qmail2 momail2 lqual 'TITR' tit ;
  156. 'FINSI' ;
  157. * Sur mon linux64 au 02/04/2020 : qmin=0.63 qmoy=0.87 qmax=1.00
  158. miqref = 0.62 ; moqref = 0.86 ; maqref = 0.99 ;
  159. 'SI' ('<EG' miq miqref) ;
  160. 'MESS' '!!! TEST 2 : miq=' miq ' < miqref=' miqref ;
  161. lok = lok 'ET' faux ;
  162. 'FINS' ;
  163. 'SI' ('&lt;EG' moq moqref) ;
  164. 'MESS' '!!! TEST 2 : moq=' moq ' < moqref=' moqref ;
  165. lok = lok 'ET' faux ;
  166. 'FINS' ;
  167. 'SI' ('&lt;EG' maq maqref) ;
  168. 'MESS' '!!! TEST 2 : maq=' maq ' < maqref=' maqref ;
  169. lok = lok 'ET' faux ;
  170. 'FINS' ;
  171. *
  172. * TEST 2b Une petite boucle avec de la r-adaptation (DEDU ADAP) permet
  173. * d'améliorer la régularité du maillage mail2 mais ce n'est pas nécessaire
  174. * pour la suite donc on saute.
  175. *
  176. * 2020/04/03 : On arrive à avoir Qmin= 0.74E+00 Qmax= 0.10E+01 Qmoy= 0.91E+00
  177. * avec nopt = 2 ; thdedu = 1.0 ; rdepa =1. ; nitm = 1 ;
  178. *
  179. 'SI' complet ;
  180. nopt = 2 ; iopt = 0 ;
  181. * Paramètres de DEDUADAP
  182. thdedu = 1. ; rdepa = 1. ; nitm = 1 ;
  183. maili = mail2 ;
  184. 'REPE' bclopt nopt ;
  185. iopt = iopt '+' 1 ;
  186. tit = 'CHAI' 'i=' iopt ;
  187. * Partie DEDUADAP
  188. maili1 = maili ;
  189. depa = 'DEDU' 'ADAP' maili1 'THET' thdedu 'NITM' nitm ;
  190. depa = '*' depa rdepa ;
  191. mcdep = 'MAXI' depa 'ABS' ;
  192. 'MESS' tit ' dedu max. dep=' mcdep ;
  193. 'FORM' depa ;
  194. qmaili1 = 'INDI' 'TOPO' maili1 ;
  195. miq = 'MINI' qmaili1 ; moq = MATOUTIL 'MOYECHAM' qmaili1 ;
  196. maq = 'MAXI' qmaili1 ;
  197. 'MESS' 'FORMAT' '(E9.2)' tit ' deduadap : Qmin=' miq ' Qmoy=' moq ' Qmax=' maq ;
  198. 'SI' graph ;
  199. momaili1 = 'MODE' maili1 'THERMIQUE' ;
  200. vdep = 'VECT' depa -1. 'UX' 'UY' 'NOIR' ;
  201. titg = 'CHAI' tit ' deduadap' ;
  202. 'TRAC' qmaili1 momaili1 vdep maili1 lqual 'TITR' titg ;
  203. 'FINS' ;
  204. * Partie MAILTOPO
  205. maili2 = 'REMA' maili1 ('CONT' maili1) ;
  206. * Qualités
  207. qmaili2 = 'INDI' 'TOPO' maili2 ;
  208. miq = 'MINI' qmaili2 ; moq = MATOUTIL 'MOYECHAM' qmaili2 ;
  209. maq = 'MAXI' qmaili2 ;
  210. 'MESS' 'FORMAT' '(E9.2)' tit ' mailtopo : Qmin=' miq ' Qmoy=' moq ' Qmax=' maq ;
  211. 'SI' graph ;
  212. momaili2 = 'MODE' maili2 'THERMIQUE' ;
  213. titg = 'CHAI' tit ' mailtopo' ;
  214. 'TRAC' qmaili2 momaili2 lqual 'TITR' titg ;
  215. 'FINSI' ;
  216. maili = maili2 ;
  217. 'FIN' bclopt ;
  218. mail2 = maili ;
  219. 'FINS' ;
  220. *
  221. * TEST 3 Remaillage du précédent avec une métrique isotrope variable
  222. * en espace
  223. *
  224. cden = 'NOMC' 'G' (caltail mail2) ;
  225. cmet = cden '**' -2 ;
  226. 'SI' graph ;
  227. tit = 'CHAI' 'Taille de maille voulue' ;
  228. lcden = '/' ('LOG' cden) ('LOG' 10.) ;
  229. 'TRAC' cden mail2 'TITR' tit 'NOEU' ;
  230. 'FINSI' ;
  231. * Facultatif : mettre tout ça dans la notice de ALGOMAIL
  232. * ainsi que les valeurs par défaut
  233. * tparam3 . 'debug' = 2 ;
  234. mail3 cmetf2 = 'REMA' mail2 ('CONT' mail2) cmet 'IPOL' ;
  235. 'SI' graph ;
  236. tit = 'CHAI' 'Maillage avec metrique isotrope variable en espace'
  237. ;
  238. 'TRAC' mail3 'TITR' tit 'NOEU' ;
  239. 'FINSI' ;
  240. * Test 3 : on vérifie que les qualités des éléments sont bonnes
  241. * On peut :
  242. * 1) recalculer la métrique voulue sur le nouveau maillage
  243. * 2) ou récupérer celle calculée sur l'ancien maillage mais interpolée
  244. * par le mailleur
  245. *1 TEST 3 avec cmetf1 : Qmin= 0.58E+00 Qmoy= 0.85E+00 Qmax= 0.99E+00
  246. *2 TEST 3 avec cmetf2 : Qmin= 0.62E+00 Qmoy= 0.84E+00 Qmax= 0.10E+01
  247. *
  248. cdenf1 = 'NOMC' 'G' (caltail mail3) ; cmetf1 = cdenf1 '**' -2 ;
  249. * 'TRAC' ('-' cmetf2 cmetf1) mail3 'TITR' 'Diff. metrique' ;
  250. qmail3 = 'INDI' 'TOPO' mail3 cmetf2 ;
  251. miq = 'MINI' qmail3 ; moq = MATOUTIL 'MOYECHAM' qmail3 ;
  252. maq = 'MAXI' qmail3 ;
  253. 'MESS' 'FORMAT' '(E9.2)' 'TEST 3 : Qmin=' miq ' Qmoy=' moq ' Qmax=' maq ;
  254. 'SI' graph ;
  255. momail3 = 'MODE' mail3 'THERMIQUE' ;
  256. tit = 'CHAI' 'Qualite maillage avec noeuds interieurs' ;
  257. 'TRAC' qmail3 momail3 lqual 'TITR' tit ;
  258. 'FINSI' ;
  259. miqref = 0.61 ; moqref = 0.83 ; maqref = 0.99 ;
  260. 'SI' ('&lt;EG' miq miqref) ;
  261. 'MESS' '!!! TEST 3 : miq=' miq ' < miqref=' miqref ;
  262. lok = lok 'ET' faux ;
  263. 'FINS' ;
  264. 'SI' ('&lt;EG' moq moqref) ;
  265. 'MESS' '!!! TEST 3 : moq=' moq ' < moqref=' moqref ;
  266. lok = lok 'ET' faux ;
  267. 'FINS' ;
  268. 'SI' ('&lt;EG' maq maqref) ;
  269. 'MESS' '!!! TEST 3 : maq=' maq ' < maqref=' maqref ;
  270. lok = lok 'ET' faux ;
  271. 'FINS' ;
  272. *
  273. * TEST 4 On vérifie qu'en remaillant le maillage précédent avec la même
  274. * métrique interpolée, on ne modifie pas le maillage
  275. *
  276. mail4 = 'REMA' mail3 ('CONT' mail3) cmetf2 ;
  277. * Test 4 : on vérifie que mail4 et mail3 sont identiques ainsi que les
  278. * qualités
  279. dn34= 'NBEL' ('DIFF' mail3 mail4) ;
  280. 'SI' ('NEG' dn34 0) ;
  281. 'MESS' '!!! TEST 4 : mail3 .NE. mail4' ;
  282. lok = lok 'ET' faux ;
  283. 'FINS' ;
  284. qmail4 = 'INDI' 'TOPO' mail4 cmetf2 ;
  285. dq34 = 'MAXI' ('-' qmail4 qmail3) 'ABS' ;
  286. * VALE prec un peu trop serré pour semt2
  287. 'SI' ('>' dq34 ('*' ('VALE' 'PREC') 10.)) ;
  288. 'MESS' '!!! TEST 4 : qmail3 .NE. qmail4' ;
  289. lok = lok 'ET' faux ;
  290. 'FINS' ;
  291. *
  292. * TEST 5 On vérifie qu'en remaillant le maillage précédent avec la même
  293. * métrique isotrope donnée sous forme d'une métrique anisotrope, on ne
  294. * modifie pas le maillage
  295. * Cela serait vrai sauf que, pour les tenseurs anisotropes , on ne fait
  296. * pas encore la moyenne géométrique (c'est plus compliqué !)
  297. *
  298. cmet = ('NOMC' 'G11' cmetf2 'NATU' 'DIFFUS') 'ET'
  299. ('NOMC' 'G22' cmetf2 'NATU' 'DIFFUS') 'ET'
  300. ('NOMC' 'G21' ('*' cmetf2 0.) 'NATU' 'DIFFUS') ;
  301. mail5 = 'REMA' mail3 ('CONT' mail3) cmet ;
  302. * Test 5 : on vérifie que mail5 et mail3 sont identiques ainsi que les
  303. * qualités
  304. dn35= 'NBEL' ('DIFF' mail3 mail5) ;
  305. 'SI' ('NEG' dn35 0) ;
  306. 'MESS' '!!! TEST 5 : mail3 .NE. mail5' ;
  307. lok = lok 'ET' faux ;
  308. 'FINS' ;
  309. qmail5 = 'INDI' 'TOPO' mail5 cmet ;
  310. dq35 = 'MAXI' ('-' qmail5 qmail3) 'ABS' ;
  311. * VALE prec un peu trop serré pour semt2
  312. 'SI' ('>' dq35 ('*' ('VALE' 'PREC') 10.)) ;
  313. 'MESS' '!!! TEST 5 : qmail3 .NE. qmail5' ;
  314. lok = lok 'ET' faux ;
  315. 'FINS' ;
  316. *
  317. * TEST 6 Une petite boucle avec de la r-adaptation (DEDU ADAP) pour voir si on peut
  318. * améliorer la qualité du maillage mail3.
  319. *
  320. * La réponse est oui, on peut effectivement avoir une amélioration mais
  321. * après quelque itérations la qualité oscille sans s'alméliorer entre
  322. * r-adaptation et remaillage car les critères optimisés ne sont pas les
  323. * mêmes aux deux étapes.
  324. *
  325. *
  326. nopt = 2 ; iopt = 0 ;
  327. * Paramètres de DEDUADAP
  328. thdedu = 0.2 ; rdepa = 1. ; nitm = 1 ;
  329. maili = mail3 ;
  330. ldep = 'PROG' ; lqmin = 'PROG' ; lqmoy = 'PROG' ;
  331. 'REPE' bclopt nopt ;
  332. iopt = iopt '+' 1 ;
  333. tit = 'CHAI' 'i=' iopt ;
  334. * Partie DEDUADAP
  335. maili1 = maili ;
  336. modi1 = 'MODE' maili1 'MECANIQUE' ;
  337. cden = 'NOMC' 'G' (caltail maili1) ;
  338. cmet = cden '**' -2 ;
  339. cmet = ('NOMC' 'G11' cmet 'NATU' 'DIFFUS') 'ET'
  340. ('NOMC' 'G22' cmet 'NATU' 'DIFFUS') 'ET'
  341. ('NOMC' 'G21' ('*' cmet 0.) 'NATU' 'DIFFUS') ;
  342. ccmet = 'CHAN' 'CHAM' cmet modi1 ;
  343. depa = 'DEDU' 'ADAP' maili1 'METR' ccmet modi1 'THET' thdedu 'NITM' nitm ;
  344. depa = '*' depa rdepa ;
  345. mcdep = 'MAXI' depa 'ABS' ; ldep = ldep 'ET' mcdep ;
  346. 'MESS' tit ' dedu max. dep=' mcdep ;
  347. 'FORM' depa ;
  348. cden = 'NOMC' 'G' (caltail maili1) ;
  349. cmet = cden '**' -2 ;
  350. qmaili1 = 'INDI' 'TOPO' maili1 cmet ;
  351. miq = 'MINI' qmaili1 ; moq = MATOUTIL 'MOYECHAM' qmaili1 ;
  352. maq = 'MAXI' qmaili1 ;
  353. 'MESS' 'FORMAT' '(E9.2)' tit ' deduadap : Qmin=' miq ' Qmoy=' moq ' Qmax=' maq ;
  354. 'SI' graph ;
  355. momaili1 = 'MODE' maili1 'THERMIQUE' ;
  356. vdep = 'VECT' depa -1. 'UX' 'UY' 'NOIR' ;
  357. titg = 'CHAI' tit ' deduadap' ;
  358. 'TRAC' qmaili1 momaili1 vdep maili1 lqual 'TITR' titg ;
  359. 'FINS' ;
  360. * Partie MAILTOPO
  361. maili2 = 'REMA' maili1 ('CONT' maili1) cmet ;
  362. * Qualités
  363. cden = 'NOMC' 'G' (caltail maili2) ;
  364. cmet = cden '**' -2 ;
  365. qmaili2 = 'INDI' 'TOPO' maili2 cmet ;
  366. miq = 'MINI' qmaili2 ; moq = MATOUTIL 'MOYECHAM' qmaili2 ;
  367. maq = 'MAXI' qmaili2 ;
  368. 'MESS' 'FORMAT' '(E9.2)' tit ' mailtopo : Qmin=' miq ' Qmoy=' moq ' Qmax=' maq ;
  369. 'SI' graph ;
  370. momaili2 = 'MODE' maili2 'THERMIQUE' ;
  371. titg = 'CHAI' tit ' mailtopo' ;
  372. 'TRAC' qmaili2 momaili2 lqual 'TITR' titg ;
  373. 'FINSI' ;
  374. maili = maili2 ;
  375. 'FIN' bclopt ;
  376. * Sur mon linux64 au 06/04/2020 : Qmin= 0.62E+00 Qmoy= 0.87E+00 Qmax= 0.99E+00
  377. miqref = 0.61 ; moqref = 0.86 ; maqref = 0.98 ;
  378. 'SI' ('&lt;EG' miq miqref) ;
  379. 'MESS' '!!! TEST 6 : miq=' miq ' < miqref=' miqref ;
  380. lok = lok 'ET' faux ;
  381. 'FINS' ;
  382. 'SI' ('&lt;EG' moq moqref) ;
  383. 'MESS' '!!! TEST 6 : moq=' moq ' < moqref=' moqref ;
  384. lok = lok 'ET' faux ;
  385. 'FINS' ;
  386. 'SI' ('&lt;EG' maq maqref) ;
  387. 'MESS' '!!! TEST 6 : maq=' maq ' < maqref=' maqref ;
  388. lok = lok 'ET' faux ;
  389. 'FINS' ;
  390. *
  391. * Test final
  392. *
  393. 'SI' ('NON' lok) ;
  394. 'ERREUR' 5 ;
  395. 'SINON' ;
  396. 'SAUT' 1 'LIGN' ;
  397. 'MESSAGE' ('CHAINE' 'Tout sest bien passe !') ;
  398. 'FINSI' ;
  399. *
  400. 'SI' interact ;
  401. 'OPTION' 'ECHO' 1 ;
  402. 'OPTION' 'DONN' 5 ;
  403. 'FINSI' ;
  404. *
  405. * End of dgibi file MATO-2D2
  406. *
  407. 'FIN' ;
  408.  
  409.  
  410.  
  411.  
  412.  
  413.  
  414.  

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