3. Jeux de données
3.1. opti_topo_1.dgibi
Script Cast3M opti_topo_1.dgibi
1************************************************************************
2* Exemple de méthode d'optimisation topologique *
3* Méthode SIMP *
4* Application à une poutre en flexion *
5************************************************************************
6
7
8** Paramètres globaux
9OPTI 'DIME' 2 'MODE' 'PLAN' 'DEFO' 'ELEM' 'QUA4' ;
10l = 1. ;
11h = 0.2 ;
12yo = 200.E9 ;
13nu = 0.3 ;
14
15** Maillage (controlé par sa taille de maille)
16den1 = l / 120. ;
17OPTI 'DENS' den1 ;
18p1 = 0. 0. ;
19p2 = l 0. ;
20lb = DROI p1 p2 ;
21mail = lb TRAN (0. h) ;
22p3 = mail POIN 'PROC' ((l / 2.) h) ;
23con = CONT mail ;
24
25** Modèle
26mod = MODE mail 'MECANIQUE' ;
27ma0 = MATE mod 'YOUN' yo 'NU' nu ;
28
29** Blocages
30blo = (BLOQ 'UY' p1) ET (BLOQ 'UX' 'UY' p2) ;
31
32** Chargement
33f = FORC (0. -1.E5) p3 ;
34
35** Paramètres d'optimisation
36p = 3. ;
37fv = 0.4 ;
38eta = 0.5 ;
39rmin = 1.5 * den1 ;
40m = 0.1 ;
41xmin = 0.001 ;
42xmax = 1. ;
43
44** Optimisation topologique
45* initialisation de la topologie
46x = MANU 'CHML' mod 'SCAL' fv 'GRAVITE' ;
47vini = MESU mail ;
48vcib = vini * fv ;
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* boucle d'optimisation
56liso = PROG 0. 'PAS' 0.05 1. ;
57REPE b1 100 ;
58* pénalisation de la rigidité
59 yop = (x ** p) * yo ;
60 map = MATE mod 'YOUN' yop 'NU' nu ;
61* résolution du problème mécanique
62 rip = RIGI mod map ;
63 u = RESO (rip ET blo) f ;
64* déformée et tracé de la topologie
65 def1 = DEFO mail u 1000. ;
66 TRAC x mod con def1 liso 'TITR' (CHAI 'Iteration' ' ' (&b1 - 1)) ;
67* fonction objectif : compliance = uT.K.u = Int(sig:eps)dV
68 eps = EPSI 'LINE' mod u ;
69 sig = ELAS mod map eps ;
70 psi = INTG mod (ENER mod sig eps) ;
71* sensibilité
72 sig0 = ELAS mod ma0 eps ;
73 ene0 = ENER mod eps sig0 ;
74 ene = CHAN ene0 mod 'GRAVITE' ;
75 dpsi = (-1. * p * (x ** (p - 1.)) * ene) ;
76* filtrage de la sensibilité
77 xdpsi = x * dpsi ;
78 xdpsi0 = PROI mcg xdpsi ;
79 xdpsi1 = kfil * xdpsi0 ;
80 xdpsi = MANU 'CHML' mod 'REPA' 'SCAL' (EXTR xdpsi1 'VALE') 'TYPE' 'SCALAIRE' 'GRAVITE' ;
81 dpsi = xdpsi / x ;
82* optimisation d'une nouvelle topologie (méthode du critère d'optimalité)
83 l1 = 0. ;
84 l2 = MAXI 'ABS' dpsi ;
85 REPE b2 50 ;
86 SI ((l2 - l1) < 1.E-4) ;
87 QUIT b2 ;
88 FINSI ;
89 lmid = 0.5 * (l1 + l2) ;
90 b = -1. * dpsi / lmid ;
91 xinf = BORN (x - m) 'MINIMUM' xmin ;
92 xsup = BORN (x + m) 'MAXIMUM' xmax ;
93 xnew = x * (b ** eta) ;
94 minf = (xnew - xinf) MASQ 'INFERIEUR' 0. ;
95 mmil = ((xnew - xinf) MASQ 'SUPERIEUR' 0.) * ((xnew - xsup) MASQ 'INFERIEUR' 0.) ;
96 msup = (xnew - xsup) MASQ 'SUPERIEUR' 0. ;
97 xnew = (xinf * minf) + (xnew * mmil) + (xsup * msup) ;
98 vnew = INTG mod xnew ;
99 SI (vnew > vcib) ;
100 l1 = lmid ;
101 SINON ;
102 l2 = lmid ;
103 FINSI ;
104 FIN b2 ;
105* bilan de l'itération
106 change = MAXI 'ABS' (x - xnew) ;
107 MESS 'It.' ' ' &b1 ' Obj.' ' ' c ' Change' ' ' change ' Fvol.' ' ' (vnew / vini) ' Dicho.' ' ' &b2 ;
108 SI (change < 0.01) ;
109 QUIT b1 ;
110 FINSI ;
111* préparation de la nouvelle itération
112 x = xnew ;
113FIN b1 ;
114
115** Tracé de la topologie finale
116yop = (xnew ** p) * yo ;
117map = MATE mod 'YOUN' yop 'NU' nu ;
118rip = RIGI mod map ;
119u = RESO (rip ET blo) f ;
120def1 = DEFO mail u 1000. ;
121TRAC x mod con def1 liso 'TITR' (CHAI 'Iteration' ' ' (&b1 - 1)) ;
122
123
124FIN ;