using TopOpt
using WGLMakie
WGLMakie.activate!(; resize_to=:parent)
using Bonito
if haskey(ENV, "QUARTO_PROJECT_DIR")
Bonito.Page(exportable=true, offline=true)
else
Bonito.browser_display()
end
display_app(app) = display(app)Heat Conduction: Conductivity Tree Benchmark
Description
This tutorial demonstrates heat conduction topology optimization using the classic “conductivity tree” benchmark from Bendsøe & Sigmund’s Topology Optimization textbook (§1.3). The problem minimizes thermal compliance (temperature work) subject to a volume constraint.
The setup: distributed heat flux enters the top edge, the bottom edge is held at T = 0 (heat sink), and the sides are insulated. The optimal design forms a branching tree structure that efficiently conducts heat from the top to the bottom boundary — analogous to structural force flow paths.
Setup
WGLMakie.activate!(; resize_to=:parent) selects the browser renderer and fills the Quarto output column. Bonito.Page(exportable=true, offline=true) embeds the assets needed by visualize(...; static=true) in the Quarto output, so the visualization does not require a running Julia process.
Define the Problem
The HeatTree problem sets up the standard benchmark with heat flux on top and fixed temperature at the bottom:
nels = (80, 40) # 80×40 rectangular mesh
k = 1.0 # thermal conductivity
q = 1.0 # heat flux on top boundary
problem = HeatTree(nels, (1.0, 1.0), k; q=q)The boundary conditions:
- Top edge: Distributed heat flux q (Neumann BC)
- Bottom edge: Fixed temperature T = 0 (Dirichlet BC)
- Left/Right edges: Insulated (zero heat flux)
Parameter Settings
V = 0.3 # volume fraction (30% high-conductivity material)
xmin = 1e-3 # minimum density
rmin = 2.0 # density filter radius
x0 = fill(V, getncells(problem)) # start from uniform 30% density
solver = FEASolver(DirectSolver, problem; xmin=xmin, penalty=PowerPenaltyFun(1.0))
comp = ThermalComplianceFun(solver)
filter = DensityFilterFun(solver; rmin=rmin)The 30% volume constraint forces the optimizer to strategically place high- conductivity material for maximum heat dissipation.
Objective and Constraint
obj = x -> comp(filter(PseudoDensities(x))) # thermal compliance
volfrac = VolumeFun(solver)
constr = x -> volfrac(filter(PseudoDensities(x))) - V # volume constraintThermal compliance measures the work done by the heat flux against the temperature field: J = QᵀT. Minimizing it drives heat efficiently toward the cold boundary.
Optimization Setup
model = Model(obj)
addvar!(model, zeros(length(x0)), ones(length(x0)))
add_ineq_constraint!(model, constr)
alg = MMA87()
convcriteria = Nonconvex.KKTCriteria()Continuation Strategy
A fixed penalty often leaves intermediate (gray) densities. We use a continuation strategy that ramps the penalty exponent through 1.0, 2.0, and 3.0, with exponentially decaying KKT tolerances so each subproblem is solved accurately before the penalty increases:
ps = [1.0, 2.0, 3.0]
tols = [1e-2, 1e-3, 1e-4]
x = x0Run Optimization
Each continuation step:
- Set the penalty exponent
p - Set the convergence tolerance
tol - Solve the subproblem with MMA87
- Warm-start the next step from the current solution
for j in eachindex(ps)
global x, convcriteria, res
p = ps[j]
tol = tols[j]
setpenalty!(solver, p)
options = MMAOptions(; tol=Tolerance(; kkt=tol), maxiter=1000, convcriteria)
res = optimize(model, alg, x; options)
global x = res.minimizer
println("Step $j: penalty=$p, tol=$tol, obj=$(obj(x))")
end[ Info: iter obj Δobj violation kkt_residual [ Info: 0 1.1e+04 Inf 0.0e+00 1.3e+01 [ Info: 1 1.1e+04 4.5e-06 0.0e+00 4.5e-06 [ Info: 2 1.1e+04 1.5e-09 0.0e+00 4.5e-06 Step 1: penalty=1.0, tol=0.01, obj=10641.835721159114 [ Info: iter obj Δobj violation kkt_residual [ Info: 0 3.5e+04 Inf 0.0e+00 8.4e+01 [ Info: 1 3.5e+04 2.5e-05 0.0e+00 4.5e-06 [ Info: 2 3.5e+04 9.5e-10 0.0e+00 4.5e-06 Step 2: penalty=2.0, tol=0.001, obj=35199.648008018485 [ Info: iter obj Δobj violation kkt_residual [ Info: 0 1.1e+05 Inf 0.0e+00 4.0e+02 [ Info: 1 1.1e+05 5.5e-03 0.0e+00 5.5e-03 [ Info: 2 1.1e+05 1.8e-09 0.0e+00 5.5e-03 [ Info: 3 1.1e+05 5.2e-09 0.0e+00 5.5e-03 [ Info: 4 1.1e+05 2.7e-04 0.0e+00 5.3e-03 [ Info: 5 1.1e+05 1.3e-03 0.0e+00 3.9e-03 [ Info: 6 1.1e+05 3.0e-04 0.0e+00 3.6e-03 [ Info: 7 1.1e+05 9.6e-04 0.0e+00 4.6e-03 [ Info: 8 1.1e+05 7.9e-04 0.0e+00 3.8e-03 [ Info: 9 1.1e+05 9.5e-04 0.0e+00 2.9e-03 [ Info: 10 1.1e+05 3.8e-04 0.0e+00 3.2e-03 [ Info: 11 1.1e+05 4.1e-04 0.0e+00 2.8e-03 [ Info: 12 1.1e+05 7.2e-05 0.0e+00 2.9e-03 [ Info: 13 1.1e+05 8.8e-04 0.0e+00 6.9e-03 [ Info: 14 1.1e+05 9.9e-05 0.0e+00 3.2e-02 [ Info: 15 1.1e+05 9.3e-04 0.0e+00 1.7e-01 [ Info: 16 1.1e+05 1.4e-02 0.0e+00 1.1e+00 [ Info: 17 1.1e+05 7.3e-01 0.0e+00 7.9e+00 [ Info: 18 1.1e+05 5.2e+01 0.0e+00 6.5e+01 [ Info: 19 1.1e+05 3.4e+03 0.0e+00 2.9e+02 [ Info: 20 9.0e+04 2.1e+04 0.0e+00 4.0e+03 [ Info: 21 1.4e+05 4.8e+04 0.0e+00 8.5e+03 [ Info: 22 2.3e+05 9.3e+04 0.0e+00 3.2e+04 [ Info: 23 1.6e+05 6.9e+04 0.0e+00 3.5e+04 [ Info: 24 1.2e+05 4.8e+04 0.0e+00 4.3e+04 [ Info: 25 6.4e+04 5.1e+04 0.0e+00 2.3e+04 [ Info: 26 4.3e+04 2.1e+04 0.0e+00 6.8e+03 [ Info: 27 3.5e+04 8.7e+03 0.0e+00 1.6e+03 [ Info: 28 3.0e+04 4.1e+03 0.0e+00 8.2e+02 [ Info: 29 2.8e+04 2.5e+03 0.0e+00 5.7e+02 [ Info: 30 2.6e+04 2.2e+03 0.0e+00 5.6e+02 [ Info: 31 2.4e+04 1.9e+03 0.0e+00 4.5e+02 [ Info: 32 2.2e+04 1.5e+03 0.0e+00 3.4e+02 [ Info: 33 2.1e+04 1.1e+03 0.0e+00 2.5e+02 [ Info: 34 2.0e+04 9.9e+02 0.0e+00 2.4e+02 [ Info: 35 2.0e+04 6.9e+02 0.0e+00 1.5e+02 [ Info: 36 1.9e+04 4.1e+02 0.0e+00 7.6e+01 [ Info: 37 1.9e+04 2.4e+02 0.0e+00 4.7e+01 [ Info: 38 1.9e+04 1.6e+02 0.0e+00 3.1e+01 [ Info: 39 1.9e+04 1.2e+02 0.0e+00 2.5e+01 [ Info: 40 1.9e+04 9.4e+01 0.0e+00 2.3e+01 [ Info: 41 1.9e+04 6.4e+01 0.0e+00 1.8e+01 [ Info: 42 1.8e+04 4.8e+01 0.0e+00 1.7e+01 [ Info: 43 1.8e+04 4.7e+01 0.0e+00 1.7e+01 [ Info: 44 1.8e+04 4.5e+01 0.0e+00 1.7e+01 [ Info: 45 1.8e+04 3.5e+01 0.0e+00 1.6e+01 [ Info: 46 1.8e+04 2.8e+01 0.0e+00 1.6e+01 [ Info: 47 1.8e+04 2.2e+01 0.0e+00 1.6e+01 [ Info: 48 1.8e+04 1.8e+01 0.0e+00 8.5e+00 [ Info: 49 1.8e+04 1.4e+01 0.0e+00 8.7e+00 [ Info: 50 1.8e+04 1.4e+01 0.0e+00 8.3e+00 [ Info: 51 1.8e+04 1.4e+01 0.0e+00 8.0e+00 [ Info: 52 1.8e+04 1.3e+01 0.0e+00 7.9e+00 [ Info: 53 1.8e+04 1.1e+01 0.0e+00 6.6e+00 [ Info: 54 1.8e+04 9.1e+00 0.0e+00 7.0e+00 [ Info: 55 1.8e+04 1.0e+01 0.0e+00 8.8e+00 [ Info: 56 1.8e+04 1.2e+01 0.0e+00 1.1e+01 [ Info: 57 1.8e+04 1.4e+01 0.0e+00 1.4e+01 [ Info: 58 1.8e+04 1.4e+01 0.0e+00 1.3e+01 [ Info: 59 1.8e+04 8.8e+00 0.0e+00 5.5e+00 [ Info: 60 1.8e+04 4.1e+00 0.0e+00 6.0e+00 [ Info: 61 1.8e+04 4.4e+00 0.0e+00 6.2e+00 [ Info: 62 1.8e+04 5.5e+00 0.0e+00 6.4e+00 [ Info: 63 1.8e+04 6.5e+00 0.0e+00 6.6e+00 [ Info: 64 1.8e+04 8.8e+00 0.0e+00 8.1e+00 [ Info: 65 1.8e+04 8.0e+00 0.0e+00 7.7e+00 [ Info: 66 1.8e+04 4.5e+00 0.0e+00 6.9e+00 [ Info: 67 1.8e+04 3.4e+00 0.0e+00 6.5e+00 [ Info: 68 1.8e+04 2.4e+00 0.0e+00 5.5e+00 [ Info: 69 1.8e+04 1.6e+00 0.0e+00 5.4e+00 [ Info: 70 1.8e+04 1.8e+00 0.0e+00 5.2e+00 [ Info: 71 1.8e+04 2.5e+00 0.0e+00 5.3e+00 [ Info: 72 1.8e+04 2.4e+00 0.0e+00 4.0e+00 [ Info: 73 1.8e+04 2.5e+00 0.0e+00 4.3e+00 [ Info: 74 1.8e+04 2.9e+00 0.0e+00 4.5e+00 [ Info: 75 1.8e+04 3.2e+00 0.0e+00 4.7e+00 [ Info: 76 1.8e+04 3.7e+00 0.0e+00 5.0e+00 [ Info: 77 1.8e+04 4.0e+00 0.0e+00 5.9e+00 [ Info: 78 1.8e+04 3.8e+00 0.0e+00 3.7e+00 [ Info: 79 1.8e+04 2.6e+00 0.0e+00 4.1e+00 [ Info: 80 1.8e+04 2.1e+00 0.0e+00 4.2e+00 [ Info: 81 1.8e+04 1.9e+00 0.0e+00 4.1e+00 [ Info: 82 1.8e+04 2.1e+00 0.0e+00 4.1e+00 [ Info: 83 1.8e+04 2.3e+00 0.0e+00 4.1e+00 [ Info: 84 1.8e+04 1.9e+00 0.0e+00 4.3e+00 [ Info: 85 1.8e+04 1.9e+00 0.0e+00 4.3e+00 [ Info: 86 1.8e+04 2.4e+00 0.0e+00 4.3e+00 [ Info: 87 1.8e+04 2.3e+00 0.0e+00 3.9e+00 [ Info: 88 1.8e+04 2.7e+00 0.0e+00 4.1e+00 [ Info: 89 1.8e+04 2.8e+00 0.0e+00 3.9e+00 [ Info: 90 1.8e+04 3.0e+00 0.0e+00 3.6e+00 [ Info: 91 1.8e+04 2.9e+00 0.0e+00 3.2e+00 [ Info: 92 1.8e+04 2.2e+00 0.0e+00 3.5e+00 [ Info: 93 1.8e+04 2.5e+00 0.0e+00 3.6e+00 [ Info: 94 1.8e+04 2.5e+00 0.0e+00 3.7e+00 [ Info: 95 1.8e+04 2.6e+00 0.0e+00 3.9e+00 [ Info: 96 1.8e+04 3.2e+00 0.0e+00 4.1e+00 [ Info: 97 1.8e+04 3.3e+00 0.0e+00 4.0e+00 [ Info: 98 1.8e+04 3.1e+00 0.0e+00 3.7e+00 [ Info: 99 1.8e+04 2.0e+00 0.0e+00 3.3e+00 [ Info: 100 1.8e+04 2.1e+00 0.0e+00 3.4e+00 [ Info: 101 1.8e+04 2.5e+00 0.0e+00 2.9e+00 [ Info: 102 1.8e+04 1.9e+00 0.0e+00 3.1e+00 [ Info: 103 1.8e+04 1.7e+00 0.0e+00 3.3e+00 [ Info: 104 1.8e+04 7.6e-01 0.0e+00 9.8e+00 [ Info: 105 1.8e+04 2.4e+00 0.0e+00 5.8e+00 [ Info: 106 1.8e+04 3.4e+00 0.0e+00 6.9e+00 [ Info: 107 1.8e+04 4.8e+00 0.0e+00 4.4e+00 [ Info: 108 1.8e+04 5.5e+00 0.0e+00 6.3e+00 [ Info: 109 1.8e+04 5.5e+00 0.0e+00 7.9e+00 [ Info: 110 1.8e+04 6.0e+00 0.0e+00 1.0e+01 [ Info: 111 1.8e+04 7.4e+00 0.0e+00 1.2e+01 [ Info: 112 1.8e+04 9.0e+00 0.0e+00 1.2e+01 [ Info: 113 1.8e+04 6.5e+00 0.0e+00 3.5e+00 [ Info: 114 1.8e+04 2.5e+00 0.0e+00 3.9e+00 [ Info: 115 1.8e+04 2.2e+00 0.0e+00 4.2e+00 [ Info: 116 1.8e+04 2.6e+00 0.0e+00 4.6e+00 [ Info: 117 1.8e+04 3.5e+00 0.0e+00 4.9e+00 [ Info: 118 1.8e+04 4.4e+00 0.0e+00 5.0e+00 [ Info: 119 1.8e+04 6.7e+00 0.0e+00 6.1e+00 [ Info: 120 1.8e+04 8.0e+00 0.0e+00 7.6e+00 [ Info: 121 1.8e+04 8.6e+00 0.0e+00 9.4e+00 [ Info: 122 1.8e+04 5.9e+00 0.0e+00 5.3e+00 [ Info: 123 1.8e+04 3.5e+00 0.0e+00 5.1e+00 [ Info: 124 1.8e+04 3.7e+00 0.0e+00 4.9e+00 [ Info: 125 1.8e+04 3.6e+00 0.0e+00 4.5e+00 [ Info: 126 1.8e+04 3.3e+00 0.0e+00 3.3e+00 [ Info: 127 1.8e+04 2.3e+00 0.0e+00 3.5e+00 [ Info: 128 1.8e+04 2.3e+00 0.0e+00 2.4e+00 [ Info: 129 1.8e+04 2.2e+00 0.0e+00 2.6e+00 [ Info: 130 1.8e+04 2.9e+00 0.0e+00 3.2e+00 [ Info: 131 1.8e+04 3.5e+00 0.0e+00 3.8e+00 [ Info: 132 1.8e+04 4.5e+00 0.0e+00 4.7e+00 [ Info: 133 1.8e+04 5.2e+00 0.0e+00 5.4e+00 [ Info: 134 1.8e+04 4.0e+00 0.0e+00 5.9e+00 [ Info: 135 1.8e+04 4.2e+00 0.0e+00 6.6e+00 [ Info: 136 1.8e+04 3.8e+00 0.0e+00 6.9e+00 [ Info: 137 1.8e+04 3.4e+00 0.0e+00 6.8e+00 [ Info: 138 1.8e+04 3.6e+00 0.0e+00 6.4e+00 [ Info: 139 1.8e+04 3.2e+00 0.0e+00 6.2e+00 [ Info: 140 1.8e+04 2.6e+00 0.0e+00 5.8e+00 [ Info: 141 1.8e+04 2.6e+00 0.0e+00 3.2e+00 [ Info: 142 1.8e+04 2.2e+00 0.0e+00 3.2e+00 [ Info: 143 1.8e+04 2.2e+00 0.0e+00 2.8e+00 [ Info: 144 1.8e+04 2.5e+00 0.0e+00 3.3e+00 [ Info: 145 1.8e+04 3.2e+00 0.0e+00 4.3e+00 [ Info: 146 1.8e+04 3.7e+00 0.0e+00 3.1e+00 [ Info: 147 1.8e+04 2.2e+00 0.0e+00 2.9e+00 [ Info: 148 1.8e+04 2.0e+00 0.0e+00 2.8e+00 [ Info: 149 1.8e+04 2.0e+00 0.0e+00 2.4e+00 [ Info: 150 1.8e+04 1.5e+00 0.0e+00 2.8e+00 [ Info: 151 1.8e+04 1.4e+00 0.0e+00 2.8e+00 [ Info: 152 1.8e+04 1.5e+00 0.0e+00 2.7e+00 [ Info: 153 1.8e+04 1.6e+00 0.0e+00 2.6e+00 [ Info: 154 1.8e+04 9.3e-01 0.0e+00 2.6e+00 [ Info: 155 1.8e+04 8.5e-01 0.0e+00 2.5e+00 [ Info: 156 1.8e+04 1.0e+00 0.0e+00 2.5e+00 [ Info: 157 1.8e+04 1.2e+00 0.0e+00 2.4e+00 [ Info: 158 1.8e+04 1.2e+00 0.0e+00 2.2e+00 [ Info: 159 1.8e+04 1.1e+00 0.0e+00 2.3e+00 [ Info: 160 1.8e+04 1.2e+00 0.0e+00 2.5e+00 [ Info: 161 1.8e+04 1.4e+00 0.0e+00 2.6e+00 [ Info: 162 1.8e+04 1.2e+00 0.0e+00 2.8e+00 [ Info: 163 1.8e+04 1.1e+00 0.0e+00 3.0e+00 [ Info: 164 1.8e+04 1.4e+00 0.0e+00 3.0e+00 [ Info: 165 1.8e+04 1.9e+00 0.0e+00 3.3e+00 [ Info: 166 1.8e+04 2.7e+00 0.0e+00 3.4e+00 [ Info: 167 1.8e+04 3.4e+00 0.0e+00 4.0e+00 [ Info: 168 1.8e+04 3.6e+00 0.0e+00 3.6e+00 [ Info: 169 1.8e+04 4.5e+00 0.0e+00 3.9e+00 [ Info: 170 1.8e+04 5.9e+00 0.0e+00 4.3e+00 [ Info: 171 1.8e+04 7.8e+00 0.0e+00 5.1e+00 [ Info: 172 1.8e+04 9.1e+00 0.0e+00 6.4e+00 [ Info: 173 1.8e+04 5.8e+00 0.0e+00 7.5e+00 [ Info: 174 1.8e+04 5.3e+00 0.0e+00 8.6e+00 [ Info: 175 1.8e+04 4.9e+00 0.0e+00 1.0e+01 [ Info: 176 1.8e+04 7.4e+00 0.0e+00 1.2e+01 [ Info: 177 1.8e+04 8.4e+00 0.0e+00 1.4e+01 [ Info: 178 1.8e+04 6.6e+00 0.0e+00 1.2e+01 [ Info: 179 1.8e+04 3.4e+00 0.0e+00 4.8e+00 [ Info: 180 1.8e+04 2.8e+00 0.0e+00 3.2e+00 [ Info: 181 1.8e+04 2.2e+00 0.0e+00 2.5e+00 [ Info: 182 1.8e+04 1.6e+00 0.0e+00 2.5e+00 [ Info: 183 1.8e+04 1.9e+00 0.0e+00 2.7e+00 [ Info: 184 1.8e+04 2.3e+00 0.0e+00 3.1e+00 [ Info: 185 1.8e+04 2.8e+00 0.0e+00 3.2e+00 [ Info: 186 1.8e+04 3.1e+00 0.0e+00 4.0e+00 [ Info: 187 1.8e+04 4.0e+00 0.0e+00 5.3e+00 [ Info: 188 1.8e+04 4.3e+00 0.0e+00 6.4e+00 [ Info: 189 1.8e+04 5.0e+00 0.0e+00 7.5e+00 [ Info: 190 1.8e+04 5.6e+00 0.0e+00 8.9e+00 [ Info: 191 1.8e+04 5.2e+00 0.0e+00 3.1e+00 [ Info: 192 1.8e+04 2.4e+00 0.0e+00 3.1e+00 [ Info: 193 1.8e+04 2.4e+00 0.0e+00 2.8e+00 [ Info: 194 1.8e+04 1.8e+00 0.0e+00 3.1e+00 [ Info: 195 1.8e+04 1.8e+00 0.0e+00 3.3e+00 [ Info: 196 1.8e+04 2.2e+00 0.0e+00 3.0e+00 [ Info: 197 1.8e+04 1.9e+00 0.0e+00 3.2e+00 [ Info: 198 1.8e+04 2.2e+00 0.0e+00 3.3e+00 [ Info: 199 1.8e+04 2.2e+00 0.0e+00 3.4e+00 [ Info: 200 1.8e+04 1.6e+00 0.0e+00 3.5e+00 [ Info: 201 1.8e+04 1.2e+00 0.0e+00 3.5e+00 [ Info: 202 1.8e+04 1.1e+00 0.0e+00 3.5e+00 [ Info: 203 1.8e+04 1.2e+00 0.0e+00 3.4e+00 [ Info: 204 1.8e+04 1.1e+00 0.0e+00 1.6e+00 [ Info: 205 1.8e+04 6.9e-01 0.0e+00 1.7e+00 [ Info: 206 1.8e+04 6.5e-01 0.0e+00 1.8e+00 [ Info: 207 1.8e+04 5.9e-01 0.0e+00 1.7e+00 [ Info: 208 1.8e+04 6.5e-01 0.0e+00 1.7e+00 [ Info: 209 1.8e+04 6.0e-01 0.0e+00 1.5e+00 [ Info: 210 1.8e+04 5.5e-01 0.0e+00 1.6e+00 [ Info: 211 1.8e+04 6.7e-01 0.0e+00 1.7e+00 [ Info: 212 1.8e+04 8.2e-01 0.0e+00 1.8e+00 [ Info: 213 1.8e+04 1.0e+00 0.0e+00 1.9e+00 [ Info: 214 1.8e+04 1.3e+00 0.0e+00 2.3e+00 [ Info: 215 1.8e+04 1.2e+00 0.0e+00 2.4e+00 [ Info: 216 1.8e+04 1.5e+00 0.0e+00 2.8e+00 [ Info: 217 1.8e+04 1.6e+00 0.0e+00 2.9e+00 [ Info: 218 1.8e+04 2.1e+00 0.0e+00 2.5e+00 [ Info: 219 1.8e+04 2.1e+00 0.0e+00 2.8e+00 [ Info: 220 1.8e+04 2.6e+00 0.0e+00 3.2e+00 [ Info: 221 1.8e+04 2.8e+00 0.0e+00 3.4e+00 [ Info: 222 1.8e+04 2.5e+00 0.0e+00 3.3e+00 [ Info: 223 1.8e+04 2.0e+00 0.0e+00 1.8e+00 [ Info: 224 1.8e+04 9.3e-01 0.0e+00 1.9e+00 [ Info: 225 1.8e+04 7.6e-01 0.0e+00 1.8e+00 [ Info: 226 1.8e+04 6.8e-01 0.0e+00 1.7e+00 [ Info: 227 1.8e+04 6.0e-01 0.0e+00 1.8e+00 [ Info: 228 1.8e+04 6.4e-01 0.0e+00 1.9e+00 [ Info: 229 1.8e+04 8.0e-01 0.0e+00 2.2e+00 [ Info: 230 1.8e+04 9.1e-01 0.0e+00 3.0e+00 [ Info: 231 1.8e+04 1.0e+00 0.0e+00 3.9e+00 [ Info: 232 1.8e+04 1.7e+00 0.0e+00 5.4e+00 [ Info: 233 1.8e+04 2.8e+00 0.0e+00 7.2e+00 [ Info: 234 1.8e+04 4.3e+00 0.0e+00 9.2e+00 [ Info: 235 1.8e+04 5.6e+00 0.0e+00 1.1e+01 [ Info: 236 1.8e+04 5.7e+00 0.0e+00 9.3e+00 [ Info: 237 1.8e+04 1.6e+00 0.0e+00 2.1e+00 [ Info: 238 1.8e+04 6.0e-01 0.0e+00 2.1e+00 [ Info: 239 1.8e+04 4.8e-01 0.0e+00 1.8e+00 [ Info: 240 1.8e+04 2.6e-01 0.0e+00 1.7e+00 [ Info: 241 1.8e+04 2.9e-01 0.0e+00 1.8e+00 [ Info: 242 1.8e+04 3.4e-01 0.0e+00 1.7e+00 [ Info: 243 1.8e+04 4.1e-01 0.0e+00 1.8e+00 [ Info: 244 1.8e+04 5.2e-01 0.0e+00 1.9e+00 [ Info: 245 1.8e+04 6.9e-01 0.0e+00 2.1e+00 [ Info: 246 1.8e+04 6.6e-01 0.0e+00 1.7e+00 [ Info: 247 1.8e+04 5.6e-01 0.0e+00 1.8e+00 [ Info: 248 1.8e+04 6.6e-01 0.0e+00 1.9e+00 [ Info: 249 1.8e+04 8.0e-01 0.0e+00 2.1e+00 [ Info: 250 1.8e+04 8.4e-01 0.0e+00 1.9e+00 [ Info: 251 1.8e+04 5.3e-01 0.0e+00 1.9e+00 [ Info: 252 1.8e+04 4.4e-01 0.0e+00 1.9e+00 [ Info: 253 1.8e+04 4.8e-01 0.0e+00 1.9e+00 [ Info: 254 1.8e+04 6.6e-01 0.0e+00 2.0e+00 [ Info: 255 1.8e+04 7.7e-01 0.0e+00 2.0e+00 [ Info: 256 1.8e+04 7.0e-01 0.0e+00 2.2e+00 [ Info: 257 1.8e+04 9.1e-01 0.0e+00 2.3e+00 [ Info: 258 1.8e+04 1.2e+00 0.0e+00 2.6e+00 [ Info: 259 1.8e+04 1.4e+00 0.0e+00 2.9e+00 [ Info: 260 1.8e+04 1.4e+00 0.0e+00 3.1e+00 [ Info: 261 1.8e+04 1.3e+00 0.0e+00 3.7e+00 [ Info: 262 1.8e+04 2.0e+00 0.0e+00 4.6e+00 [ Info: 263 1.8e+04 2.9e+00 0.0e+00 5.6e+00 [ Info: 264 1.8e+04 3.8e+00 0.0e+00 6.7e+00 [ Info: 265 1.8e+04 4.5e+00 0.0e+00 8.0e+00 [ Info: 266 1.8e+04 4.7e+00 0.0e+00 7.5e+00 [ Info: 267 1.8e+04 1.3e+00 0.0e+00 1.3e+00 [ Info: 268 1.8e+04 2.4e-01 0.0e+00 1.3e+00 [ Info: 269 1.8e+04 1.6e-01 0.0e+00 1.3e+00 [ Info: 270 1.8e+04 1.8e-01 0.0e+00 1.3e+00 [ Info: 271 1.8e+04 2.1e-01 0.0e+00 1.3e+00 [ Info: 272 1.8e+04 2.5e-01 0.0e+00 1.3e+00 [ Info: 273 1.8e+04 2.8e-01 0.0e+00 1.3e+00 [ Info: 274 1.8e+04 3.2e-01 0.0e+00 1.3e+00 [ Info: 275 1.8e+04 3.5e-01 0.0e+00 1.3e+00 [ Info: 276 1.8e+04 3.9e-01 0.0e+00 1.3e+00 [ Info: 277 1.8e+04 4.3e-01 0.0e+00 1.5e+00 [ Info: 278 1.8e+04 3.7e-01 0.0e+00 1.6e+00 [ Info: 279 1.8e+04 3.2e-01 0.0e+00 1.7e+00 [ Info: 280 1.8e+04 4.5e-01 0.0e+00 1.9e+00 [ Info: 281 1.8e+04 6.6e-01 0.0e+00 2.1e+00 [ Info: 282 1.8e+04 8.4e-01 0.0e+00 2.4e+00 [ Info: 283 1.8e+04 1.2e+00 0.0e+00 2.9e+00 [ Info: 284 1.8e+04 9.5e-01 0.0e+00 1.8e+00 [ Info: 285 1.8e+04 9.0e-01 0.0e+00 1.8e+00 [ Info: 286 1.8e+04 9.7e-01 0.0e+00 1.9e+00 [ Info: 287 1.8e+04 7.9e-01 0.0e+00 2.0e+00 [ Info: 288 1.8e+04 5.8e-01 0.0e+00 1.5e+00 [ Info: 289 1.8e+04 3.1e-01 0.0e+00 1.5e+00 [ Info: 290 1.8e+04 3.4e-01 0.0e+00 1.4e+00 [ Info: 291 1.8e+04 3.9e-01 0.0e+00 1.4e+00 [ Info: 292 1.8e+04 4.4e-01 0.0e+00 1.4e+00 [ Info: 293 1.8e+04 4.9e-01 0.0e+00 1.3e+00 [ Info: 294 1.8e+04 5.5e-01 0.0e+00 1.4e+00 [ Info: 295 1.8e+04 5.3e-01 0.0e+00 1.6e+00 [ Info: 296 1.8e+04 6.4e-01 0.0e+00 1.9e+00 [ Info: 297 1.8e+04 7.3e-01 0.0e+00 2.2e+00 [ Info: 298 1.8e+04 3.6e-01 0.0e+00 5.2e-01 [ Info: 299 1.8e+04 5.2e-02 0.0e+00 4.3e-01 [ Info: 300 1.8e+04 2.6e-02 0.0e+00 4.4e-01 [ Info: 301 1.8e+04 2.8e-02 0.0e+00 4.5e-01 [ Info: 302 1.8e+04 3.1e-02 0.0e+00 4.5e-01 [ Info: 303 1.8e+04 3.4e-02 0.0e+00 4.5e-01 [ Info: 304 1.8e+04 3.7e-02 0.0e+00 4.5e-01 [ Info: 305 1.8e+04 4.0e-02 0.0e+00 4.3e-01 [ Info: 306 1.8e+04 4.1e-02 0.0e+00 4.6e-01 [ Info: 307 1.8e+04 4.2e-02 0.0e+00 4.1e-01 [ Info: 308 1.8e+04 4.4e-02 0.0e+00 4.8e-01 [ Info: 309 1.8e+04 4.3e-02 0.0e+00 4.1e-01 [ Info: 310 1.8e+04 4.2e-02 0.0e+00 4.4e-01 [ Info: 311 1.8e+04 4.2e-02 0.0e+00 4.3e-01 [ Info: 312 1.8e+04 3.9e-02 0.0e+00 4.5e-01 [ Info: 313 1.8e+04 3.9e-02 0.0e+00 4.4e-01 [ Info: 314 1.8e+04 3.9e-02 0.0e+00 4.3e-01 [ Info: 315 1.8e+04 3.9e-02 0.0e+00 4.3e-01 [ Info: 316 1.8e+04 3.6e-02 0.0e+00 4.3e-01 [ Info: 317 1.8e+04 3.5e-02 0.0e+00 4.1e-01 [ Info: 318 1.8e+04 3.4e-02 0.0e+00 4.0e-01 [ Info: 319 1.8e+04 3.4e-02 0.0e+00 3.8e-01 [ Info: 320 1.8e+04 3.0e-02 0.0e+00 3.7e-01 [ Info: 321 1.8e+04 2.9e-02 0.0e+00 4.1e-01 [ Info: 322 1.8e+04 2.9e-02 0.0e+00 4.6e-01 [ Info: 323 1.8e+04 3.0e-02 0.0e+00 5.2e-01 [ Info: 324 1.8e+04 2.9e-02 0.0e+00 5.5e-01 [ Info: 325 1.8e+04 2.4e-02 0.0e+00 5.6e-01 [ Info: 326 1.8e+04 2.5e-02 0.0e+00 5.6e-01 [ Info: 327 1.8e+04 2.6e-02 0.0e+00 5.6e-01 [ Info: 328 1.8e+04 2.7e-02 0.0e+00 5.6e-01 [ Info: 329 1.8e+04 2.9e-02 0.0e+00 5.5e-01 [ Info: 330 1.8e+04 3.2e-02 0.0e+00 5.4e-01 [ Info: 331 1.8e+04 3.4e-02 0.0e+00 5.1e-01 [ Info: 332 1.8e+04 3.4e-02 0.0e+00 5.0e-01 [ Info: 333 1.8e+04 3.2e-02 0.0e+00 4.8e-01 [ Info: 334 1.8e+04 3.2e-02 0.0e+00 4.8e-01 [ Info: 335 1.8e+04 3.3e-02 0.0e+00 4.7e-01 [ Info: 336 1.8e+04 3.4e-02 0.0e+00 4.7e-01 [ Info: 337 1.8e+04 3.9e-02 0.0e+00 4.8e-01 [ Info: 338 1.8e+04 4.4e-02 0.0e+00 5.0e-01 [ Info: 339 1.8e+04 5.0e-02 0.0e+00 5.2e-01 [ Info: 340 1.8e+04 5.7e-02 0.0e+00 5.5e-01 [ Info: 341 1.8e+04 6.4e-02 0.0e+00 5.8e-01 [ Info: 342 1.8e+04 7.1e-02 0.0e+00 6.2e-01 [ Info: 343 1.8e+04 7.9e-02 0.0e+00 6.5e-01 [ Info: 344 1.8e+04 8.4e-02 0.0e+00 6.8e-01 [ Info: 345 1.8e+04 8.8e-02 0.0e+00 6.9e-01 [ Info: 346 1.8e+04 8.8e-02 0.0e+00 6.9e-01 [ Info: 347 1.8e+04 7.2e-02 0.0e+00 6.4e-01 [ Info: 348 1.8e+04 5.1e-02 0.0e+00 5.9e-01 [ Info: 349 1.8e+04 4.3e-02 0.0e+00 5.3e-01 [ Info: 350 1.8e+04 3.6e-02 0.0e+00 4.8e-01 [ Info: 351 1.8e+04 3.1e-02 0.0e+00 4.3e-01 [ Info: 352 1.8e+04 2.5e-02 0.0e+00 3.8e-01 [ Info: 353 1.8e+04 2.1e-02 0.0e+00 3.4e-01 [ Info: 354 1.8e+04 1.8e-02 0.0e+00 3.1e-01 [ Info: 355 1.8e+04 1.4e-02 0.0e+00 2.7e-01 [ Info: 356 1.8e+04 1.2e-02 0.0e+00 2.4e-01 [ Info: 357 1.8e+04 5.3e-03 0.0e+00 8.7e-02 [ Info: 358 1.8e+04 1.4e-03 0.0e+00 6.4e-02 [ Info: 359 1.8e+04 9.8e-04 0.0e+00 5.5e-02 [ Info: 360 1.8e+04 8.7e-04 0.0e+00 4.9e-02 [ Info: 361 1.8e+04 6.8e-04 0.0e+00 4.3e-02 [ Info: 362 1.8e+04 4.6e-04 0.0e+00 4.2e-02 [ Info: 363 1.8e+04 3.9e-04 0.0e+00 4.1e-02 [ Info: 364 1.8e+04 3.5e-04 0.0e+00 3.9e-02 [ Info: 365 1.8e+04 2.7e-04 0.0e+00 2.6e-02 [ Info: 366 1.8e+04 1.3e-04 0.0e+00 2.0e-02 [ Info: 367 1.8e+04 9.7e-05 0.0e+00 1.7e-02 [ Info: 368 1.8e+04 7.9e-05 0.0e+00 1.5e-02 [ Info: 369 1.8e+04 8.4e-04 0.0e+00 1.4e-02 [ Info: 370 1.8e+04 5.5e-05 0.0e+00 1.3e-02 [ Info: 371 1.8e+04 7.3e-04 0.0e+00 1.2e-02 [ Info: 372 1.8e+04 4.0e-05 0.0e+00 1.2e-02 [ Info: 373 1.8e+04 3.5e-05 0.0e+00 1.1e-02 [ Info: 374 1.8e+04 3.0e-05 0.0e+00 1.0e-02 [ Info: 375 1.8e+04 2.6e-05 0.0e+00 9.4e-03 [ Info: 376 1.8e+04 2.2e-05 0.0e+00 8.7e-03 [ Info: 377 1.8e+04 1.9e-05 0.0e+00 8.1e-03 [ Info: 378 1.8e+04 1.6e-05 0.0e+00 7.5e-03 [ Info: 379 1.8e+04 1.4e-05 0.0e+00 7.0e-03 [ Info: 380 1.8e+04 1.2e-05 0.0e+00 6.5e-03 [ Info: 381 1.8e+04 1.0e-05 0.0e+00 6.1e-03 [ Info: 382 1.8e+04 8.9e-06 0.0e+00 5.8e-03 [ Info: 383 1.8e+04 7.4e-06 0.0e+00 5.4e-03 [ Info: 384 1.8e+04 6.4e-06 0.0e+00 5.1e-03 [ Info: 385 1.8e+04 6.2e-06 0.0e+00 4.8e-03 [ Info: 386 1.8e+04 5.0e-06 0.0e+00 4.5e-03 [ Info: 387 1.8e+04 4.3e-06 0.0e+00 4.3e-03 [ Info: 388 1.8e+04 3.6e-06 0.0e+00 4.0e-03 [ Info: 389 1.8e+04 3.3e-06 0.0e+00 3.8e-03 [ Info: 390 1.8e+04 2.9e-06 0.0e+00 3.6e-03 [ Info: 391 1.8e+04 2.5e-06 0.0e+00 3.4e-03 [ Info: 392 1.8e+04 2.2e-06 0.0e+00 3.2e-03 [ Info: 393 1.8e+04 1.9e-06 0.0e+00 3.1e-03 [ Info: 394 1.8e+04 1.6e-06 0.0e+00 2.9e-03 [ Info: 395 1.8e+04 1.4e-06 0.0e+00 2.7e-03 [ Info: 396 1.8e+04 1.2e-06 0.0e+00 2.6e-03 [ Info: 397 1.8e+04 1.2e-06 0.0e+00 2.5e-03 [ Info: 398 1.8e+04 9.8e-07 0.0e+00 2.3e-03 [ Info: 399 1.8e+04 8.2e-07 0.0e+00 2.2e-03 [ Info: 400 1.8e+04 7.4e-07 0.0e+00 2.1e-03 [ Info: 401 1.8e+04 7.0e-07 0.0e+00 2.0e-03 [ Info: 402 1.8e+04 5.8e-07 0.0e+00 1.9e-03 [ Info: 403 1.8e+04 5.4e-07 0.0e+00 1.8e-03 [ Info: 404 1.8e+04 4.5e-07 0.0e+00 1.7e-03 [ Info: 405 1.8e+04 4.0e-07 0.0e+00 1.6e-03 [ Info: 406 1.8e+04 3.8e-07 0.0e+00 1.5e-03 [ Info: 407 1.8e+04 2.7e-07 0.0e+00 1.5e-03 [ Info: 408 1.8e+04 2.2e-07 0.0e+00 1.4e-03 [ Info: 409 1.8e+04 7.8e-04 0.0e+00 1.3e-03 [ Info: 410 1.8e+04 2.3e-07 0.0e+00 1.2e-03 [ Info: 411 1.8e+04 2.0e-07 0.0e+00 1.2e-03 [ Info: 412 1.8e+04 1.8e-07 0.0e+00 1.1e-03 [ Info: 413 1.8e+04 7.8e-04 0.0e+00 1.1e-03 [ Info: 414 1.8e+04 7.8e-04 0.0e+00 1.0e-03 [ Info: 415 1.8e+04 1.3e-07 0.0e+00 9.8e-04 [ Info: 416 1.8e+04 1.2e-07 0.0e+00 9.4e-04 [ Info: 417 1.8e+04 1.1e-07 0.0e+00 9.0e-04 [ Info: 418 1.8e+04 7.8e-04 0.0e+00 8.8e-04 [ Info: 419 1.8e+04 7.8e-04 0.0e+00 8.2e-04 [ Info: 420 1.8e+04 8.0e-08 0.0e+00 7.7e-04 [ Info: 421 1.8e+04 7.4e-08 0.0e+00 7.5e-04 [ Info: 422 1.8e+04 7.9e-04 0.0e+00 7.9e-04 [ Info: 423 1.8e+04 1.2e-05 0.0e+00 7.8e-04 [ Info: 424 1.8e+04 1.3e-06 0.0e+00 7.8e-04 [ Info: 425 1.8e+04 3.6e-07 0.0e+00 7.8e-04 [ Info: 426 1.8e+04 1.6e-05 0.0e+00 8.0e-04 [ Info: 427 1.8e+04 8.0e-04 0.0e+00 5.6e-04 [ Info: 428 1.8e+04 3.9e-08 0.0e+00 5.4e-04 [ Info: 429 1.8e+04 3.7e-08 0.0e+00 5.3e-04 [ Info: 430 1.8e+04 7.9e-04 0.0e+00 7.9e-04 [ Info: 431 1.8e+04 1.5e-06 0.0e+00 7.9e-04 [ Info: 432 1.8e+04 9.5e-06 0.0e+00 7.8e-04 [ Info: 433 1.8e+04 4.7e-07 0.0e+00 7.8e-04 [ Info: 434 1.8e+04 7.8e-04 0.0e+00 4.1e-04 [ Info: 435 1.8e+04 2.1e-08 0.0e+00 4.0e-04 [ Info: 436 1.8e+04 7.8e-04 0.0e+00 7.8e-04 [ Info: 437 1.8e+04 3.4e-06 0.0e+00 7.8e-04 [ Info: 438 1.8e+04 6.3e-07 0.0e+00 7.8e-04 [ Info: 439 1.8e+04 8.0e-07 0.0e+00 7.8e-04 [ Info: 440 1.8e+04 7.8e-04 0.0e+00 3.1e-04 [ Info: 441 1.8e+04 1.4e-08 0.0e+00 3.1e-04 [ Info: 442 1.8e+04 7.8e-04 0.0e+00 7.8e-04 [ Info: 443 1.8e+04 4.7e-06 0.0e+00 7.8e-04 [ Info: 444 1.8e+04 9.6e-09 0.0e+00 7.8e-04 [ Info: 445 1.8e+04 3.6e-06 0.0e+00 7.8e-04 [ Info: 446 1.8e+04 2.5e-05 0.0e+00 8.1e-04 [ Info: 447 1.8e+04 8.1e-04 0.0e+00 2.3e-04 [ Info: 448 1.8e+04 6.4e-09 0.0e+00 2.3e-04 [ Info: 449 1.8e+04 8.2e-04 0.0e+00 8.2e-04 [ Info: 450 1.8e+04 3.2e-05 0.0e+00 7.9e-04 [ Info: 451 1.8e+04 8.8e-06 0.0e+00 7.8e-04 [ Info: 452 1.8e+04 2.9e-06 0.0e+00 7.8e-04 [ Info: 453 1.8e+04 3.9e-05 0.0e+00 8.2e-04 [ Info: 454 1.8e+04 8.2e-04 0.0e+00 1.7e-04 [ Info: 455 1.8e+04 8.0e-04 0.0e+00 8.0e-04 [ Info: 456 1.8e+04 2.0e-05 0.0e+00 7.8e-04 [ Info: 457 1.8e+04 7.8e-04 0.0e+00 1.4e-04 [ Info: 458 1.8e+04 4.9e-09 0.0e+00 1.6e-04 [ Info: 459 1.8e+04 2.3e-09 0.0e+00 1.5e-04 [ Info: 460 1.8e+04 3.0e-09 0.0e+00 1.5e-04 [ Info: 461 1.8e+04 3.9e-09 0.0e+00 1.4e-04 [ Info: 462 1.8e+04 7.8e-04 0.0e+00 7.8e-04 [ Info: 463 1.8e+04 9.2e-06 0.0e+00 7.9e-04 [ Info: 464 1.8e+04 9.3e-06 0.0e+00 7.8e-04 [ Info: 465 1.8e+04 3.3e-06 0.0e+00 7.8e-04 [ Info: 466 1.8e+04 4.0e-06 0.0e+00 7.8e-04 [ Info: 467 1.8e+04 4.3e-05 0.0e+00 8.2e-04 [ Info: 468 1.8e+04 8.2e-04 0.0e+00 9.3e-05 Step 3: penalty=3.0, tol=0.0001, obj=17555.844558175737
The MMA87 optimizer iteratively updates the density field to minimize thermal compliance while satisfying the volume constraint. Ramping the penalty drives the final design toward a crisp 0/1 distribution.
Results
@show obj(res.minimizer)
@show constr(res.minimizer)obj(res.minimizer) = 17555.844558175737
constr(res.minimizer) = -9.252099086864973e-12
-9.252099086864973e-12
The final design should show the characteristic branching “tree” pattern that efficiently conducts heat from the top to the bottom boundary.
Visualization
fig = visualize(problem; static=true, topology=res.minimizer)
display_app(fig)The visualization reveals the tree-like structure — high-conductivity material forms branching paths similar to how structural members carry loads in compliance minimization. This analogy between heat conduction and structural mechanics is a fundamental insight in topology optimization.