#ifndef FESA_RESULTS_RESULT_RECORDS_H_ #define FESA_RESULTS_RESULT_RECORDS_H_ #include #include #include #include #include "fesa/core/source_identity.h" namespace fesa { /// @brief Identifies one deterministic result frame. struct StepFrameIdentity { std::string step_name; std::size_t frame_index; }; /// @brief Stores one beam endpoint action and section-resultant row. struct EndpointResultRow { EntityIndex element; int endpoint; SourceEntityId node; std::array end_action; std::array section_resultant; }; /// @brief Stores one beam Gauss generalized result row. struct GaussResultRow { EntityIndex element; int gauss_point; std::array generalized_strain; std::array generalized_resultant; }; /// @brief Stores one beam axial-stress section-point row. struct StressS11Row { EntityIndex element; int gauss_point; std::size_t section_point; double x1; double x2; double s11; std::string source; }; /// @brief Identifies one MITC4 midsurface integration location. enum class ShellMidsurfaceLocation { kGp1, kGp2, kGp3, kGp4 }; /// @brief Identifies one through-thickness shell recovery position. enum class ShellSectionPosition { kBottom, kMiddle, kTop }; /// @brief Stores one through-thickness shell stress row. struct ShellSectionStressRow { ShellSectionPosition position; double zeta; std::array components; }; /// @brief Stores one MITC4 physical recovery row. struct ShellResultRow { EntityIndex element; ShellMidsurfaceLocation location; std::array natural_coordinates; // Axis rows [e1,e2,e3], global-component columns. std::array, 3> local_frame; std::array generalized_strain; std::array section_resultant; // Fixed BOTTOM, MIDDLE, TOP order; components are [S11,S22,S12]. std::array stress; }; /// @brief Carries a complete shell result candidate for atomic validation. struct ShellStateCandidate { std::vector rows; double physical_strain_energy{0.0}; // [FORCE_1,FORCE_2,FORCE_3,MOMENT_1,MOMENT_2,MOMENT_3]. std::array equilibrium{}; // [FREE_RESIDUAL_NORMALIZED,FORCE_BALANCE_NORMALIZED, // MOMENT_BALANCE_NORMALIZED]. std::array verification_metrics{}; }; } // namespace fesa #endif // FESA_RESULTS_RESULT_RECORDS_H_