From e38e8dd52c88161e3550199ab5a5080b6e567ade Mon Sep 17 00:00:00 2001
From: Wenqing Wang <wenqing.wang@ufz.de>
Date: Tue, 23 Aug 2022 16:30:31 +0200
Subject: [PATCH] [SourceTerm] Fixed a bug in Python source term

---
 .../SourceTermCollection.cpp                             | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/ProcessLib/BoundaryConditionAndSourceTerm/SourceTermCollection.cpp b/ProcessLib/BoundaryConditionAndSourceTerm/SourceTermCollection.cpp
index f006d574484..fb028dfe233 100644
--- a/ProcessLib/BoundaryConditionAndSourceTerm/SourceTermCollection.cpp
+++ b/ProcessLib/BoundaryConditionAndSourceTerm/SourceTermCollection.cpp
@@ -10,6 +10,8 @@
 
 #include "SourceTermCollection.h"
 
+#include <range/v3/view/filter.hpp>
+
 namespace ProcessLib
 {
 void SourceTermCollection::addSourceTermsForProcessVariables(
@@ -34,7 +36,12 @@ void SourceTermCollection::addSourceTermsForProcessVariables(
 void SourceTermCollection::integrate(const double t, GlobalVector const& x,
                                      GlobalVector& b, GlobalMatrix* jac) const
 {
-    for (auto const& st : _source_terms)
+    // For parallel computing with DDC, a partition may not have source term
+    // but a nullptr is assigned to its element in _source_terms.
+    auto non_nullptr = [](std::unique_ptr<SourceTerm> const& st)
+    { return st != nullptr; };
+
+    for (auto const& st : _source_terms | ranges::views::filter(non_nullptr))
     {
         st->integrate(t, x, b, jac);
     }
-- 
GitLab