#ifndef FESA_ANALYSIS_TRANSIENT_HEAT_PROCEDURE_H_ #define FESA_ANALYSIS_TRANSIENT_HEAT_PROCEDURE_H_ #include #include "fesa/analysis/thermal_analysis_state.h" #include "fesa/core/status.h" namespace fesa { class LinearSolver; class ParallelFor; /// @brief Owns complete thermal history before any result output is opened. struct ThermalExecutionResult { ThermalAnalysisState state; std::vector diagnostics; }; /// @brief Executes fixed-increment backward Euler with checked thermal /// recovery. class TransientHeatProcedureExecutor final { public: /// @brief Retains caller-owned adapters, which must outlive Execute calls. TransientHeatProcedureExecutor(const ParallelFor& parallel_for, LinearSolver& linear_solver); /// @brief Returns a complete independently owned state or a structured /// failure. /// @note Uses raw initial values; prescribed temperatures start at increment /// one. No output files are opened. A failed trial is never committed to /// history. Result Execute(const Domain& domain) const; private: const ParallelFor& parallel_for_; LinearSolver& linear_solver_; }; } // namespace fesa #endif // FESA_ANALYSIS_TRANSIENT_HEAT_PROCEDURE_H_