From 20be994c3df05707c6b1e706958a0ee782cce223 Mon Sep 17 00:00:00 2001 From: Ayush Date: Sun, 28 Dec 2025 17:15:42 +0000 Subject: [PATCH 1/2] CHG: Prevent fatal MPI_Abort on invalid History field lookup --- SU2_CFD/include/output/COutput.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SU2_CFD/include/output/COutput.hpp b/SU2_CFD/include/output/COutput.hpp index 3369b7e7a925..c145c0aaa33a 100644 --- a/SU2_CFD/include/output/COutput.hpp +++ b/SU2_CFD/include/output/COutput.hpp @@ -477,7 +477,7 @@ class COutput { su2double GetHistoryFieldValue(const string& name) const { auto it = historyOutput_Map.find(name); if (it != historyOutput_Map.end()) return it->second.value; - SU2_MPI::Error("Cannot find output field with name " + name, CURRENT_FUNCTION); + std::cout << "Warning: History field " << name << " not found." << std::endl; return 0; } From 29ba6b714ef605a379fa777cb9b2f963dd5f7d26 Mon Sep 17 00:00:00 2001 From: Ayush Date: Tue, 30 Dec 2025 10:54:49 +0000 Subject: [PATCH 2/2] FIX: Handle missing history output in Driver interface instead of Integration core --- SU2_CFD/include/drivers/CDriverBase.hpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/SU2_CFD/include/drivers/CDriverBase.hpp b/SU2_CFD/include/drivers/CDriverBase.hpp index 97772527cf3f..1a6a2ae9c95a 100644 --- a/SU2_CFD/include/drivers/CDriverBase.hpp +++ b/SU2_CFD/include/drivers/CDriverBase.hpp @@ -116,7 +116,13 @@ class CDriverBase { * \return Value of the output. */ inline passivedouble GetOutputValue(const std::string& output_name) const { - return SU2_TYPE::GetValue(output_container[MESH_0]->GetHistoryFieldValue(output_name)); + const auto& list = output_container[MESH_0]->GetHistoryOutputList(); + for (const auto& val : list) { + if (val == output_name) { + return SU2_TYPE::GetValue(output_container[MESH_0]->GetHistoryFieldValue(output_name)); + } + } + return 0.0; } /*! @@ -133,6 +139,11 @@ class CDriverBase { */ inline passivedouble GetMarkerMonitoringOutputValue(const std::string& output_name, const std::string& marker_monitoring) const { + const auto& list = output_container[MESH_0]->GetHistoryOutputPerSurfaceList(); + bool found = false; + for (const auto& val : list) { if (val == output_name) { found = true; break; } } + if (!found) return 0.0; + for (auto iMarker = 0u; iMarker < main_config->GetnMarker_Monitoring(); ++iMarker) { if (marker_monitoring == main_config->GetMarker_Monitoring_TagBound(iMarker)) return SU2_TYPE::GetValue(output_container[MESH_0]->GetHistoryFieldValuePerSurface(output_name, iMarker)); @@ -147,6 +158,11 @@ class CDriverBase { */ inline passivedouble GetMarkerAnalyzeOutputValue(const std::string& output_name, const std::string& marker_analyze) const { + const auto& list = output_container[MESH_0]->GetHistoryOutputPerSurfaceList(); + bool found = false; + for (const auto& val : list) { if (val == output_name) { found = true; break; } } + if (!found) return 0.0; + for (auto iMarker = 0u; iMarker < main_config->GetnMarker_Analyze(); ++iMarker) { if (marker_analyze == main_config->GetMarker_Analyze_TagBound(iMarker)) return SU2_TYPE::GetValue(output_container[MESH_0]->GetHistoryFieldValuePerSurface(output_name, iMarker));