From c3c3bb053c70df45dc2c8afaa5dd51bf8d2f8a50 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Thu, 2 Nov 2017 10:28:27 +0100
Subject: [PATCH] [PL/SourceTerms] Process vars.: Create source terms.

---
 ProcessLib/Process.cpp | 18 ++++++++++++++++++
 ProcessLib/Process.h   |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/ProcessLib/Process.cpp b/ProcessLib/Process.cpp
index afe758b7ebb..9d066191a12 100644
--- a/ProcessLib/Process.cpp
+++ b/ProcessLib/Process.cpp
@@ -59,6 +59,19 @@ void Process::initialize()
     DBUG("Initialize boundary conditions.");
     _boundary_conditions.addBCsForProcessVariables(
         _process_variables, *_local_to_global_index_map, _integration_order);
+
+    for (int variable_id = 0;
+         variable_id < static_cast<int>(_process_variables.size());
+         ++variable_id)
+    {
+        ProcessVariable& pv = _process_variables[variable_id];
+        auto sts =
+            pv.createSourceTerms(*_local_to_global_index_map, variable_id,
+                                 _integration_order);
+
+        std::move(sts.begin(), sts.end(),
+                  std::back_inserter(_source_terms));
+    }
 }
 
 void Process::setInitialConditions(double const t, GlobalVector& x)
@@ -128,6 +141,11 @@ void Process::assemble(const double t, GlobalVector const& x, GlobalMatrix& M,
     assembleConcreteProcess(t, x, M, K, b);
 
     _boundary_conditions.applyNaturalBC(t, x, K, b);
+
+    for (auto const& st : _source_terms)
+    {
+        st->integrateNodalSourceTerm(t, b);
+    }
 }
 
 void Process::assembleWithJacobian(const double t, GlobalVector const& x,
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 88ef33bf5ee..b9fba6a81f6 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -14,6 +14,7 @@
 #include "NumLib/ODESolver/TimeDiscretization.h"
 #include "NumLib/NamedFunctionCaller.h"
 #include "ProcessLib/BoundaryCondition/BoundaryConditionCollection.h"
+#include "ProcessLib/SourceTerms/NodalSourceTerm.h"
 #include "ProcessLib/Parameter/Parameter.h"
 
 #include "ExtrapolatorData.h"
@@ -218,6 +219,7 @@ private:
     std::vector<std::reference_wrapper<ProcessVariable>> _process_variables;
 
     BoundaryConditionCollection _boundary_conditions;
+    std::vector<std::unique_ptr<NodalSourceTerm>> _source_terms;
 
     ExtrapolatorData _extrapolator_data;
 };
-- 
GitLab