{
  "modelVersion": "potential-flow-1.0.0",
  "checkedUTC": "2026-10-23T05:09:41.007Z",
  "pass": true,
  "groups": 11,
  "assertions": 30061,
  "tests": [
    {
      "name": "Uniform field and exact straight tracer",
      "pass": true,
      "milliseconds": 0.2679000000000009
    },
    {
      "name": "Source flux and vortex circulation integrals",
      "pass": true,
      "milliseconds": 5.553500000000003,
      "maximumAbsoluteError": 4.618527782440651e-14
    },
    {
      "name": "Cylinder impermeability under speed, size, circulation and rotation changes",
      "pass": true,
      "milliseconds": 6.988399999999999,
      "cases": 81,
      "maximumNormalVelocityMetresPerSecond": 1.1546319456101628e-14
    },
    {
      "name": "Analytic cylinder Cp and integrated force",
      "pass": true,
      "milliseconds": 11.767200000000003,
      "maximumLiftErrorNewtonPerMetre": 1.2789769243681803e-13,
      "maximumDragNewtonPerMetre": 7.750744490664374e-15
    },
    {
      "name": "Stagnation locations including off-surface cases",
      "pass": true,
      "milliseconds": 0.9649999999999963,
      "maximumSpeed": 4.010656666373001e-15
    },
    {
      "name": "Rankine pair axial stagnation and symmetry",
      "pass": true,
      "milliseconds": 0.9812000000000012,
      "stagnationXMetres": 1.8302620897299775
    },
    {
      "name": "Finite-difference divergence and curl away from singularities",
      "pass": true,
      "milliseconds": 0.18679999999999808,
      "maximumDivergence": 4.884981308350689e-10,
      "maximumCurl": 2.2204460492503128e-10
    },
    {
      "name": "Rankine dividing streamline root accuracy",
      "pass": true,
      "milliseconds": 2.881999999999998,
      "maximumStreamfunctionResidual": 2.6645352591003757e-15
    },
    {
      "name": "Fourth-order time integration against an exact vortex orbit",
      "pass": true,
      "milliseconds": 0.5564999999999998,
      "stepsSeconds": [
        0.2,
        0.1,
        0.05
      ],
      "positionErrorsMetres": [
        0.0000979361450726113,
        0.000005972683388209636,
        3.6891202228439567e-7
      ],
      "errorRatios": [
        16.397344159568537,
        16.189993894005635
      ]
    },
    {
      "name": "Streamline invariant and display step refinement",
      "pass": true,
      "milliseconds": 12.088500000000003,
      "arclengthStepsMetres": [
        0.07,
        0.035,
        0.0175
      ],
      "maximumStreamfunctionErrors": [
        2.8085519265808045e-7,
        1.7009939234924332e-8,
        1.0464795696663032e-9
      ]
    },
    {
      "name": "Masks, zero-strength elements, sanitisation and exact-cylinder unlock",
      "pass": true,
      "milliseconds": 0.43079999999999075
    }
  ],
  "scope": "Analytic identity and numerical integration verification only; no experimental validation."
}
