{
  "model": "salinity-dye-tank-3d-v6-hybrid",
  "generatedAt": "2026-10-09T18:56:34.209Z",
  "passed": true,
  "sourceSha256": {
    "modelRegister": "764b2d14d5d3a4dd4264ce93687cfec5cffd25922104de06be6a40ff9150d9cd",
    "couplingRegister": "5207d747dc2125180f6bb9870a732da09f3cdc96bb70aeef45eeeb0253561bcb",
    "couplingFixture": "5eba632468c102f1400f2d86659f2fe867dd0f49b205c832ddda06efc40e24fa",
    "core": "3acaf69bb71ff58c6a2dee3bc1486122147e2ca45d879f90eb9b0c7aa7990e4a",
    "vorticity": "bb1a56d2292e5555916903d5a6167fc4f533b8254417c4a08882f3775a821214",
    "gpu": "32a3f01bd5c07332db43f3c20e53aab6379b083f42c64df0789c421f110dda15",
    "wasmWrapper": "c8d5251289a6b2f67d3ac50e73474b278518b165de8a07b943d5e6ff884fe4c9",
    "wasmSource": "af94cf09640e98cf245d5016024820b5a8f8a4b6117b236758637a09892f9582",
    "wasmBinary": "40a45ad222abc8edabe5b863f957c0d0e1b5333dbe69aeb327dbc4a42063b2f4",
    "verifier": "a52f2096a77ec249ad210a8fb84154e8b1459ba4cbb0d628d5efd1d5dbdadace"
  },
  "runtime": {
    "node": "v24.20.0",
    "browser": "153.0.8010.12",
    "origin": "http://127.0.0.1:4328",
    "headlessMetal": true
  },
  "thresholds": {
    "momentumMaxErrorMetresPerSecond": 5e-7,
    "plumeCentroidDifferenceMetres": 0.00025,
    "ledgerResidual": 1e-12,
    "projectedDivergencePerSecond": 1e-8,
    "restMaxSpeedMetresPerSecond": 1e-12,
    "taylorGreenRelativeEnergyError": 0.0001
  },
  "browserWarnings": [],
  "checks": [
    {
      "name": "momentum 16x16x16 component error",
      "passed": true,
      "actual": 2.1370650561680637e-9,
      "limit": 5e-7
    },
    {
      "name": "momentum 16x16x16 finite",
      "passed": true,
      "actual": true,
      "limit": true
    },
    {
      "name": "momentum 32x32x32 component error",
      "passed": true,
      "actual": 2.2003695231696567e-8,
      "limit": 5e-7
    },
    {
      "name": "momentum 32x32x32 finite",
      "passed": true,
      "actual": true,
      "limit": true
    },
    {
      "name": "plume centroid 0.01s",
      "passed": true,
      "actual": 1.4461849991552196e-8,
      "limit": 0.00025
    },
    {
      "name": "plume 0.01s wasm salt ledger",
      "passed": true,
      "actual": 1.1102230246251565e-16,
      "limit": 1e-12
    },
    {
      "name": "plume 0.01s wasm dye ledger",
      "passed": true,
      "actual": 1.8634724839594607e-20,
      "limit": 1e-12
    },
    {
      "name": "plume 0.01s wasm divergence",
      "passed": true,
      "actual": 6.127427321395763e-18,
      "limit": 1e-8
    },
    {
      "name": "plume 0.01s gpu salt ledger",
      "passed": true,
      "actual": 6.661338147750939e-16,
      "limit": 1e-12
    },
    {
      "name": "plume 0.01s gpu dye ledger",
      "passed": true,
      "actual": 1.0164395367051604e-20,
      "limit": 1e-12
    },
    {
      "name": "plume 0.01s gpu divergence",
      "passed": true,
      "actual": 6.3934075169179006e-18,
      "limit": 1e-8
    },
    {
      "name": "plume 0.01s uses GPU",
      "passed": true,
      "actual": 100,
      "limit": ">0"
    },
    {
      "name": "plume centroid 0.02s",
      "passed": true,
      "actual": 7.537095674842945e-9,
      "limit": 0.00025
    },
    {
      "name": "plume 0.02s wasm salt ledger",
      "passed": true,
      "actual": 2.220446049250313e-16,
      "limit": 1e-12
    },
    {
      "name": "plume 0.02s wasm dye ledger",
      "passed": true,
      "actual": 8.470329472543003e-21,
      "limit": 1e-12
    },
    {
      "name": "plume 0.02s wasm divergence",
      "passed": true,
      "actual": 4.892462029390986e-18,
      "limit": 1e-8
    },
    {
      "name": "plume 0.02s gpu salt ledger",
      "passed": true,
      "actual": 1.1102230246251565e-16,
      "limit": 1e-12
    },
    {
      "name": "plume 0.02s gpu dye ledger",
      "passed": true,
      "actual": 8.470329472543003e-21,
      "limit": 1e-12
    },
    {
      "name": "plume 0.02s gpu divergence",
      "passed": true,
      "actual": 7.592586212204785e-18,
      "limit": 1e-8
    },
    {
      "name": "plume 0.02s uses GPU",
      "passed": true,
      "actual": 50,
      "limit": ">0"
    },
    {
      "name": "four-layers wasm rest speed",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "four-layers wasm salt ledger",
      "passed": true,
      "actual": 1.582067810090848e-14,
      "limit": 1e-12
    },
    {
      "name": "four-layers wasm dye ledger",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "four-layers wasm divergence",
      "passed": true,
      "actual": 0,
      "limit": 1e-8
    },
    {
      "name": "four-layers gpu rest speed",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "four-layers gpu salt ledger",
      "passed": true,
      "actual": 1.582067810090848e-14,
      "limit": 1e-12
    },
    {
      "name": "four-layers gpu dye ledger",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "four-layers gpu divergence",
      "passed": true,
      "actual": 0,
      "limit": 1e-8
    },
    {
      "name": "four-layers uses GPU",
      "passed": true,
      "actual": 30,
      "limit": ">0"
    },
    {
      "name": "neutral-drop wasm rest speed",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "neutral-drop wasm salt ledger",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "neutral-drop wasm dye ledger",
      "passed": true,
      "actual": 4.235164736271502e-22,
      "limit": 1e-12
    },
    {
      "name": "neutral-drop wasm divergence",
      "passed": true,
      "actual": 0,
      "limit": 1e-8
    },
    {
      "name": "neutral-drop gpu rest speed",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "neutral-drop gpu salt ledger",
      "passed": true,
      "actual": 0,
      "limit": 1e-12
    },
    {
      "name": "neutral-drop gpu dye ledger",
      "passed": true,
      "actual": 4.235164736271502e-22,
      "limit": 1e-12
    },
    {
      "name": "neutral-drop gpu divergence",
      "passed": true,
      "actual": 0,
      "limit": 1e-8
    },
    {
      "name": "neutral-drop uses GPU",
      "passed": true,
      "actual": 30,
      "limit": ">0"
    },
    {
      "name": "Taylor-Green 32x32x32 wasm energy",
      "passed": true,
      "actual": 8.086703241483306e-7,
      "limit": 0.0001
    },
    {
      "name": "Taylor-Green 32x32x32 wasm divergence",
      "passed": true,
      "actual": 6.83270499352859e-17,
      "limit": 1e-8
    },
    {
      "name": "Taylor-Green 32x32x32 gpu energy",
      "passed": true,
      "actual": 3.03360938369579e-7,
      "limit": 0.0001
    },
    {
      "name": "Taylor-Green 32x32x32 gpu divergence",
      "passed": true,
      "actual": 6.636294768549929e-17,
      "limit": 1e-8
    },
    {
      "name": "Taylor-Green 32x32x32 uses GPU",
      "passed": true,
      "actual": 30,
      "limit": ">0"
    },
    {
      "name": "Taylor-Green 64x64x32 wasm energy",
      "passed": true,
      "actual": 4.060883362910772e-7,
      "limit": 0.0001
    },
    {
      "name": "Taylor-Green 64x64x32 wasm divergence",
      "passed": true,
      "actual": 1.3243551127915138e-16,
      "limit": 1e-8
    },
    {
      "name": "Taylor-Green 64x64x32 gpu energy",
      "passed": true,
      "actual": 1.8009973246080335e-7,
      "limit": 0.0001
    },
    {
      "name": "Taylor-Green 64x64x32 gpu divergence",
      "passed": true,
      "actual": 1.3207079929212267e-16,
      "limit": 1e-8
    },
    {
      "name": "Taylor-Green 64x64x32 uses GPU",
      "passed": true,
      "actual": 30,
      "limit": ">0"
    }
  ],
  "results": {
    "browserUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/153.0.8010.12 Safari/537.36",
    "webgpuBackend": "webgpu-float32-momentum",
    "momentum": [
      {
        "grid": [
          16,
          16,
          16
        ],
        "maxComponentErrorMetresPerSecond": 2.1370650561680637e-9,
        "finite": true
      },
      {
        "grid": [
          32,
          32,
          32
        ],
        "maxComponentErrorMetresPerSecond": 2.2003695231696567e-8,
        "finite": true
      }
    ],
    "plumes": [
      {
        "grid": [
          32,
          32,
          32
        ],
        "duration": 1,
        "requestedDt": 0.01,
        "drop": {
          "radiusMetres": 0.022,
          "salinityGramsPerKilogram": 36,
          "ambientSalinityGramsPerKilogram": 30
        },
        "reference": {
          "mode": "wasm",
          "wallMilliseconds": 2994,
          "acceleratedMomentumCalls": 0,
          "time": 1.0000000000000007,
          "steps": 100,
          "dyeCentroid": {
            "x": 0.12000000000000023,
            "y": 0.05165993177415773,
            "z": 0.12000000000000016
          },
          "maxSpeed": 0.02153107740274234,
          "maxW": 0.00450720211093438,
          "divergenceRms": 6.127427321395763e-18,
          "saltLedgerResidual": 1.1102230246251565e-16,
          "dyeLedgerResidual": 1.8634724839594607e-20
        },
        "hybrid": {
          "mode": "gpu",
          "wallMilliseconds": 1154.300000011921,
          "acceleratedMomentumCalls": 100,
          "time": 1.0000000000000007,
          "steps": 100,
          "dyeCentroid": {
            "x": 0.11999999803985295,
            "y": 0.05165994596308642,
            "z": 0.11999999800570069
          },
          "maxSpeed": 0.02153144084693104,
          "maxW": 0.004507291327500064,
          "divergenceRms": 6.3934075169179006e-18,
          "saltLedgerResidual": 6.661338147750939e-16,
          "dyeLedgerResidual": 1.0164395367051604e-20
        },
        "centroidDifferenceMetres": 1.4461849991552196e-8
      },
      {
        "grid": [
          32,
          32,
          32
        ],
        "duration": 1,
        "requestedDt": 0.02,
        "drop": {
          "radiusMetres": 0.022,
          "salinityGramsPerKilogram": 36,
          "ambientSalinityGramsPerKilogram": 30
        },
        "reference": {
          "mode": "wasm",
          "wallMilliseconds": 1295.300000011921,
          "acceleratedMomentumCalls": 0,
          "time": 1.0000000000000004,
          "steps": 50,
          "dyeCentroid": {
            "x": 0.12000000000000009,
            "y": 0.051659404225084006,
            "z": 0.12
          },
          "maxSpeed": 0.021521050862004162,
          "maxW": 0.004507310437949098,
          "divergenceRms": 4.892462029390986e-18,
          "saltLedgerResidual": 2.220446049250313e-16,
          "dyeLedgerResidual": 8.470329472543003e-21
        },
        "hybrid": {
          "mode": "gpu",
          "wallMilliseconds": 512.6000000238419,
          "acceleratedMomentumCalls": 50,
          "time": 1.0000000000000004,
          "steps": 50,
          "dyeCentroid": {
            "x": 0.11999999918102816,
            "y": 0.05165941167108418,
            "z": 0.11999999916682676
          },
          "maxSpeed": 0.02152123116069829,
          "maxW": 0.004507353942312438,
          "divergenceRms": 7.592586212204785e-18,
          "saltLedgerResidual": 1.1102230246251565e-16,
          "dyeLedgerResidual": 8.470329472543003e-21
        },
        "centroidDifferenceMetres": 7.537095674842945e-9
      }
    ],
    "rest": [
      {
        "setup": "four-layers",
        "reference": {
          "mode": "wasm",
          "wallMilliseconds": 684.3000000119209,
          "acceleratedMomentumCalls": 0,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.12,
            "y": 0.09,
            "z": 0.09
          },
          "maxSpeed": 0,
          "maxW": 0,
          "divergenceRms": 0,
          "saltLedgerResidual": 1.582067810090848e-14,
          "dyeLedgerResidual": 0
        },
        "hybrid": {
          "mode": "gpu",
          "wallMilliseconds": 272.4000000357628,
          "acceleratedMomentumCalls": 30,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.12,
            "y": 0.09,
            "z": 0.09
          },
          "maxSpeed": 0,
          "maxW": 0,
          "divergenceRms": 0,
          "saltLedgerResidual": 1.582067810090848e-14,
          "dyeLedgerResidual": 0
        }
      },
      {
        "setup": "neutral-drop",
        "reference": {
          "mode": "wasm",
          "wallMilliseconds": 788,
          "acceleratedMomentumCalls": 0,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.1200000000000001,
            "y": 0.1200000000000001,
            "z": 0.12000000000000004
          },
          "maxSpeed": 0,
          "maxW": 0,
          "divergenceRms": 0,
          "saltLedgerResidual": 0,
          "dyeLedgerResidual": 4.235164736271502e-22
        },
        "hybrid": {
          "mode": "gpu",
          "wallMilliseconds": 304.80000001192093,
          "acceleratedMomentumCalls": 30,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.1200000000000001,
            "y": 0.1200000000000001,
            "z": 0.12000000000000004
          },
          "maxSpeed": 0,
          "maxW": 0,
          "divergenceRms": 0,
          "saltLedgerResidual": 0,
          "dyeLedgerResidual": 4.235164736271502e-22
        }
      }
    ],
    "taylorGreen": [
      {
        "grid": [
          32,
          32,
          32
        ],
        "reference": {
          "mode": "wasm",
          "wallMilliseconds": 757.1999999880791,
          "acceleratedMomentumCalls": 0,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.12,
            "y": 0.12,
            "z": 0.12
          },
          "maxSpeed": 0.009962507498971084,
          "maxW": 0,
          "divergenceRms": 6.83270499352859e-17,
          "saltLedgerResidual": 0,
          "dyeLedgerResidual": 0,
          "initialEnergy": 3.456000000000044e-7,
          "analyticEnergy": 3.455040807585991e-7,
          "observedEnergy": 3.455038013597021e-7,
          "relativeEnergyError": 8.086703241483306e-7
        },
        "hybrid": {
          "mode": "gpu",
          "wallMilliseconds": 293.69999998807907,
          "acceleratedMomentumCalls": 30,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.12,
            "y": 0.12,
            "z": 0.12
          },
          "maxSpeed": 0.009962513573714788,
          "maxW": 2.6062014486984983e-9,
          "divergenceRms": 6.636294768549929e-17,
          "saltLedgerResidual": 0,
          "dyeLedgerResidual": 0,
          "initialEnergy": 3.456000000000044e-7,
          "analyticEnergy": 3.455040807585991e-7,
          "observedEnergy": 3.4550397594615696e-7,
          "relativeEnergyError": 3.03360938369579e-7
        },
        "relativeEnergyErrorDifference": -5.053093857787516e-7
      },
      {
        "grid": [
          64,
          64,
          32
        ],
        "reference": {
          "mode": "wasm",
          "wallMilliseconds": 3205.699999988079,
          "acceleratedMomentumCalls": 0,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.12,
            "y": 0.12,
            "z": 0.12
          },
          "maxSpeed": 0.009989533932081065,
          "maxW": 0,
          "divergenceRms": 1.3243551127915138e-16,
          "saltLedgerResidual": 0,
          "dyeLedgerResidual": 0,
          "initialEnergy": 3.45599999999999e-7,
          "analyticEnergy": 3.455040807585937e-7,
          "observedEnergy": 3.455039404534164e-7,
          "relativeEnergyError": 4.060883362910772e-7
        },
        "hybrid": {
          "mode": "gpu",
          "wallMilliseconds": 1133,
          "acceleratedMomentumCalls": 30,
          "time": 0.3000000000000001,
          "steps": 30,
          "dyeCentroid": {
            "x": 0.12,
            "y": 0.12,
            "z": 0.12
          },
          "maxSpeed": 0.009989533303917388,
          "maxW": 2.039794100809328e-9,
          "divergenceRms": 1.3207079929212267e-16,
          "saltLedgerResidual": 0,
          "dyeLedgerResidual": 0,
          "initialEnergy": 3.45599999999999e-7,
          "analyticEnergy": 3.455040807585937e-7,
          "observedEnergy": 3.455040185334012e-7,
          "relativeEnergyError": 1.8009973246080335e-7
        },
        "relativeEnergyErrorDifference": -2.2598860383027386e-7
      }
    ],
    "plumeTimestepSensitivityMetres": {
      "wasm": 5.275490737241539e-7,
      "hybrid": 5.342920022452513e-7
    },
    "gpuStats": {
      "allocations": 3,
      "steps": 272
    }
  },
  "scope": "Browser numerical and timing verification of a Float32 GPU momentum candidate with Float64 pressure and scalar operations. This does not validate turbulent mixing or laboratory morphology."
}
