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