Open source

The mesher inside Chudware is open, and it is ours.

Polyhedral-FEA — PolyMesh, in its own repository — is an adaptive hybrid polyhedral mesher and the linear-elastostatics solver it was co-designed with. It is written by Chudware's author, published under BSD 3-Clause, and vendored into Chudware at a pinned commit. It is also where the adaptive refinement on Chudware's static studies comes from.

License
BSD 3-Clause
Scope
Linear elastostatics
Provenance
First-party, not a vendor

What the project is

Two halves that were designed against each other. A mesher that produces cells the solver can actually use, and a solver whose element library is broad enough that the mesher never has to compromise the geometry to stay inside it. Neither half was retrofitted to the other, which is why the refinement machinery below can act on element shape and polynomial order as freely as on element size.

The mesher is a graded, adaptive, hybrid fill: it will produce standard element shapes where they fit and arbitrary polyhedra where they do not, and it grades the size smoothly instead of stepping between coarse and fine. The solver assembles both families into one global system — standard isoparametric elements through ordinary shape functions, arbitrary polyhedra through the Virtual Element Method — so a mixed mesh is one linear system, not two coupled models.

On top of that sits hierarchical p-refinement: raising the polynomial order on selected elements rather than subdividing them. That makes three refinement moves available at once — subdivide, raise the order, or improve the element shape — and the project drives all three from a single Zienkiewicz–Zhu recovery error estimator. The estimator compares the solved stress field against a smoothed reconstruction of itself, which gives a per-element error score with no reference solution required.

What it deliberately is not

It is a linear elastostatics project. Small strains, linear elastic material, static loads. There is no thermal analysis, no modal or dynamic capability, and no non-linear material or geometry. That is a scope decision, not a gap waiting to be filled, and it is why the validation below is entirely against closed-form elasticity solutions: within that scope, exact answers exist to be checked against.

Why it is worth publishing separately

Meshing and error estimation are the parts of a simulation stack that decide whether a stress number means anything, and they are the parts most often hidden. Publishing them means the mechanism behind Chudware's convergence claims can be read, run, and disagreed with by someone who is not being sold anything — including the benchmark harness that produced the numbers.

Inside Chudware

Three things Chudware takes from it.

Chudware vendors the project at a pinned commit rather than tracking a branch, so a rebuild cannot change the mesher underneath a result. What it takes is narrower than what the project offers, and the boundary is worth stating precisely.

  1. 01

    An independent second mesh

    any static study · selectable

    Chudware's default mesh generator works from the exact solid surfaces with curvature-driven refinement. Polyhedral-FEA lays a graded lattice through the volume and projects the boundary. The two share no algorithm, which is exactly the point: mesh the same part with both, solve both, and if the peak stress agrees then it is a property of the part rather than of the discretization. On a cantilever with a closed-form answer of 0.2000 mm, the default mesh gives 0.19270 mm and this one gives 0.19068 mm.

  2. 02

    The spatial size field

    adaptive studies · required

    Refining a mesh selectively means handing the generator a map of how fine to be, place by place. Of Chudware's two generators, only this one accepts that map. Adaptive refinement is therefore not a feature that happens to use it — it is a feature that exists because of it, and an adaptive study states in its notes which generator it ran on.

  3. 03

    Error scoring and refinement marking

    per element · per pass

    After each solve, the Zienkiewicz–Zhu estimator scores discretization error element by element, and a marking strategy selects the smallest set of elements carrying the bulk of it. That is the half of the loop an ordinary study does not have: without it, refining means refining everywhere, and element count grows with the cube of the size step for almost no gain where the field is already smooth.

The boundary, precisely

Four things it is not doing in Chudware.

