From 658c5926d7fcf454234785088f5a99813705e193 Mon Sep 17 00:00:00 2001
From: Martin Schneider <martin.schneider@iws.uni-stuttgart.de>
Date: Wed, 17 Jul 2024 09:32:03 +0200
Subject: [PATCH] [basic] Make solution consistent with exercise

---
 .patches/exercise-basic/exercise-basic.patch  | 105 +++---------------
 .../exercise-basic/injection2pniproblem.hh    |   2 +-
 .../exercise-basic/injection2pniproblem.hh    |  15 +--
 .../solution/exercise-basic/params.input      |   2 +-
 .../solution/exercise-basic/properties2pni.hh |   6 +-
 5 files changed, 28 insertions(+), 102 deletions(-)

diff --git a/.patches/exercise-basic/exercise-basic.patch b/.patches/exercise-basic/exercise-basic.patch
index a7bd90a7..f06b724c 100644
--- a/.patches/exercise-basic/exercise-basic.patch
+++ b/.patches/exercise-basic/exercise-basic.patch
@@ -314,7 +314,7 @@ diff -ruN exercises/exercise-basic/2pnimain.cc exercises/solution/exercise-basic
 +    return 0;
 +} // end main
 diff -ruN exercises/exercise-basic/CMakeLists.txt exercises/solution/exercise-basic/CMakeLists.txt
---- exercises/exercise-basic/CMakeLists.txt	2024-07-16 18:13:52.240082591 +0200
+--- exercises/exercise-basic/CMakeLists.txt	2024-07-17 09:03:28.735934424 +0200
 +++ exercises/solution/exercise-basic/CMakeLists.txt	2023-03-31 13:48:56.182686617 +0200
 @@ -1,9 +1,6 @@
 -# the immiscible two-phase simulation program
@@ -332,8 +332,8 @@ diff -ruN exercises/exercise-basic/CMakeLists.txt exercises/solution/exercise-ba
 \ No newline at end of file
 +add_input_file_links()
 diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/exercise-basic/injection2pniproblem.hh
---- exercises/exercise-basic/injection2pniproblem.hh	2024-07-16 18:13:52.240082591 +0200
-+++ exercises/solution/exercise-basic/injection2pniproblem.hh	2024-07-16 18:13:52.240082591 +0200
+--- exercises/exercise-basic/injection2pniproblem.hh	2024-07-17 09:35:45.379416317 +0200
++++ exercises/solution/exercise-basic/injection2pniproblem.hh	2024-07-17 09:29:05.201585641 +0200
 @@ -19,7 +19,7 @@
  /*!
   * \file
@@ -343,36 +343,7 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex
   */
  
  #ifndef DUMUX_EX_BASIC_PROBLEM_2PNI_HH
-@@ -31,7 +31,6 @@
- #include <dumux/porousmediumflow/problem.hh>
- 
- namespace Dumux {
--
- /*!
-  * \ingroup TwoPModel
-  * \ingroup ImplicitTestProblems
-@@ -46,7 +45,7 @@
-  * apply on the left boundary.
-  *
-  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
-- * 0.0001 kg/(s m), the remaining Neumann boundaries are no-flow
-+ * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
-  * boundaries.
-  *
-  * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
-@@ -57,16 +56,18 @@
- class Injection2PNIProblem : public PorousMediumFlowProblem<TypeTag>
- {
-     using ParentType = PorousMediumFlowProblem<TypeTag>;
-+    using GridView = typename GetPropType<TypeTag, Properties::GridGeometry>::GridView;
-     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
-     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
-     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
-     using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
-     using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
--    using FVElementGeometry = typename GridGeometry::LocalView;
--    using GridView = typename GridGeometry::GridView;
-+    using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
+@@ -67,6 +67,8 @@
      using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
      using NumEqVector = Dumux::NumEqVector<PrimaryVariables>;
  
@@ -381,24 +352,7 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex
      static constexpr int dimWorld = GridView::dimensionworld;
      using Element = typename GridView::template Codim<0>::Entity;
      using GlobalPosition = typename Element::Geometry::GlobalCoordinate;
-@@ -83,13 +84,13 @@
-                 /*pMax=*/30e6,
-                 /*numP=*/300);
- 
--        // name of the problem and output file
-+        // Name of the problem and output file
-         // getParam<TYPE>("GROUPNAME.PARAMNAME") reads and sets parameter PARAMNAME
-         // of type TYPE given in the group GROUPNAME from the input file
-         name_ = getParam<std::string>("Problem.Name");
--        // depth of the aquifer, unit: m
-+        // Depth of the aquifer, unit: m
-         aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth");
--        // the duration of the injection, unit: seconds
-+        // The duration of the injection, unit: seconds
-         injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration");
-     }
- 
-@@ -115,13 +116,6 @@
+@@ -115,13 +117,6 @@
          else
              bcTypes.setAllNeumann();
  
@@ -412,7 +366,7 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex
          return bcTypes;
      }
  
