What you can do
You can find out which conductivity method your structure is eligible for before you trust a number from it. It takes about ten calls and no local solver.
- GET /api/v1/analysis-capabilities lists the methods per analysis and labels each one instant, reduced or high-fidelity.
- POST /api/v1/conductivity takes params.method, so the same structure can be sent to every method in turn.
- A structure with an answer you already know tells you whether a method is modelling what you think it is.
- POST /api/v1/structural-graph reports the node and edge count of the reduction, which is what the reduced method actually solves on.
- POST /api/v1/conductivity/stream reports solver progress, so a failed run tells you how far short it fell.
That is worth doing because the three methods are not three speeds of the same calculation. They are three models, and each one is blind to something.
Five structures with answers you can write down
Two methods matched the known answers and the third returned 0 on all five. These are 16³ voxel fixtures built by hand, not generated, so there is nothing random in them.
- A uniform block of one material at 7 W/mK. The answer is the material value.
- Two equal slabs of 1 and 100 W/mK, measured across the stack. The layers are in series, so the answer is the harmonic mean.
- The same two slabs measured along the layers. Now they are in parallel, so the answer is the arithmetic mean.
- Half solid at 30 W/mK and half pore, measured across the join. The pore blocks the path, so the answer is 0.
- The same structure measured along the join. Half the cross section carries 30 and half carries nothing.
| Fixture, 16³ | Known answer | simple | graph-network | 3d |
|---|---|---|---|---|
| Uniform block, across z | 7 | 7.00 | 0 | 7.00 |
| Two slabs in series, across z | 1.980 | 1.980 | 0 | 1.980 |
| Two slabs in parallel, along x | 50.5 | 50.5 | 0 | 50.49 |
| Solid over pore, across z | 0 | 0 | 0 | 0 |
| Solid over pore, along x | 15 | 15 | 0 | 15.00 |
The full-grid method landed within 0.02 % of every known answer. The closed-form method returned the exact values to every digit it printed.
The reduced method returned 0 on all five, which happens to be right for exactly one of them. Every call came back HTTP 200 with a scalar in the same field as the others.
That zero is not a measurement of the structure
The reduced method found nothing to solve on. Asking for the reduction directly shows why, because it reports how many nodes and edges it extracted.
| Structure | Phase asked for | Nodes | Edges |
|---|---|---|---|
| Uniform block, 16³ | pore | 0 | 0 |
| Uniform block, 16³ | solid | 0 | 0 |
| Two slabs, 16³ | pore | 0 | 0 |
| Two slabs, 16³ | solid | 0 | 0 |
| Particle packing, 24³ | pore | 36 | 17 |
| Particle packing, 24³ | solid | 39 | 14 |
A block and a stack of slabs have no distinguishable regions, so the reduction returns an empty graph. An empty graph has no path, and no path reports as 0 conductivity.
That is defensible behaviour and it is still a trap. The conductivity response carries no sign that the model did not apply, so a 0 reads exactly like an insulator.
On a real packing the ranking inverts
The method that failed the fixtures is the only one that answers at a useful box size. The same particle-packing recipe was built at five sizes and sent to all three methods.
| Box size | Solid fraction | simple | graph-network | 3d |
|---|---|---|---|---|
| 16³ | 47.6 % | 0 | 15.73 | 2.43 |
| 24³ | 46.4 % | 0.10 | 19.79 | 3.83 |
| 32³ | 45.0 % | 0 | 17.99 | no value |
| 48³ | 45.1 % | 0 | 17.92 | no value |
| 64³ | 45.0 % | 0 | 19.52 | no value |
The closed-form method now returns 0 at four of the five sizes. It is the one labelled instant, and on a random packing it has nothing useful to say.
At 24³, the one size where both of the other two answered, they are a factor of five apart. Nothing measured here settles which of the two is closer for this geometry.
The reduced method did stay self-consistent. The same day, on a randomly packed structure, it agreed with its own three-axis mean to within 4.2 % along x, y and z. That is what you would expect from a structure with no preferred direction.
The full-grid solve runs on a 15-second budget
Above 24³ the full-grid solve stops on a time limit, not on a request limit. The streaming endpoint keeps the connection open and still ends at the same 15 seconds.
What the stream adds is how far it got. The solver reports progress against a budget of 10,000 iterations, and the gap between the sizes is not close.
At 48³ and 64³ the solve reached 100 iterations before the budget ran out. That is not a run that needed a little more time.
This matters more than it looks, because the full-grid solve is the default. Omit params.method and the response comes back with method "3d" in it.
Picking a method, and then staying on it
Choose the method once, on a structure that resembles what you will analyse, and keep every comparison inside it. The rules below all follow from the numbers above.
- Validate on geometry like yours. Slabs and blocks validate the closed-form and full-grid methods and say nothing at all about the reduced one.
- Never compare a number from one method against a number from another. On the same 24³ structure the two usable methods were a factor of five apart.
- Treat a returned 0 as a question. Check the reduction node count, or re-run a case where you know the answer is not 0.
- Set params.method explicitly in anything you automate, so the box size you scale up to does not silently change the outcome.
- Above 24³ on a packed structure, the reduced method is the one that answers. It came back in 0.25 to 0.71 seconds at every size tested.
None of this makes the ranking of candidates wrong. A sweep run entirely on the reduced method still ranks structures against each other on a consistent basis.
What it does mean is that the absolute value is a property of the method as much as of the structure. Quote the method next to the number.
How this was measured
- Every call went to the production API on 2 October 2026, against build 09a759c6.
- The fixtures are 16³ voxel arrays sent inline: a uniform block, two stacked slabs, and a solid half over a pore half.
- The packing is the particle-packing example recipe at 45 % target loading, with 15 % overlap and one fixed seed.
- The solid phase was set to 30 W/mK, taken from the ceramic alumina preset the API serves.
- Every conductivity call used direction z except the two fixtures measured along x.
- Solid fraction drifts from 47.6 % to 45.0 % across the box sizes because a smaller box resolves the same recipe more coarsely.
The full-grid timeout above 24³ showed up three times in separate runs. The value at 24³ was identical through the plain and streaming endpoints.