From 8a98c48ae63490ac1465be0619c027c6728f0d6c Mon Sep 17 00:00:00 2001
From: Thomas Fischer <thomas.fischer@ufz.de>
Date: Wed, 7 Jun 2017 12:45:33 +0200
Subject: [PATCH] [PL/HT] Use FluidProperties.

FluidProperties is a process independent container
for common fluid properties like density, viscosity
and specific heat capacity.
---
 ProcessLib/HT/CreateHTProcess.cpp | 61 +++++++++++--------------------
 ProcessLib/HT/HTFEM.h             | 18 +++++----
 ProcessLib/HT/HTProcessData.h     | 22 +++--------
 3 files changed, 38 insertions(+), 63 deletions(-)

diff --git a/ProcessLib/HT/CreateHTProcess.cpp b/ProcessLib/HT/CreateHTProcess.cpp
index 7250c087515..0b33009a967 100644
--- a/ProcessLib/HT/CreateHTProcess.cpp
+++ b/ProcessLib/HT/CreateHTProcess.cpp
@@ -9,8 +9,7 @@
 
 #include "CreateHTProcess.h"
 
-#include "MaterialLib/Fluid/Density/CreateFluidDensityModel.h"
-#include "MaterialLib/Fluid/Viscosity/CreateViscosityModel.h"
+#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
 
 #include "ProcessLib/Parameter/ConstantParameter.h"
 #include "ProcessLib/Utils/ParseSecondaryVariables.h"
