1 / 7

Sigmund’s 99-line topology optimization top.m

Sigmund’s 99-line topology optimization top.m. Function is remarkable achievement of squeezing so much content into so few lines. An important ingredient in the saving is limiting the geometry to be rectangular and limiting the elements to be square .

yamal
Télécharger la présentation

Sigmund’s 99-line topology optimization top.m

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Sigmund’s 99-line topology optimization top.m • Function is remarkable achievement of squeezing so much content into so few lines. • An important ingredient in the saving is limiting the geometry to be rectangular and limiting the elements to be square. • In addition it uses an optimality criterion method that is easy to implement and understand, but not necessarily the most efficient. • It is possible to use it without much understanding, but studying it is a good opportunity to review the basics of SIMP

  2. Initialization and finite element analysis %%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, JANUARY 2000 %%% %%%% CODE MODIFIED FOR INCREASED SPEED, September 2002, BY OLE SIGMUND %%% function top(nelx,nely,volfrac,penal,rmin); % INITIALIZE x(1:nely,1:nelx) = volfrac; loop = 0; change = 1.; % START ITERATION while change > 0.01 loop = loop + 1; xold = x; % FE-ANALYSIS [U]=FE(nelx,nely,x,penal);

  3. Finite element function function [U]=FE(nelx,nely,x,penal) [KE] = lk; K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); F = sparse(2*(nely+1)*(nelx+1),1); U = zeros(2*(nely+1)*(nelx+1),1); for elx = 1:nelx for ely = 1:nely n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1; 2*n2+2; 2*n1+1; 2*n1+2]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end % DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM) F(2,1) = -1; fixeddofs = union([1:2:2*(nely+1)],[2*(nelx+1)*(nely+1)]); alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs); % SOLVING U(freedofs,:) = K(freedofs,freedofs) \ F(freedofs,:); U(fixeddofs,:)= 0;

  4. Compliance calculation and its sensitivity [KE] = lk; c = 0.; for ely = 1:nely for elx = 1:nelx n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely; Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1;2*n2+2; 2*n1+1;2*n1+2],1); c = c + x(ely,elx)^penal*Ue'*KE*Ue; dc(ely,elx) = -penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue; end end % FILTERING OF SENSITIVITIES [dc] = check(nelx,nely,rmin,x,dc);

  5. Low pass filter for sensitivity • Average sensitivities with adjacent elements that are within the feature size rmin • Dist(k,i) is the distance between centers of element i and element k.

  6. Effect of rmin • Nelx=200,nely=40,volfrac=0.4, penal=3, rmin=2 • Nelx=100, nely=20 • Rmin=0.1

More Related