#pragma once #include "fesa/model/model_types.h" #include #include #include #include namespace fesa { struct StepFrameIdentity { std::string stepName; std::size_t frameIndex; }; struct EndpointResultRow { EntityIndex element; int endpoint; SourceEntityId node; std::array endAction; std::array sectionResultant; }; struct GaussResultRow { EntityIndex element; int gaussPoint; std::array generalizedStrain; std::array generalizedResultant; }; struct StressS11Row { EntityIndex element; int gaussPoint; std::size_t sectionPoint; double x1; double x2; double s11; std::string source; }; enum class ShellMidsurfaceLocation { gp1, gp2, gp3, gp4 }; enum class ShellSectionPosition { bottom, middle, top }; struct ShellSectionStressRow { ShellSectionPosition position; double zeta; std::array components; }; struct ShellResultRow { EntityIndex element; ShellMidsurfaceLocation location; std::array naturalCoordinates; // Axis rows [e1,e2,e3], global-component columns. std::array, 3> localFrame; std::array generalizedStrain; std::array sectionResultant; // Fixed BOTTOM, MIDDLE, TOP order; components are [S11,S22,S12]. std::array stress; }; struct ShellStateCandidate { std::vector rows; double physicalStrainEnergy{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 verificationMetrics{}; }; } // namespace fesa