From 168dfee8c049f94b19637ee65b4f75a5de7490f6 Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Tue, 10 Jul 2018 11:53:03 +0200
Subject: [PATCH] [fluidstate] state scalar type publicly

---
 dumux/material/fluidstates/2p2c.hh                |  4 +++-
 dumux/material/fluidstates/compositional.hh       |  5 ++++-
 dumux/material/fluidstates/immiscible.hh          |  5 ++++-
 .../material/fluidstates/isothermalimmiscible.hh  |  6 +++++-
 dumux/material/fluidstates/nonequilibrium.hh      |  5 ++++-
 .../material/fluidstates/nonequilibriumenergy.hh  |  9 ++++++---
 dumux/material/fluidstates/nonequilibriummass.hh  |  9 ++++++---
 dumux/material/fluidstates/pressureoverlay.hh     |  5 ++++-
 dumux/material/fluidstates/pseudo1p2c.hh          |  7 +++++--
 dumux/material/fluidstates/saturationoverlay.hh   |  5 ++++-
 dumux/material/fluidstates/temperatureoverlay.hh  |  5 ++++-
 test/material/fluidsystems/checkfluidsystem.hh    | 15 ++++++---------
 test/material/fluidsystems/test_fluidsystems.cc   |  6 +++---
 13 files changed, 58 insertions(+), 28 deletions(-)

