94 lines
3.8 KiB
C++
94 lines
3.8 KiB
C++
#ifndef FESA_ANALYSIS_PREPARED_ANALYSIS_H_
|
|
#define FESA_ANALYSIS_PREPARED_ANALYSIS_H_
|
|
|
|
#include <filesystem>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "fesa/analysis/analysis_procedure.h"
|
|
#include "fesa/analysis/prepared_analysis_outcome.h"
|
|
#include "fesa/core/diagnostic.h"
|
|
#include "fesa/core/status.h"
|
|
#include "fesa/model/domain.h"
|
|
|
|
namespace fesa {
|
|
|
|
class ParallelFor;
|
|
class LinearSolver;
|
|
class TangentSolver;
|
|
class EigenSolver;
|
|
class LinearStaticProcedureExecutor;
|
|
class LinearFrequencyProcedureExecutor;
|
|
class EigenResultsWriter;
|
|
class NewtonIterationLogWriter;
|
|
class NonlinearResultsWriter;
|
|
class NonlinearStaticProcedureExecutor;
|
|
class ResultsWriter;
|
|
class HhtDynamicProcedureExecutor;
|
|
class DynamicResultsWriter;
|
|
class ThermalResultsWriter;
|
|
class SolidResultsWriter;
|
|
class SolidFrequencyProcedureExecutor;
|
|
class SolidStaticProcedureExecutor;
|
|
class SolidHhtDynamicProcedureExecutor;
|
|
class TransientHeatProcedureExecutor;
|
|
struct DerivedOutputPaths;
|
|
|
|
/// @brief Owns one parsed and semantically mapped analysis input.
|
|
struct PreparedAnalysisInput {
|
|
Domain domain;
|
|
std::vector<Diagnostic> 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<PreparedAnalysisInput> PrepareAnalysisInput(
|
|
const std::filesystem::path& input_path);
|
|
|
|
/// @brief Creates exactly one selected family with caller-owned adapters.
|
|
/// @note Domain and adapters remain alive and unmoved throughout execution.
|
|
Result<std::unique_ptr<AnalysisProcedure>> CreateAnalysisProcedure(
|
|
const Domain &domain, const ParallelFor ¶llel_for,
|
|
LinearSolver &linear_solver, TangentSolver &tangent_solver,
|
|
const EigenSolver &eigen_solver, NewtonIterationLogWriter &log);
|
|
|
|
/// @brief Executes a caller-selected procedure through the common interface.
|
|
Result<PreparedAnalysisOutcome>
|
|
ExecutePreparedAnalysis(const Domain &domain, AnalysisProcedure &procedure);
|
|
|
|
/// @brief Selects the approved procedure from a prepared Domain.
|
|
/// @pre The executors and log outlive this call.
|
|
/// @param thermal_executor Required only for a thermal Domain, whose structural
|
|
/// step collection is empty; absence returns a solver failure.
|
|
/// @return A validated procedure outcome without opening a result file.
|
|
Result<PreparedAnalysisOutcome> ExecutePreparedAnalysis(
|
|
const Domain& domain, LinearStaticProcedureExecutor& linear_executor,
|
|
NonlinearStaticProcedureExecutor& nonlinear_executor,
|
|
const LinearFrequencyProcedureExecutor& frequency_executor,
|
|
NewtonIterationLogWriter& log,
|
|
const HhtDynamicProcedureExecutor* dynamic_executor = nullptr,
|
|
const TransientHeatProcedureExecutor* thermal_executor = nullptr,
|
|
const SolidStaticProcedureExecutor* solid_static_executor = nullptr,
|
|
const SolidFrequencyProcedureExecutor* solid_frequency_executor = nullptr,
|
|
const SolidHhtDynamicProcedureExecutor* solid_dynamic_executor = nullptr);
|
|
|
|
/// @brief Writes an already computed outcome to its authoritative result file.
|
|
/// @pre The Newton log has closed successfully before this function is called.
|
|
/// @param thermal_writer Required only for a thermal outcome; absence returns
|
|
/// an output failure without opening the final result.
|
|
/// @return Success after the selected writer atomically finalizes its result.
|
|
Status FinalizePreparedAnalysisResult(
|
|
const DerivedOutputPaths& paths, const Domain& domain,
|
|
const PreparedAnalysisOutcome& outcome,
|
|
const std::vector<Diagnostic>& diagnostics, ResultsWriter& linear_writer,
|
|
NonlinearResultsWriter& nonlinear_writer, EigenResultsWriter& eigen_writer,
|
|
DynamicResultsWriter* dynamic_writer = nullptr,
|
|
ThermalResultsWriter* thermal_writer = nullptr,
|
|
SolidResultsWriter* solid_writer = nullptr);
|
|
|
|
} // namespace fesa
|
|
|
|
#endif // FESA_ANALYSIS_PREPARED_ANALYSIS_H_
|