Results
StaticResult is the numerical source of truth after a linear-static solve.
It stores a frozen snapshot of the problem and solution at the time the
analysis was performed.
Creating a result
The most common form is:
result = model.solve()
The equivalent explicit analysis call is:
from nusa import LinearStaticAnalysis
result = LinearStaticAnalysis().solve(model)
Both forms return nusa.result.StaticResult.
Primary arrays
The result exposes defensive copies of the main solved vectors:
applied_loadsExternal nodal loads specified in the model.
prescribed_displacementsPrescribed displacement vector. Free DOFs are represented by
nan.displacementsSolved generalized displacement vector.
nodal_forcesGeneralized nodal force vector obtained from
K @ u.reactionsConstraint reactions, evaluated from the difference between the force required by the solved state and the applied load.
element_resultsCanonical result dictionaries in element order.
Example:
print(result.displacements)
print(result.reactions)
print(result.element_results)
Object-based queries
For most user code, object-based accessors are easier to read than indexing the global arrays manually:
result.applied_load(node)
result.prescribed_displacement(node)
result.displacement(node)
result.nodal_force(node)
result.reaction(node)
result.element_result(element)
The returned dictionaries use the DOF names associated with the model family.
For example, a truss node returns ux/uy displacements and fx/fy
forces, while a beam node returns uy/ur displacements and fy/m
actions.
Element results
Each element family exposes a canonical result schema:
Element |
Result keys |
|---|---|
Spring |
|
Bar |
|
Truss |
|
Beam |
|
LinearTriangle |
|
Example:
values = result.element_result(element)
print(values["axial_force"])
Snapshot semantics
A result does not change if the model is later modified:
result1 = model.solve()
model.add_force(node, (20.0,))
result2 = model.solve()
result1 still represents the first analysis, while result2 represents
the modified problem.
The result also stores frozen geometry, labels, connectivity, DOF metadata, and model name. This allows reporting and visualization to remain stable even when the original model objects are later edited.
Post-processing delegates
StaticResult provides convenience methods that delegate to NuSA’s
post-processing functions:
result.element_field("stress_xx")
result.nodal_field("stress_xx")
result.nodal_field("von_mises_stress")
See Post-processing for recovery policies and derived fields.
Reporting and visualization delegates
A result can also be used directly for solved reporting and visualization:
result.simple_report()
result.plot_deformed_shape()
result.plot_nodal_field("stress_xx")
result.plot_element_field("stress_xx")
Beam results additionally expose:
result.plot_shear_diagram()
result.plot_moment_diagram()
API reference
Result objects for NuSA finite-element analyses.
- class nusa.result.StaticResult(*, model_name, node_objects, node_labels, node_coordinates, element_objects, element_labels, element_types, connectivity, displacement_dofs, force_dofs, applied_loads, prescribed_displacements, displacements, nodal_forces, reactions, element_results)[source]
Bases:
objectStable snapshot of one completed linear-static analysis.
Instances are produced by
nusa.solve()ornusa.LinearStaticAnalysis. Public array properties return copies so callers cannot mutate the stored result.- property applied_loads
Applied nodal-load vector captured for this analysis.
- property connectivity
Element connectivity as frozen result-node indices.
- property displacement_dofs
Displacement component names in per-node order.
- property displacements
Complete solved global displacement vector.
- property element_labels
Element labels in frozen result order.
- property element_results
Canonical element results in frozen result order.
- property element_types
Element type names in frozen result order.
- property force_dofs
Generalized force component names in per-node order.
- property model_name
Model name captured at solve time.
- nodal_field(name, recovery='average')[source]
Return one scalar nodal field, recovering element values if needed.
- property nodal_forces
Solved generalized nodal-force vector K @ u.
- property node_coordinates
Node coordinates in frozen result order.
- property node_labels
Node labels in frozen result order.
- prescribed_displacement(node)[source]
Return prescribed displacement components for one result node.
- property prescribed_displacements
Prescribed-displacement vector captured for this analysis.
- property reactions
Support-reaction vector for prescribed degrees of freedom.