-@@ -134,12 +128,6 @@
+@@ -134,12 +129,6 @@
      PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const
      {
          return initialAtPos(globalPos);
@@ -425,17 +379,13 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex
      }
  
      /*!
-@@ -154,19 +142,20 @@
-         NumEqVector values(0.0);
- 
+@@ -156,17 +145,18 @@
          // if we are inside the injection zone set inflow Neumann boundary conditions
--        if (injectionActive() && onInjectionBoundary(globalPos))
-+         if (injectionActive() && onInjectionBoundary(globalPos))
+         if (injectionActive() && onInjectionBoundary(globalPos))
          {
--            // inject nitrogen. negative values mean injection
 +            const Scalar injectionRate = -1e-4;
 +
-+            // inject nitrogen. Negative values mean injection
+             // inject nitrogen. Negative values mean injection
              // unit: kg/(s*m^2)
 -            values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -1e-4;
 +            values[Indices::conti0EqIdx + FluidSystem::N2Idx] = injectionRate;
@@ -455,7 +405,7 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex
          }
  
          return values;
-@@ -202,13 +191,10 @@
+@@ -202,13 +192,10 @@
          values[Indices::pressureIdx] = pw;
          values[Indices::saturationIdx] = 0.0;
  
@@ -474,7 +424,7 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex
      }
  
 diff -ruN exercises/exercise-basic/injection2pproblem.hh exercises/solution/exercise-basic/injection2pproblem.hh
---- exercises/exercise-basic/injection2pproblem.hh	2024-07-16 18:13:52.240082591 +0200
+--- exercises/exercise-basic/injection2pproblem.hh	2024-07-17 09:03:28.735934424 +0200
 +++ exercises/solution/exercise-basic/injection2pproblem.hh	1970-01-01 01:00:00.000000000 +0100
 @@ -1,223 +0,0 @@
 -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
@@ -702,15 +652,7 @@ diff -ruN exercises/exercise-basic/injection2pproblem.hh exercises/solution/exer
 -#endif
 diff -ruN exercises/exercise-basic/params.input exercises/solution/exercise-basic/params.input
 --- exercises/exercise-basic/params.input	2023-03-31 13:48:56.158686713 +0200
-+++ exercises/solution/exercise-basic/params.input	2024-07-08 11:41:07.994134860 +0200
-@@ -1,6 +1,6 @@
- [TimeLoop]
- DtInitial = 3600 # in seconds
--TEnd = 3.154e9 # in seconds, i.e one hundred years
-+TEnd = 3.154e9 # in seconds, i.e ten years
- 
- [Grid]
- UpperRight = 60 40
++++ exercises/solution/exercise-basic/params.input	2024-07-17 09:29:42.657460310 +0200
 @@ -24,7 +24,7 @@
  Aquifer.Snr = 0.0
  
@@ -804,14 +746,8 @@ diff -ruN exercises/exercise-basic/properties2p.hh exercises/solution/exercise-b
 -#endif
 diff -ruN exercises/exercise-basic/properties2pni.hh exercises/solution/exercise-basic/properties2pni.hh
 --- exercises/exercise-basic/properties2pni.hh	2024-07-08 11:41:07.986134888 +0200
-+++ exercises/solution/exercise-basic/properties2pni.hh	2024-07-08 11:41:07.994134860 +0200
-@@ -31,18 +31,14 @@
- #include <dumux/porousmediumflow/2p/model.hh>
- #include <dumux/material/fluidsystems/h2on2.hh>
- 
--#include "injection2pniproblem.hh"
- #include "injection2pspatialparams.hh"
-+#include "injection2pniproblem.hh"
++++ exercises/solution/exercise-basic/properties2pni.hh	2024-07-17 09:30:32.109288258 +0200
+@@ -36,13 +36,9 @@
  
  namespace Dumux::Properties {
  
@@ -826,19 +762,8 @@ diff -ruN exercises/exercise-basic/properties2pni.hh exercises/solution/exercise
  struct Injection2pNICC { using InheritsFrom = std::tuple<Injection2pNITypeTag, CCTpfaModel>; };
  } // end namespace TTag
  
-@@ -69,8 +65,8 @@
- template<class TypeTag>
- struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag>
- {
--    using type = FluidSystems::H2ON2< GetPropType<TypeTag, Properties::Scalar>,
--                                      FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true> >;
-+    using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>,
-+                                     FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true>>;
- };
- 
- } // end namespace Dumux::Properties
 diff -ruN exercises/exercise-basic/README.md exercises/solution/exercise-basic/README.md
---- exercises/exercise-basic/README.md	2024-07-16 18:14:35.935842323 +0200
+--- exercises/exercise-basic/README.md	2024-07-17 09:03:28.735934424 +0200
 +++ exercises/solution/exercise-basic/README.md	1970-01-01 01:00:00.000000000 +0100
 @@ -1,94 +0,0 @@
 -# Exercise Basics (DuMuX course)
diff --git a/exercises/exercise-basic/injection2pniproblem.hh b/exercises/exercise-basic/injection2pniproblem.hh
index a08be51e..64cf5215 100644
--- a/exercises/exercise-basic/injection2pniproblem.hh
+++ b/exercises/exercise-basic/injection2pniproblem.hh
@@ -156,7 +156,7 @@ public:
         // if we are inside the injection zone set inflow Neumann boundary conditions
         if (injectionActive() && onInjectionBoundary(globalPos))
         {
-            // inject nitrogen. negative values mean injection
+            // inject nitrogen. Negative values mean injection
             // unit: kg/(s*m^2)
             values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -1e-4;
             values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0;
diff --git a/exercises/solution/exercise-basic/injection2pniproblem.hh b/exercises/solution/exercise-basic/injection2pniproblem.hh
index 7cb3c10b..7f23fb29 100644
--- a/exercises/solution/exercise-basic/injection2pniproblem.hh
+++ b/exercises/solution/exercise-basic/injection2pniproblem.hh
@@ -31,6 +31,7 @@
 #include <dumux/porousmediumflow/problem.hh>
 
 namespace Dumux {
+
 /*!
  * \ingroup TwoPModel
  * \ingroup ImplicitTestProblems
@@ -45,7 +46,7 @@ namespace Dumux {
  * apply on the left boundary.
  *
  * Gas is injected at the right boundary from 7 m to 15 m at a rate of
- * 0.001 kg/(s m), the remaining Neumann boundaries are no-flow
+ * 0.0001 kg/(s m), the remaining Neumann boundaries are no-flow
  * boundaries.
  *
  * At the Dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a
@@ -56,13 +57,13 @@ template<class TypeTag>
 class Injection2PNIProblem : public PorousMediumFlowProblem<TypeTag>
 {
     using ParentType = PorousMediumFlowProblem<TypeTag>;
-    using GridView = typename GetPropType<TypeTag, Properties::GridGeometry>::GridView;
     using Scalar = GetPropType<TypeTag, Properties::Scalar>;
     using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices;
     using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
     using BoundaryTypes = Dumux::BoundaryTypes<GetPropType<TypeTag, Properties::ModelTraits>::numEq()>;
     using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>;
-    using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView;
+    using FVElementGeometry = typename GridGeometry::LocalView;
+    using GridView = typename GridGeometry::GridView;
     using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
     using NumEqVector = Dumux::NumEqVector<PrimaryVariables>;
 
@@ -84,13 +85,13 @@ public:
                 /*pMax=*/30e6,
                 /*numP=*/300);
 
