Result objects#
Every solver returns a lightweight dataclass
carrying the full-length arrays for every DOF of the original model
— even the ones that were prescribed or fell out as rigid-body.
That keeps downstream indexing simple: a mode shape of length N
lines up 1-to-1 with Model.dof_map(), and slicing by node
number Just Works.
StaticResult#
Returned by solve_static() and
Model.solve():
Field |
Shape |
Meaning |
|---|---|---|
|
|
Global displacement at every DOF; zeros at Dirichlet-fixed DOFs. |
|
|
Reaction force at constrained DOFs, zeros elsewhere. |
|
|
|
result = solve_static(K, F, prescribed={0: 0.0, 1: 0.0, 2: 0.0})
u_tip = result.displacement[dof_map_tip]
R_total_y = result.reaction[1::3].sum() # Σ of all UY reactions
ModalResult#
Returned by solve_modal() and
Model.modal_solve():
Field |
Shape |
Meaning |
|---|---|---|
|
|
Eigenvalues \(\omega^2 = (2\pi f)^2\); numerically negative values are clipped to 0. |
|
|
Cyclic frequencies \(f\) in Hz (\(\sqrt{\omega^2} / (2\pi)\)). |
|
|
Each column is a full-length eigenvector. |
|
|
|
result = solve_modal(K, M, prescribed=fixed, n_modes=10,
eigen_solver="arpack", sigma=-1.0)
first_bending = result.mode_shapes[:, 6].reshape(-1, 3) # 6 rigid-body modes skipped
f1 = result.frequency[6]
TransientResult#
Returned by solve_transient() and
Model.transient_solve():
Field |
Shape |
Meaning |
|---|---|---|
|
|
Time grid including \(t = 0\). |
|
|
Displacement history. |
|
|
Velocity history. |
|
|
Acceleration history. |
result = solve_transient(K, M, F=load, dt=1e-4, n_steps=1000,
prescribed=fixed)
u_tip_t = result.displacement[:, dof_map_tip] # tip vs time
CyclicModalResult#
Returned by solve_cyclic_modal() — one
per requested harmonic index. See Cyclic-symmetry modal analysis.
Field |
Shape |
Meaning |
|---|---|---|
|
|
The k for this result. |
|
|
Number of sectors in the full rotor. |
|
|
Eigenvalues and Hz frequencies at this k. |
|
|
Base-sector complex mode shape; imaginary part is identically 0 for k=0 and k=N/2. |
See also#
Strain and stress recovery — deriving \(\varepsilon\) and \(\sigma\) from
displacement.Visualisation and export — getting the arrays into pyvista for plotting.
The Model — what
Model.dof_map()returns.