@@ -58,22 +57,8 @@ std::unique_ptr<Process> createHTProcess(
 
     //! \ogs_file_param{prj__processes__process__HT__fluid}
     auto const& fluid_config = config.getConfigSubtree("fluid");
-    //! \ogs_file_param{prj__processes__process__HT__fluid__viscosity}
-    auto const& viscosity_conf = fluid_config.getConfigSubtree("viscosity");
-    auto viscosity_model =
-        MaterialLib::Fluid::createViscosityModel(viscosity_conf);
-
-    // Parameter for the density of the solid.
-    auto& density_solid = findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HT__density_solid}
-        "density_solid", parameters, 1);
-    DBUG("Use \'%s\' as density_solid parameter.", density_solid.name.c_str());
-
-    //! \ogs_file_param{prj__processes__process__HT__fluid__density}
-    auto const& fluid_density_conf = fluid_config.getConfigSubtree("density");
-    auto fluid_density =
-        MaterialLib::Fluid::createFluidDensityModel(fluid_density_conf);
+    auto fluid_properties =
+        MaterialLib::Fluid::createFluidProperties(fluid_config);
 
     // Parameter for the density of the fluid.
     auto& fluid_reference_density= findParameter<double>(
@@ -83,6 +68,13 @@ std::unique_ptr<Process> createHTProcess(
     DBUG("Use \'%s\' as fluid_reference_density parameter.",
          fluid_reference_density.name.c_str());
 
+    // Parameter for the density of the solid.
+    auto& density_solid = findParameter<double>(
+        config,
+        //! \ogs_file_param_special{prj__processes__process__HT__density_solid}
+        "density_solid", parameters, 1);
+    DBUG("Use \'%s\' as density_solid parameter.", density_solid.name.c_str());
+
     // Parameter for the specific heat capacity of the solid.
     auto& specific_heat_capacity_solid = findParameter<double>(
         config,
@@ -91,14 +83,6 @@ std::unique_ptr<Process> createHTProcess(
     DBUG("Use \'%s\' as specific_heat_capacity_solid parameter.",
          specific_heat_capacity_solid.name.c_str());
 
-    // Parameter for the specific heat capacity of the fluid.
-    auto& specific_heat_capacity_fluid = findParameter<double>(
-        config,
-        //! \ogs_file_param_special{prj__processes__process__HT__specific_heat_capacity_fluid}
-        "specific_heat_capacity_fluid", parameters, 1);
-    DBUG("Use \'%s\' as specific_heat_capacity_fluid parameter.",
-         specific_heat_capacity_fluid.name.c_str());
-
     // Parameter for the thermal conductivity of the solid (only one scalar per
     // element, i.e., the isotropic case is handled at the moment)
     auto& thermal_dispersivity_longitudinal = findParameter<double>(
@@ -152,20 +136,17 @@ std::unique_ptr<Process> createHTProcess(
         std::copy_n(b.data(), b.size(), specific_body_force.data());
     }
 
-    HTProcessData process_data{
-        std::move(porous_media_properties),
-        std::move(viscosity_model),
-        density_solid,
-        fluid_reference_density,
-        std::move(fluid_density),
-        thermal_dispersivity_longitudinal,
-        thermal_dispersivity_transversal,
-        specific_heat_capacity_solid,
-        specific_heat_capacity_fluid,
-        thermal_conductivity_solid,
-        thermal_conductivity_fluid,
-        specific_body_force,
-        has_gravity};
+    HTProcessData process_data{std::move(porous_media_properties),
+                               density_solid,
+                               fluid_reference_density,
+                               std::move(fluid_properties),
+                               thermal_dispersivity_longitudinal,
+                               thermal_dispersivity_transversal,
+                               specific_heat_capacity_solid,
+                               thermal_conductivity_solid,
+                               thermal_conductivity_fluid,
+                               specific_body_force,
+                               has_gravity};
 
     SecondaryVariableCollection secondary_variables;
 
diff --git a/ProcessLib/HT/HTFEM.h b/ProcessLib/HT/HTFEM.h
index b7afdf6fc20..8d9a61ae3b5 100644
--- a/ProcessLib/HT/HTFEM.h
+++ b/ProcessLib/HT/HTFEM.h
@@ -194,8 +194,14 @@ public:
 
             auto const specific_heat_capacity_solid =
                 _process_data.specific_heat_capacity_solid(t, pos)[0];
+
+            vars[static_cast<int>(
+                MaterialLib::Fluid::PropertyVariableType::T)] = T_int_pt;
+            vars[static_cast<int>(
+                MaterialLib::Fluid::PropertyVariableType::p)] = p_int_pt;
             auto const specific_heat_capacity_fluid =
-                _process_data.specific_heat_capacity_fluid(t, pos)[0];
+                _process_data.fluid_properties->getValue(
+                    MaterialLib::Fluid::FluidPropertyType::HeatCapacity, vars);
 
             auto const thermal_dispersivity_longitudinal =
                 _process_data.thermal_dispersivity_longitudinal(t, pos)[0];
@@ -211,16 +217,14 @@ public:
             auto Bp = local_b.template block<num_nodes, 1>(num_nodes, 0);
 
             // Use the fluid density model to compute the density
-            vars[static_cast<int>(
-                MaterialLib::Fluid::PropertyVariableType::T)] = T_int_pt;
-            vars[static_cast<int>(
-                MaterialLib::Fluid::PropertyVariableType::p)] = p_int_pt;
             auto const density_water_T =
-                _process_data.fluid_density->getValue(vars);
+                _process_data.fluid_properties->getValue(
+                    MaterialLib::Fluid::FluidPropertyType::Density, vars);
 
             // Use the viscosity model to compute the viscosity
             auto const viscosity =
-                _process_data.viscosity_model->getValue(vars);
+                _process_data.fluid_properties->getValue(
+                    MaterialLib::Fluid::FluidPropertyType::Viscosity, vars);
             GlobalDimMatrixType perm_over_visc =
                 intrinsic_permeability / viscosity;
 
diff --git a/ProcessLib/HT/HTProcessData.h b/ProcessLib/HT/HTProcessData.h
index 906ef3e6023..4052667b6b8 100644
--- a/ProcessLib/HT/HTProcessData.h
+++ b/ProcessLib/HT/HTProcessData.h
@@ -12,10 +12,7 @@
 #include <memory>
 #include <utility>
 
-#include "MaterialLib/Fluid/FluidProperty.h"
-#include "MaterialLib/PorousMedium/Porosity/Porosity.h"
-#include "MaterialLib/PorousMedium/Storage/Storage.h"
-
+#include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
 #include "PorousMediaProperties.h"
 
 namespace ProcessLib
@@ -29,25 +26,22 @@ struct HTProcessData
 {
     HTProcessData(
         PorousMediaProperties&& porous_media_properties_,
-        std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& viscosity_model_,
         ProcessLib::Parameter<double> const& density_solid_,
         ProcessLib::Parameter<double> const& fluid_reference_density_,
-        std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& fluid_density_,
+        std::unique_ptr<MaterialLib::Fluid::FluidProperties>&&
+            fluid_properties_,
         ProcessLib::Parameter<double> const& thermal_dispersivity_longitudinal_,
         ProcessLib::Parameter<double> const& thermal_dispersivity_transversal_,
         ProcessLib::Parameter<double> const& specific_heat_capacity_solid_,
-        ProcessLib::Parameter<double> const& specific_heat_capacity_fluid_,
         ProcessLib::Parameter<double> const& thermal_conductivity_solid_,
         ProcessLib::Parameter<double> const& thermal_conductivity_fluid_,
         Eigen::VectorXd specific_body_force_,
         bool const has_gravity_)
         : porous_media_properties(std::move(porous_media_properties_)),
-          viscosity_model(std::move(viscosity_model_)),
           density_solid(density_solid_),
           fluid_reference_density(fluid_reference_density_),
-          fluid_density(std::move(fluid_density_)),
+          fluid_properties(std::move(fluid_properties_)),
           specific_heat_capacity_solid(specific_heat_capacity_solid_),
-          specific_heat_capacity_fluid(specific_heat_capacity_fluid_),
           thermal_dispersivity_longitudinal(thermal_dispersivity_longitudinal_),
           thermal_dispersivity_transversal(thermal_dispersivity_transversal_),
           thermal_conductivity_solid(thermal_conductivity_solid_),
@@ -59,12 +53,10 @@ struct HTProcessData
 
     HTProcessData(HTProcessData&& other)
         : porous_media_properties(std::move(other.porous_media_properties)),
-          viscosity_model(other.viscosity_model.release()),
           density_solid(other.density_solid),
           fluid_reference_density(other.fluid_reference_density),
-          fluid_density(other.fluid_density.release()),
+          fluid_properties(other.fluid_properties.release()),
           specific_heat_capacity_solid(other.specific_heat_capacity_solid),
-          specific_heat_capacity_fluid(other.specific_heat_capacity_fluid),
           thermal_dispersivity_longitudinal(
               other.thermal_dispersivity_longitudinal),
           thermal_dispersivity_transversal(
@@ -86,12 +78,10 @@ struct HTProcessData
     void operator=(HTProcessData&&) = delete;
 
     PorousMediaProperties porous_media_properties;
-    std::unique_ptr<MaterialLib::Fluid::FluidProperty> viscosity_model;
     Parameter<double> const& density_solid;
     Parameter<double> const& fluid_reference_density;
-    std::unique_ptr<MaterialLib::Fluid::FluidProperty> fluid_density;
+    std::unique_ptr<MaterialLib::Fluid::FluidProperties> fluid_properties;
     Parameter<double> const& specific_heat_capacity_solid;
-    Parameter<double> const& specific_heat_capacity_fluid;
     Parameter<double> const& thermal_dispersivity_longitudinal;
     Parameter<double> const& thermal_dispersivity_transversal;
     Parameter<double> const& thermal_conductivity_solid;
-- 
GitLab