Skip to content

Results JSON schema

All entry points return:

json
{ "load_cases": [ { "load_case_id": 1, "displacements": [...],
  "member_forces": [...], "reactions": [...], "plate_results": [...],
  "member_station_forces": [...] } ] }

(Modal and buckling return a different top-level shape - see the end of this page.) SI units throughout (N, m, Pa, rad).

displacements

json
{ "node_id": 1, "ux": 0, "uy": -1.64e-3, "uz": 0, "rx": 0, "ry": 0, "rz": 0 }

Translations in metres, rotations in radians.

member_forces (end forces)

json
{ "member_id": 1, "fx1": .., "fy1": .., "fz1": .., "mx1": .., "my1": .., "mz1": ..,
  "fx2": .., "fy2": .., "fz2": .., "mx2": .., "my2": .., "mz2": .. }

End A = *1, end B = *2, in the member's local axes.

reactions

json
{ "node_id": 1, "rx": .., "ry": .., "rz": .., "mx": .., "my": .., "mz": .. }

member_station_forces

Sampled internal forces along each member (11 stations, local axes) - the data behind the N/V/M diagrams.

json
{ "member_id": 1, "stations": [
  { "s_norm": 0.0, "s": 0.0, "n": 0, "vy": 0, "vz": 12000, "mx": 0, "my": -60000, "mz": 0 },
  ...
] }
FieldMeaning
s_norm / sposition along the member: 0..1 / 0..L (m)
naxial (tension +ve)
vy / vzshear in local y / z
my / mzmoment about local y / z (right-hand rule)
mxtorsion

Trusses report only n. Full spec: docs/member_station_forces_json_shape.md.

plate_results

Per-plate centroid stresses, moments, and Wood-Armer reinforcement design moments:

json
{ "plate_id": 1, "sx": 0, "sy": 0, "txy": 0,
  "mx": -156.25, "my": -156.25, "mxy": 0,
  "mx_star_bottom": 0, "my_star_bottom": 0,
  "mx_star_top": -156.25, "my_star_top": -156.25 }

Membrane stresses sx/sy/txy in Pa; moments per unit width in N·m/m; *_star_* are the Wood-Armer design moments for top/bottom reinforcement.

json
{ "frequencies_hz": [8.85, 227.2, ...], "frequencies_rad": [...],
  "modes": [ { "mode_number": 1, "displacements": [ {node_id, ux..rz}, ... ] }, ... ] }

Buckling results

json
{ "load_factors": [376.2, 1901.8, ...],
  "modes": [ { "mode_number": 1, "displacements": [...] }, ... ] }

Each load_factor multiplies the applied load to reach the elastic critical load; the displacements are the (unnormalised) buckling mode shape.

Combinations & envelope

Returned by solve_model only when the model has load_combinations. Each combination carries the same per-result arrays as a load case; the envelope is the element-wise max/min across all combinations:

json
{
  "combinations": [
    { "combination_id": 1, "name": "1.2G + 1.5Q",
      "displacements": [ ... ], "member_forces": [ ... ], "reactions": [ ... ] }
  ],
  "envelope": {
    "displacements_max": [ ... ], "displacements_min": [ ... ],
    "member_forces_max": [ ... ], "member_forces_min": [ ... ],
    "reactions_max": [ ... ],     "reactions_min": [ ... ]
  }
}

Use the envelope for design: each member/node entry is the governing extreme over every combination. Omitted (no combinations/envelope keys) when the model has no load_combinations.