Télécharger top_mma.dgibi

Retour à la liste

Numérotation des lignes :

  1. ************************************************************************
  2. * Exemple de methode d'optimisation topologique *
  3. * Methode a densite + penalisation SIMP *
  4. * *
  5. * Ce cas test est une reproduction en Gibiane du code de reference : *
  6. * Andreassen, Clausen, Schevenels, Lazarov, & Sigmund (2011) *
  7. * "Efficient topology optimization in MATLAB using 88 lines of code" *
  8. * Structural and Multidisciplinary Optimization, 43(1), 1-16 *
  9. * https://doi.org/10.1007/s00158-010-0594-7 *
  10. * *
  11. * Application a une poutre en flexion en 2D contraintes planes *
  12. * *
  13. * Algorithme d'optimisation : Method of Moving Asymptotes *
  14. * *
  15. * Probleme : minimisation de la compliance sous contrainte de volume *
  16. * *
  17. * min C(x) = u^T.F *
  18. * tel que V(x) < V0 (avec V0 = volfrac * Vplein) *
  19. * *
  20. * | *
  21. * | Force *
  22. * v *
  23. * O>+------------------------------------------------------+ *
  24. * | p1 | *
  25. * | | *
  26. * O>| | *
  27. * | | *
  28. * | | *
  29. * O>+------------------------------------------------------+ p2 *
  30. * Ʌ *
  31. * O *
  32. * *
  33. ************************************************************************
  34.  
  35.  
  36. ** Procedure de filtrage
  37. DEBP HFILT cham1*'MCHAML' mo*'MMODEL' mf*'RIGIDITE' mpt*'MAILLAGE' ;
  38. chp1 = MANU 'CHPO' mpt 'SCAL' (EXTR cham1 'VALE' 'SCAL') ;
  39. chp2 = mf * chp1 ;
  40. cham2 = MANU 'CHML' mo 'REPA' 'SCAL' (EXTR chp2 'VALE' mpt) 'TYPE' 'SCALAIRE' 'GRAVITE' ;
  41. FINP cham2 ;
  42.  
  43. ** Parametres globaux
  44. itrac = FAUX ;
  45. OPTI 'DIME' 2 'MODE' 'PLAN' 'CONT' 'ELEM' 'QUA4' 'ECHO' 0 ;
  46.  
  47. ** Parametres geometriques (longueur et hauteur)
  48. l = 60. ;
  49. h = 20. ;
  50. e = 1. ;
  51.  
  52. ** Parametres du maillage (nombre d'elements sur x et y)
  53. nelx = 60 ;
  54. nely = 20 ;
  55.  
  56. ** Parametres materiau (elasticite, isotrope)
  57. e0 = 1. ;
  58. emin = e0 / 1.E9 ;
  59. nu = 0.3 ;
  60.  
  61. ** Parametres de l'optimisation topologique
  62. * penal : coefficient de penalisation SIMP
  63. * volfrac : fraction volumique pour la contrainte sur le volume
  64. * ft : = 1 filtrage de la sensibilite de la compliance
  65. * = 2 filtrage de la densite
  66. * = 3 filtrage de la densite + seuillage par heaviside (pas encore operationel)
  67. * rmin : rayon de filtrage (en m)
  68. * beta : valeur initiale du coefficient beta pour le seuillage heaviside
  69. * celui-ci sera double toutes les 50 iterations d'optimisation
  70. * utile seulement pour ft = 3
  71. * move : limite d'increment pour la densite
  72. * changmax : critere d'arret de l'optimisation
  73. * xmin/xmax : densites min et max
  74. penal = 3. ;
  75. volfrac = 0.5 ;
  76. ft = 2 ;
  77. rmin = 0.04 * l ;
  78. beta = 1 ;
  79. move = 0.2 ;
  80. changmax = 0.01 ;
  81. xmin = 0. ;
  82. xmax = 1. ;
  83.  
  84. ** Maillage
  85. p0 = 0. 0. ;
  86. p1 = 0. h ;
  87. lg = DROI nely p0 p1 ;
  88. mail = lg TRAN nelx (l 0.) ;
  89. con = CONT mail ;
  90. p2 = con POIN 'PROC' (l 0.) ;
  91. nx = NBEL mail ;
  92.  
  93. ** Modele mecanique
  94. mod = MODE mail 'MECANIQUE' ;
  95.  
  96. ** Champ materiau pour un module d'Young unitaire
  97. maun = MATE mod 'YOUN' 1. 'NU' nu 'DIM3' e ;
  98.  
  99. ** Blocages mecaniques
  100. blo = (BLOQ 'UX' lg) ET (BLOQ 'UY' p2) ;
  101.  
  102. ** Chargement de force ponctuelle
  103. f = FORC (0. -1.) p1 ;
  104.  
  105. ** Champ unitaire
  106. un = MANU 'CHML' mod 'SCAL' 1. 'GRAVITE' ;
  107.  
  108. ** Volume total (vtot) et volume cible (v0)
  109. vtot = INTG mod un ;
  110. v0 = vtot * volfrac ;
  111.  
  112. ** Initialisation de la densite
  113. xini = volfrac ;
  114. x = MANU 'CHML' mod 'SCAL' xini 'GRAVITE' ;
  115. change = 1. ;
  116.  
  117. ** Calcul de la densite physique
  118. SI ((ft EGA 1) OU (ft EGA 2)) ;
  119. xphys = x ;
  120. FINSI ;
  121. SI (ft EGA 3) ;
  122. xtilde = x ;
  123. xphys = 1. - (EXP (-1. * beta * xtilde)) + (xtilde * (EXP (-1. * beta))) ;
  124. FINSI ;
  125.  
  126. ** Volume et fraction volumique de la topologie
  127. vx = INTG mod xphys ;
  128. fvx = vx / vtot ;
  129.  
  130. ** Champ de sensibilite de la fonction contrainte (volume)
  131. dvun = INTG mod un 'ELEM' ;
  132. ldvun = EXTR dvun 'VALE' 'SCAL' ;
  133.  
  134. ** Maillage des centres de gravite et matrice de filtrage
  135. * ici, les poids des cellules dependent de leur volume
  136. ptg = un POIN 'SUPERIEUR' 0. ;
  137. wg = MANU 'CHPO' ptg 'SCAL' (EXTR dvun 'VALE' 'SCAL') ;
  138. kfil = MFIL wg rmin 1. 0. ;
  139.  
  140. ** Initialisation de la table pour la mma
  141. nx = NBEL mail ;
  142. tmma = TABL ;
  143. * valeurs initiales de x
  144. lx = EXTR x 'VALE' 'SCAL' ;
  145. tmma . 'X' = lx ;
  146. * bornes pour les valeurs de x
  147. tmma . 'XMIN' = xmin ;
  148. tmma . 'XMAX' = xmax ;
  149. * fonction contrainte sur le volume total Vx < V0 --> normalisee --> Vx/V0 - 1 < 0
  150. tmma . 'FVAL' = PROG ((vx / v0) - 1.) ;
  151. tmma . 'DFDX' = TABL ;
  152. tmma . 'DFDX' . 1 = ldvun / v0 ;
  153. * asymptotes
  154. tmma . 'LOW' = PROG nx*1. ;
  155. tmma . 'UPP' = PROG nx*1. ;
  156. * autres parametres
  157. tmma . 'A0' = 1. ;
  158. tmma . 'A' = PROG 0. ;
  159. tmma . 'C' = PROG 1.E4 ;
  160. tmma . 'D' = PROG 0. ;
  161. tmma . 'MOVE' = move ;
  162.  
  163. ** On demarre un chrono
  164.  
  165. ** Boucle d'optimisation topologique
  166. liso = PROG 0. 'PAS' 0.05 1. ;
  167. loopbeta = 0 ;
  168. liter = PROG ;
  169. lobj = PROG ;
  170. lfv = PROG ;
  171. lchange = PROG ;
  172. REPE b1 500 ;
  173. loopbeta = loopbeta + 1 ;
  174. * penalisation de la rigidite (SIMP modifiee)
  175. ep = emin + ((xphys ** penal) * (e0 - emin)) ;
  176. map = MATE mod 'YOUN' ep 'NU' nu 'DIM3' e ;
  177. k = RIGI mod map ;
  178. * resolution du probleme mecanique
  179. kbc = k ET blo ;
  180. u = RESO kbc f ;
  181. * fonction objectif : compliance = u^T.K.u
  182. c = MAXI (RESU (PSCA u f (MOTS 'UX' 'UY') (MOTS 'FX' 'FY'))) ;
  183. * sensibilite de c
  184. eps = EPSI 'LINE' mod u ;
  185. sigun = ELAS mod maun eps ;
  186. eneun = ENER mod eps sigun ;
  187. eneun = INTG 'ELEM' mod eneun ;
  188. dc = -1. * penal * (xphys ** (penal - 1.)) * (e0 - emin) * eneun ;
  189. * sensibilite de v
  190. dv = dvun ;
  191. * filtrage de la sensibilite de la compliance
  192. SI (ft EGA 1) ;
  193. dc = (HFILT (x * dc) mod kfil ptg) / (BORN x 'MINIMUM' 1.E-3) ;
  194. FINSI ;
  195. * changement des sensibilites due au filtrage de la densite
  196. SI (ft EGA 2) ;
  197. dc = HFILT dc mod kfil ptg ;
  198. dv = HFILT dv mod kfil ptg ;
  199. FINSI ;
  200. SI (ft EGA 3) ;
  201. dx = (beta * (EXP (-1. * beta * xtilde))) + (EXP (-1. * beta)) ;
  202. dctilde = dc * dx ;
  203. dc = HFILT dctilde mod kfil ptg ;
  204. dvtilde = dv * dx ;
  205. dv = HFILT dvtilde mod kfil ptg ;
  206. FINSI ;
  207. * infos sur la topologie courante
  208. info = CHAI 'It:' (&b1 - 1) / 5 'Obj:' / 10 c > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 change > 1 'Beta:' > 4 beta > 2 ;
  209. SI itrac ;
  210. def1 = DEFO mail u 0.05 ;
  211. TRAC xphys mod con def1 liso 'TITR' info 'NCLK' ;
  212. FINSI ;
  213. * optimisation d'une nouvelle topologie (methode des asymptotes mobiles)
  214. tmma . 'F0VAL' = c ;
  215. tmma . 'DF0DX' = EXTR dc 'VALE' 'SCAL' ;
  216. vx = INTG mod xphys ;
  217. tmma . 'FVAL' = PROG ((vx / v0) - 1.) ;
  218. MMA tmma ;
  219. lxnew = tmma . 'X' ;
  220. xnew = MANU 'CHML' mod 'REPA' 'SCAL' lxnew 'TYPE' 'SCALAIRE' 'GRAVITE' ;
  221. * mise a jour de la densite physique (selon le filtrage)
  222. SI (ft EGA 1) ;
  223. xphys = xnew ;
  224. FINSI ;
  225. SI (ft EGA 2) ;
  226. xphys = HFILT xnew mod kfil ptg ;
  227. FINSI ;
  228. SI (ft EGA 3) ;
  229. xtilde = HFILT xnew mod kfil ptg ;
  230. xphys = 1. - (EXP (-1. * beta * xtilde)) + (xtilde * (EXP (-1. * beta))) ;
  231. FINSI ;
  232. * mise a jour du volume et de la fraction volumique
  233. vx = INTG mod xphys ;
  234. fvx = vx / vtot ;
  235. * bilan de l'iteration
  236. change = MINI (MAXI 'ABS' (lxnew - (tmma . 'XOLD1')))
  237. (MAXI 'ABS' (lxnew - (tmma . 'XOLD2'))) ;
  238. liter = liter ET &b1 ;
  239. lobj = lobj ET c ;
  240. lfv = lfv ET fvx ;
  241. lchange = lchange ET change ;
  242. * preparation de la nouvelle iteration
  243. x = xnew ;
  244. lx = lxnew ;
  245. * mise a jour du parametre de seuillage beta (si ft = 3)
  246. SI (ft EGA 3) ;
  247. SI ((beta < 512) ET ((loopbeta >EG 50) OU (change &lt;EG changmax))) ;
  248. beta = 2 * beta ;
  249. loopbeta = 0 ;
  250. change = 1. ;
  251. FINSI ;
  252. FINSI ;
  253. * critere d'arret de l'optimisation
  254. SI (change < changmax) ;
  255. info = CHAI 'It:' &b1 / 5 'Obj:' / 10 c > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 change > 1 'Beta:' > 4 beta > 2 ;
  256. QUIT b1 ;
  257. FINSI ;
  258. FIN b1 ;
  259.  
  260. ** Mesure du temps ecoule
  261. ***TEMP 'IMPR' 'SOMM' 'HORL' ;
  262.  
  263. ** Trace de la topologie finale
  264. evobj = EVOL 'ROUG' 'MANU' 'Iter' liter 'Compliance' lobj ;
  265. evfv = EVOL 'ORAN' 'MANU' 'Iter' liter 'Frac. vol.' lfv ;
  266. evchange = EVOL 'VERT' 'MANU' 'Iter' liter 'Max. change' lchange ;
  267. SI itrac ;
  268. info = CHAI '[Topologie finale]' ' ' info ;
  269. TRAC xphys mod con liso 'TITR' info ;
  270. DESS evobj 'TITR' 'Fonction objectif' ;
  271. DESS evfv 'TITR' 'Fraction volumique' ;
  272. DESS evchange 'TITR' 'Changement max.' ;
  273. FINSI ;
  274.  
  275. ** Maillage de la topologie finale
  276. tab1 = TABL ;
  277. tab1 . 'EPAISSEUR' = 0 ;
  278. tab1 . 'MODELE' = mod ;
  279. tab1 . 'TOPOLOGIE' = xphys ;
  280. mailf = TOPOSURF tab1 ;
  281. SI itrac ;
  282. TRAC mailf 'TITR' 'Maillage de la topologie finale' ;
  283. FINSI ;
  284.  
  285. FIN ;
  286.  
  287.  
  288.  

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