# Reproduce the numerical benchmark

Download the complete deployment ZIP and extract it. From its root:

```sh
node verification/frame-checks.cjs --reference verification/reference_input.json
python verification/scipy_reference.py verification/reference_input.json reference_results.json
```

The Python reference needs numpy and scipy. It independently assembles conventional 6×6 Euler–Bernoulli frame matrices, applies diaphragm constraints and integrates the linear response with DOP853. Recorded results are in `../verification.json`.

An optional OpenSees script is included for external checking:

```sh
python verification/opensees_reference.py verification/reference_input.json
```

It needs openseespy. OpenSeesPy could not initialise MPI in the creation environment, so that optional script was not verified here. Only the SciPy comparison is claimed.

The nonlinear default hinge properties are illustrative; numerical checks do not replace physical calibration. No browser layout QA was performed.
