Guth
NewsDocs
Page actions
View as Markdown ↗
Explore MCP tools ↗

instrument implementation / implementation-contract

Truss Solver (Method of Joints) implementation

A source-bound implementation contract for Truss Solver (Method of Joints); deployment and executable qualification remain separate.

Status: VERIFIED_CLEANLifecycle: 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-clean
Evidence ID
t8-011
Effect
Computation or source lookup only

Input and validation requirements

A coincident pair of joints creates a zero-length member whose direction cosines contain 0/0, so the solver must reject the input rather than pass it to the matrix solver. Sign and directional conventions also require explicit handling to avoid reversed tension/compression and reaction signs.

Required corrections

No binding erratum is attached to this unique-name record. Implementers must still preserve the declared units, domain, and failure behavior.

Inspectable interface fixture

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

{
  "inputs": {
    "joints": {
      "A": [
        0,
        0
      ],
      "B": [
        4,
        0
      ],
      "C": [
        2,
        3
      ]
    },
    "members": {
      "AB": [
        "A",
        "B"
      ],
      "AC": [
        "A",
        "C"
      ],
      "BC": [
        "B",
        "C"
      ]
    },
    "supports": {
      "A": {
        "type": "pin"
      },
      "B": {
        "type": "roller",
        "restrained_direction": "y"
      }
    },
    "loads": {
      "C": {
        "Fx": 0,
        "Fy": -10
      }
    },
    "coordinate_unit": "m",
    "force_unit": "kN",
    "sign_convention": "positive=tension",
    "determinacy_check": "m+r=2j"
  },
  "expected_outputs": {
    "member_forces": {
      "AB": "10/3 kN (tension)",
      "AC": "-5*sqrt(13)/3 kN (compression)",
      "BC": "-5*sqrt(13)/3 kN (compression)"
    },
    "reactions": {
      "A": {
        "Rx": "0 kN",
        "Ry": "5 kN"
      },
      "B": {
        "Ry": "5 kN"
      }
    },
    "determinacy": {
      "m": 3,
      "r": 3,
      "j": 3,
      "m_plus_r": "6",
      "two_j": "6"
    },
    "joint_residuals": {
      "A": [
        "0 kN",
        "0 kN"
      ],
      "B": [
        "0 kN",
        "0 kN"
      ],
      "C": [
        "0 kN",
        "0 kN"
      ]
    }
  },
  "reference_data": {
    "member_lengths": {
      "AB": "4 m",
      "AC": "sqrt(13) m",
      "BC": "sqrt(13) m"
    },
    "direction_cosines": {
      "AC": {
        "from_A_to_C": [
          "2/sqrt(13)",
          "3/sqrt(13)"
        ]
      },
      "BC": {
        "from_B_to_C": [
          "-2/sqrt(13)",
          "3/sqrt(13)"
        ]
      }
    }
  },
  "working": "Global reactions: sum M_A=0 gives 4*B_y-10*2=0, so B_y=5 kN. Sum F_y=0 gives A_y+5-10=0, so A_y=5 kN. Sum F_x=0 gives A_x=0. At joint C, let F_AC=F_BC by horizontal equilibrium: (-2/sqrt(13))F_AC+(2/sqrt(13))F_BC=0. Vertical equilibrium gives (-3/sqrt(13))F_AC+(-3/sqrt(13))F_BC-10=0. Therefore F_AC=F_BC=-5*sqrt(13)/3 kN. At joint A, F_AB+(2/sqrt(13))F_AC=0, so F_AB-10/3=0 and F_AB=10/3 kN. Residuals: A: (0+10/3-10/3, 5-5)=(0,0); B: (-(10/3)+10/3, 5-5)=(0,0); C: (10/3-10/3, 5+5-10)=(0,0)."
}

Other records

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