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 ;