{
  "app": "Beam Studio",
  "scope": "Continuous Euler–Bernoulli beam analysis",
  "version": "2026.10.13",
  "timestamp": "2026-10-13T04:45:48.674Z",
  "status": "PASS",
  "assertions": 90656,
  "failedAssertions": 0,
  "independentCompatibilityModels": 240,
  "variableSectionCompatibilityModels": 120,
  "denseExtremaModels": 24,
  "variableSectionDenseExtremaModels": 12,
  "denseStationsPerSpan": 4001,
  "maxNormalizedErrors": {
    "reaction": 7.050734138971912e-11,
    "reactionMoment": 1.2804788032070474e-12,
    "V": 6.868861451926356e-11,
    "M": 1.2804788032070474e-12,
    "delta": 7.071186840387043e-14,
    "slope": 1.3902772267056015e-13,
    "forceResidual": 1.0027036716150243e-13,
    "momentResidual": 1.5293211792490893e-14
  },
  "normalization": "Reaction/shear: largest absolute nodal reaction; moment: force scale × total length; displacement: max(1 mm, force scale × total length³/referenceEI ×1000); slope: displacement scale/1000/total length. Tolerance4e-8.",
  "method": "Production matrix stiffness is compared against independently implemented global force compatibility with exact singularity integration separately over each EI region. Constant/variable-EI three-moment closed forms and dense extremum bounds are additional checks.",
  "seed": "0xCEB2026",
  "groups": [
    {
      "name": "Two equal spans, full UDL: exact reactions, negative/positive moments and deflection",
      "assertions": 10
    },
    {
      "name": "Two equal spans, left UDL only: pattern loading, uplift and unloaded-span deformation",
      "assertions": 7
    },
    {
      "name": "Three equal spans: independent three-moment closed form",
      "assertions": 8
    },
    {
      "name": "Unequal spans: independent three-moment closed form",
      "assertions": 3
    },
    {
      "name": "Fixed exterior ends with two equal loaded spans",
      "assertions": 9
    },
    {
      "name": "Interior fixed station: unequal loading creates exact internal moment jump",
      "assertions": 8
    },
    {
      "name": "Free end overhang and free internal geometry station",
      "assertions": 24
    },
    {
      "name": "Point load at an interior support transfers directly without fictitious internal forces",
      "assertions": 6
    },
    {
      "name": "Self weight remains on every span; span patterns do not alter point loads",
      "assertions": 5
    },
    {
      "name": "Single entered span preserves legacy closed-form values",
      "assertions": 8
    },
    {
      "name": "Rounded total lengths keep scaled span endpoints and tip point loads synchronized",
      "assertions": 16
    },
    {
      "name": "Independent span sections: exact two-span variable-EI three-moment equation and own self weights",
      "assertions": 18
    },
    {
      "name": "Three unequal spans and EI: independent weighted three-moment equations",
      "assertions": 6
    },
    {
      "name": "Stepped cantilever tip load: exact integration through two different EI regions",
      "assertions": 6
    },
    {
      "name": "Selected/global reference section does not change explicitly specified span analysis",
      "assertions": 30
    },
    {
      "name": "Independent force compatibility: 240 constant/variable-section continuous, fixed, free and signed-load models",
      "assertions": 89374
    },
    {
      "name": "Analytical extrema bound dense signed-load curves and preserve all jumps",
      "assertions": 360
    },
    {
      "name": "Extreme neighbouring lengths remain stable after diagonal scaling",
      "assertions": 744
    },
    {
      "name": "Validation rejects mechanisms, malformed topology, invalid span patterns and inconsistent length",
      "assertions": 14
    }
  ],
  "examples": [
    {
      "name": "Two equal spans, full UDL",
      "spanLengths_m": [
        4,
        4
      ],
      "spanWidths_cm": [
        20,
        20
      ],
      "spanDepths_cm": [
        40,
        40
      ],
      "spanEI_Nm2": [
        26666666.66666667,
        26666666.66666667
      ],
      "spanSelf_kgfPerM": [
        0,
        0
      ],
      "spanUDL_kgfPerM": [
        500,
        500
      ],
      "reactions_kgf": [
        750,
        2500,
        750
      ],
      "nodeMomentLeft_kgfm": [
        0,
        -1000.0000000000002,
        0
      ],
      "nodeMomentRight_kgfm": [
        0,
        -1000,
        0
      ],
      "maxPositiveMoment_kgfm": 562.5,
      "maxNegativeMoment_kgfm": -1000.0000000000002,
      "maxDeflection_mm": 0.25494724293984145,
      "maxDeflection_x_m": 1.6861406616345072
    },
    {
      "name": "Two equal spans, left UDL only",
      "spanLengths_m": [
        4,
        4
      ],
      "spanWidths_cm": [
        20,
        20
      ],
      "spanDepths_cm": [
        40,
        40
      ],
      "spanEI_Nm2": [
        26666666.66666667,
        26666666.66666667
      ],
      "spanSelf_kgfPerM": [
        0,
        0
      ],
      "spanUDL_kgfPerM": [
        500,
        0
      ],
      "reactions_kgf": [
        875.0000000000001,
        1250,
        -125.00000000000003
      ],
      "nodeMomentLeft_kgfm": [
        0,
        -499.9999999999997,
        0
      ],
      "nodeMomentRight_kgfm": [
        0,
        -500.0000000000001,
        0
      ],
      "maxPositiveMoment_kgfm": 765.6250000000002,
      "maxNegativeMoment_kgfm": -500.0000000000001,
      "maxDeflection_mm": 0.4307342435198611,
      "maxDeflection_x_m": 1.8897528701387531
    },
    {
      "name": "Three equal spans, full UDL",
      "spanLengths_m": [
        4,
        4,
        4
      ],
      "spanWidths_cm": [
        20,
        20,
        20
      ],
      "spanDepths_cm": [
        40,
        40,
        40
      ],
      "spanEI_Nm2": [
        26666666.66666667,
        26666666.66666667,
        26666666.66666667
      ],
      "spanSelf_kgfPerM": [
        0,
        0,
        0
      ],
      "spanUDL_kgfPerM": [
        500,
        500,
        500
      ],
      "reactions_kgf": [
        800,
        2200,
        2200,
        800
      ],
      "nodeMomentLeft_kgfm": [
        0,
        -800,
        -800,
        0
      ],
      "nodeMomentRight_kgfm": [
        0,
        -800,
        -800,
        0
      ],
      "maxPositiveMoment_kgfm": 640.0000000000001,
      "maxNegativeMoment_kgfm": -800,
      "maxDeflection_mm": 0.32405313678896086,
      "maxDeflection_x_m": 10.21585359559407
    },
    {
      "name": "Unequal spans, full UDL",
      "spanLengths_m": [
        3,
        6
      ],
      "spanWidths_cm": [
        20,
        20
      ],
      "spanDepths_cm": [
        40,
        40
      ],
      "spanEI_Nm2": [
        26666666.66666667,
        26666666.66666667
      ],
      "spanSelf_kgfPerM": [
        0,
        0
      ],
      "spanUDL_kgfPerM": [
        500,
        500
      ],
      "reactions_kgf": [
        187.5,
        3093.7499999999995,
        1218.75
      ],
      "nodeMomentLeft_kgfm": [
        0,
        -1687.5,
        1.483882388824609e-12
      ],
      "nodeMomentRight_kgfm": [
        0,
        -1687.4999999999995,
        0
      ],
      "maxPositiveMoment_kgfm": 1485.3515624999995,
      "maxNegativeMoment_kgfm": -1687.5,
      "maxDeflection_mm": 1.7294687740255226,
      "maxDeflection_x_m": 6.292909609936467
    },
    {
      "name": "Three unequal spans, individual sections and EI",
      "spanLengths_m": [
        3,
        4,
        5
      ],
      "spanWidths_cm": [
        20,
        25,
        30
      ],
      "spanDepths_cm": [
        40,
        55,
        60
      ],
      "spanEI_Nm2": [
        26666666.66666667,
        77641666.66666669,
        75599999.99999999
      ],
      "spanSelf_kgfPerM": [
        192,
        330,
        432
      ],
      "spanUDL_kgfPerM": [
        692,
        830,
        932
      ],
      "reactions_kgf": [
        801.8458335724331,
        2559.0315806337635,
        4806.913154285386,
        1888.2094315084175
      ],
      "nodeMomentLeft_kgfm": [
        0,
        -708.4624992827011,
        -2208.9528424579144,
        -1.483882388824609e-12
      ],
      "nodeMomentRight_kgfm": [
        -9.274264930153807e-14,
        -708.4624992827011,
        -2208.9528424579144,
        0
      ],
      "maxPositiveMoment_kgfm": 1912.7332925093021,
      "maxNegativeMoment_kgfm": -2208.9528424579144,
      "maxDeflection_mm": 0.5436074340760156,
      "maxDeflection_x_m": 9.748313408388944
    }
  ],
  "references": [
    {
      "title": "Cambridge University Engineering Department, Structures Data Book2018, sections4.2–4.5 (elastic beam relations; partial-load two-span support moment)",
      "url": "https://teaching.eng.cam.ac.uk/sites/teaching.eng.cam.ac.uk/files/Documents/Databooks/Structures%202018.pdf"
    },
    {
      "title": "IIT Bombay/NPTEL, Structural Analysis I, Module5 Lecture4: Three Moment Equation",
      "url": "https://nptel.ac.in/courses/105101085"
    }
  ],
  "limitations": "Linear elastic, piecewise constant span EI, zero support settlement, continuous beam rotations; no hinges, geometric nonlinearity, axial effects, torsion, redistribution, long-term concrete behavior or complete Thai/ACI code certification. Negative reactions require hold-down review."
}