Abstract
This paper presents a new topology optimization approach based on the so-called Moving Morphable Components (MMC) solution framework. The proposed method improves several weaknesses of the previous approach (e.g., Guo et al. in J Appl Mech 81:081009, 2014a) in the sense that it can not only allow for components with variable thicknesses but also enhance the numerical solution efficiency substantially. This is achieved by constructing the topological description functions of the components appropriately, and utilizing the ersatz material model through projecting the topological description functions of the components. Numerical examples demonstrate the effectiveness of the proposed approach. In order to help readers understand the essential features of this approach, a 188 line Matlab implementation of this approach is also provided.
Similar content being viewed by others
References
Allaire G, Olivier P (2006) Structural optimization with FreeFEM++. Struct Multidiscip Optim 32:173–181
Allaire G, Jouve F, Toader AM (2004) Structural optimization using sensitivity analysis and a level-set method. J Comput Phys 194:363–393
Andreassen E, Clausen A, Schevenels M, Lazarov B, Sigmund O (2011) Efficient topology optimization in matlab using 88 lines of code. Struct Multidiscip Optim 43:1–16
Bendsoe MP (1989) Optimal shape design as a material distribution problem. Struct Optim 1:193–202
Bendsoe MP, Kikuchi N (1988) Generating optimal topologies in structural design using a homogenization method. Comput Methods Appl Mech Engrg 71:197–224
Challis V (2010) A discrete level-set topology optimization code written in Matlab. Struct Multidiscip Optim 41:453–464
Chen SK, Wang MY, Liu AQ (2008) Shape feature control in structural topology optimization. Comput Aided Design 40:951–962
Eschenauer HA, Olhoff N (2001) Topology optimization of continuum structures: A review. Appl Mech Rev 54:331–390
Guest J (2009a) Imposing maximum length scale in topology optimization. Struct Multidiscip Optim 37:463–473
Guest J (2009b) Topology optimization with multiple phase projection. Comput Method Appl Mech Eng 199:123–135
Guest J (2015) Optimizing the layout of discrete objects in structures and materials: a projection-based topology optimization approach. Comput Methods Appl Mech Eng 283:330–351
Guest J, Prevost J, Belytschko T (2004) Achieving minimum length scale in topology optimization using nodal design variables and projection functions. Int J Numer Methods Eng 61:238–254
Guest J, Asadpoure A, Ha SH (2011) Eliminating beta-continuation from heaviside projection and density filter algorithms. Struct Multidiscip Optim 44:443–453
Guo X, Cheng GD (2010) Recent development in structural design and optimization. Acta Mech Sinica 26:807–823
Guo X, Zhao K, Wang MY (2005) A new approach for simultaneous shape and topology optimization based on dynamic implicit surface function. Control Cybern 34:255–282
Guo X, Zhang WS, Zhong WL (2014a) Doing topology optimization explicitly and geometrically—a new moving morphable components based framework. J Appl Mech 81:081009
Guo X, Zhang WS, Zhong WL (2014b) Explicit feature control in structural topology optimization via level set method. Comput Method Appl Mech Eng 272:354–378
Guo X, Zhang WS, Zhang J (2015) Explicit structural topology optimization based on morphable components with complex shapes. In submission
Ha SH, Guest JK (2014) Optimizing inclusion shapes and patterns in periodic materials using discrete object projection. Struct Multidiscip Optim 50:65–80
Liu K, Tovar A (2014) An efficient 3D topology optimization code written in Matlab. Struct Multidiscip Optim 50:1175–1196
Luo JZ, Luo Z, Chen SK, Tong LY, Wang MY (2008) A new level set method for systematic design of hinge-free compliant mechanisms. Comput Method Appl Mech Eng 198:318–331
Michailidis G (2014) Manufacturing Constraints and multi-phase shape and topology optimization via a level-set method. Doctoral thesis Ecole Polytechnique http://www.cmapx.polytechnique.fr/~michailidis/publis/thesis.pdf
Norato JA, Bellb BK, Tortorellic DA (2015) A geometry projection method for continuum-based topology optimization with discrete elements. Comput Methods Appl Mech Eng 293:306–327
Otomori M, Yamada T, Izui K, Nishiwaki S (2015) Matlab code for a level set-based topology optimization method using a reaction diffusion equation. Struct Multidiscip Optim 51:1159–1172
Petersson J, Sigmund O (1998) Slope constrained topology optimization. Int J Numer Methods Eng 41:1417–1434
Poulsen TA (2003) A new scheme for imposing minimum length scale in topology optimization. Int J Numer Methods Eng 57:741–760
Sigmund O (2001) A 99 line topology optimization code written in MATLAB. Struct Multidiscip Optim 21:120–127
Sigmund O (2009) Manufacturing tolerant topology optimization. Acta Mech Sinica 25:227–239
Sigmund O, Maute K (2013) Topology optimization approaches. Struct Multidiscip Optim 48:1031–1055
Suresh K (2010) A 199-line Matlab code for Pareto-optimal tracing in topology optimization 42: 665–679
Svanberg K (1987) The method of moving asymptotes-a new method for structural optimization. Int J Numer Methods Eng 24:359–373
Wang MY, Wang XM, Guo DM (2003) A level set method for structural topology optimization. Comput Methods Appl Mech Eng 192:227–246
Wang FW, Lazarov B, Sigmund O (2011) On projection methods, convergence and robust formulations in topology optimization. Struct Multidiscip Optim 43:767–784
Xia Q, Shi TL (2015) Constraints of distance from boundary to skeleton: For the control of length scale in level set based structural topology optimization. Comput Methods Appl Mech Eng. doi:10.1016/j.cma.2015.07.015
Xie YM, Steven GP (1993) A simple evolutionary procedure for structural optimization. Comput Struct 49:885–896
Zhang WS, Zhong WL, Guo X (2014) An explicit length scale control approach in SIMP-based topology optimization. Comput Methods Appl Mech Eng 282:71–86
Zhang WS, Zhang J, Guo X (2015a) Explicit structural topology optimization via moving morphable components- A revival of shape optimization. In submission
Zhang WS, Zhong WL, Guo X (2015b) Explicit layout control in optimal design of structural systems with multiple embedding components. Comput Methods Appl Mech Eng 290:290–313
Zhou M, Rozvany GIN (1991) The COC algorithm, part II: topological, geometry and generalized shape optimization. Comput Methods Appl Mech Eng 89:309–336
Zhou MD, Lazarov BS, Wang FW, Sigmund O (2015) Minimum length scale in topology optimization by geometric constraint. Comput Methods Appl Mech Eng 293:266–28
Acknowledgments
The financial supports from the National Natural Science Foundation (10925209, 91216201, 11402048), the Fundamental Research Funds for the Central Universities, Program for Changjiang Scholars, Innovative Research Team in University (PCSIRT) and 111 Project (B14013) are gratefully acknowledged.
Author information
Authors and Affiliations
Corresponding author
Appendix: Matlab code (corresponding to the short beam problem)
Appendix: Matlab code (corresponding to the short beam problem)
function MMC188(DW,DH,nelx,nely,x_int,y_int,ini_val,volfrac)
% FEM data initialization
M = [nely + 1, nelx + 1];
EW = DW / nelx; % length of element
EH = DH / nely; % width of element
[x,y] = meshgrid(EW * [0 : nelx], EH * [0 : nely]);
LSgrid.x = x(:);
LSgrid.y = y(:); % coordinate of nodes
% Material properties
h = 1; %thickness
E = 1;
nu = 0.3;
% Component geometry initialization
x0 = x_int/2:x_int:DW; % x-coordinates of the centers of components
y0 = y_int/2:y_int:DH; % y-coordinates of the centers of components
xn = length(x0); % number of component groups in x direction
yn = length(y0); % number of component groups in y direction
x0 = kron(x0,ones(1,2*yn));
y0 = repmat(kron(y0,ones(1,2)),1,xn);
N = length(x0); % total number of components in the design domain
L = repmat(ini_val(1),1,N); % vector of the half length of each component
t1 = repmat(ini_val(2),1,N); % vector of the half width of component at point A
t2 = repmat(ini_val(3),1,N); % vector of the half width of component at point B
t3 = repmat(ini_val(4),1,N); % vector of the half width of component at point C
st = repmat([ini_val(5) -ini_val(5)],1,N/2); % vector of the sine value of the inclined angle of each component
variable = [x0;y0;L;t1;t2;t3;st];
%Parameter of MMA
xy00 = variable(:);
xval = xy00;
xold1 = xy00;
xold2 = xy00;
%Limits of variable:[x0; y0; L; t1; t2; t3; st];
xmin = [0; 0; 0.01; 0.01; 0.01; 0.03; −1.0];
xmin = repmat(xmin,N,1);
xmax = [DW; DH; 2.0; 0.2; 0.2; 0.2; 1.0];
xmax = repmat(xmax,N,1);
low = xmin;
upp = xmax;
m = 1; %number of constraint
Var_num = 7; % number of design variables for each component
nn = Var_num*N;
c = 1000*ones(m,1);
d = zeros(m,1);
a0 = 1;
a = zeros(m,1);
%Define loads and supports(Short beam)
fixeddofs = 1:2*(nely + 1);
alldofs = 1:2*(nely + 1)*(nelx + 1);
freedofs = setdiff(alldofs,fixeddofs);
loaddof = 2*(nely + 1)*nelx + nely + 2;
F = sparse(loaddof,1,-1,2*(nely + 1)*(nelx + 1),1);
%Preparation FE analysis
nodenrs = reshape(1:(1 + nelx)*(1 + nely),1 + nely,1 + nelx);
edofVec = reshape(2*nodenrs(1:end-1,1:end-1)-1,nelx*nely,1);
edofMat = repmat(edofVec,1,8) + repmat([0 1 2*nely + [2 3 4 5] 2 3],nelx*nely,1);
iK = kron(edofMat,ones(8,1))';
jK = kron(edofMat,ones(1,8))';
EleNodesID = edofMat(:,2:2:8)./2;
iEner = EleNodesID';
[KE] = BasicKe(E,nu, EW, EH,h); % stiffness matrix k^s is formed
%Initialize iteration
p = 6;
alpha = 1e-3; % parameter alpha in the Heaviside function
epsilon = 4*min(EW,EH); % regularization parameter epsilon in the Heaviside function
Phi = cell(N,1);
Loop = 1;
change = 1;
maxiter = 1000; % the maximum number of iterations
while change > 0.001 && Loop < maxiter
%Forming Phi^s
for i = 1:N
Phi{i} = tPhi(xy00(Var_num*i-Var_num + 1:Var_num*i),LSgrid.x,LSgrid.y,p);
end
%Union of components
tempPhi_max = Phi{1};
for i = 2:N
tempPhi_max = max(tempPhi_max,Phi{i});
end
Phi_max = reshape(tempPhi_max,nely + 1,nelx + 1);
%Plot components
contourf(reshape(x, M), reshape(y, M),Phi_max,[0,0]);
axis equal;axis([0 DW 0 DH]);pause(1e-6);
% Calculating the finite difference quotient of H
H = Heaviside(Phi_max,alpha,nelx,nely,epsilon);
diffH = cell(N,1);
for j = 1:N
for ii = 1:Var_num
xy001 = xy00;
xy001(ii + (j-1)*Var_num) = xy00(ii + (j-1)*Var_num) + max(2*min(EW,EH),0.005);
tmpPhiD1 = tPhi(xy001(Var_num*j-Var_num + 1:Var_num*j),LSgrid.x,LSgrid.y,p);
tempPhi_max1 = tmpPhiD1;
for ik = 1:j-1
tempPhi_max1 = max(tempPhi_max1,Phi{ik});
end
for ik = j + 1:N
tempPhi_max1 = max(tempPhi_max1,Phi{ik});
end
xy002 = xy00;
xy002(ii + (j-1)*Var_num) = xy00(ii + (j-1)*Var_num)-max(2*min(EW,EH),0.005);
tmpPhiD2 = tPhi(xy002(Var_num*j-Var_num + 1:Var_num*j),LSgrid.x,LSgrid.y,p);
tempPhi_max2 = tmpPhiD2;
for ik = 1:j-1
tempPhi_max2 = max(tempPhi_max2,Phi{ik});
end
for ik = j + 1:N
tempPhi_max2 = max(tempPhi_max2,Phi{ik});
end
HD1 = Heaviside(tempPhi_max1,alpha,nelx,nely,epsilon);
HD2 = Heaviside(tempPhi_max2,alpha,nelx,nely,epsilon);
diffH{j}(:,ii) = (HD1-HD2)/(2*(max(2*min(EW,EH),0.005)));
end
end
%FEA
denk = sum(H(EleNodesID).^2, 2) / 4;
den = sum(H(EleNodesID), 2) / 4;
A1 = sum(den)*EW*EH;
U = zeros(2*(nely + 1)*(nelx + 1),1);
sK = KE(:)*denk(:)';
K = sparse(iK(:),jK(:),sK(:)); K = (K + K')/2;
U(freedofs,:) = K(freedofs,freedofs)\F(freedofs,:);
%Energy of element
energy = sum((U(edofMat)*KE).*U(edofMat),2);
sEner = ones(4,1)*energy'/4;
energy_nod = sparse(iEner(:),1,sEner(:));
Comp = F'*U;
% Sensitivities
df0dx = zeros(Var_num*N,1);
dfdx = zeros(Var_num*N,1);
for k = 1:N
df0dx(Var_num*k-Var_num + 1:Var_num*k,1) = 2*energy_nod'.*H*diffH{k};
dfdx(Var_num*k-Var_num + 1:Var_num*k,1) = sum(diffH{k})/4;
end
%MMA optimization
f0val = Comp;
df0dx = −df0dx/max(abs(df0dx));
fval = A1/(DW*DH)-volfrac;
dfdx = dfdx/max(abs(dfdx));
[xmma,ymma,zmma,lam,xsi,eta,mu,zet,ss,low,upp] = …
mmasub(m,nn,Loop,xval,xmin,xmax,xold1,xold2, …
f0val,df0dx,fval,dfdx,low,upp,a0,a,c,d);
xold2 = xold1;
xold1 = xval;
change = max(abs(xval-xmma));
xval = xmma;
xy00 = round(xval*1e4)/1e4;
disp([' It.: ' sprintf('%4i\t',Loop) ' Obj.: ' sprintf('%6.3f\t',f0val) ' Vol.: ' …
sprintf('%6.4f\t',fval) 'ch.:' sprintf('%6.4f\t',change)]);
Loop = Loop + 1;
end
end
%Forming Phi_i for each component
function [tmpPhi] = tPhi(xy,LSgridx,LSgridy,p)
st = xy(7);
ct = sqrt(abs(1-st*st));
x1 = ct*(LSgridx - xy(1)) + st*(LSgridy - xy(2));
y1 = −st*(LSgridx - xy(1)) + ct*(LSgridy - xy(2));
bb = (xy(5) + xy(4)-2*xy(6))/2/xy(3)^2*x1.^2 + (xy(5)-xy(4))/2*x1/xy(3) + xy(6);
tmpPhi = −((x1).^p/xy(3)^p + (y1).^p./bb.^p-1);
end
%Heaviside function
function H = Heaviside(phi,alpha,nelx,nely,epsilon)
num_all = [1:(nelx + 1)*(nely + 1)]';
num1 = find(phi > epsilon);
H(num1) = 1;
num2 = find(phi < −epsilon);
H(num2) = alpha;
num3 = setdiff(num_all,[num1;num2]);
H(num3) = 3*(1-alpha)/4*(phi(num3)/epsilon-phi(num3).^3/(3*(epsilon)^3)) + (1 + alpha)/2;
end
%Element stiffness matrix
function [KE] = BasicKe(E,nu, a, b,h)
k = [−1/6/a/b*(nu*a^2-2*b^2-a^2), 1/8*nu + 1/8, −1/12/a/b*(nu*a^2 + 4*b^2-a^2), 3/8*nu-1/8, …
1/12/a/b*(nu*a^2-2*b^2-a^2),-1/8*nu-1/8, 1/6/a/b*(nu*a^2 + b^2-a^2), −3/8*nu + 1/8];
KE = E*h/(1-nu^2)*…
[k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8)
k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3)
k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2)
k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5)
k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4)
k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7)
k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6)
k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)];
end
% ~ ~ ~ ~ A Moving Morphable Components (MMC) based topology optimization code
% ~ ~ ~ ~ by Xu Guo Weisheng Zhang and Jie Yuan
% ~ ~ ~ ~ Department of Engineering Mechanics, State Key Laboratory of Structural Analysis
% ~ ~ ~ ~ for Industrial Equipment, Dalian University of Technology
% ~ ~ ~ ~ Please send your suggestions and comments to guoxu@dlut.edu.cn
Rights and permissions
About this article
Cite this article
Zhang, W., Yuan, J., Zhang, J. et al. A new topology optimization approach based on Moving Morphable Components (MMC) and the ersatz material model. Struct Multidisc Optim 53, 1243–1260 (2016). https://doi.org/10.1007/s00158-015-1372-3
Received:
Revised:
Accepted:
Published:
Issue Date:
DOI: https://doi.org/10.1007/s00158-015-1372-3