-        // Name of the problem and output file
+        // name of the problem and output file
         // getParam<TYPE>("GROUPNAME.PARAMNAME") reads and sets parameter PARAMNAME
         // of type TYPE given in the group GROUPNAME from the input file
         name_ = getParam<std::string>("Problem.Name");
-        // Depth of the aquifer, unit: m
+        // depth of the aquifer, unit: m
         aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth");
-        // The duration of the injection, unit: seconds
+        // the duration of the injection, unit: seconds
         injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration");
     }
 
@@ -142,7 +143,7 @@ public:
         NumEqVector values(0.0);
 
         // if we are inside the injection zone set inflow Neumann boundary conditions
-         if (injectionActive() && onInjectionBoundary(globalPos))
+        if (injectionActive() && onInjectionBoundary(globalPos))
         {
             const Scalar injectionRate = -1e-4;
 
diff --git a/exercises/solution/exercise-basic/params.input b/exercises/solution/exercise-basic/params.input
index c60e5c2d..1bd5d03c 100644
--- a/exercises/solution/exercise-basic/params.input
+++ b/exercises/solution/exercise-basic/params.input
@@ -1,6 +1,6 @@
 [TimeLoop]
 DtInitial = 3600 # in seconds
-TEnd = 3.154e9 # in seconds, i.e ten years
+TEnd = 3.154e9 # in seconds, i.e one hundred years
 
 [Grid]
 UpperRight = 60 40
diff --git a/exercises/solution/exercise-basic/properties2pni.hh b/exercises/solution/exercise-basic/properties2pni.hh
index ea33f554..ce4f5cff 100644
--- a/exercises/solution/exercise-basic/properties2pni.hh
+++ b/exercises/solution/exercise-basic/properties2pni.hh
@@ -31,8 +31,8 @@
 #include <dumux/porousmediumflow/2p/model.hh>
 #include <dumux/material/fluidsystems/h2on2.hh>
 
-#include "injection2pspatialparams.hh"
 #include "injection2pniproblem.hh"
+#include "injection2pspatialparams.hh"
 
 namespace Dumux::Properties {
 
@@ -65,8 +65,8 @@ public:
 template<class TypeTag>
 struct FluidSystem<TypeTag, TTag::Injection2pNITypeTag>
 {
-    using type = FluidSystems::H2ON2<GetPropType<TypeTag, Properties::Scalar>,
-                                     FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true>>;
+    using type = FluidSystems::H2ON2< GetPropType<TypeTag, Properties::Scalar>,
+                                      FluidSystems::H2ON2DefaultPolicy</*fastButSimplifiedRelations=*/true> >;
 };
 
 } // end namespace Dumux::Properties
-- 
GitLab