# top.mod OQR2-MN-v-v # Original AMPL coding by Sven Leyffer, University of Dundee, April 2000. # # Topology optimization for compliance minimization of statically loaded # structures. # # Reference: O. Sigmund, "A 99 line topology optimization code written # in Matlab", Techincal University of Denmark, October 1999. # # Data files: top1-60x20.dat Example 1 on 60 x 20 grid # top1-30x10.dat Example 1 on 30 x 10 grid # top1-15x05.dat Example 1 on 15 x 5 grid param nelx, integer; # ... number horizontal elements param nely, integer; # ... number vertical elements set nodes := 1..2*(nely+1)*(nelx+1); # ... all nodes set fixnodes within nodes; # ... fixed nodes set freenodes := nodes diff fixnodes; # ... free nodes set elements within nodes cross nodes cross nodes cross nodes cross nodes cross nodes cross nodes cross nodes; # ... elements param volfrac; # ... volume fraction param V0 := nelx*nely; # ... total volume of region param E; # ... Young's modulus (?) param nu; # ... param p; # ... penelization power param F{freenodes}, default 0; # ... load vector param k{1..8}; # ... entries of element stiffness matrix var x{elements} binary, := volfrac; # ... density of material in elements #var x{elements} >= 0.001, <= 1, := volfrac; # ... density of material in elements var V = sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements} x[i1,i2,i3,i4,i5,i6,i7,i8]; # ... volume of the material var U{freenodes}; # ... node values & derivatives (?) var KU{i1 in freenodes} # ... PDE discretization K*U = sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements} k[1]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i1] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i2 in freenodes} k[2]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i2] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i3 in freenodes} k[3]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i3] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i4 in freenodes} k[4]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i4] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i5 in freenodes} k[5]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i5] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i6 in freenodes} k[6]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i6] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i7 in freenodes} k[7]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i7] + sum{(i1,i2,i3,i4,i5,i6,i7,i8) in elements: i8 in freenodes} k[8]*x[i1,i2,i3,i4,i5,i6,i7,i8]^p*U[i8] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i2 in freenodes} k[2]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i2] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements} k[1]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i1] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i3 in freenodes} k[8]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i3] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i4 in freenodes} k[7]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i4] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i5 in freenodes} k[6]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i5] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i6 in freenodes} k[5]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i6] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i7 in freenodes} k[4]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i7] + sum{(i2,i1,i3,i4,i5,i6,i7,i8) in elements: i8 in freenodes} k[3]*x[i2,i1,i3,i4,i5,i6,i7,i8]^p*U[i8] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i3 in freenodes} k[3]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i3] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i2 in freenodes} k[8]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i2] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements} k[1]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i1] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i4 in freenodes} k[6]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i4] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i5 in freenodes} k[7]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i5] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i6 in freenodes} k[4]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i6] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i7 in freenodes} k[5]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i7] + sum{(i3,i2,i1,i4,i5,i6,i7,i8) in elements: i8 in freenodes} k[2]*x[i3,i2,i1,i4,i5,i6,i7,i8]^p*U[i8] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i4 in freenodes} k[4]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i4] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i2 in freenodes} k[7]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i2] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i3 in freenodes} k[6]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i3] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements} k[1]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i1] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i5 in freenodes} k[8]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i5] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i6 in freenodes} k[3]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i6] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i7 in freenodes} k[2]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i7] + sum{(i4,i2,i3,i1,i5,i6,i7,i8) in elements: i8 in freenodes} k[5]*x[i4,i2,i3,i1,i5,i6,i7,i8]^p*U[i8] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i5 in freenodes} k[5]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i5] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i2 in freenodes} k[6]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i2] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i3 in freenodes} k[7]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i3] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i4 in freenodes} k[8]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i4] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements} k[1]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i1] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i6 in freenodes} k[2]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i6] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i7 in freenodes} k[3]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i7] + sum{(i5,i2,i3,i4,i1,i6,i7,i8) in elements: i8 in freenodes} k[4]*x[i5,i2,i3,i4,i1,i6,i7,i8]^p*U[i8] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i6 in freenodes} k[6]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i6] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i2 in freenodes} k[5]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i2] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i3 in freenodes} k[4]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i3] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i4 in freenodes} k[3]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i4] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i5 in freenodes} k[2]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i5] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements} k[1]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i1] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i7 in freenodes} k[8]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i7] + sum{(i6,i2,i3,i4,i5,i1,i7,i8) in elements: i8 in freenodes} k[7]*x[i6,i2,i3,i4,i5,i1,i7,i8]^p*U[i8] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i7 in freenodes} k[7]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i7] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i2 in freenodes} k[4]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i2] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i3 in freenodes} k[5]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i3] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i4 in freenodes} k[2]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i4] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i5 in freenodes} k[3]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i5] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i6 in freenodes} k[8]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i6] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements} k[1]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i1] + sum{(i7,i2,i3,i4,i5,i6,i1,i8) in elements: i8 in freenodes} k[6]*x[i7,i2,i3,i4,i5,i6,i1,i8]^p*U[i8] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i8 in freenodes} k[8]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i8] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i2 in freenodes} k[3]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i2] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i3 in freenodes} k[2]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i3] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i4 in freenodes} k[5]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i4] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i5 in freenodes} k[4]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i5] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i6 in freenodes} k[7]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i6] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements: i7 in freenodes} k[6]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i7] + sum{(i8,i2,i3,i4,i5,i6,i7,i1) in elements} k[1]*x[i8,i2,i3,i4,i5,i6,i7,i1]^p*U[i1]; minimize compliance: sum{i1 in freenodes} KU[i1]*U[i1]; subject to volume: V = volfrac*V0; PDE{i1 in freenodes}: KU[i1] = F[i1];