From ffc55cbde9f23c1d77c27e346e94ff266ce59703 Mon Sep 17 00:00:00 2001
From: Timo Koch <timo.koch@iws.uni-stuttgart.de>
Date: Tue, 31 Mar 2020 20:48:36 +0200
Subject: [PATCH] [examples][2p] Improve introduction

---
 examples/2pinfiltration/.doc_config           |   3 +-
 examples/2pinfiltration/README.md             |  51 ++++++++++++------
 examples/2pinfiltration/doc/intro.md          |  47 +++++++++++-----
 examples/2pinfiltration/doc/results.md        |   4 --
 .../img/test_2p_pointsource_initial.png       | Bin 8809 -> 0 bytes
 5 files changed, 69 insertions(+), 36 deletions(-)
 delete mode 100644 examples/2pinfiltration/doc/results.md
 delete mode 100644 examples/2pinfiltration/img/test_2p_pointsource_initial.png

diff --git a/examples/2pinfiltration/.doc_config b/examples/2pinfiltration/.doc_config
index 4151fcbee0..a8f7fb29c6 100644
--- a/examples/2pinfiltration/.doc_config
+++ b/examples/2pinfiltration/.doc_config
@@ -4,7 +4,6 @@
         "spatialparams.hh",
         "problem.hh",
         "properties.hh",
-        "main.cc",
-        "doc/results.md"
+        "main.cc"
     ]
 }
diff --git a/examples/2pinfiltration/README.md b/examples/2pinfiltration/README.md
index 724c139acf..a4d4e86bab 100644
--- a/examples/2pinfiltration/README.md
+++ b/examples/2pinfiltration/README.md
@@ -1,13 +1,38 @@
 <!-- Important: This file has been automatically generated by generate_example_docs.py. Do not edit this file directly! -->
 
-This tutorial is similar to tests/porousmediumflow/2p/adaptive and restricted to the cell-centered finite volume TPFA discretization scheme.
-You need [ALUGrid][0] in order to compile and run it.
+# Two-phase flow infiltration problem with adaptive grid
 
-# Two-phase flow with infiltration and adaptive grid
+In this example, you will learn how to
+* solve a two-phase flow in porous media problem with two immiscible phases
+* set boundary conditions and a simple injection well
+* specify a lens with different porous material parameters
+* use adaptive grid refinement around the saturation front
+* specify a point source
+* read the initial solution from a text file
 
