From d68db85fa6549bed12cf5ccb3cabf1b9d28be856 Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Mon, 6 Jan 2020 15:03:51 +0100
Subject: [PATCH] [PL/LF] Create surface flux data in LiquidFlow.

- Forward the output folder and mesh vector from ProjectData to CreateLiquidFlow.
- Create an optional SurfaceFluxData object.
---
 Applications/ApplicationsLib/ProjectData.cpp     |  2 +-
 .../LiquidFlow/CreateLiquidFlowProcess.cpp       | 16 ++++++++++++++--
 ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h  |  4 +++-
 ProcessLib/LiquidFlow/LiquidFlowProcess.cpp      |  8 ++++++--
 ProcessLib/LiquidFlow/LiquidFlowProcess.h        |  6 +++++-
 5 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/Applications/ApplicationsLib/ProjectData.cpp b/Applications/ApplicationsLib/ProjectData.cpp
index 054015bfee0..e9d3bc5bc60 100644
--- a/Applications/ApplicationsLib/ProjectData.cpp
+++ b/Applications/ApplicationsLib/ProjectData.cpp
@@ -519,7 +519,7 @@ void ProjectData::parseProcesses(BaseLib::ConfigTree const& processes_config,
             process = ProcessLib::LiquidFlow::createLiquidFlowProcess(
                 name, *_mesh_vec[0], std::move(jacobian_assembler),
                 _process_variables, _parameters, integration_order,
-                process_config);
+                process_config, _mesh_vec, output_directory);
         }
         else
 #endif
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
index e35096b9164..4ae75493d11 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.cpp
@@ -31,7 +31,9 @@ std::unique_ptr<Process> createLiquidFlowProcess(
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config)
+    BaseLib::ConfigTree const& config,
+    std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
+    std::string const& output_directory)
 {
     //! \ogs_file_param{prj__processes__process__type}
     config.checkConfigParameter("type", "LIQUID_FLOW");
@@ -99,11 +101,21 @@ std::unique_ptr<Process> createLiquidFlowProcess(
         INFO("The liquid flow is in homogeneous porous media.");
     }
 
+    std::unique_ptr<ProcessLib::SurfaceFluxData> surfaceflux;
+    auto calculatesurfaceflux_config =
+        //! \ogs_file_param{prj__processes__process__calculatesurfaceflux}
+        config.getConfigSubtreeOptional("calculatesurfaceflux");
+    if (calculatesurfaceflux_config)
+    {
+        surfaceflux = ProcessLib::SurfaceFluxData::createSurfaceFluxData(
+            *calculatesurfaceflux_config, meshes, output_directory);
+    }
+
     return std::make_unique<LiquidFlowProcess>(
         std::move(name), mesh, std::move(jacobian_assembler), parameters,
         integration_order, std::move(process_variables),
         std::move(secondary_variables), material_ids, gravity_axis_id, g,
-        reference_temperature, mat_config);
+        reference_temperature, mat_config, std::move(surfaceflux));
 }
 
 }  // namespace LiquidFlow
diff --git a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h
index 18adc164b64..db1ff098a5d 100644
--- a/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h
+++ b/ProcessLib/LiquidFlow/CreateLiquidFlowProcess.h
@@ -26,6 +26,8 @@ std::unique_ptr<Process> createLiquidFlowProcess(
     std::vector<ProcessVariable> const& variables,
     std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
     unsigned const integration_order,
-    BaseLib::ConfigTree const& config);
+    BaseLib::ConfigTree const& config,
+    std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes,
+    std::string const& output_directory);
 }  // namespace LiquidFlow
 }  // namespace ProcessLib
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
index bc76bfd561e..2f83c129e76 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.cpp
@@ -18,6 +18,8 @@
 #include "LiquidFlowLocalAssembler.h"
 #include "LiquidFlowMaterialProperties.h"
 #include "MeshLib/PropertyVector.h"
+// TODO(TF) used for output of flux, if output classes are ready this has to be changed
+#include "MeshLib/IO/writeMeshToFile.h"
 #include "ProcessLib/Utils/CreateLocalAssemblers.h"
 
 namespace ProcessLib
@@ -37,7 +39,8 @@ LiquidFlowProcess::LiquidFlowProcess(
     int const gravitational_axis_id,
     double const gravitational_acceleration,
     double const reference_temperature,
-    BaseLib::ConfigTree const& config)
+    BaseLib::ConfigTree const& config,
+    std::unique_ptr<ProcessLib::SurfaceFluxData>&& surfaceflux)
     : Process(std::move(name), mesh, std::move(jacobian_assembler), parameters,
               integration_order, std::move(process_variables),
               std::move(secondary_variables)),
@@ -45,7 +48,8 @@ LiquidFlowProcess::LiquidFlowProcess(
       _gravitational_acceleration(gravitational_acceleration),
       _reference_temperature(reference_temperature),
       _material_properties(
-          createLiquidFlowMaterialProperties(config, parameters, material_ids))
+          createLiquidFlowMaterialProperties(config, parameters, material_ids)),
+      _surfaceflux(std::move(surfaceflux))
 {
     DBUG("Create Liquid flow process.");
 }
diff --git a/ProcessLib/LiquidFlow/LiquidFlowProcess.h b/ProcessLib/LiquidFlow/LiquidFlowProcess.h
index 719791cc43c..5501699f56c 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowProcess.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowProcess.h
@@ -19,6 +19,7 @@
 #include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
 #include "NumLib/DOF/LocalToGlobalIndexMap.h"
 #include "ProcessLib/Process.h"
+#include "ProcessLib/SurfaceFlux/SurfaceFluxData.h"
 
 namespace MeshLib
 {
@@ -69,7 +70,8 @@ public:
         int const gravitational_axis_id,
         double const gravitational_acceleration,
         double const reference_temperature,
-        BaseLib::ConfigTree const& config);
+        BaseLib::ConfigTree const& config,
+        std::unique_ptr<ProcessLib::SurfaceFluxData>&& surfaceflux);
 
     void computeSecondaryVariableConcrete(double const t,
                                           GlobalVector const& x,
@@ -105,6 +107,8 @@ private:
 
     std::vector<std::unique_ptr<LiquidFlowLocalAssemblerInterface>>
         _local_assemblers;
+
+    std::unique_ptr<ProcessLib::SurfaceFluxData> _surfaceflux;
 };
 
 }  // namespace LiquidFlow
-- 
GitLab