Why we would rather show you an error than a number
Structural software is judged on the numbers it prints. We think it should be judged on the numbers it refuses to print.
Every piece of structural software has a moment where the inputs do not quite support the analysis being asked of it. A material model is missing a property the check needs. A section has a hole where the code assumed solid concrete. A load case arrives with a parameter nobody filled in.
There are two ways to handle that moment. The common one is to substitute something reasonable — a default modulus, a typical grade, the nearest supported model — and carry on. The result looks like every other result. It has the same decimal places and the same units, and it lands in the same cell of the same report.
We do the other thing. If a calculation cannot be performed correctly for the configuration in front of it, Coriolis returns an error or disables the feature. It does not guess.
The failure mode we designed against
A wrong number that announces itself is an inconvenience. A wrong number that looks exactly like a right one is a latent defect in someone’s building.
The dangerous substitutions are not the absurd ones. Nobody ships a beam because the software returned a capacity of 109 kN. The dangerous ones are plausible: the engineer selected a parabolic-rectangular concrete stress model, the analysis quietly used a rectangular stress block, and the answer came back four percent different. Four percent is inside the noise of everything else on the drawing. It will never be caught by review, because there is nothing to catch — the report says what the engineer chose, and the number underneath it came from something else.
So the rule inside our codebase is blunt: never silently substitute a user’s selected model, parameter, or configuration. Use exactly what they chose, or refuse to run. Substitution is a correctness bug even when the substitute produces reasonable numbers. That is precisely what makes it undetectable.
What this looks like in the product
It shows up in small places, mostly.
An analysis that is incompatible with the inputs is disabled, with an explanation of what is missing, rather than run on a fallback. A rectangular stress block is a valid basis for an ultimate-capacity check and is not a valid basis for a fibre-based moment-curvature analysis, so we validate the prerequisite, not just the schema — a well-formed request for a physically meaningless combination is still refused.
Reports state the load combination each result belongs to, because a page of numbers whose provenance you have to reconstruct is a page of numbers you have to re-derive.
And when a default is offered, it is offered on screen where you can see it and change it, not applied on the server where you cannot. If a value is going to influence the physics, either you set it or we ask.
The trade
This costs us. It means more error states to design, more explanation to write, and more situations where the honest answer to “what is the capacity?” is “not yet — tell me which model you want first.” Software that always returns a number demos better.
But the people using these tools sign the drawings. The worst thing we could build is something that is confidently wrong in a way you would never find. We would rather be occasionally, visibly unhelpful.