#pragma once #include "fesa/analysis/analysis_model.hpp" #include "fesa/analysis/analysis_state.hpp" #include "fesa/core/status.hpp" #include "fesa/fem/dof_manager.hpp" #include "fesa/math/sparse_matrix.hpp" #include #include namespace fesa { struct NodeStationResultRow { SourceEntityId node; EntityIndex representativeElement; std::array sectionResultant; }; // Recovers full-space equilibrium and the V0 beam output rows without // exposing element or sparse-backend details to result consumers. class ResultRecovery { public: static Status recover(const AnalysisModel& model, const DofManager& dofs, const SparseMatrix& fullStiffness, AnalysisState& state); static Result> normalizeSectionResultantsToNodeStations( const AnalysisModel& model, const std::vector& endpointRows, const std::array& componentTolerances); }; } // namespace fesa