Jeux de données

opti_topo_oc.dgibi

Script Cast3M opti_topo_oc.dgibi

  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
 10itrac  = FAUX ;
 11OPTI 'DIME' 2 'MODE' 'PLAN' 'DEFO' 'ELEM' 'QUA4' 'ECHO' 0 ;
 12l      = 1. ;
 13h      = 0.2 ;
 14yo     = 200.E9 ;
 15nu     = 0.3 ;
 16
 17** Maillage (controlé par sa taille de maille)
 18den1   = l / 120. ;
 19OPTI 'DENS' den1 ;
 20p1     = 0. 0. ;
 21p2     = l  0. ;
 22lb     = DROI p1 p2 ;
 23mail   = lb TRAN (0. h) ;
 24p3     = mail POIN 'PROC' ((l / 2.) h) ;
 25con    = CONT mail ;
 26
 27** Modèle
 28mod    = MODE mail 'MECANIQUE' ;
 29ma0    = MATE mod 'YOUN' yo 'NU' nu ;
 30
 31** Blocages
 32blo    = (BLOQ 'UY' p1) ET (BLOQ 'UX' 'UY' p2) ;
 33
 34** Chargement
 35f      = FORC (0. -1.E5) p3 ;
 36
 37** Paramètres d'optimisation
 38p      = 3. ;
 39fv     = 0.4 ;
 40eta    = 0.5 ;
 41rmin   = 1.5 * den1 ;
 42m      = 0.1 ;
 43xmin   = 0.001 ;
 44xmax   = 1. ;
 45
 46** Initialisation de la topologie (avec la fraction volumique cible)
 47x      = MANU 'CHML' mod 'SCAL' fv 'GRAVITE' ;
 48
 49** Matrice de filtrage
 50un     = MANU 'CHML' mod 'SCAL' 1. 'GRAVITE' ;
 51vole   = INTG mod un 'ELEM' ;
 52mcg    = un POIN 'SUPERIEUR' 0. ;
 53wg     = PROI mcg vole ;
 54kfil   = MFIL wg rmin 1. 0. ;
 55
 56** Volume plein, initial et cible
 57v0     = INTG mod un ;
 58vx     = INTG mod x ;
 59fvx    = vx / v0 ;
 60vcib   = v0 * fv ;
 61chgx   = 0. ;
 62
 63** Boucle d'optimisation topologique
 64liso   = PROG 0. 'PAS' 0.05 1. ;
 65REPE 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  MESS info ;
 90  SI itrac ;
 91    def1   = DEFO mail u 1000. ;
 92    TRAC x mod con def1 liso 'TITR' info 'NCLK' ;
 93  FINSI ;
 94* optimisation d'une nouvelle topologie (méthode du critère d'optimalité)
 95  l1     = 0. ;
 96  l2     = 100000000. ;
 97  REPE b2 100 ;
 98    SI ((l2 - l1) < 0.0001) ;
 99      QUIT b2 ;
100    FINSI ;
101    lmid   = (l1 + l2) / 2. ;
102    b      = -1. * dpsi / (lmid * vole) ;
103    xinf   = BORN (x - m) 'MINIMUM' xmin ;
104    xsup   = BORN (x + m) 'MAXIMUM' xmax ;
105    xnew   = x * (b ** eta) ;
106    minf   =  (xnew - xinf) MASQ 'INFERIEUR' 0. ;
107    mmil   = ((xnew - xinf) MASQ 'SUPERIEUR' 0.) * ((xnew - xsup) MASQ 'INFERIEUR' 0.) ;
108    msup   =  (xnew - xsup) MASQ 'SUPERIEUR' 0. ;
109    xnew   = (xinf * minf) + (xnew * mmil) + (xsup * msup) ;
110    vxnew  = INTG mod xnew ;
111    SI (vxnew > vcib) ;
112      l1     = lmid ;
113    SINON ;
114      l2     = lmid ;
115    FINSI ;
116  FIN b2 ;
117* bilan de l'itération
118  fvx    = vxnew / v0 ;
119  chgx   = MAXI 'ABS' (x - xnew) ;
120  SI (chgx < 0.01) ;
121    info   = CHAI 'It:' &b1 / 5 'Obj:' / 10  psi > 1 'Fvol:' > 4 fvx > 1 'Change:' > 4 chgx > 1 ;
122    MESS info ;
123    QUIT b1 ;
124  FINSI ;
125* préparation de la nouvelle itération
126  x      = xnew ;
127FIN  b1 ;
128
129* Tracé de la dernière itération
130SI itrac ;
131  def1   = DEFO mail u 1000. ;
132  TRAC xnew mod con def1 liso 'TITR' info ;
133FINSI ;
134
135FIN ;

opti_topo_mma.dgibi

Script Cast3M opti_topo_mma.dgibi

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