UTIAS AER1410H · 2024 · coursework

Holes appear. This is the arithmetic that puts them there.

Density-based topology optimisation, from the textbook cantilever to a bracket, and one full pass of the optimiser opened up, stage by stage, so that "material migrates to where it carries load" can be checked against what the iteration does.

Method
SIMP · compliance · optimality criteria
Lineage
Sigmund 99-line → Andreassen 88-line
Evidence here
19 committed frames · 2 convergence logs
One cantilever, four moments of the same 60-iteration pass. The material budget is identical in all four (40 % of the rectangle), so everything that changes is where it went, never how much there is.
01

One iteration, all the way through

The mechanism

An optimiser that produces a good-looking truss is not evidence of anything until you can say what it computed. Below is a single pass of the loop, on the cantilever the coursework's own source defines, with every quantity drawn from the arrays that pass produced. The last stage hands its answer back to the first.

This is the published 88-line formulation executed here with every parameter stated, not a replay of the coursework's animation, whose own penal and rmin were never written down.

    The pass

    01 What it starts from

    A density for every element: 1 is solid, 0 is void, and everything between is the fiction that makes the problem differentiable. Stiffness is not proportional to density; it is ρp with p = 3, so an element at half density buys an eighth of the stiffness for half the material budget. Intermediate density is deliberately made a bad deal, which is what drives the field to black and white.

    02 What it computes

    Assemble the global stiffness from those densities and solve K u = F once. Ten thousand degrees of freedom, one linear solve; this is the expensive stage. Each element's own strain energy ueᵀ k₀ ue falls out of that solution. It is how hard this element is working. Summed with the density weighting it is the compliance: the objective. Lower means stiffer.

    03 Which way to move

    The derivative of compliance with respect to each density is −p ρp−1 ueᵀ k₀ ue. It is negative everywhere, which says adding material anywhere would help, so the volume constraint is what makes this a problem at all. Filtered over a radius of three elements. Without this the answer is a checkerboard: alternating solid and void elements that the finite-element model scores as artificially stiff. The filter is not smoothing for looks, it is what makes the answer mesh-independent.

    04 The move, and the next field

    The optimality-criteria update: raise density where the filtered sensitivity is large, lower it where it is small, and bisect on a Lagrange multiplier until the volume comes out exactly at the budget. No element moves more than 0.2 in one step. Here is what moved. Red gains material, blue loses it, and the two integrate to zero because the constraint binds. This is the answer to "why do holes appear". Nothing removes material: the budget is fixed, so material arriving somewhere is material leaving somewhere else. And then it goes round again, sixty times.

    02

    Every term above, in the order the course builds them

    Reference · open what you need

    The loop is short enough to watch and long enough to hide five separate ideas, each of which exists because the one before it created a problem. This is the dependency chain, in the order AER1410 teaches it.

    Every entry answers the same four questions: what it is, why it exists at all, why it matters here, and what changes because of it. Three names it does not stop to define, because they are the subject rather than the method: SIMP is Solid Isotropic Material with Penalization, the formulation this whole page is about; the half-MBB beam is the standard test case Sigmund's code ships set up for, an aircraft floor-beam problem named for Messerschmitt-Bölkow-Blohm; and Ku = F is the finite element system, stiffness times displacement equals load.

        03

        Nineteen frames the optimiser wrote about itself

        The coursework's own run
        frame 1
        volume fraction, measured from the frame
        elements still undecided

        These are not renders of the result. The coursework's own script opens a VideoWriter and calls getframe inside the optimisation loop, so each frame is a design field the optimiser was holding at the moment it wrote it. The grid, 100 × 50, was measured back out of the frames by FFT of the image gradient, because it is not recorded anywhere in the tree.

        The volume fraction measures 0.667 on the first frame, 0.499 on the second, and lands on 0.40 by the third, where it never moves again: the constraint binding exactly, and why the structure can only reorganise from here rather than grow.

        One comparison, and then stop

        The same 200 × 40 problem run twice, changing only the filter. The sensitivity filter reaches a lower final compliance in fewer iterations; the density filter takes 100 more iterations to arrive somewhere worse on this objective, though it is the one with a physical meaning, since it filters the design variable rather than its derivative.

        04

        What was provided, and what was not

        Authorship

        This lineage is one of the most widely taught pieces of code in structural optimisation, and the assignment was designed around that: the point was not to write an optimiser, it was to understand one well enough to pose a problem to it and to read what came back.

        The three modifications are small and they are the whole assignment. Sigmund's code ships set up for the half-MBB beam with a symmetry plane. Turning it into this cantilever means replacing the support set, moving the load, and introducing a passive region the optimiser is forbidden to fill, which is how a real bolt hole or a clearance envelope enters a topology problem.

        Provenance of the code, by line
        partwhere it comes from
        SIMP interpolation, FE solve, OC update, filter provided
        Supports: the whole left edge clamped, replacing the half-MBB symmetry conditionP1_r3.m:125
        Load: a single downward point load on the right edge P1_r3.m:125
        Passive region the optimiser may not fill P1_r3.m:14–29
        Frame capture inside the loop P1_r3.m:36–39, 76–78
        Filter comparison: the same problem twice, changing only ftProblem Set 7/Q1
        The bracket case, its load estimates and the polyNURBS fit assignment work

        Problem Set 4 is a different case: top.m:100 and top99neo.m:31–32 leave Sigmund's half-MBB supports in place, so nothing from it is shown here.

        05

        The same method on a bracket somebody has to machine

        What it was pointed at

        The second half of the course applied it to the leading-edge slat bracket of a Zenith STOL CH 750: four fastener locations, a multi-directional load case, and a downstream shape somebody has to machine. The raw density iso-level is not a manufacturable surface; the polyNURBS fit is the step that turns the method into an engineering result rather than a picture.

        The topology is identical before and after the fit: same two triangular voids, same brace.

        Raw SIMP density result for the slat bracket at volume fraction 0.35: a rough, faceted triangular frame with two lugs at the top and one at the bottom, load arrows in red.
        raw density result
        volume fraction 0.35, iso-level surface
        The same bracket after polyNURBS fitting: identical topology, two triangular voids and the same X-brace, now as a smooth meshed solid.
        polyNURBS fit
        same run, machinable surface

        The same optimiser, on the course's other problems

        The chapters above follow one problem all the way through. These are two more the same code produced, kept because they show the two shapes a topology result comes in: a discrete truss and a continuous density field.

        A black truss structure on white: a bending beam problem solved as a ground structure, with a heavy top chord, a diagonal web and a lower tie converging on a support at the left.
        2024 Problem set 4, question 3: the bending beam solved as a ground structure, where the optimiser chooses which of a fixed set of bars survives. The answer is a truss because the problem only allowed bars.
        A contour plot of a density field on a fifty by fifty element grid, with a bright diagonal band of material running corner to corner against a dark background and a colour bar from 0.1 to 0.9.
        2024 Problem set 6, question 1: the same problem posed as a continuous density field on a 50 by 50 grid. Every element holds a number between zero and one, and the diagonal band is where the optimiser put the material. Compare the two: the method did not change, only what it was allowed to vary.

        What this does not establish