Validation
What Gravitas Has Been Checked Against
Not a claim that the physics is right. A list of quantities, the value this engine produces for each one, the value it should have, where that value came from, and how much error was allowed.
—
checks loading
- Last run
- —
- Took
- —
- Areas covered
- —
- Sources cited
- —
Every number on this page came out of one file that both this page and the project's test suite read, so the table a reader prints and the suite that gates a commit cannot drift apart. You do not have to take the table's word for it either: the button below runs the entire suite again, here, on your machine, against the same modules the simulation itself loads.
Run it yourself
About ten seconds. Nothing is sent anywhere; the whole suite executes in a background thread in this tab.
Five kinds of check
These do not mean the same thing, and a suite that mixed them would be able to hide a weak result behind a strong one. Each check is labeled with its kind everywhere it appears.
How much room was left
Passing is a yes or no. The more useful question is by how much, so every check is plotted below at its measured error as a fraction of the tolerance it was allowed. A dot at the right-hand edge only just passed. A dot at the far left came out at machine precision, meaning the code reproduces its own equation to fifteen decimal places and the tolerance never came into it.
Checks held to an exact match are not on this chart: dividing by a tolerance of zero has no meaning. They are counted separately below and every one of them is exact.
Every check, by area
Measured against expected, with the error and the tolerance it was held to. Open a row to see why that tolerance is what it is, and where the expected value came from when it is a published one. A tolerance with no stated reason is a number chosen to make a test pass, so every one here carries its reason with it.
What this does not establish
A validation suite is only worth as much as its statement of what it leaves out.
- Nothing here tests rendering. No check reads a pixel. Every one is a number in and a number out, so a failure names a quantity rather than a screenshot.
- An approximation check never compares with reality. The inspiral model is phenomenological: it is validated against the equation it says it uses, and it would not reproduce a real gravitational-wave chirp. It is labeled so that the two can never be confused.
- Passing a tolerance is not the same as being accurate. An integrated check is held to the discretization error of the integrator at a stated timestep, which is a real and sometimes large number. The chart above is there so that size is visible rather than hidden behind a verdict.
- Coverage is not completeness. These are the quantities that have been checked. Parts of the engine with no entry in the table below have not been checked by it, and the honest reading of a blank is that nobody has looked.
The reasoning behind the model itself, including what it deliberately simplifies, is on the model page. The full write-up of this suite, with every literature source, is in PHYSICS_VALIDATION.md. To run it in a terminal instead of a browser:
npm run validate:physics