From 287d370cfc915be8c171799e8e1733973b19f0b7 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <github@naumov.de>
Date: Mon, 15 Jan 2018 20:23:24 +0100
Subject: [PATCH] [PL] Add IntegrationPointWriter.

Add the interface and add a vector of IntegrationPointWriter's to
process base class.

Include corresponing getter. The integration point writer are populated
in specific process' constructors.
---
 ProcessLib/Output/IntegrationPointWriter.h | 24 ++++++++++++++++++++++
 ProcessLib/Process.h                       | 13 ++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100644 ProcessLib/Output/IntegrationPointWriter.h

diff --git a/ProcessLib/Output/IntegrationPointWriter.h b/ProcessLib/Output/IntegrationPointWriter.h
new file mode 100644
index 00000000000..b442d107f8d
--- /dev/null
+++ b/ProcessLib/Output/IntegrationPointWriter.h
@@ -0,0 +1,24 @@
+/**
+ * \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
+
+namespace ProcessLib
+{
+struct IntegrationPointWriter
+{
+    virtual ~IntegrationPointWriter() = default;
+
+    virtual int numberOfComponents() const = 0;
+    virtual int integrationOrder() const = 0;
+    virtual std::string name() const = 0;
+    virtual std::vector<std::vector<double>> values() const = 0;
+};
+
+}  // namespace ProcessLib
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 467a04085e6..1f9d078b4eb 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -19,6 +19,7 @@
 #include "ProcessLib/SourceTerms/SourceTermCollection.h"
 #include "ProcessLib/Output/CachedSecondaryVariable.h"
 #include "ProcessLib/Output/ExtrapolatorData.h"
+#include "ProcessLib/Output/IntegrationPointWriter.h"
 #include "ProcessLib/Output/SecondaryVariable.h"
 #include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/SourceTerms/NodalSourceTerm.h"
@@ -126,6 +127,12 @@ public:
         return _secondary_variables;
     }
 
+    std::vector<std::unique_ptr<IntegrationPointWriter>> const&
+    getIntegrationPointWriter() const
+    {
+        return _integration_point_writer;
+    }
+
     // Used as a call back for CalculateSurfaceFlux process.
 
     virtual std::vector<double> getFlux(std::size_t /*element_id*/,
@@ -264,6 +271,12 @@ protected:
     /// implemented in MathLib::GaussLegendre.
     unsigned const _integration_order;
 
+    /// An optional vector containing descriptions for integration point data
+    /// output and setting of the integration point initial conditions.
+    /// The integration point writer are implemented in specific processes.
+    std::vector<std::unique_ptr<IntegrationPointWriter>>
+        _integration_point_writer;
+
     GlobalSparsityPattern _sparsity_pattern;
 
 private:
-- 
GitLab