diff --git a/dumux/material/fluidstates/2p2c.hh b/dumux/material/fluidstates/2p2c.hh
index c628adde8c..1642a873a1 100644
--- a/dumux/material/fluidstates/2p2c.hh
+++ b/dumux/material/fluidstates/2p2c.hh
@@ -32,7 +32,7 @@ namespace Dumux {
  *        sequential 2p2c model.
  * This boils down to so-called "flash calculation", in this case isothermal and isobaric.
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class TwoPTwoCFluidState
 {
 public:
@@ -47,6 +47,8 @@ public:
     };
 
 public:
+    //! export the scalar type
+    using Scalar = ScalarType;
 
     // comply with new style 2p2c models
     int wettingPhase() const
diff --git a/dumux/material/fluidstates/compositional.hh b/dumux/material/fluidstates/compositional.hh
index 35f58e3dc2..6a92bc71d4 100644
--- a/dumux/material/fluidstates/compositional.hh
+++ b/dumux/material/fluidstates/compositional.hh
@@ -40,13 +40,16 @@ namespace Dumux {
  *        multi-phase, multi-component fluid system assuming
  *        thermodynamic equilibrium.
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class CompositionalFluidState
 {
 public:
     enum { numPhases = FluidSystem::numPhases };
     enum { numComponents = FluidSystem::numComponents };
 
+    //! export the scalar type
+    using Scalar = ScalarType;
+
     //! default constructor
     CompositionalFluidState() = default;
 
diff --git a/dumux/material/fluidstates/immiscible.hh b/dumux/material/fluidstates/immiscible.hh
index ec7b05b630..03f7d698c6 100644
--- a/dumux/material/fluidstates/immiscible.hh
+++ b/dumux/material/fluidstates/immiscible.hh
@@ -37,7 +37,7 @@ namespace Dumux {
  *        multi-phase fluid system assuming immiscibility and
  *        thermodynamic equilibrium.
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class ImmiscibleFluidState
 {
 public:
@@ -47,6 +47,9 @@ public:
                   "The number of phases must be equal to the number of "
                   "components if immiscibility is assumed!");
 
+    //! export the scalar type
+    using Scalar = ScalarType;
+
     //! default constructor
     ImmiscibleFluidState() = default;
 
diff --git a/dumux/material/fluidstates/isothermalimmiscible.hh b/dumux/material/fluidstates/isothermalimmiscible.hh
index 6885d05baf..41d89e189b 100644
--- a/dumux/material/fluidstates/isothermalimmiscible.hh
+++ b/dumux/material/fluidstates/isothermalimmiscible.hh
@@ -37,11 +37,15 @@ namespace Dumux {
  *        multi-phase fluid system assuming immiscibility and
  *        thermodynamic equilibrium.
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class IsothermalImmiscibleFluidState
 {
 public:
     static constexpr int numPhases = FluidSystem::numPhases;
+    static constexpr int numComponents = FluidSystem::numComponents;
+
+    //! export the scalar type
+    using Scalar = ScalarType;
 
     //! default constructor
     IsothermalImmiscibleFluidState() = default;
diff --git a/dumux/material/fluidstates/nonequilibrium.hh b/dumux/material/fluidstates/nonequilibrium.hh
index 0c1a34ad5f..879dd66232 100644
--- a/dumux/material/fluidstates/nonequilibrium.hh
+++ b/dumux/material/fluidstates/nonequilibrium.hh
@@ -38,13 +38,16 @@ namespace Dumux {
  *        multi-phase, multi-component fluid system without using
  *        any assumptions.
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class NonEquilibriumFluidState
 {
 public:
     static constexpr int numPhases = FluidSystem::numPhases;
     static constexpr int numComponents = FluidSystem::numComponents;
 
+    //! export the scalar type
+    using Scalar = ScalarType;
+
     /*****************************************************
      * Generic access to fluid properties (No assumptions
      * on thermodynamic equilibrium required)
diff --git a/dumux/material/fluidstates/nonequilibriumenergy.hh b/dumux/material/fluidstates/nonequilibriumenergy.hh
index c9584df750..4c641647b6 100644
--- a/dumux/material/fluidstates/nonequilibriumenergy.hh
+++ b/dumux/material/fluidstates/nonequilibriumenergy.hh
@@ -40,15 +40,18 @@ namespace Dumux {
  *        - local thermal non-equilibrium
  *        - local chemical equilibrium
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class NonEquilibriumEnergyFluidState
-: public NonEquilibriumFluidState<Scalar, FluidSystem>
+: public NonEquilibriumFluidState<ScalarType, FluidSystem>
 {
-    using ParentType = NonEquilibriumFluidState<Scalar, FluidSystem>;
+    using ParentType = NonEquilibriumFluidState<ScalarType, FluidSystem>;
 public:
     enum { numPhases = FluidSystem::numPhases };
     enum { numComponents = FluidSystem::numComponents };
 
+    //! export the scalar type
+    using Scalar = ScalarType;
+
     using ParentType::ParentType;
 
     /*****************************************************
diff --git a/dumux/material/fluidstates/nonequilibriummass.hh b/dumux/material/fluidstates/nonequilibriummass.hh
index c450d2fc3b..db4012bfaa 100644
--- a/dumux/material/fluidstates/nonequilibriummass.hh
+++ b/dumux/material/fluidstates/nonequilibriummass.hh
@@ -40,15 +40,18 @@ namespace Dumux {
  *        - local thermal equilibrium
  *        - local chemical non-equilibrium
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class NonEquilibriumMassFluidState
-: public NonEquilibriumFluidState<Scalar, FluidSystem>
+: public NonEquilibriumFluidState<ScalarType, FluidSystem>
 {
-    using ParentType = NonEquilibriumFluidState<Scalar, FluidSystem>;
+    using ParentType = NonEquilibriumFluidState<ScalarType, FluidSystem>;
 public:
     enum { numPhases = FluidSystem::numPhases };
     enum { numComponents = FluidSystem::numComponents };
 
+    //! export the scalar type
+    using Scalar = ScalarType;
+
     using ParentType::ParentType;
 
     /*****************************************************
diff --git a/dumux/material/fluidstates/pressureoverlay.hh b/dumux/material/fluidstates/pressureoverlay.hh
index 5ee250deda..502a09ee6d 100644
--- a/dumux/material/fluidstates/pressureoverlay.hh
+++ b/dumux/material/fluidstates/pressureoverlay.hh
@@ -34,13 +34,16 @@ namespace Dumux {
  *        pressures and takes all other quantities from an other
  *        fluid state.
  */
-template <class Scalar, class FluidState>
+template <class FluidState>
 class PressureOverlayFluidState
 {
 public:
     enum { numPhases = FluidState::numPhases };
     enum { numComponents = FluidState::numComponents };
 
+    //! export the scalar type
+    using Scalar = typename FluidState::Scalar;
+
     /*!
      * \brief Constructor
      *
diff --git a/dumux/material/fluidstates/pseudo1p2c.hh b/dumux/material/fluidstates/pseudo1p2c.hh
index 81213dd393..cd33f6fd46 100644
--- a/dumux/material/fluidstates/pseudo1p2c.hh
+++ b/dumux/material/fluidstates/pseudo1p2c.hh
@@ -39,7 +39,7 @@ namespace Dumux {
  *  The "flash" calculation routines are in the sequential flash constrain solver, see
  *  CompositionalFlash .
  */
-template <class Scalar, class FluidSystem>
+template <class ScalarType, class FluidSystem>
 class PseudoOnePTwoCFluidState
 {
 
@@ -48,6 +48,10 @@ public:
         numPhases = FluidSystem::numPhases,
         numComponents = FluidSystem::numComponents
     };
+
+    //! export the scalar type
+    using Scalar = ScalarType;
+
     enum {
         phase0Idx = FluidSystem::phase0Idx,
         phase1Idx = FluidSystem::phase1Idx,
@@ -56,7 +60,6 @@ public:
         comp1Idx = FluidSystem::comp1Idx
     };
 
-public:
     /*! \name Acess functions */
     //@{
     /*!
diff --git a/dumux/material/fluidstates/saturationoverlay.hh b/dumux/material/fluidstates/saturationoverlay.hh
index c3d2f81a9d..f930a77caf 100644
--- a/dumux/material/fluidstates/saturationoverlay.hh
+++ b/dumux/material/fluidstates/saturationoverlay.hh
@@ -34,13 +34,16 @@ namespace Dumux {
  *        saturations and takes all other quantities from an other
  *        fluid state.
  */
-template <class Scalar, class FluidState>
+template <class FluidState>
 class SaturationOverlayFluidState
 {
 public:
     enum { numPhases = FluidState::numPhases };
     enum { numComponents = FluidState::numComponents };
 
+    //! export the scalar type
+    using Scalar =  typename FluidState::Scalar;
+
     /*!
      * \brief Constructor
      *
diff --git a/dumux/material/fluidstates/temperatureoverlay.hh b/dumux/material/fluidstates/temperatureoverlay.hh
index 65d52b8724..28e37dbe7a 100644
--- a/dumux/material/fluidstates/temperatureoverlay.hh
+++ b/dumux/material/fluidstates/temperatureoverlay.hh
@@ -34,13 +34,16 @@ namespace Dumux {
  *        temperatures and takes all other quantities from an other
  *        fluid state.
  */
-template <class Scalar, class FluidState>
+template <class FluidState>
 class TemperatureOverlayFluidState
 {
 public:
     enum { numPhases = FluidState::numPhases };
     enum { numComponents = FluidState::numComponents };
 
+    //! export the scalar type
+    using Scalar = typename FluidState::Scalar;
+
     /*!
      * \brief Constructor
      *
diff --git a/test/material/fluidsystems/checkfluidsystem.hh b/test/material/fluidsystems/checkfluidsystem.hh
index dff2e241e4..7f8bb33017 100644
--- a/test/material/fluidsystems/checkfluidsystem.hh
+++ b/test/material/fluidsystems/checkfluidsystem.hh
@@ -64,18 +64,15 @@ namespace Dumux
 /*! \brief This fluid state ensures that only the allowed quantities
  * are accessed
  */
-template<class Scalar, class FluidSystem, class BaseFluidState = CompositionalFluidState<Scalar, FluidSystem> >
+template<class ScalarType, class FluidSystem, class BaseFluidState = CompositionalFluidState<ScalarType, FluidSystem> >
 class HairSplittingFluidState: protected BaseFluidState
 {
 public:
-    enum
-    {
-        numPhases = FluidSystem::numPhases
-    };
-    enum
-    {
-        numComponents = FluidSystem::numComponents
-    };
+    //! export the type used for scalars
+    using typename BaseFluidState::Scalar;
+
+    static constexpr int numPhases = FluidSystem::numPhases;
+    static constexpr int numComponents = FluidSystem::numComponents;
 
     HairSplittingFluidState()
     {
diff --git a/test/material/fluidsystems/test_fluidsystems.cc b/test/material/fluidsystems/test_fluidsystems.cc
index 469a983cc3..8d53730d4d 100644
--- a/test/material/fluidsystems/test_fluidsystems.cc
+++ b/test/material/fluidsystems/test_fluidsystems.cc
@@ -104,15 +104,15 @@ int main()
         success += checkFluidState<Scalar>(nonEquilibriumMassFluidState);
 
         // PressureOverlayFluidState
-        PressureOverlayFluidState<Scalar, BaseFluidState> pressureOverlayFluidState(baseFs);
+        PressureOverlayFluidState<BaseFluidState> pressureOverlayFluidState(baseFs);
         success += checkFluidState<Scalar>(pressureOverlayFluidState);
 
         // SaturationOverlayFluidState
-        SaturationOverlayFluidState<Scalar, BaseFluidState> saturationOverlayFluidState(baseFs);
+        SaturationOverlayFluidState<BaseFluidState> saturationOverlayFluidState(baseFs);
         success += checkFluidState<Scalar>(saturationOverlayFluidState);
 
         // TemperatureOverlayFluidState
-        TemperatureOverlayFluidState<Scalar, BaseFluidState> temperatureOverlayFluidState(baseFs);
+        TemperatureOverlayFluidState<BaseFluidState> temperatureOverlayFluidState(baseFs);
         success += checkFluidState<Scalar>(temperatureOverlayFluidState);
     }
 
-- 
GitLab