WebCAE
← Back to news
PlansAugust 19, 2026

A run that finishes is not an optimization that works: our own audit of the topology module

We reviewed our topology optimization against what it would take to call it verified, and published the gap: ten specific defects, a three-stage plan, and a rule for ourselves — until the re-analysis runs on the remeshed geometry, we do not call the result a CAD solid.

Density field bounded by a dashed review frame

Topology optimization is unusually easy to fake. The loop runs, the volume comes down to the requested fraction, an organic-looking shape appears, and it is genuinely difficult to tell whether the physics underneath is right. There is no red error message for an optimization that converged to a confident, wrong answer.

So before pushing the module further, we wrote down what would have to be true for us to call it verified — and then, honestly, which of those things are not true yet. This is that list.

What is actually wrong

The re-analysis runs on the original mesh. After optimization the correct procedure is to materialize the geometry, remesh it, and solve that — because a coarse density field and the shape it implies are not the same structure. Published benchmarks make the size of that gap concrete: for a 3D cantilever the coarse-only result is about 56% worse than the fine reference, while a fine remesh brings it to within about 8%. Our re-analysis currently skips the step that closes most of that gap.

Both filters are applied at once. A density filter runs before the analysis and a sensitivity filter is applied to the gradients afterwards. Each is defensible on its own; together they are not a chain rule anybody derived, and the resulting gradient is not the exact derivative of the objective actually being minimised.

Minimum mass without a structural constraint is a degenerate problem. Ask to minimise mass with only a volume bound and the mathematically correct answer is to remove all the material. That is not a bug in the optimizer; it is a missing guard in the UI, which should require at least one stiffness, displacement or stress constraint before such a run starts.

The displacement constraint uses a signed projection, so a deflection in the opposite direction can slip past a limit meant to bound magnitude. The stress path covers tetrahedra but not hexahedra, treats ten-node tets with a corner-only simplification, and aggregates the p-norm without volume weighting, which makes the result depend on how finely the model happens to be meshed. The boundary-layer freeze control is present in the panel but never reaches the run — the loop reads a different field, so the number you type has no effect at all. And the filter radius is labelled in millimetres while the algorithm works in mesh coordinates; that they usually coincide is luck, not a contract.

Maximum eigenfrequency has a type and a menu entry but no complete branch in the optimization loop. It should not have been visible in the ordinary UI before the eigenvalue path and its benchmark exist.

And the result we hand back is a boundary mesh wrapped in a solid body — a reasonable intermediate container, but not proof of a watertight, manifold, B-Rep solid. Calling it a CAD solid was overstating it.

What the tests were really checking

Our end-to-end test ran a small cantilever, confirmed the volume fraction landed near the target, and confirmed that a non-empty surface came out with an STL. It did not check a known compliance reference, gradient correctness, the filter chain rule, physical convergence, or whether the load path survived materialization. Tests against a mock solver confirm that the orchestration works. They say nothing about the physics.

The plan

First, make one mode provably correct rather than many modes plausible: SIMP with linear elasticity, minimum compliance, a volume constraint, a single density filter and optimality criteria — with the gradient checked against finite differences to a stated tolerance, and end-to-end tests against the published 2D benchmarks with their reference compliance ranges.

Then mixed constraints through the moving-asymptotes optimizer with a validated displacement constraint and a validated stress path for tetrahedra, watertight and manifold checks on the materialized surface, a fine remesh with re-analysis on it, and a result package recording the whole provenance: the problem, the units, the algorithm parameters, the iteration history, the meshes, the re-analysis results and the comparison against the baseline.

Only after that do the advanced criteria come back: eigenfrequency with a real mass matrix and mode tracking, the hexahedral stress path, stress relaxation, symmetry and manufacturing constraints, and a genuine conversion into the CAD kernel.

The rule we are keeping

A run that finishes is not an optimization that works. Until the second stage is done, we will not call the returned boundary mesh a CAD solid, and until the eigenvalue path is verified against a benchmark, maximum eigenfrequency does not belong in the ordinary user mode. The feature stays available and it stays honest about what it is: a research pipeline that produces excellent starting points, not a certified structural result.

We use essential cookies to run this site, plus analytics cookies if you agree. Privacy Policy