#pragma once #include #include #include #include #include #include #include #include #include namespace fesa { enum class FieldCoordinateSystem { global, element_local }; struct NodalFrame final { inline static constexpr FieldCoordinateSystem coordinate_system = FieldCoordinateSystem::global; inline static constexpr std::array displacement_components{ "Ux", "Uy", "Uz", "Rx", "Ry", "Rz"}; inline static constexpr std::array reaction_components{ "RFx", "RFy", "RFz", "RMx", "RMy", "RMz"}; std::vector node_ids; std::vector origins; std::vector> displacement; std::vector> reaction; }; struct BeamElementFrame final { inline static constexpr FieldCoordinateSystem coordinate_system = FieldCoordinateSystem::element_local; inline static constexpr std::array section_strain_components{ "epsilon", "gamma_y", "gamma_z", "kappa_x", "kappa_y", "kappa_z"}; inline static constexpr std::array section_force_components{ "N", "Vy", "Vz", "T", "My", "Mz"}; inline static constexpr std::string_view axial_stress_component = "sigma_xx"; ElementId element; EntityOrigin origin; BeamFrame local_frame; std::array end_results; }; struct ElementFrame final { std::vector beams; }; struct ResultFrame final { double step_time; NodalFrame nodal; ElementFrame element; std::vector diagnostics; }; struct ResultStep final { std::string name; std::vector frames; }; struct ResultDatabase final { std::string schema_version; std::vector steps; }; [[nodiscard]] Status validate_result_database( const ResultDatabase& database); } // namespace fesa