Télécharger opti_topo_oc.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 : Optimality Criteria - Bendsoe *
  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. eta = 0.5 ;
  41. rmin = 1.5 * den1 ;
  42. m = 0.1 ;
  43. xmin = 0.001 ;
  44. xmax = 1. ;
  45.  
  46. ** Initialisation de la topologie (avec la fraction volumique cible)
  47. x = MANU 'CHML' mod 'SCAL' fv 'GRAVITE' ;
  48.  
  49. ** Matrice de filtrage
  50. un = MANU 'CHML' mod 'SCAL' 1. 'GRAVITE' ;
  51. vole = INTG mod un 'ELEM' ;
  52. mcg = un POIN 'SUPERIEUR' 0. ;
  53. wg = PROI mcg vole ;
  54. kfil = MFIL wg rmin 1. 0. ;
  55.  
  56. ** Volume plein, initial et cible
  57. v0 = INTG mod un ;
  58. vx = INTG mod x ;
  59. fvx = vx / v0 ;
  60. vcib = v0 * fv ;
  61. chgx = 0. ;
  62.  
  63. ** Boucle d'optimisation topologique
  64. liso = PROG 0. 'PAS' 0.05 1. ;
  65. REPE b1 100 ;
  66. * pénalisation de la rigidité
  67. yop = (x ** p) * yo ;
  68. map = MATE mod 'YOUN' yop 'NU' nu ;
  69. * résolution du problème mécanique
  70. rip = RIGI mod map ;
  71. u = RESO (rip ET blo) f ;
  72. * fonction objectif : compliance = uT.K.u = Int(sig:eps)dV
  73. eps = EPSI 'LINE' mod u ;
  74. sig = ELAS mod map eps ;
  75. psi = INTG mod (ENER mod sig eps) ;
  76. * sensibilité
  77. sig0 = ELAS mod ma0 eps ;
  78. ene0 = ENER mod eps sig0 ;
  79. ene = CHAN ene0 mod 'GRAVITE' ;
  80. dpsi = (-1. * p * (x ** (p - 1.)) * ene) ;
  81. * filtrage de la sensibilité
  82. xdpsi = x * dpsi ;
  83. xdpsi0 = PROI mcg xdpsi ;
  84. xdpsi1 = kfil * xdpsi0 ;
  85. xdpsi = MANU 'CHML' mod 'REPA' 'SCAL' (EXTR xdpsi1 'VALE') 'TYPE' 'SCALAIRE' 'GRAVITE' ;
  86. dpsi = xdpsi / x ;
  87. * infos sur la topologie courante
  88. info = CHAI 'It:' (&b1 - 1) / 5 'Obj:' / 10 psi > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 chgx > 1 ;
  89. SI itrac ;
  90. def1 = DEFO mail u 1000. ;
  91. TRAC x mod con def1 liso 'TITR' info 'NCLK' ;
  92. FINSI ;
  93. * optimisation d'une nouvelle topologie (méthode du critère d'optimalité)
  94. l1 = 0. ;
  95. l2 = 100000000. ;
  96. REPE b2 100 ;
  97. SI ((l2 - l1) < 0.0001) ;
  98. QUIT b2 ;
  99. FINSI ;
  100. lmid = (l1 + l2) / 2. ;
  101. b = -1. * dpsi / (lmid * vole) ;
  102. xinf = BORN (x - m) 'MINIMUM' xmin ;
  103. xsup = BORN (x + m) 'MAXIMUM' xmax ;
  104. xnew = x * (b ** eta) ;
  105. minf = (xnew - xinf) MASQ 'INFERIEUR' 0. ;
  106. mmil = ((xnew - xinf) MASQ 'SUPERIEUR' 0.) * ((xnew - xsup) MASQ 'INFERIEUR' 0.) ;
  107. msup = (xnew - xsup) MASQ 'SUPERIEUR' 0. ;
  108. xnew = (xinf * minf) + (xnew * mmil) + (xsup * msup) ;
  109. vxnew = INTG mod xnew ;
  110. SI (vxnew > vcib) ;
  111. l1 = lmid ;
  112. SINON ;
  113. l2 = lmid ;
  114. FINSI ;
  115. FIN b2 ;
  116. * bilan de l'itération
  117. fvx = vxnew / v0 ;
  118. chgx = MAXI 'ABS' (x - xnew) ;
  119. SI (chgx < 0.01) ;
  120. info = CHAI 'It:' &b1 / 5 'Obj:' / 10 psi > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 chgx > 1 ;
  121. QUIT b1 ;
  122. FINSI ;
  123. * préparation de la nouvelle itération
  124. x = xnew ;
  125. FIN b1 ;
  126.  
  127. * Tracé de la dernière itération
  128. SI itrac ;
  129. def1 = DEFO mail u 1000. ;
  130. TRAC xnew mod con def1 liso 'TITR' info ;
  131. FINSI ;
  132.  
  133. FIN ;
  134.  
  135.  
  136.  

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