Source: https://guthlabs.ai/docs/instruments/multi-span-continuous-beam-solver/implementation/

instrument implementation / implementation-contract

# Multi-Span Continuous Beam Solver implementation

A source-bound implementation contract for Multi-Span Continuous Beam Solver; deployment and executable qualification remain separate.

Status: **VERIFIED_WITH_ERRATA**Lifecycle: **implementation-contract**

## Binding contract

This record describes what an executable surface must bind and validate. It does not claim that a public calculator, package, or production route is deployed.

**Record owner**: Guth Instruments

**Lifecycle**: verified-with-binding-errata

**Evidence ID**: t8-002

**Effect**: Computation or source lookup only

## Input and validation requirements

A zero-length span produces undefined 0/0 and stiffness divisions by zero, so the solver must reject it before evaluating the three-moment equation or assembling the matrix. The convention probe also exposes a potentially serious sign-interpretation hazard, although the signed-load result itself is finite.

## Required corrections

````
[
  {
    "vector": 2,
    "field": "span_1 reaction split / global A,B",
    "wrong": "left=14.875, right=5.125, A=14.875, B=18.375",
    "correct": "left=5.125, right=14.875, A=5.125, B=28.125 (C=6.75 unaffected)",
    "cause": "span1's left/right reaction split is transposed — confirmed by independent global-moment-about-A check: her triple gives 4*18.375+10*6.75=141, but 4R_B+10R_C must equal 2*20+7*20=180 for the stated loads; the corrected split (28.125,6.75) gives exactly 180. Her own derivation text computes the same 5.125 value and explicitly calls it 'the right-side reaction', then two lines later relabels it 'left' via a sign-flipped M_right/M_left substitution"
  },
  {
    "stress_correction": {
      "v1": {
        "vector_inputs": {
          "supports": "A-B-C",
          "span_lengths": [
            4,
            6
          ],
          "loads": [
            [
              {
                "type": "point",
                "magnitude": 10,
                "position_from_left": 1
              }
            ],
            [
              {
                "type": "point",
                "magnitude": 12,
                "position_from_left": 2
              }
            ]
          ],
          "EI": [
            1,
            4
          ]
        },
        "wrong_outputs": {
          "support_moments": {
            "A": 0,
            "B": -7.9090909091,
            "C": 0
          },
          "support_reactions": {
            "A": 0.5227272727,
            "B": 14.7954545455,
            "C": 6.6818181818
          }
        },
        "corrected_outputs": {
          "support_moments": {
            "A": 0,
            "B": -7.0454545455,
            "C": 0
          },
          "support_reactions": {
            "A": 11.1363636364,
            "B": 7.4671717172,
            "C": 3.3964646465
          }
        }
      },
      "v2": {
        "vector_inputs": {
          "supports": "A-B-C",
          "span_lengths": [
            3,
            5
          ],
          "loads": [
            [
              {
                "type": "udl",
                "intensity": 6
              }
            ],
            [
              {
                "type": "point",
                "magnitude": 20,
                "position_from_left": 1
              }
            ]
          ],
          "EI": [
            2,
            8
          ]
        },
        "wrong_outputs": {
          "support_moments": {
            "A": 0,
            "B": -9.1764705882,
            "C": 0
          },
          "support_reactions": {
            "A": 5.9411764706,
            "B": 17.8941176471,
            "C": 14.1647058824
          }
        },
        "corrected_outputs": {
          "support_moments": {
            "A": 0,
            "B": -9,
            "C": 0
          },
          "support_reactions": {
            "A": 12,
            "B": 24.04,
            "C": 1.96
          }
        }
      },
      "method": "independently verified two ways (per-span-EI three-moment theorem via triangular-BMD centroid decomposition; direct-stiffness-matrix FEM solve, 2 elements/3 nodes/fixed-end-moments) — both agree exactly. Reactions recomputed from the corrected moments via standard end-moment reaction correction, and checked against total-load equilibrium (ΣR = ΣP exactly in both vectors)."
    }
  }
]
````

## Inspectable interface fixture

The sample below is evidence for interface and validation tests, not a production implementation.

````
{
  "inputs": {
    "spans": [
      {
        "L": 5,
        "load": {
          "type": "UDL",
          "q": 10,
          "units": "kN/m"
        },
        "EI": 20000000
      },
      {
        "L": 5,
        "load": {
          "type": "UDL",
          "q": 10,
          "units": "kN/m"
        },
        "EI": 20000000
      }
    ],
    "end_supports": "simple",
    "support_moment_sign": "sagging_positive",
    "length_units": "m",
    "force_units": "kN",
    "EI_units": "kN*m^2"
  },
  "expected_outputs": {
    "support_moments": {
      "M0": "0 kN*m",
      "M1": "-31.25 kN*m",
      "M2": "0 kN*m"
    },
    "span_reactions": {
      "span_1": {
        "left": "18.75 kN",
        "right": "31.25 kN"
      },
      "span_2": {
        "left": "31.25 kN",
        "right": "18.75 kN"
      }
    },
    "global_support_reactions": {
      "A": "18.75 kN",
      "B": "62.5 kN",
      "C": "18.75 kN"
    },
    "equilibrium_check": "18.75+62.5+18.75=100.0 kN"
  },
  "reference_data": {
    "method": "Clapeyron three-moment equation for equal EI and simple end supports",
    "simply_supported_moment_area_each_span": "qL^3/12=10*5^3/12=625/6 kN*m^2",
    "centroid_each_span": "L/2=2.5 m"
  },
  "working": "For each span, A=qL^3/12=10*125/12=104.1666667 kN*m^2. Therefore A*xbar/L=(104.1666667*2.5)/5=52.08333333 kN*m^2. The two-span equation is 0*5+2*M1*(5+5)+0*5=-6*(52.08333333+52.08333333)=-625. Hence 20*M1=-625 and M1=-31.25 kN*m. For span 1, W=qL=50 kN and Wa=50*2.5=125 kN*m, so R_A=(M1-M0+Wa)/L=(-31.25-0+125)/5=18.75 kN and R_B1=W-R_A=31.25 kN. For span 2, R_B2=(M2-M1+Wa)/L=(0-(-31.25)+125)/5=31.25 kN and R_C=50-31.25=18.75 kN. The global middle reaction is R_B=R_B1+R_B2=62.5 kN."
}
````

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/multi-span-continuous-beam-solver/>)[02**Mechanism**](<https://guthlabs.ai/docs/instruments/multi-span-continuous-beam-solver/mechanism/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/multi-span-continuous-beam-solver/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche8/tranche8-results.json`

- `tranche errata record`

- `STRESS_TEST_CORRECTIONS_APPLIED.json`