Each of these was either measured false or is out of scope, and each is stated here because the alternative is a claim that quietly becomes true in a reader's head.

  • It does not run the physics. Chudware's own solver performs every structural solve. Polyhedral-FEA contributes the mesh, the error estimate, and the refinement decision — its solver does not execute inside Chudware.
  • It is not a robustness fallback. This was measured across a set of awkward solids and the result was the opposite of the hopeful assumption: there was no case where it meshed a part the default generator refused, and there was one where the reverse held. That measurement is pinned in Chudware's test suite so the claim cannot drift back.
  • Polyhedral and virtual elements are not exposed to Chudware users. Chudware's meshing path accepts four- and ten-node tetrahedra, and the project's polyhedral and virtual-element families are rejected at that boundary rather than silently degraded. Those families are a capability of the open-source project, not a Chudware feature.
  • It adds no analysis types. No thermal, modal, non-linear, or dynamic capability arrives with it. It is linear elastostatics on both sides of the boundary.

Validation

Checked against answers that were known before the code existed.

Classical elasticity gives closed-form solutions for a handful of geometries. They are the only benchmarks where a solver can be caught being wrong without argument, so they are the first tier of the project's own scoreboard. Reported as measured, including the one that is 7% out.

The Goodier case is the weakest of the four and is published at its measured value rather than tuned, dropped, or re-run on a friendlier mesh.

Lamé thick cylinder
radial displacement · 0.0068% error
Kirsch plate with hole
stress concentration 3.056 vs 3.0 · 1.87%
Timoshenko cantilever
tip deflection · 1.50% error
Goodier spherical cavity
concentration 1.902 vs 2.045 · 7.04%

Three more numbers

Convergence rate, cross-code parity, and what adaptivity is worth.

Convergence order, measured against theory

A solver can land on the right answer for the wrong reason. What it cannot fake is the rate at which error falls as the mesh is refined, because theory fixes that rate per element order. Against a manufactured solution, the project measures 1.02, 1.99, 2.98, and 3.98 where theory says 1, 2, 3, and 4.

Orders that land on their theoretical values are the evidence that the element formulations and the integration are right, not merely calibrated.

Parity against an established solver

Run on identical eight-node hexahedral meshes, the project's solver and CalculiX 2.23 — a long-established open-source finite-element code — agree in tip deflection to better than 2×10−5 % at every rung of the refinement sequence.

Agreement at that resolution is not two codes being roughly similar. It is two independent implementations of the same mathematics, which is the strongest statement available short of an analytical answer.

What adaptivity actually buys

On an L-shaped domain with a re-entrant corner — the standard hard case, because the stress is singular at the corner — reaching matched accuracy took 6384 degrees of freedom and 2.762 s uniformly, against 1248 degrees of freedom and 0.227 s adaptively.

That is 5.12× fewer degrees of freedom and 12.2× less wall time for the same answer. Self-relative, one machine, one problem — a ratio, not a benchmark against anyone else.

Maturity, without decoration

One star, no tagged release, and that is not the interesting part.

The project is actively developed, with commits landing continuously. It has never cut a tagged release, and it has one star. Those are the honest headline numbers, and neither of them is a reason to trust it.

What is worth judging is whether the work is disciplined enough that its numbers survive scrutiny. Read the repository and decide; that is the whole reason it is public.

What to judge instead

  • Continuous integration and a unit-test suite that runs on every change
  • Design decisions recorded as dated decision records, including the ones that were reversed
  • Model and data cards stating what each solver assumes and what each benchmark set actually contains
  • A benchmark scoreboard checked in beside the code, so a regression is visible rather than quietly absent
  • A holdout harness of geometry the tuning never sees, so the scoreboard cannot be fitted to its own benchmarks

The retraction

A published benchmark claim that turned out to be measured on a broken engine.

The project's own documentation carries a retracted performance claim. The measurement had been taken against a comparison engine that was silently deleting a bore from the part, so the geometry being compared was not the geometry being described, and the number flattered the project for a reason that had nothing to do with the project.

Why that is on this page

It would have been easy to delete the claim and say nothing. It is documented instead, with what went wrong and how it was found, because a scoreboard that has never been wrong in public is a scoreboard nobody has checked.

Chudware's own pages are built the same way: the security page lists what is not implemented, and pricing publishes no rate it has not ratified.

Read it, don't take our word for it

The mesher, the estimator, and the benchmarks are all in one repository.

Or see what the adaptive loop looks like from inside Chudware, on a plate with a hole.