Concepts
Understanding the core data model before diving into the API.
StructuralModel
The central object. A StructuralModel holds all nodes, members, supports, materials, sections, loads, load cases, and load combinations. After analysis, it also holds the AnalysisResultSet.
StructuralModel
├── Nodes — points in 3D space
├── Members — beam/truss elements connecting two nodes
├── Supports — boundary conditions at nodes
├── Materials — steel grades, concrete classes
├── Sections — cross-section geometry (I-beam, rectangular, circular, etc.)
├── NodalLoads — forces/moments applied at nodes
├── DistributedLoads — loads along member length
├── LoadCases — groups of loads by type (dead, live, wind, ...)
├── LoadCombinations — factored combinations of load cases
└── Results? — AnalysisResultSet (null until analysis is run)
Nodes
A node is a point in 3D space with an integer ID. Nodes are where members connect, supports are applied, and nodal loads act.
Members
A member connects two nodes. Each member has a material, a cross-section, and a type (Beam or Truss). Beam elements have 6 DOF per node (3 translations + 3 rotations). Truss elements have only axial stiffness.
Members can have intermediate nodes, splitting them into segments for finer resolution.
Supports (boundary conditions)
Supports restrict degrees of freedom at a node. Common types:
| Type | Translations | Rotations | Use case |
|---|---|---|---|
| Fixed | All restrained | All restrained | Rigid connections to ground |
| Pinned | All restrained | All free | Simple supports |
| Roller | Uy restrained only | All free | Expansion joints |
| Free | All free | All free | No support (default) |
Load cases
A load case groups loads that act simultaneously and share a load type: dead, live, wind, snow, seismic, or ice. Each load case is solved independently by the FEM solver. Load cases carry metadata relevant to their type (wind direction, ground snow load, seismic coefficients).
Load combinations
A load combination applies partial safety factors to load cases and superposes the results. For example, a Eurocode ULS combination might be 1.35 × Dead + 1.5 × Live. Combination results are computed via linear superposition — no re-solving needed.
Analysis results
After running analysis, Model.Results contains an AnalysisResultSet with:
- Node displacements — Dx, Dy, Dz, Rx, Ry, Rz per node per load case/combination
- Reactions — Fx, Fy, Fz, Mx, My, Mz at supported nodes
- Member forces — N, Vy, Vz, Mx, My, Mz at stations along each member
- Utilization — design check ratios with governing clause references (if a design code is selected)
Results are stored as flat lists and queried by node ID, member ID, load case, or as envelopes (max/min across all scenarios with traceability to the governing load case).
Invalidation
Any model mutation (adding a node, changing a load, moving a support) automatically clears Model.Results. This ensures you never see stale results.