From 27eceabb9b50f031d67d9ffac983d3bb2eaca7da Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Fri, 26 Sep 2025 17:30:25 +0200 Subject: [PATCH 1/4] Pass recoverable error to IDAS when residual contains NaN --- .../model/ModelSystemImpl-Residual.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/libcadet/model/ModelSystemImpl-Residual.cpp b/src/libcadet/model/ModelSystemImpl-Residual.cpp index 809cc67f7..5f20eb425 100644 --- a/src/libcadet/model/ModelSystemImpl-Residual.cpp +++ b/src/libcadet/model/ModelSystemImpl-Residual.cpp @@ -532,6 +532,18 @@ int ModelSystem::residual(const SimulationTime& simTime, const ConstSimulationSt } _errorIndicator[i] = m->residual(simTime, applyOffset(simState, offset), res + offset, _threadLocalStorage); + + for (int j = 0; j < _dofs[i]; j++) + { + if (std::isnan(res + offset + j)) + { + LOG(Warning) << "Residual has NAN value in unit " << i << " (at least) at index " << j; + _errorIndicator[i] = 1; // recoverable error + } + } + + return 0; + } CADET_PARFOR_END; // Handle connections @@ -567,6 +579,15 @@ int ModelSystem::residualWithJacobian(const SimulationTime& simTime, const Const _errorIndicator[i] = m->residualWithJacobian(simTime, applyOffset(simState, offset), res + offset, applyOffset(adJac, offset), _threadLocalStorage); + for (int j = 0; j < _dofs[i]; j++) + { + if (std::isnan(res + offset + j)) + { + LOG(Warning) << "Residual has NAN value in unit " << i << " (at least) at index " << j; + _errorIndicator[i] = 1; // recoverable error + } + } + } CADET_PARFOR_END; // Handle connections From 2bb8f1f01b95256cef0607ce74766ba9fb8abdcd Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Fri, 26 Sep 2025 17:37:05 +0200 Subject: [PATCH 2/4] fixup! --- src/libcadet/model/ModelSystemImpl-Residual.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libcadet/model/ModelSystemImpl-Residual.cpp b/src/libcadet/model/ModelSystemImpl-Residual.cpp index 5f20eb425..7a202ce27 100644 --- a/src/libcadet/model/ModelSystemImpl-Residual.cpp +++ b/src/libcadet/model/ModelSystemImpl-Residual.cpp @@ -535,7 +535,7 @@ int ModelSystem::residual(const SimulationTime& simTime, const ConstSimulationSt for (int j = 0; j < _dofs[i]; j++) { - if (std::isnan(res + offset + j)) + if (std::isnan(res[offset + j])) { LOG(Warning) << "Residual has NAN value in unit " << i << " (at least) at index " << j; _errorIndicator[i] = 1; // recoverable error @@ -581,7 +581,7 @@ int ModelSystem::residualWithJacobian(const SimulationTime& simTime, const Const for (int j = 0; j < _dofs[i]; j++) { - if (std::isnan(res + offset + j)) + if (std::isnan(res[offset + j])) { LOG(Warning) << "Residual has NAN value in unit " << i << " (at least) at index " << j; _errorIndicator[i] = 1; // recoverable error From 970f8b1df7c220863b7e05d13f336a7786e2f4e3 Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Fri, 26 Sep 2025 17:42:36 +0200 Subject: [PATCH 3/4] fixup! add break --- src/libcadet/model/ModelSystemImpl-Residual.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libcadet/model/ModelSystemImpl-Residual.cpp b/src/libcadet/model/ModelSystemImpl-Residual.cpp index 7a202ce27..0755b36ac 100644 --- a/src/libcadet/model/ModelSystemImpl-Residual.cpp +++ b/src/libcadet/model/ModelSystemImpl-Residual.cpp @@ -539,6 +539,7 @@ int ModelSystem::residual(const SimulationTime& simTime, const ConstSimulationSt { LOG(Warning) << "Residual has NAN value in unit " << i << " (at least) at index " << j; _errorIndicator[i] = 1; // recoverable error + break; } } @@ -585,6 +586,7 @@ int ModelSystem::residualWithJacobian(const SimulationTime& simTime, const Const { LOG(Warning) << "Residual has NAN value in unit " << i << " (at least) at index " << j; _errorIndicator[i] = 1; // recoverable error + break; } } From 170041edb498a9558ec2750669ebefee6317aded Mon Sep 17 00:00:00 2001 From: Jan Breuer Date: Mon, 29 Sep 2025 12:36:12 +0200 Subject: [PATCH 4/4] fixup! --- src/libcadet/model/ModelSystemImpl-Residual.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/libcadet/model/ModelSystemImpl-Residual.cpp b/src/libcadet/model/ModelSystemImpl-Residual.cpp index 0755b36ac..aa36d0642 100644 --- a/src/libcadet/model/ModelSystemImpl-Residual.cpp +++ b/src/libcadet/model/ModelSystemImpl-Residual.cpp @@ -543,8 +543,6 @@ int ModelSystem::residual(const SimulationTime& simTime, const ConstSimulationSt } } - return 0; - } CADET_PARFOR_END; // Handle connections