From 3b7daad4945bb83df1b0fe111cffe8a8e3d97bdd Mon Sep 17 00:00:00 2001
From: Yonghui <huangyh56@gmail.com>
Date: Sat, 13 May 2017 18:17:23 +0200
Subject: [PATCH] directly pass fluid properties rather than fluid
 density&viscosity

---
 .../CreateRichardsFlowMaterialProperties.cpp       | 14 ++++----------
 .../RichardsFlowMaterialProperties.cpp             | 12 ++++++------
 .../RichardsFlow/RichardsFlowMaterialProperties.h  |  8 ++++----
 3 files changed, 14 insertions(+), 20 deletions(-)

diff --git a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
index 3252bf4a003..da3485782c5 100644
--- a/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/CreateRichardsFlowMaterialProperties.cpp
@@ -13,6 +13,7 @@
 
 #include "BaseLib/reorderVector.h"
 #include "MaterialLib/Fluid/FluidProperty.h"
+#include "MaterialLib/Fluid/FluidProperties/CreateFluidProperties.h"
 #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
 #include "MaterialLib/PorousMedium/Storage/Storage.h"
 #include "MaterialLib/PorousMedium/UnsaturatedProperty/CapillaryPressure/CapillaryPressureSaturation.h"
@@ -41,15 +42,8 @@ createRichardsFlowMaterialProperties(
 
     //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__fluid}
     auto const& fluid_config = config.getConfigSubtree("fluid");
-
-    // Get fluid properties
-    //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__fluid_density}
-    auto const& rho_conf = fluid_config.getConfigSubtree("fluid_density");
-    auto fluid_density = MaterialLib::Fluid::createFluidDensityModel(rho_conf);
-
-    //! \ogs_file_param{prj__processes__process__RICHARDS_FLOW__material_property__fluid_viscosity}
-    auto const& mu_conf = fluid_config.getConfigSubtree("fluid_viscosity");
-    auto fluid_viscosity = MaterialLib::Fluid::createViscosityModel(mu_conf);
+    auto fluid_properties =
+        MaterialLib::Fluid::createFluidProperties(fluid_config);
 
     // Get porous properties
     std::vector<int> mat_ids;
@@ -112,7 +106,7 @@ createRichardsFlowMaterialProperties(
 
     return std::unique_ptr<RichardsFlowMaterialProperties>{
         new RichardsFlowMaterialProperties{
-            material_ids, std::move(fluid_density), std::move(fluid_viscosity),
+            material_ids, std::move(fluid_properties),
             std::move(intrinsic_permeability_models),
             std::move(porosity_models), std::move(storage_models),
             std::move(capillary_pressure_models),
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
index dfbc3e39633..98cca366a98 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
@@ -31,8 +31,7 @@ namespace RichardsFlow
 {
 RichardsFlowMaterialProperties::RichardsFlowMaterialProperties(
     boost::optional<MeshLib::PropertyVector<int> const&> const material_ids,
-    std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& fluid_density,
-    std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& fluid_viscosity,
+    std::unique_ptr<MaterialLib::Fluid::FluidProperties>&& fluid_properties,
     std::vector<Eigen::MatrixXd>&& intrinsic_permeability_models,
     std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>&&
         porosity_models,
@@ -45,8 +44,7 @@ RichardsFlowMaterialProperties::RichardsFlowMaterialProperties(
         std::unique_ptr<MaterialLib::PorousMedium::RelativePermeability>>&&
         relative_permeability_models)
     : _material_ids(material_ids),
-      _fluid_density(std::move(fluid_density)),
-      _fluid_viscosity(std::move(fluid_viscosity)),
+      _fluid_properties(std::move(fluid_properties)),
       _intrinsic_permeability_models(intrinsic_permeability_models),
       _porosity_models(std::move(porosity_models)),
       _storage_models(std::move(storage_models)),
@@ -73,7 +71,8 @@ double RichardsFlowMaterialProperties::getFluidDensity(const double p,
     ArrayType vars;
     vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
     vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p;
-    return _fluid_density->getValue(vars);
+    return _fluid_properties->getValue(
+        MaterialLib::Fluid::FluidPropertyType::Density, vars);
 }
 
 double RichardsFlowMaterialProperties::getFluidViscosity(const double p,
@@ -82,7 +81,8 @@ double RichardsFlowMaterialProperties::getFluidViscosity(const double p,
     ArrayType vars;
     vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::T)] = T;
     vars[static_cast<int>(MaterialLib::Fluid::PropertyVariableType::p)] = p;
-    return _fluid_viscosity->getValue(vars);
+    return _fluid_properties->getValue(
+        MaterialLib::Fluid::FluidPropertyType::Viscosity, vars);
 }
 
 Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability(
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
index 4021072673e..5a8a75ad5f0 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "MaterialLib/Fluid/FluidPropertyHeaders.h"
+#include "MaterialLib/Fluid/FluidProperties/FluidProperties.h"
 #include "MaterialLib/PhysicalConstant.h"
 #include "MaterialLib/PorousMedium/Porosity/Porosity.h"
 #include "MaterialLib/PorousMedium/PorousPropertyHeaders.h"
@@ -49,8 +50,7 @@ public:
 
     RichardsFlowMaterialProperties(
         boost::optional<MeshLib::PropertyVector<int> const&> const material_ids,
-        std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& fluid_density,
-        std::unique_ptr<MaterialLib::Fluid::FluidProperty>&& fluid_viscosity,
+        std::unique_ptr<MaterialLib::Fluid::FluidProperties>&& fluid_properties,
         std::vector<Eigen::MatrixXd>&& intrinsic_permeability_models,
         std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>&&
             porosity_models,
@@ -96,8 +96,8 @@ private:
     */
     boost::optional<MeshLib::PropertyVector<int> const&> const _material_ids;
 
-    std::unique_ptr<MaterialLib::Fluid::FluidProperty> const _fluid_density;
-    std::unique_ptr<MaterialLib::Fluid::FluidProperty> const _fluid_viscosity;
+    const std::unique_ptr<MaterialLib::Fluid::FluidProperties>
+        _fluid_properties;
 
     std::vector<Eigen::MatrixXd> const _intrinsic_permeability_models;
     std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>> const
-- 
GitLab