Télécharger opti_topo_mma.dgibi

Retour à la liste

Numérotation des lignes :

  1. ************************************************************************
  2. * Exemple de méthode d'optimisation topologique *
  3. * Méthode à densité + pénalisation SIMP *
  4. * Algorithme d'optimisation : Method of Moving Asymptotes - Svanberg *
  5. * Application à une poutre en flexion *
  6. ************************************************************************
  7.  
  8.  
  9. ** Paramètres globaux
  10. itrac = FAUX ;
  11. OPTI 'DIME' 2 'MODE' 'PLAN' 'DEFO' 'ELEM' 'QUA4' 'ECHO' 0 ;
  12. l = 1. ;
  13. h = 0.2 ;
  14. yo = 200.E9 ;
  15. nu = 0.3 ;
  16.  
  17. ** Maillage (controlé par sa taille de maille)
  18. den1 = l / 120. ;
  19. OPTI 'DENS' den1 ;
  20. p1 = 0. 0. ;
  21. p2 = l 0. ;
  22. lb = DROI p1 p2 ;
  23. mail = lb TRAN (0. h) ;
  24. p3 = mail POIN 'PROC' ((l / 2.) h) ;
  25. con = CONT mail ;
  26.  
  27. ** Modèle
  28. mod = MODE mail 'MECANIQUE' ;
  29. ma0 = MATE mod 'YOUN' yo 'NU' nu ;
  30.  
  31. ** Blocages
  32. blo = (BLOQ 'UY' p1) ET (BLOQ 'UX' 'UY' p2) ;
  33.  
  34. ** Chargement
  35. f = FORC (0. -1.E5) p3 ;
  36.  
  37. ** Paramètres d'optimisation
  38. p = 3. ;
  39. fv = 0.4 ;
  40. rmin = 1.5 * den1 ;
  41. m = 0.1 ;
  42. xmin = 0.001 ;
  43. xmax = 1. ;
  44.  
  45. ** Initialisation de la topologie (avec la fraction volumique cible)
  46. x = MANU 'CHML' mod 'SCAL' fv 'GRAVITE' ;
  47.  
  48. ** Matrice de filtrage
  49. un = MANU 'CHML' mod 'SCAL' 1. 'GRAVITE' ;
  50. vole = INTG mod un 'ELEM' ;
  51. mcg = un POIN 'SUPERIEUR' 0. ;
  52. wg = PROI mcg vole ;
  53. kfil = MFIL wg rmin 1. 0. ;
  54.  
  55. ** Volume plein, initial et cible
  56. v0 = INTG mod un ;
  57. vx = INTG mod x ;
  58. fvx = vx / v0 ;
  59. vcib = v0 * fv ;
  60. chgx = 0. ;
  61.  
  62. ** Initialisation de la table pour la mma
  63. nx = NBEL mail ;
  64. tmma = TABL ;
  65. * valeurs initiales de x
  66. tmma . 'VX0' = TABL 'VECTEUR' ;
  67. REPE bx nx ;
  68. tmma . 'VX0' . &bx = EXTR x 'SCAL' 1 &bx 1 ;
  69. FIN bx ;
  70. * bornes pour les valeurs de x
  71. tmma . 'VXMIN' = TABL 'VECTEUR' ;
  72. tmma . 'VXMAX' = TABL 'VECTEUR' ;
  73. REPE bx nx ;
  74. tmma . 'VXMIN' . &bx = MAXI (PROG xmin (fv - m)) ;
  75. tmma . 'VXMAX' . &bx = MINI (PROG xmax (fv + m)) ;
  76. FIN bx ;
  77. * fonction objectif et ses sensibilités
  78. tmma . 'VF' = TABL 'VECTEUR' ;
  79. * fonction contrainte et ses sensibilités
  80. tmma . 'MC' = TABL ;
  81. tmma . 'MC' . 1 = TABL 'VECTEUR' ;
  82. tmma . 'MC' . 1 . 0 = vx ;
  83. REPE bx nx ;
  84. tmma . 'MC' . 1 . &bx = EXTR vole 'SCAL' 1 &bx 1 ;
  85. FIN bx ;
  86. * bornes pour la fonction contrainte
  87. tmma . 'VCMAX' = TABL 'VECTEUR' ;
  88. tmma . 'VCMAX' . 1 = vcib ;
  89. * paramètres pour la mma
  90. tmma . 'METHODE' = 'STA' ;
  91. tmma . 'T0' = 0.1 ;
  92.  
  93. ** Boucle d'optimisation topologique
  94. liso = PROG 0. 'PAS' 0.05 1. ;
  95. REPE b1 100 ;
  96. * pénalisation de la rigidité
  97. yop = (x ** p) * yo ;
  98. map = MATE mod 'YOUN' yop 'NU' nu ;
  99. * résolution du problème mécanique
  100. rip = RIGI mod map ;
  101. u = RESO (rip ET blo) f ;
  102. * fonction objectif : compliance = uT.K.u = Int(sig:eps)dV
  103. eps = EPSI 'LINE' mod u ;
  104. sig = ELAS mod map eps ;
  105. psi = INTG mod (ENER mod sig eps) ;
  106. * sensibilité
  107. sig0 = ELAS mod ma0 eps ;
  108. ene0 = ENER mod eps sig0 ;
  109. ene = CHAN ene0 mod 'GRAVITE' ;
  110. dpsi = (-1. * p * (x ** (p - 1.)) * ene) ;
  111. * filtrage de la sensibilité
  112. xdpsi = x * dpsi ;
  113. xdpsi0 = PROI mcg xdpsi ;
  114. xdpsi1 = kfil * xdpsi0 ;
  115. xdpsi = MANU 'CHML' mod 'REPA' 'SCAL' (EXTR xdpsi1 'VALE') 'TYPE' 'SCALAIRE' 'GRAVITE' ;
  116. dpsi = xdpsi / x ;
  117. * infos sur la topologie courante
  118. info = CHAI 'It:' (&b1 - 1) / 5 'Obj:' / 10 psi > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 chgx > 1 ;
  119. SI itrac ;
  120. def1 = DEFO mail u 1000. ;
  121. TRAC x mod con def1 liso 'TITR' info 'NCLK' ;
  122. FINSI ;
  123. * optimisation d'une nouvelle topologie (méthode des asymptotes mobiles)
  124. tmma . 'VF' . 0 = psi ;
  125. REPE bx nx ;
  126. tmma . 'VF' . &bx = EXTR dpsi 'SCAL' 1 &bx 1 ;
  127. FIN bx ;
  128. tmma . 'MC' . 1 . 0 = INTG mod x ;
  129. tmma_new = EXCE tmma ;
  130. lxnew = PROG ;
  131. REPE bx nx ;
  132. lxnew = lxnew ET (tmma_new . 'VX0' . &bx) ;
  133. FIN bx ;
  134. xnew = MANU 'CHML' mod 'REPA' 'SCAL' lxnew 'TYPE' 'SCALAIRE' 'GRAVITE' ;
  135. vxnew = INTG mod xnew ;
  136. * bilan de l'itération
  137. fvx = vxnew / v0 ;
  138. chgx = MAXI 'ABS' (x - xnew) ;
  139. SI (chgx < 0.01) ;
  140. info = CHAI 'It:' &b1 / 5 'Obj:' / 10 psi > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 chgx > 1 ;
  141. QUIT b1 ;
  142. FINSI ;
  143. * préparation de la nouvelle itération
  144. x = xnew ;
  145. tmma . 'VX0' = tmma_new . 'VX0' ;
  146. lxmin = BORN (lxnew - m) 'MINIMUM' xmin ;
  147. lxmax = BORN (lxnew + m) 'MAXIMUM' xmax ;
  148. REPE bx nx ;
  149. tmma . 'VXMIN' . &bx = EXTR lxmin &bx ;
  150. tmma . 'VXMAX' . &bx = EXTR lxmax &bx ;
  151. FIN bx ;
  152. FIN b1 ;
  153.  
  154. * Tracé de la dernière itération
  155. SI itrac ;
  156. def1 = DEFO mail u 1000. ;
  157. TRAC xnew mod con def1 liso 'TITR' info ;
  158. FINSI ;
  159.  
  160. FIN ;
  161.  
  162.  
  163.  

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