-## Problem set-up
-In this example we model a soil contamination problem where DNAPL infiltrates a porous medium. The initial distribution of DNAPL is known and we can read it from a txt-file.
+__Prerequisites:__ You need [dune-alugrid](https://gitlab.dune-project.org/extensions/dune-alugrid) in order to compile and run this example.
 
+__Result:__ The resulting saturation distribution in this example will look like this:
+
+![](./img/test_2p_pointsource_adaptive.png)
+
+
+## Folder layout and files
+
+```
+└── 2pinfiltration/
+    ├── CMakeLists.txt          -> build system file
+    ├── main.cc                 -> main program flow
+    ├── params.input            -> runtime parameters
+    ├── properties.hh           -> compile time configuration
+    ├── problem.hh              -> boundary & initial conditions
+    ├── spatialparams.hh        -> spatial parameter fields
+    └── initialsolutioncc.txt   -> text file with initial solution
+```
+
+## Scenario and mathematical model
+
+We model a soil contamination problem where DNAPL infiltrates a porous medium. The initial distribution of DNAPL is known and we can read it from a txt-file.
 To describe that problem we use a two phase model of two immiscible fluids with the multiphase Darcy's law as the description of momentum, i.e.:
 
 ```math
@@ -33,19 +58,15 @@ The lens and the initial saturation can be seen in Figures 1 and 2.
 
 ![](./img/test_2p_pointsource_lens.png)
 
-![](./img/test_2p_pointsource_initial.png)
-
 At the left and the right boundary of the domain we set a linear pressure gradient as a Dirichlet boundary condition. On the upper and lower boundary we set Neumann boundary conditions.
 DNAPL enters the model domain at the upper boundary between 1.75m ≤ x ≤ 2m with a rate of 0.04 kg/ms. That means that we set the value for the Neumann boundary flux to that rate in between 1.75m and 2m. On the rest of the Neumann boundary we set the flux to zero, which means we define it as a no-flow boundary.
-In addition, the DNAPL is injected at a point source at x = 0.502 and y = 3.02 with a rate of 0.1 kg/s.
+In addition, the DNAPL is injected at a point source at x = 0.502m and y = 3.02m with a rate of 0.1 kg/s.
 
-## Discretization
-We discretize the equations with a cell-centered finite volume TPFA scheme in space and an implicit Euler scheme in time. We use Newton's method to solve the system of nonlinear equations. For more information about the discretization please have a look at the [handbook](https://dumux.org/handbook).
-
-## Adaptive grid
+We discretize the equations with a cell-centered finite volume TPFA scheme in space and an implicit Euler scheme in time. We use Newton's method to solve the system of nonlinear equations.
 The grid is adapitvely refined around the injection. The adaptive behaviour can be changed with input parameters in the `params.input` file.
+For more information about the discretization please have a look at the [handbook](https://dumux.org/handbook).
 
-[0]: https://gitlab.dune-project.org/extensions/dune-alugrid
+# Implementation
 
 
 ## The file `spatialparams.hh`
@@ -1060,7 +1081,3 @@ catch (...)
 ```
 
 
-## Results
-The 2p-infiltration model computes the water saturation distribution after 500 seconds according tthe following figure:
-
-![](./img/test_2p_pointsource_adaptive.png)
diff --git a/examples/2pinfiltration/doc/intro.md b/examples/2pinfiltration/doc/intro.md
index 6829a1eebb..cd6657b35a 100644
--- a/examples/2pinfiltration/doc/intro.md
+++ b/examples/2pinfiltration/doc/intro.md
@@ -1,11 +1,36 @@
-This tutorial is similar to tests/porousmediumflow/2p/adaptive and restricted to the cell-centered finite volume TPFA discretization scheme.
-You need [ALUGrid][0] in order to compile and run it.
+# Two-phase flow infiltration problem with adaptive grid
 
-# Two-phase flow with infiltration and adaptive grid
+In this example, you will learn how to
+* solve a two-phase flow in porous media problem with two immiscible phases
+* set boundary conditions and a simple injection well
+* specify a lens with different porous material parameters
+* use adaptive grid refinement around the saturation front
+* specify a point source
+* read the initial solution from a text file
 
-## Problem set-up
-In this example we model a soil contamination problem where DNAPL infiltrates a porous medium. The initial distribution of DNAPL is known and we can read it from a txt-file.
+__Prerequisites:__ You need [dune-alugrid](https://gitlab.dune-project.org/extensions/dune-alugrid) in order to compile and run this example.
 
+__Result:__ The resulting saturation distribution in this example will look like this:
+
+![](./img/test_2p_pointsource_adaptive.png)
+
+
+## Folder layout and files
+
+```
+└── 2pinfiltration/
+    ├── CMakeLists.txt          -> build system file
+    ├── main.cc                 -> main program flow
+    ├── params.input            -> runtime parameters
+    ├── properties.hh           -> compile time configuration
+    ├── problem.hh              -> boundary & initial conditions
+    ├── spatialparams.hh        -> spatial parameter fields
+    └── initialsolutioncc.txt   -> text file with initial solution
+```
+
+## Scenario and mathematical model
+
+We model a soil contamination problem where DNAPL infiltrates a porous medium. The initial distribution of DNAPL is known and we can read it from a txt-file.
 To describe that problem we use a two phase model of two immiscible fluids with the multiphase Darcy's law as the description of momentum, i.e.:
 
 ```math
@@ -31,16 +56,12 @@ The lens and the initial saturation can be seen in Figures 1 and 2.
 
 ![](./img/test_2p_pointsource_lens.png)
 
-![](./img/test_2p_pointsource_initial.png)
-
 At the left and the right boundary of the domain we set a linear pressure gradient as a Dirichlet boundary condition. On the upper and lower boundary we set Neumann boundary conditions.
 DNAPL enters the model domain at the upper boundary between 1.75m ≤ x ≤ 2m with a rate of 0.04 kg/ms. That means that we set the value for the Neumann boundary flux to that rate in between 1.75m and 2m. On the rest of the Neumann boundary we set the flux to zero, which means we define it as a no-flow boundary.
-In addition, the DNAPL is injected at a point source at x = 0.502 and y = 3.02 with a rate of 0.1 kg/s.
-
-## Discretization
-We discretize the equations with a cell-centered finite volume TPFA scheme in space and an implicit Euler scheme in time. We use Newton's method to solve the system of nonlinear equations. For more information about the discretization please have a look at the [handbook](https://dumux.org/handbook).
+In addition, the DNAPL is injected at a point source at x = 0.502m and y = 3.02m with a rate of 0.1 kg/s.
 
-## Adaptive grid
+We discretize the equations with a cell-centered finite volume TPFA scheme in space and an implicit Euler scheme in time. We use Newton's method to solve the system of nonlinear equations.
 The grid is adapitvely refined around the injection. The adaptive behaviour can be changed with input parameters in the `params.input` file.
+For more information about the discretization please have a look at the [handbook](https://dumux.org/handbook).
 
-[0]: https://gitlab.dune-project.org/extensions/dune-alugrid
+# Implementation
diff --git a/examples/2pinfiltration/doc/results.md b/examples/2pinfiltration/doc/results.md
deleted file mode 100644
index 0429a0d52e..0000000000
--- a/examples/2pinfiltration/doc/results.md
+++ /dev/null
@@ -1,4 +0,0 @@
-## Results
-The 2p-infiltration model computes the water saturation distribution after 500 seconds according tthe following figure:
-
-![](./img/test_2p_pointsource_adaptive.png)
diff --git a/examples/2pinfiltration/img/test_2p_pointsource_initial.png b/examples/2pinfiltration/img/test_2p_pointsource_initial.png
deleted file mode 100644
index e9bb688c32dc26ef851a5887aa390c50c971971c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8809
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
ZpguGb$|^MdErB*euId?GEY`7q_&?Gvg3tf}

-- 
GitLab