Skip to main content

Concepts

Understanding the core data model before diving into the API.

ArmaturaProject

The top-level container. A project manages one or more models, holds the active design code, and handles persistence. Analysis requires a model to be attached to a project.

StructuralModel

The central object within a project. A StructuralModel holds all nodes, members, supports, materials, sections, loads, load cases, and load combinations. After analysis, it also holds results.

StructuralModel
├── Nodes — points in 3D space
├── Members — beam/truss elements connecting two nodes
├── Supports — boundary conditions at nodes
├── Materials — steel grades (steel only, currently)
├── Sections — cross-section geometry (I-beam, rectangular, circular, hollow, angle)
├── PointLoads — concentrated forces/moments applied along members
├── 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. Coordinates are in metres. The global coordinate system is right-handed with Z pointing upward. Nodes are where members connect and supports are applied.

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 carry axial force only.

Supports (boundary conditions)

Supports restrict degrees of freedom at a node. Common types:

TypeTranslationsRotationsUse case
FixedAll restrainedAll restrainedRigid connections to ground
PinnedAll restrainedAll freeSimple supports
RollerOne axis restrainedAll freeExpansion joints
FreeAll freeAll freeNo 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 combinations

A load combination applies partial safety factors to load cases and superposes the results. For example, a Eurocode ULS combination: 1.35 × Dead + 1.5 × Live. Combination results are computed via linear superposition — no re-solving needed. This is valid for linear elastic analysis only.

Analysis results

After running analysis, an AnalysisResultSet contains:

  • 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 (default: 11 stations)
  • Utilization — design check ratios with governing clause references (requires an active design code)

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 results. This ensures you never read stale data. Re-run analysis after making changes.