[{"data":1,"prerenderedAt":565},["ShallowReactive",2],{"blog-post-en-\u002Fblog\u002Foctober-update":3,"blog-siblings-en-false":560},{"page":4,"fallback":547},{"id":5,"title":6,"author":7,"body":8,"date":545,"description":546,"draft":547,"extension":548,"featured":547,"meta":549,"navigation":550,"ogImage":551,"path":552,"robots":551,"role":553,"schemaOrg":551,"seo":554,"sitemap":555,"stem":556,"tags":557,"updated":551,"__hash__":559},"blog_en\u002Fblog\u002Foctober-update.md","Elementarium 0.5: structure generators, a faster solver you can watch, serviceability checks","Jan Vorisek",{"type":9,"value":10,"toc":532},"minimark",[11,21,26,34,37,41,44,273,281,289,292,297,305,380,383,386,390,398,404,415,418,422,435,442,446,509,513,524],[12,13,14,15,20],"p",{},"Three releases went out in the past week, plus a batch of changes that is already live\nbut not yet numbered. This is the short version of what changed, with measured times.\nThe ",[16,17,19],"a",{"href":18},"\u002Fkb\u002Frelease-notes","release notes"," have every line.",[22,23,25],"h2",{"id":24},"start-from-a-structure","Start from a structure",[12,27,28,29,33],{},"The old project templates are gone. In their place are thirty-five\n",[16,30,32],{"href":31},"\u002Fkb\u002Fmodeling\u002Fstructure-generators","structure generators",": continuous beams and grillages;\nPratt, Howe, Warren and Fink trusses; portal and multi-storey frames, arches, a hall and a\ntruss bridge; lattice and hyperboloid towers, geodesic domes; and shells — a cooling\ntower, a water tank, a silo on columns, a box culvert, a retaining wall.",[12,35,36],{},"Each one draws itself, dimension lines included, while you set it up, and lands either as\na new project or inside the model you already have, with sections, supports and a first\nset of loads. Joints that fall on existing nodes merge with them, so a truss generated on\ntop of two columns is connected to them. From then on it is ordinary geometry: nothing\nregenerates it behind your back.",[22,38,40],{"id":39},"a-faster-solver-where-it-matters","A faster solver, where it matters",[12,42,43],{},"0.4.0 and 0.5.0 were about the solver. First 0.4.0, measured on a simply supported plate,\nassembly included, best of three runs on an 8-thread desktop CPU:",[45,46,47,70],"table",{},[48,49,50],"thead",{},[51,52,53,57,60,64,67],"tr",{},[54,55,56],"th",{},"Model",[54,58,59],{},"Solver",[54,61,63],{"align":62},"right","0.3.1",[54,65,66],{"align":62},"0.4.0",[54,68,69],{"align":62},"Faster",[71,72,73,94,112,206],"tbody",{},[51,74,75,79,82,85,88],{},[76,77,78],"td",{},"Plate, 31k DoF",[76,80,81],{},"Iterative (default)",[76,83,84],{"align":62},"503 ms",[76,86,87],{"align":62},"210 ms",[76,89,90],{"align":62},[91,92,93],"strong",{},"2.4×",[51,95,96,99,101,104,107],{},[76,97,98],{},"Plate, 68k DoF",[76,100,81],{},[76,102,103],{"align":62},"1.80 s",[76,105,106],{"align":62},"0.57 s",[76,108,109],{"align":62},[91,110,111],{},"3.1×",[51,113,114,116,195,198,201],{},[76,115,78],{},[76,117,118,119,194],{},"Direct (",[120,121,124],"span",{"className":122},[123],"katex",[120,125,129],{"className":126,"ariaHidden":128},[127],"katex-html","true",[120,130,133,138,144,149],{"className":131},[132],"base",[120,134],{"className":135,"style":137},[136],"strut","height:0.8491em;",[120,139,143],{"className":140},[141,142],"mord","mathnormal","L",[120,145,148],{"className":146,"style":147},[141,142],"margin-right:0.0278em;","D",[120,150,152,155],{"className":151},[141],[120,153,143],{"className":154},[141,142],[120,156,159],{"className":157},[158],"msupsub",[120,160,163],{"className":161},[162],"vlist-t",[120,164,167],{"className":165},[166],"vlist-r",[120,168,171],{"className":169,"style":137},[170],"vlist",[120,172,174,179],{"style":173},"top:-3.063em;margin-right:0.05em;",[120,175],{"className":176,"style":178},[177],"pstrut","height:2.7em;",[120,180,186],{"className":181},[182,183,184,185],"sizing","reset-size6","size3","mtight",[120,187,189],{"className":188},[141,185],[120,190,193],{"className":191},[141,192,185],"mathsf","T",")",[76,196,197],{"align":62},"679 ms",[76,199,200],{"align":62},"256 ms",[76,202,203],{"align":62},[91,204,205],{},"2.7×",[51,207,208,210,262,265,268],{},[76,209,98],{},[76,211,118,212,194],{},[120,213,215],{"className":214},[123],[120,216,218],{"className":217,"ariaHidden":128},[127],[120,219,221,224,227,230],{"className":220},[132],[120,222],{"className":223,"style":137},[136],[120,225,143],{"className":226},[141,142],[120,228,148],{"className":229,"style":147},[141,142],[120,231,233,236],{"className":232},[141],[120,234,143],{"className":235},[141,142],[120,237,239],{"className":238},[158],[120,240,242],{"className":241},[162],[120,243,245],{"className":244},[166],[120,246,248],{"className":247,"style":137},[170],[120,249,250,253],{"style":173},[120,251],{"className":252,"style":178},[177],[120,254,256],{"className":255},[182,183,184,185],[120,257,259],{"className":258},[141,185],[120,260,193],{"className":261},[141,192,185],[76,263,264],{"align":62},"2.67 s",[76,266,267],{"align":62},"0.73 s",[76,269,270],{"align":62},[91,271,272],{},"3.7×",[12,274,275,276,280],{},"Two changes did most of that. The default conjugate-gradient solver now spreads ",[277,278,279],"em",{},"every","\nstep of each iteration across all the threads, not only the matrix product. And the\nstiffness matrix no longer stores the zeros inside each node's 6 × 6 block, which the\ndirect solvers were dutifully factorising. The results are the same to rounding: it is\nthe same matrix, minus the stored zeros.",[12,282,283,284,288],{},"0.5.0 then rebuilt the multigrid preconditioner. It now knows the structure's rigid-body\nmodes, so it typically converges in tens of iterations rather than thousands; its default\nsmoother runs on every core; and it solves up to eight load cases in one pass, using the\nprocessor's vector instructions. On a plate model with several load cases it is the one\nto pick, and the ",[16,285,287],{"href":286},"\u002Fkb\u002Fanalysis\u002Fsolvers","solver guide"," says when.",[12,290,291],{},"How many threads? Half the logical processors, at most eight, which is where the measured\nspeed-up stopped. That is a setting now, for when you want the rest of the machine for\nsomething else.",[293,294,296],"h3",{"id":295},"the-worked-examples-re-timed","The worked examples, re-timed",[12,298,299,300,304],{},"The ",[16,301,303],{"href":302},"\u002Fexamples","examples"," now quote times read on 14 October on 0.5.0: the second solve\nafter opening (the first also starts the solver), median of three runs on a 16-thread\nmachine.",[45,306,307,323],{},[48,308,309],{},[51,310,311,314,317,320],{},[54,312,313],{},"Example",[54,315,316],{"align":62},"DoF",[54,318,319],{"align":62},"25 Sep, 0.2.0",[54,321,322],{"align":62},"14 Oct, 0.5.0",[71,324,325,338,352,366],{},[51,326,327,330,333,336],{},[76,328,329],{},"Steel hall",[76,331,332],{"align":62},"372",[76,334,335],{"align":62},"70 ms",[76,337,335],{"align":62},[51,339,340,343,346,349],{},[76,341,342],{},"Concrete floor",[76,344,345],{"align":62},"294",[76,347,348],{"align":62},"99 ms",[76,350,351],{"align":62},"21 ms",[51,353,354,357,360,363],{},[76,355,356],{},"Lattice tower",[76,358,359],{"align":62},"498",[76,361,362],{"align":62},"89 ms",[76,364,365],{"align":62},"74 ms",[51,367,368,371,374,377],{},[76,369,370],{},"Road overpass",[76,372,373],{"align":62},"18,654",[76,375,376],{"align":62},"—",[76,378,379],{"align":62},"1.8 s",[12,381,382],{},"Read the small ones with care. At a few hundred degrees of freedom the solve itself is a\nrounding error; what you are timing is the round trip to the solver's worker, assembly,\nand reading the results out. That varies by tens of milliseconds from run to run, and the\nhall and the tower are within it. The speed work is for models where the solve is the\ncost.",[12,384,385],{},"The overpass is one. It is new to the table because examples now solve at any size, with\nno plan limit, so you can press F5 on an 18,654-DoF bridge in your own browser. It also\ntaught me something: the examples had been saved before 0.5.0, so they still carried the\npreconditioner that was the default before it, incomplete Cholesky. That factorises on\none thread, and on the overpass it came to 9.5 s. New projects now start on Jacobi. They now ship with multigrid, and the\nsame bridge solves in 1.8 s, in 119 iterations per load case at most.",[22,387,389],{"id":388},"a-solver-you-can-watch","A solver you can watch",[12,391,392,393,397],{},"Which brings me to my favourite change. A solve that takes longer than a moment opens\nthe ",[16,394,396],{"href":395},"\u002Fkb\u002Fanalysis\u002Fsolvers#the-solve-monitor","solve monitor"," beside the model.",[399,400],"kb-figure",{"alt":401,"caption":402,"src":403},"The editor with the solve monitor open over the overpass example: Linear static, Converged, 1.2 s, case 8 of 8, 119 iterations at most, and a convergence chart with eight curves; the model and its displacement contour fill the viewports","The road overpass example after F5: the solve monitor on the left — eight load cases, CG with multigrid, converged in 1.2 s on this run (the table's 1.8 s is the median of three), the slowest case in 119 iterations — and the ULS traffic displacement on the right.","\u002Foverpass-solve-monitor.webp",[12,405,406,407,410,411,414],{},"It shows which load case is solving, the iteration, the energy error against the\ntolerance, and a convergence chart with one curve per case. There is a ",[91,408,409],{},"Stop"," button\nthat actually stops. The ",[91,412,413],{},"Stats"," tab recomputes the residual from the answer, estimates\nthe conditioning of the stiffness matrix, says whether the mechanism check passed, and\nsplits the time into assembly, solve and result extraction.",[12,416,417],{},"It is a diagnostic as much as a progress bar. Under the default Jacobi preconditioner the\noverpass takes over three thousand iterations per load case: a shell-heavy model telling\nyou, in a picture, that it wants multigrid. The picture above is the same bridge once it\nhas it.",[22,419,421],{"id":420},"serviceability-checked","Serviceability, checked",[12,423,424,425,429,430,434],{},"Until this week the ",[16,426,428],{"href":427},"\u002Fkb\u002Fdesign-checks","design checks"," stopped at strength, and the\nknowledge base told you to read deflections off yourself. Now there are\n",[16,431,433],{"href":432},"\u002Fkb\u002Fdesign-checks\u002Fserviceability","serviceability checks"," for member deflection, storey\nand overall drift, and a floor-frequency screen — to the Czech, UK, French, Polish, Danish\nand Dutch annex tables, EN 1990:2023, IBC Table 1604.3, EN 1995-1-1 with creep for timber,\nand the drift range of AISC 360 Commentary L3.",[12,436,437,438,441],{},"The part I care most about is that each limit is checked on the combination it was\nwritten for — damage on the characteristic combination, comfort on the frequent,\nappearance on the quasi-permanent — and that deflection is measured from the chord\nthrough the member's ",[277,439,440],{},"displaced"," supports, so a beam sitting on a sagging girder is not\nblamed for the girder. The frequency check calls itself a screen, because that is all a\nmember-by-member check can be.",[22,443,445],{"id":444},"the-smaller-things","The smaller things",[447,448,449,456,467,473,479,485,491,497,503],"ul",{},[450,451,452,455],"li",{},[91,453,454],{},"Loads in local axes."," Line, surface and edge loads have a Global \u002F Local switch, and\nthe load editor draws each load on the member's real geometry. Local axes go all the\nway through: solver, tables, report, IFC and SAF.",[450,457,458,461,462,466],{},[91,459,460],{},"IFC in and out."," The structural analysis view of IFC2X3, IFC4 and IFC4X3 imports\nand exports — see ",[16,463,465],{"href":464},"\u002Fkb\u002Freports\u002Fifc","IFC",".",[450,468,469,472],{},[91,470,471],{},"Wind and snow."," Load generators to EN 1991-1-4 and EN 1991-1-3.",[450,474,475,478],{},[91,476,477],{},"US customary units",", alongside SI.",[450,480,481,484],{},[91,482,483],{},"Comments and version history."," Threads pinned to the model, with @mentions; every\nsaved version can be browsed and restored.",[450,486,487,490],{},[91,488,489],{},"Mechanisms before the solve."," The model check finds them first and shows their motion\non the model; plane models no longer trip it on every node.",[450,492,493,496],{},[91,494,495],{},"Animation."," Deformed and mode shapes animate, and the animation records to video.",[450,498,499,502],{},[91,500,501],{},"Splitters that snap"," to quarters, thirds and halves, and say what split you have.",[450,504,505,508],{},[91,506,507],{},"Phones."," A Properties panel built for thumbs, and an editor that steps aside for the\nkeyboard.",[22,510,512],{"id":511},"what-is-next","What is next",[12,514,515,516,520,521,523],{},"Steel member buckling is live as well: EN 1993-1-1 §6.3 and AISC 360 Chapter E, as new\nmodules that new checks use — see ",[16,517,519],{"href":518},"\u002Fkb\u002Fdesign-checks\u002Fsteel","Steel — EN 1993-1-1",". Concrete\ndesign to EN 1992-1-1 is still the most requested gap and the next module. The\n",[16,522,19],{"href":18}," record what ships.",[12,525,526,527,531],{},"If you want to see all of this in two minutes, open the\n",[16,528,530],{"href":529},"\u002Fexamples#road-overpass","road overpass",", click into the model, press F5 and watch the\nmonitor draw eight convergence curves in a couple of seconds.",{"title":533,"searchDepth":534,"depth":534,"links":535},"",2,[536,537,541,542,543,544],{"id":24,"depth":534,"text":25},{"id":39,"depth":534,"text":40,"children":538},[539],{"id":295,"depth":540,"text":296},3,{"id":388,"depth":534,"text":389},{"id":420,"depth":534,"text":421},{"id":444,"depth":534,"text":445},{"id":511,"depth":534,"text":512},"2026-10-14","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.",false,"md",{},true,null,"\u002Fblog\u002Foctober-update","Founder",{"title":6,"description":546},{"loc":552},"blog\u002Foctober-update",[558],"Releases","lN1p9G4n-AdS_F6WihIhuo2vkRpt_gAGx7p2cYcozhg",[561,562],{"path":552,"title":6},{"path":563,"title":564},"\u002Fblog\u002Felementarium-is-live","Elementarium public beta: finite element analysis in a browser tab",1792160754501]