#ifndef FESA_ANALYSIS_PREPARED_ANALYSIS_H_ #define FESA_ANALYSIS_PREPARED_ANALYSIS_H_ #include #include #include #include "fesa/analysis/analysis_state.h" #include "fesa/analysis/nonlinear_analysis_state.h" #include "fesa/core/diagnostic.h" #include "fesa/core/status.h" #include "fesa/model/domain.h" namespace fesa { class LinearStaticProcedureExecutor; class NewtonIterationLogWriter; class NonlinearResultsWriter; class NonlinearStaticProcedureExecutor; class ResultsWriter; struct DerivedOutputPaths; /// @brief Owns one parsed and semantically mapped analysis input. struct PreparedAnalysisInput { Domain domain; std::vector diagnostics; }; /// @brief Parses and maps an input file exactly once for procedure execution. /// @param input_path Source Abaqus input path. /// @return A movable Domain and sorted mapping diagnostics, or an input /// failure. Result PrepareAnalysisInput( const std::filesystem::path& input_path); /// @brief Stores a completed linear-static calculation before result writing. struct LinearStaticExecutionResult { AnalysisState state; std::vector diagnostics; }; /// @brief Stores a completed nonlinear-static calculation before result /// writing. struct NonlinearStaticExecutionResult { NonlinearAnalysisState state; std::vector diagnostics; }; using PreparedAnalysisOutcome = std::variant; /// @brief Selects the approved procedure from a prepared Domain. /// @pre The executors and log outlive this call. /// @return A validated procedure outcome without opening a result file. Result ExecutePreparedAnalysis( const Domain& domain, LinearStaticProcedureExecutor& linear_executor, NonlinearStaticProcedureExecutor& nonlinear_executor, NewtonIterationLogWriter& log); /// @brief Writes an already computed outcome to its authoritative result file. /// @pre The Newton log has closed successfully before this function is called. /// @return Success after the selected writer atomically finalizes its result. Status FinalizePreparedAnalysisResult( const DerivedOutputPaths& paths, const Domain& domain, const PreparedAnalysisOutcome& outcome, const std::vector& diagnostics, ResultsWriter& linear_writer, NonlinearResultsWriter& nonlinear_writer); } // namespace fesa #endif // FESA_ANALYSIS_PREPARED_ANALYSIS_H_