{
  "schemaVersion": 1,
  "generatedAt": "2026-07-26T14:12:08.482Z",
  "suite": {
    "id": "optimal-beam-priority-analytical",
    "title": "Optimal Beam priority analytical verification",
    "description": "Closed-form P0 checks for axial response, flexural response, member releases, coordinate transformations, equilibrium, and reported extrema.",
    "defaultAbsoluteTolerance": 1e-8,
    "defaultRelativeTolerance": 1e-8,
    "equilibriumResidualLimit": 1e-10
  },
  "sourceFixture": "tests/fixtures/structural-verification/priority-analytical.json",
  "runtime": {
    "node": "v23.3.0",
    "platform": "darwin",
    "architecture": "arm64"
  },
  "application": {
    "gitCommit": "684001e3ad153e748f96368762c8bdcbd0ee62d6",
    "workingTreeDirty": true,
    "solverPath": "js/frame-truss-solver.js",
    "solverSha256": "7cb2472d5ee0864d1b5c5b0db4fbbc8413c8fa13185c784403fb8591c3ebb89c"
  },
  "summary": {
    "status": "passed",
    "totalCases": 12,
    "passedCases": 12,
    "failedCases": 0,
    "totalChecks": 87,
    "passedChecks": 87,
    "failedChecks": 0
  },
  "cases": [
    {
      "id": "OB-V-BAR-001",
      "title": "Horizontal axial bar with end force",
      "family": "bar",
      "priority": "P0",
      "features": [
        "axial stiffness",
        "nodal force",
        "reaction",
        "axial displacement"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Uniform prismatic bar fixed at one end and loaded axially at the other.",
        "equations": [
          "R_x = -P",
          "delta = P L / (E A)",
          "N = P"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "fixed"
          },
          {
            "id": 2,
            "x": 3,
            "y": 0,
            "support": "free"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "nodal",
            "nodeId": 2,
            "fx": 100,
            "fy": 0,
            "mz": 0
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].rx",
          "target": "node",
          "id": 1,
          "field": "rx",
          "operator": "close",
          "unit": "kN",
          "expected": -100,
          "actual": -100,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 0.0000010099999999999999,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "node[2].ux",
          "target": "node",
          "id": 2,
          "field": "ux",
          "operator": "close",
          "unit": "mm",
          "expected": 0.3,
          "actual": 0.30000000000000004,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.3e-8,
          "difference": 5.551115123125783e-17,
          "relativeDifference": 1.8503717077085943e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakAxial",
          "target": "member",
          "id": 1,
          "field": "peakAxial",
          "operator": "close",
          "unit": "kN",
          "expected": 100,
          "actual": 100,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 0.0000010099999999999999,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 0,
          "actual": 0,
          "status": "passed",
          "absoluteTolerance": 1e-9,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-9,
          "difference": 0,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 0,
          "status": "passed",
          "difference": -1e-10
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 3.9999999999999982,
        "relativeResidual": 0,
        "warnings": []
      },
      "durationMs": 2.587209
    },
    {
      "id": "OB-V-BEAM-001",
      "title": "Cantilever with transverse tip force",
      "family": "beam",
      "priority": "P0",
      "features": [
        "flexural stiffness",
        "nodal force",
        "reaction",
        "tip displacement",
        "peak moment"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Prismatic cantilever with a vertical point force at the free end.",
        "equations": [
          "R_y = P",
          "M_root = P L",
          "delta_tip = P L^3 / (3 E I)"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "fixed"
          },
          {
            "id": 2,
            "x": 4,
            "y": 0,
            "support": "free"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "nodal",
            "nodeId": 2,
            "fx": 0,
            "fy": -10,
            "mz": 0
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 10,
          "actual": 9.999999999999993,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.0999999999999999e-7,
          "difference": -7.105427357601002e-15,
          "relativeDifference": 7.105427357601002e-16,
          "toleranceReason": null
        },
        {
          "label": "node[1].rm",
          "target": "node",
          "id": 1,
          "field": "rm",
          "operator": "close",
          "unit": "kN m",
          "expected": 40,
          "actual": 39.999999999999964,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.1e-7,
          "difference": -3.552713678800501e-14,
          "relativeDifference": 8.881784197001252e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].uy",
          "target": "node",
          "id": 2,
          "field": "uy",
          "operator": "close",
          "unit": "mm",
          "expected": -5.333333333333333,
          "actual": -5.33333333333333,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 6.333333333333333e-8,
          "difference": 2.6645352591003757e-15,
          "relativeDifference": 4.996003610813204e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 40,
          "actual": 39.999999999999964,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.1e-7,
          "difference": -3.552713678800501e-14,
          "relativeDifference": 8.881784197001252e-16,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 4.547473508864643e-16,
          "status": "passed",
          "difference": -9.999954525264912e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 3.999999999999999,
        "relativeResidual": 4.547473508864643e-16,
        "warnings": []
      },
      "durationMs": 0.850958
    },
    {
      "id": "OB-V-BEAM-002",
      "title": "Cantilever with applied tip moment",
      "family": "beam",
      "priority": "P0",
      "features": [
        "nodal moment",
        "rotation",
        "curvature",
        "constant moment"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Prismatic cantilever with a positive moment applied at the free end.",
        "equations": [
          "M_root = -M",
          "theta_tip = M L / (E I)",
          "delta_tip = M L^2 / (2 E I)"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "fixed"
          },
          {
            "id": 2,
            "x": 4,
            "y": 0,
            "support": "free"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "nodal",
            "nodeId": 2,
            "fx": 0,
            "fy": 0,
            "mz": 10
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].rm",
          "target": "node",
          "id": 1,
          "field": "rm",
          "operator": "close",
          "unit": "kN m",
          "expected": -10,
          "actual": -9.99999999999999,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.0999999999999999e-7,
          "difference": 1.0658141036401503e-14,
          "relativeDifference": 1.0658141036401502e-15,
          "toleranceReason": null
        },
        {
          "label": "node[2].uy",
          "target": "node",
          "id": 2,
          "field": "uy",
          "operator": "close",
          "unit": "mm",
          "expected": 2,
          "actual": 1.9999999999999987,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.0000000000000004e-8,
          "difference": -1.3322676295501878e-15,
          "relativeDifference": 6.661338147750939e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].rz",
          "target": "node",
          "id": 2,
          "field": "rz",
          "operator": "close",
          "unit": "rad",
          "expected": 0.001,
          "actual": 0.0009999999999999994,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.001e-8,
          "difference": -6.505213034913027e-19,
          "relativeDifference": 6.505213034913027e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 10,
          "actual": 10,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.0999999999999999e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakShear",
          "target": "member",
          "id": 1,
          "field": "peakShear",
          "operator": "close",
          "unit": "kN",
          "expected": 0,
          "actual": 0,
          "status": "passed",
          "absoluteTolerance": 1e-9,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-9,
          "difference": 0,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 5.456968210637573e-16,
          "status": "passed",
          "difference": -9.999945430317893e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 3.999999999999999,
        "relativeResidual": 5.456968210637573e-16,
        "warnings": []
      },
      "durationMs": 0.658416
    },
    {
      "id": "OB-V-BEAM-003",
      "title": "Simply supported beam with full uniform load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "distributed load",
        "released rotations",
        "reactions",
        "shear",
        "moment",
        "member displacement"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Six metre simply supported prismatic beam with a ten kilonewton-per-metre uniform load.",
        "equations": [
          "R_A = R_B = w L / 2",
          "V_max = w L / 2",
          "M_max = w L^2 / 8",
          "delta_max = 5 w L^4 / (384 E I)"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "pin"
          },
          {
            "id": 2,
            "x": 6,
            "y": 0,
            "support": "rollerY"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-distributed",
            "memberId": 1,
            "start": 0,
            "end": 6,
            "qStart": -10,
            "qEnd": -10,
            "direction": "local-y"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 30,
          "actual": 30,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 30,
          "actual": 29.999999999999996,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": -3.552713678800501e-15,
          "relativeDifference": 1.1842378929335003e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakShear",
          "target": "member",
          "id": 1,
          "field": "peakShear",
          "operator": "close",
          "unit": "kN",
          "expected": 30,
          "actual": 30,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 45,
          "actual": 44.999999999999986,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.6000000000000004e-7,
          "difference": -1.4210854715202004e-14,
          "relativeDifference": 3.1579677144893343e-16,
          "toleranceReason": null
        },
        {
          "label": "metric.maxDisplacement",
          "target": "metric",
          "id": null,
          "field": "maxDisplacement",
          "operator": "close",
          "unit": "mm",
          "expected": 4.21875,
          "actual": 4.21875,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 5.21875e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].momentI",
          "target": "member",
          "id": 1,
          "field": "momentI",
          "operator": "close",
          "unit": "kN m",
          "expected": 0,
          "actual": 1.0913936421275139e-14,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 1.0913936421275139e-14,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "member[1].momentJ",
          "target": "member",
          "id": 1,
          "field": "momentJ",
          "operator": "close",
          "unit": "kN m",
          "expected": 0,
          "actual": 1.0913936421275139e-14,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 1.0913936421275139e-14,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 3.637978807091713e-16,
          "status": "passed",
          "difference": -9.99996362021193e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 1.3333333333333333,
        "relativeResidual": 3.637978807091713e-16,
        "warnings": []
      },
      "durationMs": 1.539333
    },
    {
      "id": "OB-V-BEAM-004",
      "title": "Fixed-pinned beam with full uniform load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "one-end release",
        "release condensation",
        "reaction distribution",
        "end moment"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Six metre prismatic member fixed at the start and rotationally released at the restrained finish.",
        "equations": [
          "R_A = 5 w L / 8",
          "R_B = 3 w L / 8",
          "|M_A| = w L^2 / 8",
          "M_B = 0"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "fixed"
          },
          {
            "id": 2,
            "x": 6,
            "y": 0,
            "support": "fixed"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2,
            "releases": {
              "startRz": false,
              "endRz": true
            }
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-distributed",
            "memberId": 1,
            "start": 0,
            "end": 6,
            "qStart": -10,
            "qEnd": -10,
            "direction": "local-y"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 37.5,
          "actual": 37.49999999999999,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.85e-7,
          "difference": -7.105427357601002e-15,
          "relativeDifference": 1.8947806286936006e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 22.5,
          "actual": 22.5,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.3500000000000003e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].momentI",
          "target": "member",
          "id": 1,
          "field": "momentI",
          "operator": "close",
          "unit": "kN m",
          "expected": 45,
          "actual": 45,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.6000000000000004e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].momentJ",
          "target": "member",
          "id": 1,
          "field": "momentJ",
          "operator": "close",
          "unit": "kN m",
          "expected": 0,
          "actual": 0,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 0,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 0,
          "status": "passed",
          "difference": -1e-10
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "fully-restrained",
        "conditionEstimate": 1,
        "relativeResidual": 0,
        "warnings": []
      },
      "durationMs": 1.631167
    },
    {
      "id": "OB-V-XFORM-001",
      "title": "Inclined simply supported member with global point load",
      "family": "coordinate-transformation",
      "priority": "P0",
      "features": [
        "inclined member",
        "global member load",
        "local force transformation",
        "reaction transformation"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Three-four-five inclined member with a ten kilonewton global vertical point load at midspan.",
        "equations": [
          "R_Ay = R_By = P / 2",
          "P_local,x = -P sin(theta) = -8 kN",
          "P_local,y = -P cos(theta) = -6 kN",
          "|N|max = 4 kN",
          "|V|max = 3 kN",
          "M_max = P_local,y L / 4 = 7.5 kN m"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "pin"
          },
          {
            "id": 2,
            "x": 3,
            "y": 4,
            "support": "rollerY"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-point",
            "memberId": 1,
            "position": 2.5,
            "fx": 0,
            "fy": -10,
            "coordinateSystem": "global"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].rx",
          "target": "node",
          "id": 1,
          "field": "rx",
          "operator": "close",
          "unit": "kN",
          "expected": 0,
          "actual": 0,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 0,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 5,
          "actual": 5,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 6e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 5,
          "actual": 5,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 6e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakAxial",
          "target": "member",
          "id": 1,
          "field": "peakAxial",
          "operator": "close",
          "unit": "kN",
          "expected": 4,
          "actual": 4,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 5e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakShear",
          "target": "member",
          "id": 1,
          "field": "peakShear",
          "operator": "close",
          "unit": "kN",
          "expected": 3,
          "actual": 3,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 7.5,
          "actual": 7.500000000000001,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 8.5e-8,
          "difference": 8.881784197001252e-16,
          "relativeDifference": 1.1842378929335003e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].momentI",
          "target": "member",
          "id": 1,
          "field": "momentI",
          "operator": "close",
          "unit": "kN m",
          "expected": 0,
          "actual": -9.094947017729283e-16,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": -9.094947017729283e-16,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "member[1].momentJ",
          "target": "member",
          "id": 1,
          "field": "momentJ",
          "operator": "close",
          "unit": "kN m",
          "expected": 0,
          "actual": 9.094947017729283e-16,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 9.094947017729283e-16,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 1.8189894035458566e-16,
          "status": "passed",
          "difference": -9.999981810105964e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 1.3447111111111112,
        "relativeResidual": 1.8189894035458566e-16,
        "warnings": []
      },
      "durationMs": 1.004334
    },
    {
      "id": "OB-V-BEAM-005",
      "title": "Simply supported beam with triangular distributed load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "linearly varying load",
        "asymmetric reactions",
        "off-grid critical moment",
        "critical-station recovery"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Six metre simply supported beam with a triangular load increasing from zero to twelve kilonewtons per metre.",
        "equations": [
          "R_A = w_max L / 6 = 12 kN",
          "R_B = w_max L / 3 = 24 kN",
          "V(x) = 12 - x^2",
          "x_Mmax = sqrt(12) = 3.464101615 m",
          "M_max = 16 sqrt(3) = 27.712812921 kN m"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "pin"
          },
          {
            "id": 2,
            "x": 6,
            "y": 0,
            "support": "rollerY"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-distributed",
            "memberId": 1,
            "start": 0,
            "end": 6,
            "qStart": 0,
            "qEnd": -12,
            "direction": "local-y"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 12,
          "actual": 11.999999999999993,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.3000000000000003e-7,
          "difference": -7.105427357601002e-15,
          "relativeDifference": 5.921189464667501e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 24,
          "actual": 24.000000000000007,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.5000000000000004e-7,
          "difference": 7.105427357601002e-15,
          "relativeDifference": 2.9605947323337506e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakShear",
          "target": "member",
          "id": 1,
          "field": "peakShear",
          "operator": "close",
          "unit": "kN",
          "expected": 24,
          "actual": 24.000000000000007,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.5000000000000004e-7,
          "difference": 7.105427357601002e-15,
          "relativeDifference": 2.9605947323337506e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 27.712812921102035,
          "actual": 27.71281292110202,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.8712812921102036e-7,
          "difference": -1.4210854715202004e-14,
          "relativeDifference": 5.127900497022838e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMomentAt",
          "target": "member",
          "id": 1,
          "field": "peakMomentAt",
          "operator": "close",
          "unit": "m",
          "expected": 3.4641016151377544,
          "actual": 3.464101615139901,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.464101615137755e-8,
          "difference": 2.1467272404152027e-12,
          "relativeDifference": 6.197067750652099e-13,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 2.165463575649829e-16,
          "status": "passed",
          "difference": -9.999978345364244e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 1.3333333333333333,
        "relativeResidual": 2.165463575649829e-16,
        "warnings": []
      },
      "durationMs": 1.366834
    },
    {
      "id": "OB-V-BEAM-006",
      "title": "Simply supported beam with off-centre point load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "member point load",
        "asymmetric reactions",
        "point-load moment",
        "off-grid displacement maximum"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Six metre simply supported beam with a ten kilonewton point load two metres from the left support.",
        "equations": [
          "R_A = P b / L = 6.666666667 kN",
          "R_B = P a / L = 3.333333333 kN",
          "M_max = P a b / L = 13.333333333 kN m",
          "x_delta,max = L - sqrt((L^2 - a^2) / 3) = 2.734013676 m",
          "delta_max = 0.967699651 mm"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "pin"
          },
          {
            "id": 2,
            "x": 6,
            "y": 0,
            "support": "rollerY"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-point",
            "memberId": 1,
            "position": 2,
            "fx": 0,
            "fy": -10,
            "coordinateSystem": "local"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 6.666666666666667,
          "actual": 6.666666666666667,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 7.666666666666666e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 3.3333333333333335,
          "actual": 3.3333333333333335,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.333333333333334e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 13.333333333333334,
          "actual": 13.333333333333336,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.4333333333333335e-7,
          "difference": 1.7763568394002505e-15,
          "relativeDifference": 1.3322676295501878e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMomentAt",
          "target": "member",
          "id": 1,
          "field": "peakMomentAt",
          "operator": "close",
          "unit": "m",
          "expected": 2,
          "actual": 2,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.0000000000000004e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].maxDisplacement",
          "target": "member",
          "id": 1,
          "field": "maxDisplacement",
          "operator": "close",
          "unit": "mm",
          "expected": 0.9676996514698977,
          "actual": 0.9676996514698972,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.9676996514698978e-8,
          "difference": -4.440892098500626e-16,
          "relativeDifference": 4.589122349847999e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].maxDisplacementAt",
          "target": "member",
          "id": 1,
          "field": "maxDisplacementAt",
          "operator": "close",
          "unit": "m",
          "expected": 2.734013676289096,
          "actual": 2.7340136762882956,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.734013676289096e-8,
          "difference": -8.002487561498128e-13,
          "relativeDifference": 2.9270108013358534e-13,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 2.0463630789890885e-16,
          "status": "passed",
          "difference": -9.99997953636921e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 1.3333333333333333,
        "relativeResidual": 2.0463630789890885e-16,
        "warnings": []
      },
      "durationMs": 0.54125
    },
    {
      "id": "OB-V-BEAM-007",
      "title": "Simply supported beam with partial uniform load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "partial distributed load",
        "load boundaries",
        "off-grid critical moment"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Six metre simply supported beam with an eight kilonewton-per-metre load from x = 1 m to x = 4 m.",
        "equations": [
          "W = 24 kN at x = 2.5 m",
          "R_A = 14 kN",
          "R_B = 10 kN",
          "V(x) = 14 - 8(x - 1) within the loaded interval",
          "x_Mmax = 2.75 m",
          "M_max = 26.25 kN m"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "pin"
          },
          {
            "id": 2,
            "x": 6,
            "y": 0,
            "support": "rollerY"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-distributed",
            "memberId": 1,
            "start": 1,
            "end": 4,
            "qStart": -8,
            "qEnd": -8,
            "direction": "local-y"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 14,
          "actual": 13.999999999999998,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.5000000000000002e-7,
          "difference": -1.7763568394002505e-15,
          "relativeDifference": 1.2688263138573217e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 10,
          "actual": 10,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.0999999999999999e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakShear",
          "target": "member",
          "id": 1,
          "field": "peakShear",
          "operator": "close",
          "unit": "kN",
          "expected": 14,
          "actual": 13.999999999999998,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.5000000000000002e-7,
          "difference": -1.7763568394002505e-15,
          "relativeDifference": 1.2688263138573217e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 26.25,
          "actual": 26.25,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.7250000000000004e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMomentAt",
          "target": "member",
          "id": 1,
          "field": "peakMomentAt",
          "operator": "close",
          "unit": "m",
          "expected": 2.75,
          "actual": 2.7500000000000444,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.75e-8,
          "difference": 4.440892098500626e-14,
          "relativeDifference": 1.6148698540002278e-14,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 1.0012785707591872e-16,
          "status": "passed",
          "difference": -9.999989987214292e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 1.3333333333333333,
        "relativeResidual": 1.0012785707591872e-16,
        "warnings": []
      },
      "durationMs": 1.790375
    },
    {
      "id": "OB-V-BEAM-008",
      "title": "Fixed-fixed beam with full uniform load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "fully restrained system",
        "fixed-end forces",
        "member displacement recovery"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Six metre fixed-fixed prismatic beam with a ten kilonewton-per-metre uniform load.",
        "equations": [
          "R_A = R_B = w L / 2 = 30 kN",
          "|M_A| = |M_B| = w L^2 / 12 = 30 kN m",
          "delta_max = w L^4 / (384 E I) = 0.84375 mm"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "fixed"
          },
          {
            "id": 2,
            "x": 6,
            "y": 0,
            "support": "fixed"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-distributed",
            "memberId": 1,
            "start": 0,
            "end": 6,
            "qStart": -10,
            "qEnd": -10,
            "direction": "local-y"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 30,
          "actual": 29.999999999999996,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": -3.552713678800501e-15,
          "relativeDifference": 1.1842378929335003e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].ry",
          "target": "node",
          "id": 2,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 30,
          "actual": 30,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "node[1].rm",
          "target": "node",
          "id": 1,
          "field": "rm",
          "operator": "close",
          "unit": "kN m",
          "expected": 30,
          "actual": 29.999999999999996,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": -3.552713678800501e-15,
          "relativeDifference": 1.1842378929335003e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].rm",
          "target": "node",
          "id": 2,
          "field": "rm",
          "operator": "close",
          "unit": "kN m",
          "expected": -30,
          "actual": -29.999999999999996,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": 3.552713678800501e-15,
          "relativeDifference": 1.1842378929335003e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].maxDisplacement",
          "target": "member",
          "id": 1,
          "field": "maxDisplacement",
          "operator": "close",
          "unit": "mm",
          "expected": 0.84375,
          "actual": 0.84375,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.8437500000000002e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].maxDisplacementAt",
          "target": "member",
          "id": 1,
          "field": "maxDisplacementAt",
          "operator": "close",
          "unit": "m",
          "expected": 3,
          "actual": 3,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 30,
          "actual": 30.00000000000003,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.1e-7,
          "difference": 2.842170943040401e-14,
          "relativeDifference": 9.473903143468002e-16,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.stability",
          "target": "diagnostics",
          "id": null,
          "field": "stability",
          "operator": "equal",
          "unit": null,
          "expected": "fully-restrained",
          "actual": "fully-restrained",
          "status": "passed"
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 0,
          "status": "passed",
          "difference": -1e-10
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "fully-restrained",
        "conditionEstimate": 1,
        "relativeResidual": 0,
        "warnings": []
      },
      "durationMs": 1.141875
    },
    {
      "id": "OB-V-BEAM-009",
      "title": "Cantilever with full uniform load",
      "family": "beam",
      "priority": "P0",
      "features": [
        "distributed load",
        "cantilever reaction",
        "tip rotation",
        "tip displacement"
      ],
      "reference": {
        "type": "closed-form",
        "description": "Four metre prismatic cantilever with a ten kilonewton-per-metre uniform load.",
        "equations": [
          "R_y = w L = 40 kN",
          "M_root = w L^2 / 2 = 80 kN m",
          "theta_tip = -w L^3 / (6 E I) = -0.002666666667 rad",
          "delta_tip = -w L^4 / (8 E I) = -8 mm"
        ]
      },
      "model": {
        "mode": "frame",
        "material": {
          "E": 200
        },
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "nodes": [
          {
            "id": 1,
            "x": 0,
            "y": 0,
            "support": "fixed"
          },
          {
            "id": 2,
            "x": 4,
            "y": 0,
            "support": "free"
          }
        ],
        "members": [
          {
            "id": 1,
            "start": 1,
            "end": 2
          }
        ],
        "loads": [
          {
            "id": "L1",
            "type": "member-distributed",
            "memberId": 1,
            "start": 0,
            "end": 4,
            "qStart": -10,
            "qEnd": -10,
            "direction": "local-y"
          }
        ]
      },
      "checks": [
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 40,
          "actual": 39.99999999999999,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.1e-7,
          "difference": -7.105427357601002e-15,
          "relativeDifference": 1.7763568394002506e-16,
          "toleranceReason": null
        },
        {
          "label": "node[1].rm",
          "target": "node",
          "id": 1,
          "field": "rm",
          "operator": "close",
          "unit": "kN m",
          "expected": 80,
          "actual": 79.99999999999996,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 8.1e-7,
          "difference": -4.263256414560601e-14,
          "relativeDifference": 5.329070518200751e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].uy",
          "target": "node",
          "id": 2,
          "field": "uy",
          "operator": "close",
          "unit": "mm",
          "expected": -8,
          "actual": -7.999999999999995,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 9e-8,
          "difference": 5.329070518200751e-15,
          "relativeDifference": 6.661338147750939e-16,
          "toleranceReason": null
        },
        {
          "label": "node[2].rz",
          "target": "node",
          "id": 2,
          "field": "rz",
          "operator": "close",
          "unit": "rad",
          "expected": -0.0026666666666666666,
          "actual": -0.0026666666666666644,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.0026666666666667e-8,
          "difference": 2.168404344971009e-18,
          "relativeDifference": 8.131516293641283e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].maxDisplacement",
          "target": "member",
          "id": 1,
          "field": "maxDisplacement",
          "operator": "close",
          "unit": "mm",
          "expected": 8,
          "actual": 7.999999999999993,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 9e-8,
          "difference": -7.105427357601002e-15,
          "relativeDifference": 8.881784197001252e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].maxDisplacementAt",
          "target": "member",
          "id": 1,
          "field": "maxDisplacementAt",
          "operator": "close",
          "unit": "m",
          "expected": 4,
          "actual": 4,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 5e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakShear",
          "target": "member",
          "id": 1,
          "field": "peakShear",
          "operator": "close",
          "unit": "kN",
          "expected": 40,
          "actual": 39.99999999999999,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 4.1e-7,
          "difference": -7.105427357601002e-15,
          "relativeDifference": 1.7763568394002506e-16,
          "toleranceReason": null
        },
        {
          "label": "member[1].peakMoment",
          "target": "member",
          "id": 1,
          "field": "peakMoment",
          "operator": "close",
          "unit": "kN m",
          "expected": 80,
          "actual": 79.99999999999996,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 8.1e-7,
          "difference": -4.263256414560601e-14,
          "relativeDifference": 5.329070518200751e-16,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 2.338700661701816e-16,
          "status": "passed",
          "difference": -9.999976612993384e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 3.999999999999999,
        "relativeResidual": 2.338700661701816e-16,
        "warnings": []
      },
      "durationMs": 0.902
    },
    {
      "id": "OB-V-TRUSS-001",
      "title": "Four-panel Pratt truss under symmetric joint loading",
      "family": "truss",
      "priority": "P0",
      "features": [
        "axial-only members",
        "support reactions",
        "zero-force members",
        "member force",
        "nodal displacement"
      ],
      "reference": {
        "type": "hand-calculation",
        "description": "Statically determinate four-panel Pratt truss checked by whole-structure equilibrium, the method of joints, the method of sections and the unit-load method.",
        "equations": [
          "m + r = 2j: 13 + 3 = 2(8)",
          "R_Ay = R_By = 3(16) / 2 = 24 kN",
          "M7 = -24 / sin(45 degrees) = -33.941125497 kN",
          "M9 = (24 - 16) / sin(45 degrees) = 11.313708499 kN",
          "delta_N7 = sum(N_i n_i L_i / EA) = 0.655529004 mm downward"
        ]
      },
      "model": {
        "version": 10,
        "name": "Four-panel Pratt truss",
        "mode": "pin-ended",
        "defaultMemberBehavior": "pin-ended",
        "units": "metric",
        "workspace": {
          "grid": 0.5,
          "showGrid": true
        },
        "material": {
          "E": 200
        },
        "materials": [
          {
            "id": "MAT1",
            "name": "Structural steel",
            "type": "standard",
            "E": 200,
            "density": 7850,
            "source": {
              "key": "structural-steel",
              "note": "Typical carbon steel"
            }
          }
        ],
        "defaultMaterialId": "MAT1",
        "section": {
          "A": 5000,
          "I": 200000000
        },
        "sections": [
          {
            "id": "S1",
            "name": "Uniform truss member",
            "type": "custom",
            "A": 5000,
            "I": 200000000,
            "source": null
          }
        ],
        "defaultSectionId": "S1",
        "nodes": [
          {
            "id": 1,
            "label": "N1",
            "x": 0,
            "y": 0,
            "support": "pin",
            "restraints": {
              "ux": true,
              "uy": true,
              "rz": false
            }
          },
          {
            "id": 2,
            "label": "N2",
            "x": 3,
            "y": 0,
            "support": "free",
            "restraints": {
              "ux": false,
              "uy": false,
              "rz": false
            }
          },
          {
            "id": 3,
            "label": "N3",
            "x": 6,
            "y": 0,
            "support": "free",
            "restraints": {
              "ux": false,
              "uy": false,
              "rz": false
            }
          },
          {
            "id": 4,
            "label": "N4",
            "x": 9,
            "y": 0,
            "support": "free",
            "restraints": {
              "ux": false,
              "uy": false,
              "rz": false
            }
          },
          {
            "id": 5,
            "label": "N5",
            "x": 12,
            "y": 0,
            "support": "rollerY",
            "restraints": {
              "ux": false,
              "uy": true,
              "rz": false
            }
          },
          {
            "id": 6,
            "label": "N6",
            "x": 3,
            "y": 3,
            "support": "free",
            "restraints": {
              "ux": false,
              "uy": false,
              "rz": false
            }
          },
          {
            "id": 7,
            "label": "N7",
            "x": 6,
            "y": 3,
            "support": "free",
            "restraints": {
              "ux": false,
              "uy": false,
              "rz": false
            }
          },
          {
            "id": 8,
            "label": "N8",
            "x": 9,
            "y": 3,
            "support": "free",
            "restraints": {
              "ux": false,
              "uy": false,
              "rz": false
            }
          }
        ],
        "members": [
          {
            "id": 1,
            "label": "M1",
            "start": 1,
            "end": 2,
            "behavior": "pin-ended"
          },
          {
            "id": 2,
            "label": "M2",
            "start": 2,
            "end": 3,
            "behavior": "pin-ended"
          },
          {
            "id": 3,
            "label": "M3",
            "start": 3,
            "end": 4,
            "behavior": "pin-ended"
          },
          {
            "id": 4,
            "label": "M4",
            "start": 4,
            "end": 5,
            "behavior": "pin-ended"
          },
          {
            "id": 5,
            "label": "M5",
            "start": 6,
            "end": 7,
            "behavior": "pin-ended"
          },
          {
            "id": 6,
            "label": "M6",
            "start": 7,
            "end": 8,
            "behavior": "pin-ended"
          },
          {
            "id": 7,
            "label": "M7",
            "start": 1,
            "end": 6,
            "behavior": "pin-ended"
          },
          {
            "id": 8,
            "label": "M8",
            "start": 6,
            "end": 2,
            "behavior": "pin-ended"
          },
          {
            "id": 9,
            "label": "M9",
            "start": 6,
            "end": 3,
            "behavior": "pin-ended"
          },
          {
            "id": 10,
            "label": "M10",
            "start": 7,
            "end": 3,
            "behavior": "pin-ended"
          },
          {
            "id": 11,
            "label": "M11",
            "start": 8,
            "end": 3,
            "behavior": "pin-ended"
          },
          {
            "id": 12,
            "label": "M12",
            "start": 8,
            "end": 4,
            "behavior": "pin-ended"
          },
          {
            "id": 13,
            "label": "M13",
            "start": 8,
            "end": 5,
            "behavior": "pin-ended"
          }
        ],
        "loads": [
          {
            "id": "L1",
            "label": "L1",
            "type": "nodal",
            "nodeId": 6,
            "fx": 0,
            "fy": -16,
            "mz": 0
          },
          {
            "id": "L2",
            "label": "L2",
            "type": "nodal",
            "nodeId": 7,
            "fx": 0,
            "fy": -16,
            "mz": 0
          },
          {
            "id": "L3",
            "label": "L3",
            "type": "nodal",
            "nodeId": 8,
            "fx": 0,
            "fy": -16,
            "mz": 0
          }
        ],
        "loadCases": [],
        "loadCombinations": [],
        "activeLoadCaseId": null,
        "analysisScenario": {
          "type": "all",
          "id": "all"
        },
        "counters": {
          "node": 9,
          "member": 14,
          "load": 4,
          "loadCase": 1,
          "combination": 1,
          "material": 2,
          "section": 2
        }
      },
      "checks": [
        {
          "label": "node[1].rx",
          "target": "node",
          "id": 1,
          "field": "rx",
          "operator": "close",
          "unit": "kN",
          "expected": 0,
          "actual": 2.9103830456733704e-14,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 2.9103830456733704e-14,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "node[1].ry",
          "target": "node",
          "id": 1,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 24,
          "actual": 24.00000000000002,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.5000000000000004e-7,
          "difference": 2.1316282072803006e-14,
          "relativeDifference": 8.881784197001252e-16,
          "toleranceReason": null
        },
        {
          "label": "node[5].ry",
          "target": "node",
          "id": 5,
          "field": "ry",
          "operator": "close",
          "unit": "kN",
          "expected": 24,
          "actual": 24.000000000000007,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 2.5000000000000004e-7,
          "difference": 7.105427357601002e-15,
          "relativeDifference": 2.9605947323337506e-16,
          "toleranceReason": null
        },
        {
          "label": "member[5].axial",
          "target": "member",
          "id": 5,
          "field": "axial",
          "operator": "close",
          "unit": "kN",
          "expected": -32,
          "actual": -32,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.3e-7,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "member[7].axial",
          "target": "member",
          "id": 7,
          "field": "axial",
          "operator": "close",
          "unit": "kN",
          "expected": -33.94112549695428,
          "actual": -33.94112549695432,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 3.494112549695428e-7,
          "difference": -4.263256414560601e-14,
          "relativeDifference": 1.2560739669470201e-15,
          "toleranceReason": null
        },
        {
          "label": "member[8].axial",
          "target": "member",
          "id": 8,
          "field": "axial",
          "operator": "close",
          "unit": "kN",
          "expected": 0,
          "actual": 0,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 0,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "member[9].axial",
          "target": "member",
          "id": 9,
          "field": "axial",
          "operator": "close",
          "unit": "kN",
          "expected": 11.313708498984761,
          "actual": 11.313708498984765,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.231370849898476e-7,
          "difference": 3.552713678800501e-15,
          "relativeDifference": 3.14018491736755e-16,
          "toleranceReason": null
        },
        {
          "label": "member[12].axial",
          "target": "member",
          "id": 12,
          "field": "axial",
          "operator": "close",
          "unit": "kN",
          "expected": 0,
          "actual": 0,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1e-8,
          "difference": 0,
          "relativeDifference": null,
          "toleranceReason": null
        },
        {
          "label": "node[7].uy",
          "target": "node",
          "id": 7,
          "field": "uy",
          "operator": "close",
          "unit": "mm",
          "expected": -0.6555290039756344,
          "actual": -0.6555290039756344,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.6555290039756343e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "metric.maxDisplacement",
          "target": "metric",
          "id": null,
          "field": "maxDisplacement",
          "operator": "close",
          "unit": "mm",
          "expected": 0.6711589044729179,
          "actual": 0.6711589044729179,
          "status": "passed",
          "absoluteTolerance": 1e-8,
          "relativeTolerance": 1e-8,
          "allowedDifference": 1.671158904472918e-8,
          "difference": 0,
          "relativeDifference": 0,
          "toleranceReason": null
        },
        {
          "label": "diagnostics.stability",
          "target": "diagnostics",
          "id": null,
          "field": "stability",
          "operator": "equal",
          "unit": null,
          "expected": "stable",
          "actual": "stable",
          "status": "passed"
        },
        {
          "label": "diagnostics.relativeResidual",
          "target": "diagnostics",
          "id": null,
          "field": "relativeResidual",
          "operator": "maximum",
          "unit": null,
          "expected": 1e-10,
          "actual": 2.9103830456733704e-11,
          "status": "passed",
          "difference": -7.08961695432663e-11
        }
      ],
      "status": "passed",
      "diagnostics": {
        "stability": "stable",
        "conditionEstimate": 6.608757210636102,
        "relativeResidual": 2.9103830456733704e-11,
        "warnings": []
      },
      "durationMs": 3.304333
    }
  ]
}
