From f003c3c03b0c32bdc15d7480a29c6df9da2b4b54 Mon Sep 17 00:00:00 2001
From: Dmitri Naumov <dmitri.naumov@ufz.de>
Date: Wed, 31 Jul 2019 18:35:43 +0200
Subject: [PATCH] Permeability; Return matrix by value.

This avoids the mutable member. The data is computed
on every call anyway.
---
 MaterialLib/PorousMedium/Permeability/Permeability.h     | 8 ++++----
 .../TwoPhaseFlowWithPPMaterialProperties.cpp             | 2 +-
 .../TwoPhaseFlowWithPPMaterialProperties.h               | 9 ++++-----
 ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp   | 2 +-
 ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h     | 9 ++++-----
 .../RichardsFlow/RichardsFlowMaterialProperties.cpp      | 2 +-
 ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h | 9 ++++-----
 .../TwoPhaseFlowWithPPMaterialProperties.cpp             | 2 +-
 .../TwoPhaseFlowWithPPMaterialProperties.h               | 9 ++++-----
 .../TwoPhaseFlowWithPrhoMaterialProperties.cpp           | 2 +-
 .../TwoPhaseFlowWithPrhoMaterialProperties.h             | 9 ++++-----
 11 files changed, 29 insertions(+), 34 deletions(-)

diff --git a/MaterialLib/PorousMedium/Permeability/Permeability.h b/MaterialLib/PorousMedium/Permeability/Permeability.h
index 21883a95cfd..c34a1780aa9 100644
--- a/MaterialLib/PorousMedium/Permeability/Permeability.h
+++ b/MaterialLib/PorousMedium/Permeability/Permeability.h
@@ -50,10 +50,10 @@ public:
      *  @param variable    A variable with any double type value.
      *  @param temperature Temperature with any double type value.
      */
