← BeidPrep: checked against tests

How every card is checked before release

1. Headline

377 of BeidPrep's 456 card types are proven field by field by the OpenRadioss Starter itself: every value typed in the program is saved and then read back by the solver's own reader.

2. Summary

Before a card type can open as a form in BeidPrep, I type a distinct value into every one of its fields through the real panel, save the model with the program's own Save, and have today's OpenRadioss Starter read it back. At /BEGIN 2026, 377 of the 456 card types in the program have passed this for every field (3,156 proven fields in all). The card checks are 42 gates with 117 must-fail versions, inside a full regression of 503 gates and 808 must-fail versions that has to be clean before a release.

Card types proven by the OpenRadioss Starter

3. What is checked

The judge is the OpenRadioss Starter (build a62b27e6), not a printed guide and not BeidPrep's own templates. A guide can be wrong about columns, and a template written from it inherits the mistake. Only the solver's reader decides what the solver will actually use.

What runs before a release

4. How a test works, and what a pass means

For each card type and each /BEGIN version:

How one card type is checked
  1. Control first. The Starter reads the unedited model with 0 errors and echoes its values. If this fails, nothing that follows can be trusted, so the check stops there.
  2. Type every field in the real panel, with values that cannot be mistaken for each other or for a default: full-width numbers, every flag, every row of a repeated list.
  3. Save with the program's own Save, the same code that File > Save runs.
  4. Read back. The Starter reads the saved model with 0 errors, and each value it prints equals the value typed (integers exactly, reals to the 4 digits it prints).
  5. Check the columns. Each value sits in exactly the columns the Starter's reader uses, to 1e-13. This is the full-precision half that the 4-digit echo cannot see.
  6. Fields the Starter never prints. Such a field passes only if its text sits in the right columns and every printed neighbour on the same line reads back correctly in the same run.
  7. Engine cards. The Starter never reads these, so a short Engine run checks what the Engine actually used or wrote.

What a pass means: at that /BEGIN version, the solver reads every value the user types into that card exactly as typed. Only then does the card type open as a form and become available for new cards. Any card type that has not passed opens as plain text, so the program never writes a field it cannot vouch for.

The must-fail versions. A check that has never failed proves nothing. Each card gate has deliberate breakages built in (117 of them in the card gates). One example is putting back the old /RBODY row layout from section 6. Every regression runs each of them, and every one has to make its gate FAIL. If a must-fail version passes, the regression fails, because a gate that can no longer fail has stopped checking anything. A proof record is written only from a run that passed and caught all of its must-fail versions.

5. When the checks run

6. A real example: /RBODY's failure row

On 29 September I found a silent wrong write in /RBODY, the rigid body card. When the failure option is on, the card has a row with four values: FN, FT, expN and expT.

/RBODY's failure row before and after the fix

7. Limits: what the checks do not cover

Counts measured on BeidPrep build 6f106e86, 26 October 2026, with OpenRadioss Starter a62b27e6. Every model used is a public OpenRadioss example or a synthetic test model.

Get in touch