Elementarium 0.5: structure generators, a faster solver you can watch, serviceability checks
What changed between 0.3.1 and 0.5.0 — structure generators, a 2–4× faster solver, a live solve monitor, serviceability checks — with measured solve times.
Three releases went out in the past week, plus a batch of changes that is already live but not yet numbered. This is the short version of what changed, with measured times. The release notes have every line.
Start from a structure
The old project templates are gone. In their place are thirty-five structure generators: continuous beams and grillages; Pratt, Howe, Warren and Fink trusses; portal and multi-storey frames, arches, a hall and a truss bridge; lattice and hyperboloid towers, geodesic domes; and shells — a cooling tower, a water tank, a silo on columns, a box culvert, a retaining wall.
Each one draws itself, dimension lines included, while you set it up, and lands either as a new project or inside the model you already have, with sections, supports and a first set of loads. Joints that fall on existing nodes merge with them, so a truss generated on top of two columns is connected to them. From then on it is ordinary geometry: nothing regenerates it behind your back.
A faster solver, where it matters
0.4.0 and 0.5.0 were about the solver. First 0.4.0, measured on a simply supported plate, assembly included, best of three runs on an 8-thread desktop CPU:
| Model | Solver | 0.3.1 | 0.4.0 | Faster |
|---|---|---|---|---|
| Plate, 31k DoF | Iterative (default) | 503 ms | 210 ms | 2.4× |
| Plate, 68k DoF | Iterative (default) | 1.80 s | 0.57 s | 3.1× |
| Plate, 31k DoF | Direct () | 679 ms | 256 ms | 2.7× |
| Plate, 68k DoF | Direct () | 2.67 s | 0.73 s | 3.7× |
Two changes did most of that. The default conjugate-gradient solver now spreads every step of each iteration across all the threads, not only the matrix product. And the stiffness matrix no longer stores the zeros inside each node's 6 × 6 block, which the direct solvers were dutifully factorising. The results are the same to rounding: it is the same matrix, minus the stored zeros.
0.5.0 then rebuilt the multigrid preconditioner. It now knows the structure's rigid-body modes, so it typically converges in tens of iterations rather than thousands; its default smoother runs on every core; and it solves up to eight load cases in one pass, using the processor's vector instructions. On a plate model with several load cases it is the one to pick, and the solver guide says when.
How many threads? Half the logical processors, at most eight, which is where the measured speed-up stopped. That is a setting now, for when you want the rest of the machine for something else.
The worked examples, re-timed
The examples now quote times read on 14 October on 0.5.0: the second solve after opening (the first also starts the solver), median of three runs on a 16-thread machine.
| Example | DoF | 25 Sep, 0.2.0 | 14 Oct, 0.5.0 |
|---|---|---|---|
| Steel hall | 372 | 70 ms | 70 ms |
| Concrete floor | 294 | 99 ms | 21 ms |
| Lattice tower | 498 | 89 ms | 74 ms |
| Road overpass | 18,654 | — | 1.8 s |
Read the small ones with care. At a few hundred degrees of freedom the solve itself is a rounding error; what you are timing is the round trip to the solver's worker, assembly, and reading the results out. That varies by tens of milliseconds from run to run, and the hall and the tower are within it. The speed work is for models where the solve is the cost.
The overpass is one. It is new to the table because examples now solve at any size, with no plan limit, so you can press F5 on an 18,654-DoF bridge in your own browser. It also taught me something: the examples had been saved before 0.5.0, so they still carried the preconditioner that was the default before it, incomplete Cholesky. That factorises on one thread, and on the overpass it came to 9.5 s. New projects now start on Jacobi. They now ship with multigrid, and the same bridge solves in 1.8 s, in 119 iterations per load case at most.
A solver you can watch
Which brings me to my favourite change. A solve that takes longer than a moment opens the solve monitor beside the model.
It shows which load case is solving, the iteration, the energy error against the tolerance, and a convergence chart with one curve per case. There is a Stop button that actually stops. The Stats tab recomputes the residual from the answer, estimates the conditioning of the stiffness matrix, says whether the mechanism check passed, and splits the time into assembly, solve and result extraction.
It is a diagnostic as much as a progress bar. Under the default Jacobi preconditioner the overpass takes over three thousand iterations per load case: a shell-heavy model telling you, in a picture, that it wants multigrid. The picture above is the same bridge once it has it.
Serviceability, checked
Until this week the design checks stopped at strength, and the knowledge base told you to read deflections off yourself. Now there are serviceability checks for member deflection, storey and overall drift, and a floor-frequency screen — to the Czech, UK, French, Polish, Danish and Dutch annex tables, EN 1990:2023, IBC Table 1604.3, EN 1995-1-1 with creep for timber, and the drift range of AISC 360 Commentary L3.
The part I care most about is that each limit is checked on the combination it was written for — damage on the characteristic combination, comfort on the frequent, appearance on the quasi-permanent — and that deflection is measured from the chord through the member's displaced supports, so a beam sitting on a sagging girder is not blamed for the girder. The frequency check calls itself a screen, because that is all a member-by-member check can be.
The smaller things
- Loads in local axes. Line, surface and edge loads have a Global / Local switch, and the load editor draws each load on the member's real geometry. Local axes go all the way through: solver, tables, report, IFC and SAF.
- IFC in and out. The structural analysis view of IFC2X3, IFC4 and IFC4X3 imports and exports — see IFC.
- Wind and snow. Load generators to EN 1991-1-4 and EN 1991-1-3.
- US customary units, alongside SI.
- Comments and version history. Threads pinned to the model, with @mentions; every saved version can be browsed and restored.
- Mechanisms before the solve. The model check finds them first and shows their motion on the model; plane models no longer trip it on every node.
- Animation. Deformed and mode shapes animate, and the animation records to video.
- Splitters that snap to quarters, thirds and halves, and say what split you have.
- Phones. A Properties panel built for thumbs, and an editor that steps aside for the keyboard.
What is next
Steel member buckling is live as well: EN 1993-1-1 §6.3 and AISC 360 Chapter E, as new modules that new checks use — see Steel — EN 1993-1-1. Concrete design to EN 1992-1-1 is still the most requested gap and the next module. The release notes record what ships.
If you want to see all of this in two minutes, open the road overpass, click into the model, press F5 and watch the monitor draw eight convergence curves in a couple of seconds.
