#ifndef FESA_MODEL_SHELL_GEOMETRY_H_ #define FESA_MODEL_SHELL_GEOMETRY_H_ #include #include #include #include "fesa/core/status.h" #include "fesa/model/model_types.h" namespace fesa { /// @brief Classifies a mandatory shell-geometry validation location. enum class ShellGeometryPointKind { kCenter, kStiffness, kTying, kRecovery }; /// @brief Identifies one deterministic shell-geometry validation point. struct ShellGeometryValidationPoint { ShellGeometryPointKind kind; std::size_t location_index; std::array natural_coordinates; }; /// @brief Stores deterministic preprocessing data for one shell element. struct ShellElementGeometryData { EntityIndex element_index; std::array normal_candidate; double surface_area_weight; }; /// @brief Owns preprocessed shell node frames and element geometry data. struct ShellGeometry { std::vector nodal_frames; std::vector element_data; }; /// @brief Returns the complete fixed validation-point inventory. /// @note Ordering is center, stiffness, tying, then recovery identity. const std::array& ShellGeometryValidationPoints() noexcept; /// @brief Builds deterministic nodal frames and validates shell geometry. /// @param nodes Source nodes indexed by stable EntityIndex. /// @param elements Shell definitions in stable source order. /// @param sections Shell sections used for thickness validation. /// @return Validated geometry or a structured model failure. Result PreprocessShellGeometry( const std::vector& nodes, const std::vector& elements, const std::vector& sections); } // namespace fesa #endif // FESA_MODEL_SHELL_GEOMETRY_H_