Skip to content
Snippets Groups Projects
Commit 221e0de9 authored by Katharina Heck's avatar Katharina Heck
Browse files

[cleanup] rename all exercises so that they do not have numbers anymore

parent 92ecac28
No related branches found
No related tags found
1 merge request!2[feature] add exercise main file with readme and solution
Showing with 36 additions and 36 deletions
# the one-phase simulation program # the one-phase simulation program
dune_add_test(NAME exercise1_1p_a dune_add_test(NAME exercise_1p_a
SOURCES exercise1_1p_a.cc SOURCES exercise_1p_a.cc
CMD_ARGS exercise1_1p_a.input) CMD_ARGS exercise_1p_a.input)
dune_add_test(NAME exercise1_1p_b dune_add_test(NAME exercise_1p_b
SOURCES exercise1_1p_b.cc SOURCES exercise_1p_b.cc
CMD_ARGS exercise1_1p_b.input) CMD_ARGS exercise_1p_b.input)
dune_add_test(NAME exercise1_1p_c dune_add_test(NAME exercise_1p_c
SOURCES exercise1_1p_c.cc SOURCES exercise_1p_c.cc
CMD_ARGS exercise1_1p_c.input) CMD_ARGS exercise_1p_c.input)
# add tutorial to the common target # add tutorial to the common target
add_dependencies(test_exercises exercise1_1p_a exercise1_1p_b exercise1_1p_c) add_dependencies(test_exercises exercise_1p_a exercise_1p_b exercise_1p_c)
# add a symlink for the input file # add a symlink for the input file
dune_symlink_to_source_files(FILES "exercise1_1p_a.input" "exercise1_1p_b.input" "exercise1_1p_c.input") dune_symlink_to_source_files(FILES "exercise_1p_a.input" "exercise_1p_b.input" "exercise_1p_c.input")
...@@ -9,9 +9,9 @@ In order to do so, there are three examples of one phase flow problems. Two exam ...@@ -9,9 +9,9 @@ In order to do so, there are three examples of one phase flow problems. Two exam
The stationary examples differ in the fluidssystems they are using which means they differ in the fluid properties (e.g. density, thermal conductivity etc). The first problem (a) uses an incompressible fluid which means that the density does not change when pressure changes. This makes it possible to solve the system linearly. The second problem uses a compressible fluid, that means the density is a function of pressure and we need to use a nonlinear solver. The stationary examples differ in the fluidssystems they are using which means they differ in the fluid properties (e.g. density, thermal conductivity etc). The first problem (a) uses an incompressible fluid which means that the density does not change when pressure changes. This makes it possible to solve the system linearly. The second problem uses a compressible fluid, that means the density is a function of pressure and we need to use a nonlinear solver.
To summarize the problems differ in: To summarize the problems differ in:
* exercise1_1p_a: a one-phase incompressible, stationary problem * exercise_1p_a: a one-phase incompressible, stationary problem
* exercise1_1p_b: a one-phase compressible, stationary problem * exercise_1p_b: a one-phase compressible, stationary problem
* exercise1_1p_c: a one-phase compressible, instationary problem * exercise_1p_c: a one-phase compressible, instationary problem
The problem set-up for all three examples is always the same: It is a two dimensional problem and the domain is $`1 m`$ by $`1 m`$. It is a heterogeneous set-up with a lens in the middle of the domain which has a lower permeability ($`1\cdot 10^{-12} m^2`$ compared to $`1\cdot 10^{-10} m^2`$ in the rest of the domain). The problem set-up for all three examples is always the same: It is a two dimensional problem and the domain is $`1 m`$ by $`1 m`$. It is a heterogeneous set-up with a lens in the middle of the domain which has a lower permeability ($`1\cdot 10^{-12} m^2`$ compared to $`1\cdot 10^{-10} m^2`$ in the rest of the domain).
...@@ -28,14 +28,14 @@ In the beginning there is a uniform pressure of $`1\cdot 10^5 Pa`$ in the whole ...@@ -28,14 +28,14 @@ In the beginning there is a uniform pressure of $`1\cdot 10^5 Pa`$ in the whole
<hr> <hr>
Locate all the files you will need for this exercise Locate all the files you will need for this exercise
* The __main file__ for the __1p incompressible, stationary__ problem : `exercise1_1p_a.cc` * The __main file__ for the __1p incompressible, stationary__ problem : `exercise_1p_a.cc`
* The __main file__ for the __1p compressible, stationary__ problem : `exercise1_1p_b.cc` * The __main file__ for the __1p compressible, stationary__ problem : `exercise_1p_b.cc`
* The __main file__ for the __1p compressible, instationary__ problem : `exercise1_1p_c.cc` * The __main file__ for the __1p compressible, instationary__ problem : `exercise_1p_c.cc`
* The shared __problem file__: `1pproblem.hh` * The shared __problem file__: `1pproblem.hh`
* The shared __spatial parameters file__: `1pspatialparams.hh` * The shared __spatial parameters file__: `1pspatialparams.hh`
* The __input file__ for the __1p incompressible, stationary__ problem: `exercise1_1p_a.input` * The __input file__ for the __1p incompressible, stationary__ problem: `exercise_1p_a.input`
* The __input file__ for the __1p compressible, stationary__ problem: `exercise1_1p_b.input` * The __input file__ for the __1p compressible, stationary__ problem: `exercise_1p_b.input`
* The __input file__ for the __1p compressible, instationary__ problem: `exercise1_1p_c.input` * The __input file__ for the __1p compressible, instationary__ problem: `exercise_1p_c.input`
Please pay special attention to the similarities and differences in the three main files. The first main file is solved linearly and does not need a newton solver or any other nonlinear solver method. The second problem is a nonlinear problem and uses newton's method to solve the system. The third problem is nonlinear and additionally instationary. Therefore a time loop needs to be included in the main file. Please pay special attention to the similarities and differences in the three main files. The first main file is solved linearly and does not need a newton solver or any other nonlinear solver method. The second problem is a nonlinear problem and uses newton's method to solve the system. The third problem is nonlinear and additionally instationary. Therefore a time loop needs to be included in the main file.
...@@ -83,7 +83,7 @@ VtkOutputFields::init(vtkWriter); //!< Add model specific output fields ...@@ -83,7 +83,7 @@ VtkOutputFields::init(vtkWriter); //!< Add model specific output fields
vtkWriter.write(0.0); vtkWriter.write(0.0);
``` ```
* then we need to assemble and solve the system. Depending on the problem this can be done with a linear solver or with a nonlinear solver. If the problem is time dependent we additionally need a time loop. An example for that is given in exercise1_1p_c: * then we need to assemble and solve the system. Depending on the problem this can be done with a linear solver or with a nonlinear solver. If the problem is time dependent we additionally need a time loop. An example for that is given in exercise_1p_c:
```c++ ```c++
// get some time loop parameters // get some time loop parameters
...@@ -152,37 +152,37 @@ timeLoop->finalize(leafGridView.comm()); ...@@ -152,37 +152,37 @@ timeLoop->finalize(leafGridView.comm());
cd ../../build-cmake/exercises/exercise-mainfile cd ../../build-cmake/exercises/exercise-mainfile
``` ```
* Compile all three executables `exercise1_1p_a` and `exercise1_1p_b` and `exercise1_1p_c` * Compile all three executables `exercise_1p_a` and `exercise_1p_b` and `exercise_1p_c`
```bash ```bash
make exercise1_1p_a exercise1_1p_b exercise1_1p_c make exercise_1p_a exercise_1p_b exercise_1p_c
``` ```
* Execute the three problems and inspect the result * Execute the three problems and inspect the result
```bash ```bash
./exercise1_1p_a ./exercise_1p_a
./exercise1_1p_b ./exercise_1p_b
./exercise1_1p_c ./exercise_1p_c
``` ```
* you can look at the results with paraview * you can look at the results (e.g. for the first example) with paraview:
```bash ```bash
paraview injection-1p_a.pvd paraview 1p_incompressible_stationary.pvd
``` ```
<hr><br><br> <hr><br><br>
### Task 3: Analytical differentiation ### Task 3: Analytical differentiation
<hr> <hr>
In the input file `exercise1_1p_a.input` you will see that there is a variable BaseEpsilon. This defines the base for the epsilon used in the numeric differentiation. If that value is too small, you will see that the solution of the numeric differentiation is not correct. Change that value to $`1 \cdot 10^{-15}`$ and have a look at the solution. In the input file `exercise_1p_a.input` you will see that there is a variable BaseEpsilon. This defines the base for the epsilon used in the numeric differentiation. If that value is too small, you will see that the solution of the numeric differentiation is not correct. Change that value to $`1 \cdot 10^{-15}`$ and have a look at the solution.
For the incompressible one phase problem it is possible to also have an analytic solution method. Then the epsilon does not play a role anymore since the derivatives are calculated analytically. To implement that follow the directions in the `exercise1_1p_a.cc` and the `1pproblem.hh` marked by: For the incompressible one phase problem it is possible to also have an analytic solution method. Then the epsilon does not play a role anymore since the derivatives are calculated analytically. To implement that follow the directions in the `exercise_1p_a.cc` and the `1pproblem.hh` marked by:
```c++ ```c++
// TODO: dumux-course-task // TODO: dumux-course-task
``` ```
For the analytic solution of your immiscible problem you need analytic solutions for the derivatives of the jacobian. For that we have a special local residual, the `OneincompressibleLocalResidual` which provides that. You just need to include that in your `1pproblem.hh` and use that instead of the `immisciblelocalresidual.hh` which is used as a standard for all immiscible models. For the analytic solution of your immiscible problem you need analytic solutions for the derivatives of the jacobian. For that we have a special local residual, the `OneincompressibleLocalResidual` which provides that. You just need to include that in your `1pproblem.hh` and use that instead of the `immisciblelocalresidual.hh` which is used as a standard for all immiscible models.
Additionally you need to set the differentiation method in the main file `exercise1_1p_a.cc` to analytic. Additionally you need to set the differentiation method in the main file `exercise_1p_a.cc` to analytic.
# the one-phase simulation program # the one-phase simulation program
dune_add_test(NAME exercise1_1p_a_solution dune_add_test(NAME exercise_1p_a_solution
SOURCES exercise1_1p_a.cc SOURCES exercise_1p_a_solution.cc
COMPILE_DEFINITIONS TYPETAG=OnePIncompressible COMPILE_DEFINITIONS TYPETAG=OnePIncompressible
CMD_ARGS exercise1_1p_a.input) CMD_ARGS exercise_1p_a.input)
# here, add the two-phase non-isothermal simulation program # here, add the two-phase non-isothermal simulation program
# add tutorial to the common target # add tutorial to the common target
add_dependencies(test_exercises exercise1_1p_a) add_dependencies(test_exercises exercise_1p_a_solution)
# add a symlink for the input file # add a symlink for the input file
dune_symlink_to_source_files(FILES "exercise1_1p_a.input") dune_symlink_to_source_files(FILES "exercise_1p_a.input")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment