From 06bc12c918237da06d496642107517a3dfaf3609 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Wed, 24 Jan 2018 15:04:37 +0100
Subject: [PATCH] [PL] Init. impl. of class SourceTermCollection.

---
 .../SourceTerms/SourceTermCollection.cpp      | 39 +++++++++++++++++++
 ProcessLib/SourceTerms/SourceTermCollection.h | 39 +++++++++++++++++++
 2 files changed, 78 insertions(+)
 create mode 100644 ProcessLib/SourceTerms/SourceTermCollection.cpp
 create mode 100644 ProcessLib/SourceTerms/SourceTermCollection.h

diff --git a/ProcessLib/SourceTerms/SourceTermCollection.cpp b/ProcessLib/SourceTerms/SourceTermCollection.cpp
new file mode 100644
index 00000000000..f0dc7ba5f97
--- /dev/null
+++ b/ProcessLib/SourceTerms/SourceTermCollection.cpp
@@ -0,0 +1,39 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include "SourceTermCollection.h"
+
+namespace ProcessLib
+{
+void SourceTermCollection::addSourceTermsForProcessVariables(
+    std::vector<std::reference_wrapper<ProcessVariable>> const&
+        process_variables,
+    NumLib::LocalToGlobalIndexMap const& dof_table,
+    unsigned const 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(dof_table, variable_id,
+                                        integration_order, _parameters);
+
+        std::move(sts.begin(), sts.end(), std::back_inserter(_source_terms));
+    }
+}
+
+void SourceTermCollection::integrateNodalSourceTerms(const double t,
+                                                     GlobalVector& b) const
+{
+    for (auto const& st : _source_terms)
+        st->integrateNodalSourceTerm(t, b);
+}
+
+}
diff --git a/ProcessLib/SourceTerms/SourceTermCollection.h b/ProcessLib/SourceTerms/SourceTermCollection.h
new file mode 100644
index 00000000000..bfa7f5a3478
--- /dev/null
+++ b/ProcessLib/SourceTerms/SourceTermCollection.h
@@ -0,0 +1,39 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+#include "ProcessLib/ProcessVariable.h"
+#include "ProcessLib/SourceTerms/NodalSourceTerm.h"
+
+namespace ProcessLib
+{
+class SourceTermCollection final
+{
+public:
+    SourceTermCollection(
+        std::vector<std::unique_ptr<ParameterBase>> const& parameters)
+        : _parameters(parameters)
+    {
+    }
+
+    void integrateNodalSourceTerms(const double t, GlobalVector& b) const;
+
+    void addSourceTermsForProcessVariables(
+        std::vector<std::reference_wrapper<ProcessVariable>> const&
+            process_variables,
+        NumLib::LocalToGlobalIndexMap const& dof_table,
+        unsigned const integration_order);
+
+private:
+    std::vector<std::unique_ptr<NodalSourceTerm>> _source_terms;
+    std::vector<std::unique_ptr<ParameterBase>> const& _parameters;
+};
+
+}  // ProcessLib
-- 
GitLab