Appearance
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 },
...
] }| Field | Meaning |
|---|---|
s_norm / s | position along the member: 0..1 / 0..L (m) |
n | axial (tension +ve) |
vy / vz | shear in local y / z |
my / mz | moment about local y / z (right-hand rule) |
mx | torsion |
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.
Modal results
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.