{
  "passed": true,
  "method": "Executed numerical model, analytical checks and unittest regressions",
  "checks": [
    {
      "id": "derivative-0",
      "description": "Complex FRF derivative for support group 1",
      "expected": "relative norm error < 1e-6",
      "observed": 1.7902430058381646e-09,
      "passed": true,
      "method": "Implicit differentiation compared with centered finite differences at five frequencies, damping fixed."
    },
    {
      "id": "derivative-1",
      "description": "Complex FRF derivative for support group 2",
      "expected": "relative norm error < 1e-6",
      "observed": 1.4054362064145643e-09,
      "passed": true,
      "method": "Implicit differentiation compared with centered finite differences at five frequencies, damping fixed."
    },
    {
      "id": "harmonic-time",
      "description": "Time-domain solution agrees with complex frequency response",
      "expected": "relative displacement error < 1e-7",
      "observed": 1.0029752246551797e-12,
      "passed": true,
      "method": "Exact steady-state initial condition; DOP853 response versus Re(Q exp(i omega t))."
    },
    {
      "id": "sdof-limit",
      "description": "Symmetric centered forcing agrees with the scalar oscillator",
      "expected": "relative response error < 1e-12",
      "observed": 1.9336303625461725e-16,
      "passed": true,
      "method": "Independent closed-form scalar denominator k-m omega^2+i c omega."
    },
    {
      "id": "free-energy",
      "description": "Initial energy becomes viscous heat",
      "expected": "relative energy balance < 1e-7",
      "observed": 6.5437670807210725e-15,
      "passed": true,
      "method": "Integrated work and dissipation states versus kinetic plus spring energy."
    },
    {
      "id": "dissipation-quadrature",
      "description": "Independent sampled integral agrees with ODE dissipation",
      "expected": "relative integral error < 1e-4",
      "observed": 1.4425028177647575e-10,
      "passed": true,
      "method": "Composite trapezoidal integral on 0.5 ms samples, compared with augmented ODE state."
    },
    {
      "id": "moving-base-energy",
      "description": "Foundation input work balances dynamic spring energy and heat",
      "expected": "relative energy residual < 1e-7",
      "observed": 2.0962893743863804e-10,
      "passed": true,
      "method": "Relative-coordinate damper heat plus -sum(R)*base velocity input power."
    },
    {
      "id": "transient-refinement",
      "description": "Peak travel is stable when sampled four times more finely",
      "expected": "relative peak change < 0.005",
      "observed": 5.3806811698184835e-06,
      "passed": true,
      "method": "2 ms versus 0.5 ms output sampling; tighter integration tolerances. Acceptance includes 1% peak allowance."
    },
    {
      "id": "corner-refinement-27",
      "description": "Limiting corner 27 peak/travel/load refinement",
      "expected": "maximum relative metric change < 0.005",
      "observed": 8.943770083284943e-05,
      "passed": true,
      "method": "2 ms versus0.5 ms samples with tighter integration, for corners limiting travel, compression, minimum or maximum load. A1% peak allowance is retained."
    },
    {
      "id": "corner-refinement-25",
      "description": "Limiting corner 25 peak/travel/load refinement",
      "expected": "maximum relative metric change < 0.005",
      "observed": 0.0005494125765789208,
      "passed": true,
      "method": "2 ms versus0.5 ms samples with tighter integration, for corners limiting travel, compression, minimum or maximum load. A1% peak allowance is retained."
    },
    {
      "id": "corner-refinement-13",
      "description": "Limiting corner 13 peak/travel/load refinement",
      "expected": "maximum relative metric change < 0.005",
      "observed": 0.00036570866208185794,
      "passed": true,
      "method": "2 ms versus0.5 ms samples with tighter integration, for corners limiting travel, compression, minimum or maximum load. A1% peak allowance is retained."
    },
    {
      "id": "band-refinement",
      "description": "Running-band peak agrees after local scalar maximization",
      "expected": "refined peak minus grid peak < 0.01 N",
      "observed": 0.0,
      "passed": true,
      "method": "601-point frequency grid with bounded refinement around interior maxima."
    }
  ],
  "tests_run": 22,
  "failures": [],
  "source_sha256": {
    "complete_validation.py": "318e8efd0f042bffbf1deeca5569065003a69e41235345bc5b632c97b1c21cd3",
    "model.py": "80fd3d031c3d65d294cc67ffe664dc3e255f1c8a9dd7f54e9896b37d65010845",
    "reporting.py": "f0a0676fb5b33f091d27298a6d5060cf5cf1383e0c7f72cdcfe94ff57216b510",
    "run.py": "225b15247516c5f7fcd99db52bbcdd9fd4e6c5cb81f17fd9bff75b656c963c68",
    "study.py": "49fe72e291c282a2d66c8dcf948302e0c7f6b4655fccf17530dc63a09546bc77",
    "test_project.py": "a1dc0f16cf867946a87ea841ee7faa34ae7eabf1e10e49b4ee321c4631a48d64",
    "validation.py": "268671ed3fce969a839d6d88d0d4fa0712000c92cfb072f6cc7097bebb9682f6",
    "inputs.json": "1173cbbd49071fc9dc741dc667e994a05f5eb15c9aa1aae9c2ababef66c4f095"
  },
  "inputs_used_sha256": "5814375c01e5629990a5fb12b3d43ed4c7bbcb900bc0820c84c631ddc1376e9f",
  "output_sha256": {
    "candidate-grid.csv": "cff7488e9fe45480fb74726fdcc844b134f7ed380ef7cf1b381962e8e039ac30",
    "foundation-pulse.csv": "b7b5d9f2faea18bf39ccd2b919437873198972f062ef098d1d736e67f257fa78",
    "frequency-response.csv": "8e2fb7254d56cfa9ab97da149b11926cbd1af9dcd91399fdb38232a00a206429",
    "runup.csv": "630dfcbb7edc9e7a71bc457f0149f5924f78cbcd7dd02d41772c0a080e4f5cdf",
    "uncertainty-corners.csv": "be2bd2525b17b2ecc7a9eec2844a13b3bc531b255a200db286305aa75205b573"
  }
}