-    Eigen::MatrixXd const& getValue(const double t,
-                                    ParameterLib::SpatialPosition const& pos,
-                                    const double variable,
-                                    const double temperature) const
+    Eigen::MatrixXd getValue(const double t,
+                             ParameterLib::SpatialPosition const& pos,
+                             const double variable,
+                             const double temperature) const
     {
         (void)variable;
         (void)temperature;
diff --git a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
index 5a50c0fd37d..070e6218e21 100644
--- a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.cpp
@@ -118,7 +118,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getGasViscosity(
     return _gas_viscosity->getValue(vars);
 }
 
-Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
+Eigen::MatrixXd TwoPhaseFlowWithPPMaterialProperties::getPermeability(
     const int material_id, const double t,
     const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
diff --git a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h
index b6f2811a399..7df516049da 100644
--- a/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h
+++ b/MaterialLib/TwoPhaseModels/TwoPhaseFlowWithPPMaterialProperties.h
@@ -79,11 +79,10 @@ public:
 
     int getMaterialID(const std::size_t element_id) const;
 
-    Eigen::MatrixXd const& getPermeability(
-        const int material_id,
-        const double t,
-        const ParameterLib::SpatialPosition& pos,
-        const int dim) const;
+    Eigen::MatrixXd getPermeability(const int material_id,
+                                    const double t,
+                                    const ParameterLib::SpatialPosition& pos,
+                                    const int dim) const;
 
     double getPorosity(const int material_id, const double t,
                        const ParameterLib::SpatialPosition& pos, const double p,
diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
index 908b2dd0f2b..bc5680c8e61 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
+++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.cpp
@@ -95,7 +95,7 @@ double LiquidFlowMaterialProperties::getMassCoefficient(
     return porosity * drho_dp / rho + storage;
 }
 
-Eigen::MatrixXd const& LiquidFlowMaterialProperties::getPermeability(
+Eigen::MatrixXd LiquidFlowMaterialProperties::getPermeability(
     const int material_id, const double t,
     const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
diff --git a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
index 09eb9d85e24..6e909a15ccf 100644
--- a/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
+++ b/ProcessLib/LiquidFlow/LiquidFlowMaterialProperties.h
@@ -91,11 +91,10 @@ public:
                               const double porosity_variable,
                               const double storage_variable) const;
 
-    Eigen::MatrixXd const& getPermeability(
-        const int material_id,
-        const double t,
-        const ParameterLib::SpatialPosition& pos,
-        const int dim) const;
+    Eigen::MatrixXd getPermeability(const int material_id,
+                                    const double t,
+                                    const ParameterLib::SpatialPosition& pos,
+                                    const int dim) const;
 
     double getLiquidDensity(const double p, const double T) const;
 
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
index 62200a5ebac..a4917f16e85 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.cpp
@@ -85,7 +85,7 @@ double RichardsFlowMaterialProperties::getFluidViscosity(const double p,
         MaterialLib::Fluid::FluidPropertyType::Viscosity, vars);
 }
 
-Eigen::MatrixXd const& RichardsFlowMaterialProperties::getPermeability(
+Eigen::MatrixXd RichardsFlowMaterialProperties::getPermeability(
     const int material_id, const double t,
     const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
diff --git a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
index 7b7f8683921..085423fda36 100644
--- a/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
+++ b/ProcessLib/RichardsFlow/RichardsFlowMaterialProperties.h
@@ -66,11 +66,10 @@ public:
 
     int getMaterialID(const std::size_t element_id);
 
-    Eigen::MatrixXd const& getPermeability(
-        const int material_id,
-        const double t,
-        const ParameterLib::SpatialPosition& pos,
-        const int dim) const;
+    Eigen::MatrixXd getPermeability(const int material_id,
+                                    const double t,
+                                    const ParameterLib::SpatialPosition& pos,
+                                    const int dim) const;
 
     double getPorosity(const int material_id, const double t,
                        const ParameterLib::SpatialPosition& pos, const double p,
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
index eb5047f9c34..2d3ec26b666 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.cpp
@@ -120,7 +120,7 @@ double TwoPhaseFlowWithPPMaterialProperties::getGasViscosity(
     return _gas_viscosity->getValue(vars);
 }
 
-Eigen::MatrixXd const& TwoPhaseFlowWithPPMaterialProperties::getPermeability(
+Eigen::MatrixXd TwoPhaseFlowWithPPMaterialProperties::getPermeability(
     const int material_id, const double t,
     const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
diff --git a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h
index 21611b96e87..1531e1f6cb1 100644
--- a/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPP/TwoPhaseFlowWithPPMaterialProperties.h
@@ -70,11 +70,10 @@ public:
 
     int getMaterialID(const std::size_t element_id);
 
-    Eigen::MatrixXd const& getPermeability(
-        const int material_id,
-        const double t,
-        const ParameterLib::SpatialPosition& pos,
-        const int dim) const;
+    Eigen::MatrixXd getPermeability(const int material_id,
+                                    const double t,
+                                    const ParameterLib::SpatialPosition& pos,
+                                    const int dim) const;
 
     double getPorosity(const int material_id, const double t,
                        const ParameterLib::SpatialPosition& pos, const double p,
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
index c361307d640..290619c15f6 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.cpp
@@ -125,7 +125,7 @@ double TwoPhaseFlowWithPrhoMaterialProperties::getGasViscosity(
     return _gas_viscosity->getValue(vars);
 }
 
-Eigen::MatrixXd const& TwoPhaseFlowWithPrhoMaterialProperties::getPermeability(
+Eigen::MatrixXd TwoPhaseFlowWithPrhoMaterialProperties::getPermeability(
     const int material_id, const double t,
     const ParameterLib::SpatialPosition& pos, const int /*dim*/) const
 {
diff --git a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
index 49fca9ce8f0..cc66d0c26d5 100644
--- a/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
+++ b/ProcessLib/TwoPhaseFlowWithPrho/TwoPhaseFlowWithPrhoMaterialProperties.h
@@ -63,11 +63,10 @@ public:
 
     int getMaterialID(const std::size_t element_id);
 
-    Eigen::MatrixXd const& getPermeability(
-        const int material_id,
-        const double t,
-        const ParameterLib::SpatialPosition& pos,
-        const int dim) const;
+    Eigen::MatrixXd getPermeability(const int material_id,
+                                    const double t,
+                                    const ParameterLib::SpatialPosition& pos,
+                                    const int dim) const;
 
     double getPorosity(const int material_id, const double t,
                        const ParameterLib::SpatialPosition& pos, const double p,
-- 
GitLab