Télécharger top_oc.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 : Optimality Criteria *
  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
  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.  
  133. ** Maillage des centres de gravite et matrice de filtrage
  134. * ici, les poids des cellules dependent de leur volume
  135. ptg = un POIN 'SUPERIEUR' 0. ;
  136. wg = MANU 'CHPO' ptg 'SCAL' (EXTR dvun 'VALE' 'SCAL') ;
  137. kfil = MFIL wg rmin 1. 0. ;
  138.  
  139. ** On demarre un chrono
  140.  
  141. ** Boucle d'optimisation topologique
  142. liso = PROG 0. 'PAS' 0.05 1. ;
  143. loopbeta = 0 ;
  144. liter = PROG ;
  145. lobj = PROG ;
  146. lfv = PROG ;
  147. lchange = PROG ;
  148. REPE b1 500 ;
  149. loopbeta = loopbeta + 1 ;
  150. * penalisation de la rigidite (SIMP modifiee)
  151. ep = emin + ((xphys ** penal) * (e0 - emin)) ;
  152. map = MATE mod 'YOUN' ep 'NU' nu 'DIM3' e ;
  153. k = RIGI mod map ;
  154. * resolution du probleme mecanique
  155. kbc = k ET blo ;
  156. u = RESO kbc f ;
  157. * fonction objectif : compliance = u^T.K.u
  158. c = MAXI (RESU (PSCA u f (MOTS 'UX' 'UY') (MOTS 'FX' 'FY'))) ;
  159. * sensibilite de c
  160. eps = EPSI 'LINE' mod u ;
  161. sigun = ELAS mod maun eps ;
  162. eneun = ENER mod eps sigun ;
  163. eneun = INTG 'ELEM' mod eneun ;
  164. dc = -1. * penal * (xphys ** (penal - 1.)) * (e0 - emin) * eneun ;
  165. * sensibilite de v
  166. dv = dvun ;
  167. * filtrage de la sensibilite de la compliance
  168. SI (ft EGA 1) ;
  169. dc = (HFILT (x * dc) mod kfil ptg) / (BORN x 'MINIMUM' 1.E-3) ;
  170. FINSI ;
  171. * changement des sensibilites due au filtrage de la densite
  172. SI (ft EGA 2) ;
  173. dc = HFILT dc mod kfil ptg ;
  174. dv = HFILT dv mod kfil ptg ;
  175. FINSI ;
  176. SI (ft EGA 3) ;
  177. dx = (beta * (EXP (-1. * beta * xtilde))) + (EXP (-1. * beta)) ;
  178. dctilde = dc * dx ;
  179. dc = HFILT dctilde mod kfil ptg ;
  180. dvtilde = dv * dx ;
  181. dv = HFILT dvtilde mod kfil ptg ;
  182. FINSI ;
  183. * infos sur la topologie courante
  184. info = CHAI 'It:' (&b1 - 1) / 5 'Obj:' / 10 c > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 change > 1 'Beta:' > 4 beta > 2 ;
  185. SI itrac ;
  186. def1 = DEFO mail u 0.05 ;
  187. TRAC xphys mod con def1 liso 'TITR' info 'NCLK' ;
  188. FINSI ;
  189. * optimisation d'une nouvelle topologie (methode du critere d'optimalite)
  190. l1 = 0. ;
  191. l2 = 1.E9 ;
  192. REPE b2 200 ;
  193. SI (((l2 - l1) / (l1 + l2)) < 0.001) ;
  194. QUIT b2 ;
  195. FINSI ;
  196. lmid = 0.5 * (l1 + l2) ;
  197. b = -1. * dc / (lmid * dv) ;
  198. xinf = BORN (x - move) 'MINIMUM' xmin ;
  199. xsup = BORN (x + move) 'MAXIMUM' xmax ;
  200. xnew = x * (b ** 0.5) ;
  201. minf = (xnew - xinf) MASQ 'INFERIEUR' 0. ;
  202. mmil = ((xnew - xinf) MASQ 'SUPERIEUR' 0.) * ((xnew - xsup) MASQ 'INFERIEUR' 0.) ;
  203. msup = (xnew - xsup) MASQ 'SUPERIEUR' 0. ;
  204. xnew = (xinf * minf) + (xnew * mmil) + (xsup * msup) ;
  205. * mise a jour de la densite physique (selon le filtrage)
  206. SI (ft EGA 1) ;
  207. xphys = xnew ;
  208. FINSI ;
  209. SI (ft EGA 2) ;
  210. xphys = HFILT xnew mod kfil ptg ;
  211. FINSI ;
  212. SI (ft EGA 3) ;
  213. xtilde = HFILT xnew mod kfil ptg ;
  214. xphys = 1. - (EXP (-1. * beta * xtilde)) + (xtilde * (EXP (-1. * beta))) ;
  215. FINSI ;
  216. * mise a jour du volume et de la fraction volumique
  217. vx = INTG mod xphys ;
  218. fvx = vx / vtot ;
  219. SI (vx > v0) ;
  220. l1 = lmid ;
  221. SINON ;
  222. l2 = lmid ;
  223. FINSI ;
  224. FIN b2 ;
  225. * bilan de l'iteration
  226. change = MAXI 'ABS' (xnew - x) ;
  227. liter = liter ET &b1 ;
  228. lobj = lobj ET c ;
  229. lfv = lfv ET fvx ;
  230. lchange = lchange ET change ;
  231. * preparation de la nouvelle iteration
  232. x = xnew ;
  233. * mise a jour du parametre de seuillage beta (si ft = 3)
  234. SI (ft EGA 3) ;
  235. SI ((beta < 512) ET ((loopbeta >EG 50) OU (change &lt;EG changmax))) ;
  236. beta = 2 * beta ;
  237. loopbeta = 0 ;
  238. change = 1. ;
  239. FINSI ;
  240. FINSI ;
  241. * critere d'arret de l'optimisation
  242. SI (change < changmax) ;
  243. info = CHAI 'It:' &b1 / 5 'Obj:' / 10 c > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 change > 1 'Beta:' > 4 beta > 2 ;
  244. QUIT b1 ;
  245. FINSI ;
  246. FIN b1 ;
  247.  
  248. ** Mesure du temps ecoule
  249. ***TEMP 'IMPR' 'SOMM' 'HORL' ;
  250.  
  251. ** Trace de la topologie finale
  252. evobj = EVOL 'ROUG' 'MANU' 'Iter' liter 'Compliance' lobj ;
  253. evfv = EVOL 'ORAN' 'MANU' 'Iter' liter 'Frac. vol.' lfv ;
  254. evchange = EVOL 'VERT' 'MANU' 'Iter' liter 'Max. change' lchange ;
  255. SI itrac ;
  256. info = CHAI '[Topologie finale]' ' ' info ;
  257. TRAC xphys mod con liso 'TITR' info ;
  258. DESS evobj 'TITR' 'Fonction objectif' ;
  259. DESS evfv 'TITR' 'Fraction volumique' ;
  260. DESS evchange 'TITR' 'Changement max.' ;
  261. FINSI ;
  262.  
  263. ** Maillage de la topologie finale
  264. tab1 = TABL ;
  265. tab1 . 'EPAISSEUR' = 0 ;
  266. tab1 . 'MODELE' = mod ;
  267. tab1 . 'TOPOLOGIE' = xphys ;
  268. mailf = TOPOSURF tab1 ;
  269. SI itrac ;
  270. TRAC mailf 'TITR' 'Maillage de la topologie finale' ;
  271. FINSI ;
  272.  
  273. FIN ;
  274.  
  275.  
  276.  

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