From 8065f08d9b11e0f173cdd7fef6a7202e83393f48 Mon Sep 17 00:00:00 2001 From: Timo Koch <timo.koch@iws.uni-stuttgart.de> Date: Mon, 9 Jul 2018 15:04:56 +0200 Subject: [PATCH] [exercises] Add exercises from last year's course --- exercises/CMakeLists.txt | 7 + exercises/exercise-basic/CMakeLists.txt | 17 + exercises/exercise-basic/README.md | 151 ++++++ exercises/exercise-basic/exercise1.cc | 197 +++++++ exercises/exercise-basic/exercise1.input | 29 ++ exercises/exercise-basic/exercise1_2p.cc | 200 +++++++ exercises/exercise-basic/exercise1_2p2c.cc | 201 +++++++ .../exercise-basic/injection2p2cproblem.hh | 275 ++++++++++ .../exercise-basic/injection2pniproblem.hh | 266 ++++++++++ .../exercise-basic/injection2pproblem.hh | 260 ++++++++++ .../injection2pspatialparams.hh | 171 ++++++ exercises/exercise-dunemodule/README.md | 92 ++++ exercises/exercise-fluidsystem/2p2cproblem.hh | 269 ++++++++++ exercises/exercise-fluidsystem/2pproblem.hh | 308 +++++++++++ exercises/exercise-fluidsystem/CMakeLists.txt | 20 + exercises/exercise-fluidsystem/README.md | 216 ++++++++ .../h2omycompressiblecomponent.hh | 74 +++ .../components/mycompressiblecomponent.hh | 126 +++++ .../components/myincompressiblecomponent.hh | 112 ++++ .../components/plotdensityfunction.py | 19 + exercises/exercise-fluidsystem/exercise3.cc | 236 +++++++++ .../exercise-fluidsystem/exercise3_a.input | 10 + .../exercise-fluidsystem/exercise3_b.input | 10 + .../h2omycompressiblecomponent.hh | 485 +++++++++++++++++ .../exercise-fluidsystem/spatialparams.hh | 163 ++++++ exercises/exercise-properties/CMakeLists.txt | 11 + exercises/exercise-properties/README.md | 151 ++++++ exercises/exercise-properties/exercise2.cc | 200 +++++++ exercises/exercise-properties/exercise2.input | 25 + .../injection2p2cproblem.hh | 279 ++++++++++ .../injection2p2cspatialparams.hh | 193 +++++++ .../exercise-properties/mylocalresidual.hh | 163 ++++++ .../exercise-properties/mymateriallaw.hh | 116 +++++ .../extradoc/exercise1_nonisothermal.png | Bin 0 -> 44121 bytes exercises/extradoc/exercise1_setup.png | Bin 0 -> 58149 bytes exercises/extradoc/exercise2_properties.png | Bin 0 -> 27453 bytes exercises/extradoc/exercise3_a_solution.png | Bin 0 -> 142019 bytes exercises/extradoc/exercise3_a_solution2.png | Bin 0 -> 60853 bytes exercises/extradoc/exercise3_setup.png | Bin 0 -> 45832 bytes exercises/solution/CMakeLists.txt | 2 + exercises/solution/ex1/CMakeLists.txt | 21 + exercises/solution/ex1/exercise1.input | 27 + exercises/solution/ex1/exercise1_2p2c.cc | 198 +++++++ .../solution/ex1/exercise1_2pni_solution.cc | 198 +++++++ .../solution/ex1/injection2p2cproblem.hh | 271 ++++++++++ .../solution/ex1/injection2pniproblem.hh | 252 +++++++++ .../solution/ex1/injection2pspatialparams.hh | 164 ++++++ exercises/solution/ex2/CMakeLists.txt | 10 + exercises/solution/ex2/exercise2.input | 24 + exercises/solution/ex2/exercise2_solution.cc | 200 +++++++ .../solution/ex2/injection2p2cproblem.hh | 278 ++++++++++ .../ex2/injection2p2cspatialparams.hh | 190 +++++++ exercises/solution/ex2/mylocalresidual.hh | 163 ++++++ exercises/solution/ex2/mymateriallaw.hh | 114 ++++ .../ex3/h2omycompressiblecomponent.hh | 489 ++++++++++++++++++ .../solution/ex3/mycompressiblecomponent.hh | 124 +++++ .../solution/ex3/myincompressiblecomponent.hh | 101 ++++ 57 files changed, 7878 insertions(+) create mode 100644 exercises/exercise-basic/CMakeLists.txt create mode 100644 exercises/exercise-basic/README.md create mode 100644 exercises/exercise-basic/exercise1.cc create mode 100644 exercises/exercise-basic/exercise1.input create mode 100644 exercises/exercise-basic/exercise1_2p.cc create mode 100644 exercises/exercise-basic/exercise1_2p2c.cc create mode 100644 exercises/exercise-basic/injection2p2cproblem.hh create mode 100644 exercises/exercise-basic/injection2pniproblem.hh create mode 100644 exercises/exercise-basic/injection2pproblem.hh create mode 100644 exercises/exercise-basic/injection2pspatialparams.hh create mode 100644 exercises/exercise-dunemodule/README.md create mode 100644 exercises/exercise-fluidsystem/2p2cproblem.hh create mode 100644 exercises/exercise-fluidsystem/2pproblem.hh create mode 100644 exercises/exercise-fluidsystem/CMakeLists.txt create mode 100644 exercises/exercise-fluidsystem/README.md create mode 100644 exercises/exercise-fluidsystem/binarycoefficients/h2omycompressiblecomponent.hh create mode 100644 exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh create mode 100644 exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh create mode 100644 exercises/exercise-fluidsystem/components/plotdensityfunction.py create mode 100644 exercises/exercise-fluidsystem/exercise3.cc create mode 100644 exercises/exercise-fluidsystem/exercise3_a.input create mode 100644 exercises/exercise-fluidsystem/exercise3_b.input create mode 100644 exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh create mode 100644 exercises/exercise-fluidsystem/spatialparams.hh create mode 100644 exercises/exercise-properties/CMakeLists.txt create mode 100644 exercises/exercise-properties/README.md create mode 100644 exercises/exercise-properties/exercise2.cc create mode 100644 exercises/exercise-properties/exercise2.input create mode 100644 exercises/exercise-properties/injection2p2cproblem.hh create mode 100644 exercises/exercise-properties/injection2p2cspatialparams.hh create mode 100644 exercises/exercise-properties/mylocalresidual.hh create mode 100644 exercises/exercise-properties/mymateriallaw.hh create mode 100644 exercises/extradoc/exercise1_nonisothermal.png create mode 100644 exercises/extradoc/exercise1_setup.png create mode 100644 exercises/extradoc/exercise2_properties.png create mode 100644 exercises/extradoc/exercise3_a_solution.png create mode 100644 exercises/extradoc/exercise3_a_solution2.png create mode 100644 exercises/extradoc/exercise3_setup.png create mode 100644 exercises/solution/CMakeLists.txt create mode 100644 exercises/solution/ex1/CMakeLists.txt create mode 100644 exercises/solution/ex1/exercise1.input create mode 100644 exercises/solution/ex1/exercise1_2p2c.cc create mode 100644 exercises/solution/ex1/exercise1_2pni_solution.cc create mode 100644 exercises/solution/ex1/injection2p2cproblem.hh create mode 100644 exercises/solution/ex1/injection2pniproblem.hh create mode 100644 exercises/solution/ex1/injection2pspatialparams.hh create mode 100644 exercises/solution/ex2/CMakeLists.txt create mode 100644 exercises/solution/ex2/exercise2.input create mode 100644 exercises/solution/ex2/exercise2_solution.cc create mode 100644 exercises/solution/ex2/injection2p2cproblem.hh create mode 100644 exercises/solution/ex2/injection2p2cspatialparams.hh create mode 100644 exercises/solution/ex2/mylocalresidual.hh create mode 100644 exercises/solution/ex2/mymateriallaw.hh create mode 100644 exercises/solution/ex3/h2omycompressiblecomponent.hh create mode 100644 exercises/solution/ex3/mycompressiblecomponent.hh create mode 100644 exercises/solution/ex3/myincompressiblecomponent.hh diff --git a/exercises/CMakeLists.txt b/exercises/CMakeLists.txt index e69de29b..13f2f3a1 100644 --- a/exercises/CMakeLists.txt +++ b/exercises/CMakeLists.txt @@ -0,0 +1,7 @@ +# add a target that builds all exercise solutions +add_custom_target(test_exercises) + +add_subdirectory(exercise-basic) +add_subdirectory(exercise-properties) +add_subdirectory(exercise-fluidsystem) +add_subdirectory(solution) diff --git a/exercises/exercise-basic/CMakeLists.txt b/exercises/exercise-basic/CMakeLists.txt new file mode 100644 index 00000000..4b6f8569 --- /dev/null +++ b/exercises/exercise-basic/CMakeLists.txt @@ -0,0 +1,17 @@ +# the immiscible two-phase simulation program +dune_add_test(NAME exercise1_2p + SOURCES exercise1_2p.cc + CMD_ARGS exercise1.input) + +# the compositional two-phase two-component simulation program +dune_add_test(NAME exercise1_2p2c + SOURCES exercise1_2p2c.cc + CMD_ARGS exercise1.input) + +# here, add the two-phase non-isothermal simulation program + +# add tutorial to the common target +add_dependencies(test_exercises exercise1_2p exercise1_2p2c) + +# add a symlink for the input file +dune_symlink_to_source_files(FILES "exercise1.input") diff --git a/exercises/exercise-basic/README.md b/exercises/exercise-basic/README.md new file mode 100644 index 00000000..e81ca628 --- /dev/null +++ b/exercises/exercise-basic/README.md @@ -0,0 +1,151 @@ +# Exercise #1 (DuMuX course) +<br> +## Problem set-up + +N$`_2`$ is injected in an aquifer previously saturated with water with an injection rate of 0.0001 kg/(s*m$`^2`$). +The aquifer is situated 2700 m below sea level and the domain size is 60 m x 40 m. It consists of two layers, a moderately permeable one ($`\Omega_1`$) and a lower permeable one ($`\Omega_2`$). + +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/raw/master/tutorial/extradoc/exercise1_setup.png" width="1000"> + +## Preparing the exercise + +* Navigate to the directory `dumux/tutorial/ex1` + +_Exercise 1_ deals with two problems: a two-phase immiscible problem (__2p__) and a two-phase compositional problem (__2p2c__). They both set up the same scenario with the difference that the 2p2c assumes a miscible fluid state for the two fluids (water and gaseous N$`_2`$) and the 2p model assumes an immiscible fluid state. + +<br><br> +### Task 1: Getting familiar with the code +<hr> + +Locate all the files you will need for this exercise +* The __main file__ for the __2p__ problem : `exercise1_2p.cc` +* The __main file__ for the __2p2c__ problem : `exercise1_2p2c.cc` +* The __problem file__ for the __2p__ problem: `injection2pproblem.hh` +* The __problem file__ for the __2p2c__ problem: `injection2p2cproblem.hh` +* The shared __spatial parameters file__: `injection2pspatialparams.hh` +* The shared __input file__: `exercise1.input` + +<hr><br><br> +### Task 2: Compiling and running an executable +<hr> + +* Change to the build-directory + +```bash +cd ../../build-cmake/tutorial/ex1 +``` + +* Compile both executables `exercise1_2p` and `exercise1_2p2c` + +```bash +make exercise1_2p exercise1_2p2c +``` + +* Execute the two problems and inspect the result + +```bash +./exercise1_2p exercise1.input +./exercise1_2p2c exercise1.input +``` + +* you can look at the results with paraview + +```bash +paraview injection-2p2c.pvd +``` + +<hr><br><br> +### Task 3: Changing input parameters +<hr> + +In the input file `exercise1.input` you can find the following section + +```ini +[SpatialParams] +EntryPressureAquitard = 4.5e4 +EntryPressureAquifer = 1e4 +``` + +* Change the values for the aquitard entry pressure in the input file to a lower value and compare the results with the previous solution. You don't need to recompile the executable. + +<hr><br><br> +### Task 4: Runtime parameters +<hr> + +The injection rate is currently hard-coded in `injection2p2cproblem.hh` to $`1e-4 kg/(s m^2)`$. + +```c++ + // set the Neumann values for the Nitrogen component balance + // convert from units kg/(s*m^2) to mole/(s*m^2) +values[Indices::contiNEqIdx] = -1e-4/FluidSystem::molarMass(FluidSystem::nCompIdx); +values[Indices::contiWEqIdx] = 0.0; +``` + +We want to be able to set it at runtime. To this end, +* use the following DuMuX macro to read a runtime parameter from the input file + +```c++ +// read the injection rate from the input file at run time +totalAreaSpecificInflow_ = getParam<TYPE>("GROUPNAME.PARAMNAME"); +``` + +* Replace +`<TYPE>`,`<GROUPNAME>`,`<PARAMNAME>` by what is appropriate for your case: + * `<TYPE>` is the type of the parameter to read + * `<GROUPNAME>` is the group in the input file + * `<PARAMNAME>` is the name of the parameter in the input file + +Note that due to the way the macro works, the names are specified as plain text within the "quotation marks".`<GROUPNAME>` and `<PARAMNAME>` need to be separated by a dot (.). +Follow the instructions given as a + +```c++ +// TODO: dumux-course-task +``` +in the `injection2p2cproblem.hh` file and also remember to also set the parameter totalAreaSpecificInflow in the input file. + +* Check the influence of that parameter on the simulation result by rerunning the simulation with different injection rates. Remember to also set the parameter totalAreaSpecificInflow in the input file. + +Since you have changed your header file, you have to recompile the program. + +<hr><br><br> +### 5. Setting up a new executable (for a non-isothermal simulation) +<hr> + +* Copy the main file `exercise1_2p.cc` and rename it to `exercise1_2pni.cc` +* In `exercise1_2pni.cc`, include the header `injection2pniproblem.hh` instead of `injection2pproblem.hh`. +* In `exercise1_2pni.cc`, change `Injection2pCCTypeTag` to `Injection2pNICCTypeTag` in the line `using TypeTag = TTAG(Injection2pCCTypeTag);` +* Add a new executable in `CMakeLists.txt` by adding the lines + +```cmake +# the two-phase non-isothermal simulation program +dune_add_test(NAME exercise1_2pni + SOURCES exercise1_2pni.cc + CMD_ARGS exercise1.input) +``` + +* Test that everything compiles without error + +```bash +make # should rerun cmake +make exercise1_2pni # builds new executable +``` + +<hr><br><br> +### 6. Setting up a non-isothermal __2pni__ test problem +<hr> + +* Open the file `injection2pniproblem.hh`. It is a copy of the `injection2pproblem.hh` with some useful comments on how to implement a non-isothermal model. Look for comments containing + +```c++ +// TODO: dumux-course-task +``` + +* The following set-up should be realized: + + __Boundary conditions:__ Dirichlet conditions for the temperature with a temperature gradient of 0.03 K/m and a starting temperature of 283 K. + + __Initial conditions:__ The same temperature gradient as in the boundary conditions with an additional lens (with position: 20 < x < 30, 5 < y < 35), which has an initial temperature of 380 K. + +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/raw/master/tutorial/extradoc/exercise1_nonisothermal.png" width="800"> + +The non-isothermal model requires additional parameters like the thermal conductivity of the solid component. They are already implemented and set in `exercise1.input`, you just need to _uncomment_ them. diff --git a/exercises/exercise-basic/exercise1.cc b/exercises/exercise-basic/exercise1.cc new file mode 100644 index 00000000..3bf3e8d8 --- /dev/null +++ b/exercises/exercise-basic/exercise1.cc @@ -0,0 +1,197 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \brief The main file for the two-phase porousmediumflow problem of exercise 1 + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/newtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +#include "injection2pproblem.hh" + +//////////////////////// +// the main function +//////////////////////// +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2pCCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); + while (!timeLoop->finished()) + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + // output to vtk + vtkWriter.write(timeLoop->time()); + } + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/exercise-basic/exercise1.input b/exercises/exercise-basic/exercise1.input new file mode 100644 index 00000000..792afb3c --- /dev/null +++ b/exercises/exercise-basic/exercise1.input @@ -0,0 +1,29 @@ +[TimeLoop] +DtInitial = 3600 # in seconds +TEnd = 3.154e9 # in seconds, i.e ten years + +[Grid] +LowerLeft = 0 0 +UpperRight = 60 40 +Cells = 24 16 + +[Problem] +Name = injection +OnlyPlotMaterialLaws = true +AquiferDepth = 2700.0 # m +InjectionDuration = 2.628e6 # in seconds, i.e. one month + +#TODO: dumux-course-task: +#set totalAreaSpecificInflow + +[SpatialParams] +PermeabilityAquitard = 1e-15 # m^2 +EntryPressureAquitard = 4.5e4 # Pa +PermeabilityAquifer = 1e-12 # m^2 +EntryPressureAquifer = 1e4 # Pa + +# these parameters are only used in the nonisothermal model. Uncomment them for that +#[Component] +#SolidDensity = 2700 # solid density of granite +#SolidThermalConductivity = 2.8 # solid thermal conducitivity of granite +#SolidHeatCapacity = 790 # solid heat capacity of granite diff --git a/exercises/exercise-basic/exercise1_2p.cc b/exercises/exercise-basic/exercise1_2p.cc new file mode 100644 index 00000000..558f2d0f --- /dev/null +++ b/exercises/exercise-basic/exercise1_2p.cc @@ -0,0 +1,200 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \brief The main file for the two-phase porousmediumflow problem of exercise 1 + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/newtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +// The problem file, where setup-specific boundary and initial conditions are defined. +#include "injection2pproblem.hh" + +//////////////////////// +// the main function +//////////////////////// +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2pCCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + // getParam<TYPE>("GROUPNAME.PARAMNAME") reads and sets parameter PARAMNAME + // of type TYPE given in the group GROUPNAME from the input file + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); + while (!timeLoop->finished()) + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + // output to vtk + vtkWriter.write(timeLoop->time()); + } + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/exercise-basic/exercise1_2p2c.cc b/exercises/exercise-basic/exercise1_2p2c.cc new file mode 100644 index 00000000..c2b46ea1 --- /dev/null +++ b/exercises/exercise-basic/exercise1_2p2c.cc @@ -0,0 +1,201 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \brief The main file for the 2p2c porousmediumflow problem in exercise1 + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/valgrind.hh> +#include <dumux/common/dumuxmessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/privarswitchnewtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +// The problem file, where setup-specific boundary and initial conditions are defined. +#include "injection2p2cproblem.hh" + +//////////////////////// +// the main function +//////////////////////// +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2p2cCCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + // getParam<TYPE>("GROUPNAME.PARAMNAME") reads and sets parameter PARAMNAME + // of type TYPE given in the group GROUPNAME from the input file + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using PrimaryVariableSwitch = typename GET_PROP_TYPE(TypeTag, PrimaryVariableSwitch); + using NewtonSolver = Dumux::PriVarSwitchNewtonSolver<Assembler, LinearSolver, PrimaryVariableSwitch>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); + while (!timeLoop->finished()) + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + // output to vtk + vtkWriter.write(timeLoop->time()); + } + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/exercise-basic/injection2p2cproblem.hh b/exercises/exercise-basic/injection2p2cproblem.hh new file mode 100644 index 00000000..3c30c2a2 --- /dev/null +++ b/exercises/exercise-basic/injection2p2cproblem.hh @@ -0,0 +1,275 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The two-phase porousmediumflow problem for exercise 1 + */ +#ifndef DUMUX_EX1_INJECTION_2P2C_PROBLEM_HH +#define DUMUX_EX1_INJECTION_2P2C_PROBLEM_HH + +#include <dumux/discretization/cellcentered/tpfa/properties.hh> +#include <dumux/porousmediumflow/2p2c/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> + +#include "injection2pspatialparams.hh" + +namespace Dumux { + +// forward declare problem +template <class TypeTag> +class Injection2p2cProblem; + +namespace Properties { +NEW_TYPE_TAG(Injection2p2cTypeTag, INHERITS_FROM(TwoPTwoC)); +NEW_TYPE_TAG(Injection2p2cCCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2p2cTypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2p2cTypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2p2cTypeTag, Problem, Injection2p2cProblem<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2p2cTypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set fluid configuration +SET_TYPE_PROP(Injection2p2cTypeTag, FluidSystem, FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), /*useComplexRelations=*/ false>); + +// Define whether mole(true) or mass (false) fractions are used +SET_BOOL_PROP(Injection2p2cTypeTag, UseMoles, true); +} // end namespace Properties + +/*! + * \ingroup TwoPTwoCModel + * \ingroup ImplicitTestProblems + * \brief Gas injection problem where a gas (here nitrogen) is injected into a fully + * water saturated medium. During buoyancy driven upward migration the gas + * passes a high temperature area. + * + * The domain is sized 60 m times 40 m. + * + * For the mass conservation equation neumann boundary conditions are used on + * the top, on the bottom and on the right of the domain, while dirichlet conditions + * 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 + * boundaries. + * + * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a + * + * This problem uses the \ref TwoPModel model. + */ +template<class TypeTag> +class Injection2p2cProblem : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + Injection2p2cProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // 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, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + + // TODO: dumux-course-task + // Get the specific inflow of 1e-4 kg/(s m^2) from the input file (totalAreaSpecificInflow_) here as it is done for the injectionDuration_. + + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + std::string name() const + { return name_+"-2p2c"; } + + /*! + * \brief Returns the temperature \f$ K \f$ + */ + Scalar temperature() const + { + return 273.15 + 30; // [K] + } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + // if we are inside the injection zone set inflow Neumann boundary conditions + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // TODO: dumux-course-task + //instead of setting -1e-4 here directly use totalAreaSpecificInflow_ in the computation + + // inject nitrogen. negative values mean injection + // convert from units kg/(s*m^2) to mole/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -1e-4/FluidSystem::molarMass(FluidSystem::N2Idx); + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + } + + return values; + } + + // \} + + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + values.setState(Indices::firstPhaseOnly); + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(temperature(), 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + // initially we have some nitrogen dissolved + // saturation mole fraction would be + // moleFracLiquidN2 = (pw + pc + p_vap^sat)/henry; + const Scalar moleFracLiquidN2 = pw*0.95/BinaryCoeff::H2O_N2::henry(temperature()); + + // note that because we start with a single phase system the primary variables + // are pl and x^w_N2. This will switch as soon after we start injecting to a two + // phase system so the primary variables will be pl and Sn (non-wetting saturation). + values[Indices::pressureIdx] = pw; + values[Indices::switchIdx] = moleFracLiquidN2; + + return values; + } + + // \} + + //! set the time for the time dependent boundary conditions (called from main) + void setTime(Scalar time) + { time_ = time; } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar injectionDuration_; //! Duration of the injection in seconds + Scalar time_; + //TODO: dumux-course-task + //define the Scalar totalAreaSpecificInflow_ here + +}; + +} //end namespace Dumux + +#endif diff --git a/exercises/exercise-basic/injection2pniproblem.hh b/exercises/exercise-basic/injection2pniproblem.hh new file mode 100644 index 00000000..ad241c88 --- /dev/null +++ b/exercises/exercise-basic/injection2pniproblem.hh @@ -0,0 +1,266 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The two-phase nonisothermal porousmediumflow problem for exercise 1 + */ + +#ifndef DUMUX_EX1_INJECTION_PROBLEM_2PNI_HH +#define DUMUX_EX1_INJECTION_PROBLEM_2PNI_HH + +#include <dumux/discretization/cellcentered/tpfa/properties.hh> +#include <dumux/porousmediumflow/2p/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> + +#include "injection2pspatialparams.hh" + +namespace Dumux { + +// forward declare problem +template <class TypeTag> +class InjectionProblem2PNI; + +namespace Properties +{ + /*! +* TODO:dumux-course-task: +* inherit from the TwoPNI model instead of TwoP here +*/ +NEW_TYPE_TAG(Injection2pNITypeTag, INHERITS_FROM(TwoP)); +NEW_TYPE_TAG(Injection2pNICCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2pNITypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2pNITypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2pNITypeTag, Problem, InjectionProblem2PNI<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2pNITypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set fluid configuration +SET_TYPE_PROP(Injection2pNITypeTag, FluidSystem, FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), false>); +} // end namespace Properties + +/*! + * \ingroup TwoPModel + * \ingroup ImplicitTestProblems + * \brief Gas injection problem where a gas (here nitrogen) is injected into a fully + * water saturated medium. During buoyancy driven upward migration the gas + * passes a high temperature area. + * + * The domain is sized 60 m times 40 m. + * + * For the mass conservation equation neumann boundary conditions are used on + * the top, on the bottom and on the right of the domain, while dirichlet conditions + * 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 + * boundaries. + * + * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a + * + * This problem uses the \ref TwoPModel model. + */ +template<class TypeTag> +class InjectionProblem2PNI : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + InjectionProblem2PNI(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // 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, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + std::string name() const + { return "injection-2pni"; } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + // if we are inside the injection zone set inflow Neumann boundary conditions + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // inject nitrogen. negative values mean injection + // units kg/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -1e-4; + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + + /*! + * TODO:dumux-course-task: + * dumux-course-task: + * set Neumann noflow conditions for the energy equation everywhere + * hint: use Indices::energyEqIdx) for that + */ + } + + return values; + } + + // \} + + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(283.15, 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + values[Indices::pressureIdx] = pw; + values[Indices::saturationIdx] = 0.0; + + /*! + * TODO:dumux-course-task: + * set a temperature gradient of 0.03 K per m beginning at 283 K here. + * Hint: you can use aquiferDepth_ and the globalPos similar to the pressure gradient + * use globalPos[0] and globalPos[1] to implement the high temperature lens with 380 K + * Hint : use Indices::temperatureIdx to address the initial values for temperature + */ + return values; + } + + // \} + + //! set the time for the time dependent boundary conditions (called from main) + void setTime(Scalar time) + { time_ = time; } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar injectionDuration_; //! Duration of the injection in seconds + Scalar time_; +}; + +} //end namespace Dumux + +#endif diff --git a/exercises/exercise-basic/injection2pproblem.hh b/exercises/exercise-basic/injection2pproblem.hh new file mode 100644 index 00000000..46b5d389 --- /dev/null +++ b/exercises/exercise-basic/injection2pproblem.hh @@ -0,0 +1,260 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The two-phase porousmediumflow problem for exercise 1 + */ + +#ifndef DUMUX_EX1_INJECTION_PROBLEM_2P_HH +#define DUMUX_EX1_INJECTION_PROBLEM_2P_HH + +#include <dumux/discretization/cellcentered/tpfa/properties.hh> +#include <dumux/porousmediumflow/2p/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> + +#include "injection2pspatialparams.hh" + +namespace Dumux { + +// forward declare problem +template <class TypeTag> +class InjectionProblem2P; + +namespace Properties { +// define the TypeTag for this problem with a cell-centered two-point flux approximation spatial discretization. +NEW_TYPE_TAG(Injection2pTypeTag, INHERITS_FROM(TwoP)); +NEW_TYPE_TAG(Injection2pCCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2pTypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2pTypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2pTypeTag, Problem, InjectionProblem2P<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2pTypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set fluid configuration +SET_TYPE_PROP(Injection2pTypeTag, FluidSystem, FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), /*useComplexRelations=*/ false>); +} // end namespace Properties + +/*! + * \ingroup TwoPModel + * \ingroup ImplicitTestProblems + * \brief Gas injection problem where a gas (here nitrogen) is injected into a fully + * water saturated medium. During buoyancy driven upward migration the gas + * passes a high temperature area. + * + * The domain is sized 60 m times 40 m. + * + * For the mass conservation equation neumann boundary conditions are used on + * the top, on the bottom and on the right of the domain, while dirichlet conditions + * 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 + * boundaries. + * + * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a + * + * This problem uses the \ref TwoPModel model. + */ +template<class TypeTag> +class InjectionProblem2P : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + InjectionProblem2P(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // 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, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + std::string name() const + { return name_+"-2p"; } + + /*! + * \brief Returns the temperature \f$ K \f$ + */ + Scalar temperature() const + { + return 273.15 + 30; // [K] + } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + // set the left of the domain (with the global position in "0 = x" direction as a Dirichlet boundary + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + // set all other as Neumann boundaries + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + // if we are inside the injection zone set inflow Neumann boundary conditions + // using < boundary + eps_ or > boundary - eps_ is safer for floating point comparisons + // than using <= or >= as it is robust with regard to imprecision introduced by rounding errors. + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // inject nitrogen. negative values mean injection + // units kg/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -1e-4; + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + } + + return values; + } + + // \} + + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(temperature(), 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + values[Indices::pressureIdx] = pw; + values[Indices::saturationIdx] = 0.0; + + return values; + } + + // \} + + //! set the time for the time dependent boundary conditions (called from main) + void setTime(Scalar time) + { time_ = time; } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar injectionDuration_; //! Duration of the injection in seconds + Scalar time_; +}; + +} //end namespace Dumux + +#endif diff --git a/exercises/exercise-basic/injection2pspatialparams.hh b/exercises/exercise-basic/injection2pspatialparams.hh new file mode 100644 index 00000000..fac5a1da --- /dev/null +++ b/exercises/exercise-basic/injection2pspatialparams.hh @@ -0,0 +1,171 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ + +#ifndef DUMUX_EX1_INJECTION_SPATIAL_PARAMS_HH +#define DUMUX_EX1_INJECTION_SPATIAL_PARAMS_HH + +#include <dumux/material/spatialparams/fv.hh> +#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> +#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> + +#include <dumux/io/gnuplotinterface.hh> +#include <dumux/io/plotmateriallaw.hh> + +namespace Dumux { + +/*! + * \ingroup TwoPTwoCModel + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ +template<class FVGridGeometry, class Scalar> +class InjectionSpatialParams +: public FVSpatialParams<FVGridGeometry, Scalar, InjectionSpatialParams<FVGridGeometry, Scalar>> +{ + using ThisType = InjectionSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVSpatialParams<FVGridGeometry, Scalar, ThisType>; + using GridView = typename FVGridGeometry::GridView; + + // get the dimensions of the simulation domain from GridView + static const int dimWorld = GridView::dimensionworld; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + // export permeability type + using PermeabilityType = Scalar; + + using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; + using MaterialLawParams = typename MaterialLaw::Params; + + /*! + * \brief The constructor + * + * \param fvGridGeometry The finite volume grid geometry + */ + InjectionSpatialParams(std::shared_ptr<const FVGridGeometry>& fvGridGeometry) + : ParentType(fvGridGeometry) + { + aquiferHeightFromBottom_ = 30.0; + + // intrinsic permeabilities + aquitardK_ = getParam<Scalar>("SpatialParams.PermeabilityAquitard"); + aquiferK_ = getParam<Scalar>("SpatialParams.PermeabilityAquifer"); + + // porosities + aquitardPorosity_ = 0.2; + aquiferPorosity_ = 0.4; + + // residual saturations + aquitardMaterialParams_.setSwr(0.2); + aquitardMaterialParams_.setSnr(0.0); + aquiferMaterialParams_.setSwr(0.2); + aquiferMaterialParams_.setSnr(0.0); + + // parameters for the Brooks-Corey law + aquitardMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquitard")); + aquiferMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquifer")); + aquitardMaterialParams_.setLambda(2.0); + aquiferMaterialParams_.setLambda(2.0); + } + + /*! + * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + { + // here, either aquitard or aquifer permeability are returned, depending on the global position + if (isInAquitard_(globalPos)) + return aquitardK_; + return aquiferK_; + } + + /*! + * \brief Define the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { + // here, either aquitard or aquifer porosity are returned, depending on the global position + if (isInAquitard_(globalPos)) + return aquitardPorosity_; + return aquiferPorosity_; + } + + /*! + * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). + * + * \param globalPos The global position + * + * \return the material parameters object + */ + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardMaterialParams_; + return aquiferMaterialParams_; + } + + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The position of the center of the element + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { return FluidSystem::H2OIdx; } + +private: + + static constexpr Scalar eps_ = 1e-6; + + // provides a convenient way distinguishing whether a given location is inside the aquitard + bool isInAquitard_(const GlobalPosition &globalPos) const + { + // globalPos[dimWorld-1] is the y direction for 2D grids or the z direction for 3D grids + return globalPos[dimWorld-1] > aquiferHeightFromBottom_ + eps_; + } + + Scalar aquitardK_; + Scalar aquiferK_; + Scalar aquiferHeightFromBottom_; + + + Scalar aquitardPorosity_; + Scalar aquiferPorosity_; + + MaterialLawParams aquitardMaterialParams_; + MaterialLawParams aquiferMaterialParams_; +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/exercise-dunemodule/README.md b/exercises/exercise-dunemodule/README.md new file mode 100644 index 00000000..dff7efc9 --- /dev/null +++ b/exercises/exercise-dunemodule/README.md @@ -0,0 +1,92 @@ +# Exercise #4 (DuMuX course) + +This exercise describes how to create a new DuMuX module +and how to create a corresponding GitLab project. + +This is the suggested +workflow to develop code on top of DuMuX. + +### Task 1: Create new dune module +<hr> + +* Execute the following command (bash environment) in the top-folder, i.e. above the dumux folder + +```bash +./dune-common/bin/duneproject +``` + +* Follow the introductions and specify + * as name of the new module: `dumux-example` + * as module dependencies: `dumux` + * a version at your choice + * your email address + +<hr><br><br> +### Task 2: Rerun dunecontrol to configure your new project +<hr> + +The following command will configure your new module + +```bash +./dune-common/bin/dunecontrol --opts=<opts file> --only=dumux-example all +``` + +<hr><br><br> +### Task 3: Create a new test case within your new DuMuX module +<hr> + +* Create a new folder (in your module folder), e.g. `appl` + +```bash +mkdir appl +``` + +* Copy some test case from the dumux module, e.g. test_box1p + * Copy the problem, spatialparams, cc source file, input file + +* Adjust the CMakeLists.txt file to include your new subdirectory + +* Add a new CMakeLists.txt in the folder `appl` with the content + +```cmake +# add a new box 1p test +add_dumux_test(test_box1p test_box1p test_box1p.cc test_box1p) + +# link the input file to the build folder +dune_symlink_to_source_files(FILES test_box1p.input) +``` + +* Reconfigure your module by running in the topmost directory of your new module + +```bash +cmake build-cmake +``` + +* Build and execute the test problem + +```bash +cd build-cmake +make build_tests +cd appl +./test_box1p +``` + +<hr><br><br> +### Task 4: Create a new GitLab project +<hr> + +* Login with your username and password at https://git.iws.uni-stuttgart.de/ + +Note: If you don't have an account create one. We allow anyone to host repositories +on our GitLab instance as long as it is DuMuX related. + +* Click the **New project** button + +* Specify your project name and click the **Create project** button + +* Follow the given instructions for an *existing folder* + +**Important**: Before executing the `git add .` command, you should add your cmake build folder to `.gitignore`. +The easiest way to do so is to copy the `.gitignore` file from the dumux module into your module path. If everything +worked, executing `git status` should not show `build-cmake` anymore. Never put your executables or other build files +under version control. Only source files (`*.hh`, `*.cc`, `*.input`, `CMakeLists.txt`) should be under version control. \ No newline at end of file diff --git a/exercises/exercise-fluidsystem/2p2cproblem.hh b/exercises/exercise-fluidsystem/2p2cproblem.hh new file mode 100644 index 00000000..0553b406 --- /dev/null +++ b/exercises/exercise-fluidsystem/2p2cproblem.hh @@ -0,0 +1,269 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Tutorial problem for a fully coupled twophase box model. + */ +#ifndef DUMUX_EXERCISE_THREE_B_PROBLEM_HH +#define DUMUX_EXERCISE_THREE_B_PROBLEM_HH + +// The numerical model +#include <dumux/porousmediumflow/2p2c/model.hh> + +//The box discretization +#include <dumux/discretization/box/properties.hh> + +// The base porous media box problem +#include <dumux/porousmediumflow/problem.hh> + +// Spatially dependent parameters +#include "spatialparams.hh" + +// The fluid system that is created in this exercise +#include "fluidsystems/h2omycompressiblecomponent.hh" + +namespace Dumux{ +// Forward declaration of the problem class +template <class TypeTag> class ExerciseThreeProblemTwoPTwoC; + +namespace Properties { +// Create a new type tag for the problem +NEW_TYPE_TAG(ExerciseThreeTwoPTwoCTypeTag, INHERITS_FROM(TwoPTwoC)); +NEW_TYPE_TAG(ExerciseThreeBoxTwoPTwoCTypeTag, INHERITS_FROM(BoxModel, ExerciseThreeTwoPTwoCTypeTag)); + +// Set the "Problem" property +SET_TYPE_PROP(ExerciseThreeTwoPTwoCTypeTag, Problem, ExerciseThreeProblemTwoPTwoC<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(ExerciseThreeTwoPTwoCTypeTag, SpatialParams, + ExerciseThreeSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set grid and the grid creator to be used +#if HAVE_DUNE_ALUGRID +SET_TYPE_PROP(ExerciseThreeTwoPTwoCTypeTag, Grid, Dune::ALUGrid</*dim=*/2, 2, Dune::cube, Dune::nonconforming>); +#elif HAVE_UG +SET_TYPE_PROP(ExerciseThreeTwoPTwoCTypeTag, Grid, Dune::UGGrid<2>); +#else +SET_TYPE_PROP(ExerciseThreeTwoPTwoCTypeTag, Grid, Dune::YaspGrid<2>); +#endif // HAVE_DUNE_ALUGRID + + // The fluid system property +SET_PROP(ExerciseThreeTwoPTwoCTypeTag, FluidSystem) +{ +private: + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); +public: + using type = FluidSystems::H2OMyCompressibleComponent<Scalar>; +}; + +} + +/*! + * \ingroup TwoPBoxModel + * + * \brief Tutorial problem for a fully coupled twophase box model. + */ +template <class TypeTag> +class ExerciseThreeProblemTwoPTwoC : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + + // Grid dimension + enum { dim = GridView::dimension, + dimWorld = GridView::dimensionworld + }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + + // Dumux specific types + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + +public: + ExerciseThreeProblemTwoPTwoC(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + , eps_(3e-6) + { +#if !(HAVE_DUNE_ALUGRID || HAVE_UG) + std::cout << "If you want to use simplices instead of cubes, install and use dune-ALUGrid or UGGrid." << std::endl; +#endif // !(HAVE_DUNE_ALUGRID || HAVE_UG) + + // initialize the fluid system + FluidSystem::init(); + + // set the depth of the bottom of the reservoir + depthBOR_ = this->fvGridGeometry().bBoxMax()[dimWorld-1]; + + // name of the problem and output file + name_ = getParam<std::string>("Problem.Name"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + const std::string name() const + { return name_; } + + + /*! + * \brief Returns the temperature \f$ K \f$ + */ + Scalar temperature() const + { return 283.15; } + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + + if (globalPos[0] < eps_ || globalPos[0] > this->fvGridGeometry().bBoxMax()[0] - eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables priVars; + priVars.setState(Indices::firstPhaseOnly); + priVars[Indices::pressureIdx] = 200.0e3 + 9.81*1000*(depthBOR_ - globalPos[dimWorld-1]); + priVars[Indices::switchIdx] = 0.0; // 0 % oil saturation on left boundary + return priVars; + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + Scalar up = this->fvGridGeometry().bBoxMax()[dimWorld-1]; + // extraction of oil on the right boundary for approx. 1.e6 seconds + if (globalPos[dimWorld-1] > up - eps_ && globalPos[0] > 20 && globalPos[0] < 40) { + // oil outflux of 30 g/(m * s) on the right boundary. + // we solve for the mole balance, so we have to divide by the molar mass + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0; + values[Indices::conti0EqIdx + FluidSystem::NAPLIdx] = -3e-2/FluidSystem::MyCompressibleComponent::molarMass(); + } else { + // no-flow on the remaining Neumann-boundaries. + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0; + values[Indices::conti0EqIdx + FluidSystem::NAPLIdx] = 0; + } + + return values; + } + + // \} + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + + { + PrimaryVariables values(0.0); + values.setState(Indices::firstPhaseOnly); + + values[Indices::pressureIdx] = 200.0e3 + 9.81*1000*(depthBOR_ - globalPos[dimWorld-1]); // 200 kPa = 2 bar + values[Indices::switchIdx] = 0.0; + + return values; + } + + // \} + + /*! + * \brief Returns the source term + * + * \param values Stores the source values for the conservation equations in + * \f$ [ \textnormal{unit of primary variable} / (m^\textrm{dim} \cdot s )] \f$ + * \param globalPos The global position + */ + PrimaryVariables sourceAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + + return values; + } + + +private: + // small epsilon value + Scalar eps_; + + // depth at the bottom of the reservoir + Scalar depthBOR_; + std::string name_; +}; +} + +#endif diff --git a/exercises/exercise-fluidsystem/2pproblem.hh b/exercises/exercise-fluidsystem/2pproblem.hh new file mode 100644 index 00000000..fd3e3767 --- /dev/null +++ b/exercises/exercise-fluidsystem/2pproblem.hh @@ -0,0 +1,308 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Tutorial problem for a fully coupled twophase box model. + */ +#ifndef DUMUX_EXERCISE_THREE_A_PROBLEM_HH +#define DUMUX_EXERCISE_THREE_A_PROBLEM_HH + +// The numerical model +#include <dumux/porousmediumflow/2p/model.hh> + +//The box discretization +#include <dumux/discretization/box/properties.hh> + +//The grid managers +#if HAVE_DUNE_ALUGRID +#include <dune/alugrid/grid.hh> +#elif HAVE_UG +#include <dune/grid/uggrid.hh> +#else +#include <dune/grid/yaspgrid.hh> +#endif + +// The base porous media box problem +#include <dumux/porousmediumflow/problem.hh> + +// Spatially dependent parameters +#include "spatialparams.hh" + +// The water component +#include <dumux/material/components/tabulatedcomponent.hh> +#include <dumux/material/components/h2o.hh> + +// The components that will be created in this exercise +#include "components/myincompressiblecomponent.hh" +// #include "components/mycompressiblecomponent.hh" + +// We will only have liquid phases here +#include <dumux/material/fluidsystems/1pliquid.hh> + +// The two-phase immiscible fluid system +#include <dumux/material/fluidsystems/2pimmiscible.hh> + +namespace Dumux{ +// Forward declaration of the problem class +template <class TypeTag> class ExerciseThreeProblemTwoP; + +namespace Properties { +// Create a new type tag for the problem +NEW_TYPE_TAG(ExerciseThreeTwoPTypeTag, INHERITS_FROM(TwoP)); +NEW_TYPE_TAG(ExerciseThreeBoxTwoPTypeTag, INHERITS_FROM(BoxModel, ExerciseThreeTwoPTypeTag)); + +// Set the "Problem" property +SET_TYPE_PROP(ExerciseThreeTwoPTypeTag, Problem, ExerciseThreeProblemTwoP<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(ExerciseThreeTwoPTypeTag, SpatialParams, + ExerciseThreeSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set grid and the grid creator to be used +#if HAVE_DUNE_ALUGRID +SET_TYPE_PROP(ExerciseThreeTwoPTypeTag, Grid, Dune::ALUGrid</*dim=*/2, 2, Dune::cube, Dune::nonconforming>); +#elif HAVE_UG +SET_TYPE_PROP(ExerciseThreeTwoPTypeTag, Grid, Dune::UGGrid<2>); +#else +SET_TYPE_PROP(ExerciseThreeTwoPTypeTag, Grid, Dune::YaspGrid<2>); +#endif // HAVE_DUNE_ALUGRID + +// we use the immiscible fluid system here +SET_PROP(ExerciseThreeTwoPTypeTag, FluidSystem) +{ +private: + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using TabulatedH2O = Components::TabulatedComponent<Components::H2O<Scalar>>; + using WettingPhase = typename FluidSystems::OnePLiquid<Scalar, TabulatedH2O>; + /*! + * Uncomment first line and comment second line for using the incompressible component + * Uncomment second line and comment first line for using the compressible component + */ + using NonWettingPhase = typename FluidSystems::OnePLiquid<Scalar, MyIncompressibleComponent<Scalar> >; + // using NonWettingPhase = typename FluidSystems::OnePLiquid<Scalar, MyCompressibleComponent<Scalar> >; + +public: + using type = typename FluidSystems::TwoPImmiscible<Scalar, WettingPhase, NonWettingPhase>; +}; + +} + +/*! + * \ingroup TwoPBoxModel + * + * \brief Tutorial problem for a fully coupled twophase box model. + */ +template <class TypeTag> +class ExerciseThreeProblemTwoP : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + + // Grid dimension + enum { dim = GridView::dimension, + dimWorld = GridView::dimensionworld + }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + + // Dumux specific types + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + enum { + waterPressureIdx = Indices::pressureIdx, + naplSaturationIdx = Indices::saturationIdx, + contiWEqIdx = Indices::conti0EqIdx + FluidSystem::comp0Idx, // water transport equation index + contiNEqIdx = Indices::conti0EqIdx + FluidSystem::comp1Idx // napl transport equation index + }; + +public: + ExerciseThreeProblemTwoP(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + , eps_(3e-6) + { +#if !(HAVE_DUNE_ALUGRID || HAVE_UG) + std::cout << "If you want to use simplices instead of cubes, install and use dune-ALUGrid or UGGrid." << std::endl; +#endif // !(HAVE_DUNE_ALUGRID || HAVE_UG) + + // initialize the tables for the water properties + std::cout << "Initializing the tables for the water properties" << std::endl; + Components::TabulatedComponent<Components::H2O<Scalar>>::init(/*tempMin=*/273.15, + /*tempMax=*/623.15, + /*numTemp=*/100, + /*pMin=*/0.0, + /*pMax=*/20e6, + /*numP=*/200); + + // set the depth of the bottom of the reservoir + depthBOR_ = this->fvGridGeometry().bBoxMax()[dimWorld-1]; + + // name of the problem and output file + name_ = getParam<std::string>("Problem.Name"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + const std::string name() const + { return name_; } + + + /*! + * \brief Returns the temperature \f$ K \f$ + */ + Scalar temperature() const + { return 283.15; } + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + + if (globalPos[0] < eps_ || globalPos[0] > this->fvGridGeometry().bBoxMax()[0] - eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables priVars; + + priVars[waterPressureIdx] = 200.0e3 + 9.81*1000*(depthBOR_ - globalPos[dimWorld-1]); // 200 kPa = 2 bar + priVars[naplSaturationIdx] = 0.0; // 0 % oil saturation on left boundary + return priVars; + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + Scalar up = this->fvGridGeometry().bBoxMax()[dimWorld-1]; + // extraction of oil on the right boundary for approx. 1.e6 seconds + if (globalPos[dimWorld-1] > up - eps_ && globalPos[0] > 20 && globalPos[0] < 40) { + // oil outflux of 30 g/(m * s) on the right boundary. + values[contiWEqIdx] = 0; + values[contiNEqIdx] = -3e-2; + } else { + // no-flow on the remaining Neumann-boundaries. + values[contiWEqIdx] = 0; + values[contiNEqIdx] = 0; + } + + return values; + } + + // \} + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + + { + PrimaryVariables values(0.0); + + values[waterPressureIdx] = 200.0e3 + 9.81*1000*(depthBOR_ - globalPos[dimWorld-1]); // 200 kPa = 2 bar (pw) + values[naplSaturationIdx] = 0.0; // (sn) + + return values; + } + // \} + + /*! + * \brief Returns the source term + * + * \param values Stores the source values for the conservation equations in + * \f$ [ \textnormal{unit of primary variable} / (m^\textrm{dim} \cdot s )] \f$ + * \param globalPos The global position + */ + PrimaryVariables sourceAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + + return values; + } + +private: + // small epsilon value + Scalar eps_; + std::string name_; //! Problem name + + // depth at the bottom of the reservoir + Scalar depthBOR_; +}; +} + +#endif diff --git a/exercises/exercise-fluidsystem/CMakeLists.txt b/exercises/exercise-fluidsystem/CMakeLists.txt new file mode 100644 index 00000000..01a4fd79 --- /dev/null +++ b/exercises/exercise-fluidsystem/CMakeLists.txt @@ -0,0 +1,20 @@ +# executables for exercise part a & b +#part a: 2pproblem +dune_add_test(NAME exercise3_a + SOURCES exercise3.cc + COMPILE_DEFINITIONS TYPETAG=ExerciseThreeBoxTwoPTypeTag + COMPILE_ONLY # for testing purposes, ignore for the exercise + CMD_ARGS exercise3_a.input) + +#part b: 2p2cproblem +dune_add_test(NAME exercise3_b + SOURCES exercise3.cc + COMPILE_DEFINITIONS TYPETAG=ExerciseThreeBoxTwoPTwoCTypeTag + COMPILE_ONLY # for testing purposes, ignore for the exercise + CMD_ARGS exercise3_b.input) + +# add tutorial to the common target +add_dependencies(test_exercises exercise3_a exercise3_b) + +# add symlinks for the input files +add_input_file_links() diff --git a/exercises/exercise-fluidsystem/README.md b/exercises/exercise-fluidsystem/README.md new file mode 100644 index 00000000..612e88ec --- /dev/null +++ b/exercises/exercise-fluidsystem/README.md @@ -0,0 +1,216 @@ +# Exercise #3 (DuMuX course) + +The aim of this exercise is to get familiar with the _DuMuX_ way of implementing new components (fluids) and fluid systems (mixtures). In the scope of this exercise, a new fictitious component is implemented (exercise _3a_) as well as its mixture with water (exercise _3b_). + +## Problem set-up + +The domain has a size of 60 x 60 m and contains two low-permeable lenses. Initially, the domain is fully water saturated and the fictitious component is injected through the middle portion of the upper boundary by means of a Neumann boundary condition. The remaining parts of the upper and the entire lower boundary are Neumann no-flow while on the two lateral sides Dirichlet boundary conditions are applied (hydrostatic conditions for the pressure and zero saturation). + + + + +## Preparing the exercise + +* Navigate to the directory `dumux/tutorial/ex3` + +### 1. Getting familiar with the code + +Locate all the files you will need for this exercise +* The shared __main file__ : `exercise3.cc` +* The __input file__ for part a: `exercise3_a.input` +* The __problem file__ for part a: `2pproblem.hh` +* The __input file__ for part b: `exercise3_b.input` +* The __problem file__ for part b: `2p2cproblem.hh` +* The __spatial parameters file__: `spatialparams.hh` + +Furthermore you will find the following folders: +* `binarycoefficients`: Stores headers containing data/methods on binary mixtures +* `components`: Stores headers containing data/methods on pure components +* `fluidsystems`: Stores headers containing data/methods on mixtures of pure components. Uses methods from `binarycoefficients`. + +To see more components, fluidsystems and binarycoefficients implementations, have a look at the folder `dumux/material`. + +### 2. Implement a new component + +In the following, the basic steps required to set the desired fluid system are outlined. Here, this is done in the __problem file__, i.e. for this part of the exercise the code shown below is taken from the `2pproblem.hh` file. + +In this part of the exercise we will consider a system consisting of two immiscible phases. Therefore, the _TypeTag_ for this problem (`ExerciseThreeBoxTwoPTypeTag`) derives from a base _TypeTag_ (`ExerciseThreeTwoPTypeTag`) that itself derives from the `TwoP` _TypeTag_ (immiscible two-phase model properties). + +```c++ +NEW_TYPE_TAG(ExerciseThreeTwoPTypeTag, INHERITS_FROM(TwoP)); +``` + +In order to be able to derive from this _TypeTag_, the declaration of the `TwoP` _TypeTag_ has to be included. It can be found in the `2p/model.hh` header: + +```c++ +// The numerical model +#include <dumux/porousmediumflow/2p/model.hh> +``` + +Additionally, the _TypeTag_ for this problem (`ExerciseThreeBoxTwoPTypeTag`) derives from the `BoxModel` _TypeTag_, to specify properties of the discretization scheme. For a cell-centered scheme, you could derive from `CCTpfaModel` or `CCMpfaModel` instead. Again the corresponding header has to be included + +```c++ +// The discretization +#include <dumux/discretization/box/properties.hh> +``` + +As wetting phase we want to use water and we want to precompute tables on which the properties are then interpolated in order to save computational time. Thus, in a first step we have to include the following headers: + +```c++ +// The water component +#include <dumux/material/components/tabulatedcomponent.hh> +#include <dumux/material/components/h2o.hh> +``` +The non-wetting phase will be our new component, where we want to implement an incompressible and a compressible variant. The respective headers are prepared, but still incomplete. The compressible variant is still commented so that compilation does not fail when finishing the incompressible variant. + +```c++ +// The components that will be created in this exercise +#include "components/myincompressiblecomponent.hh" +// #include "components/mycompressiblecomponent.hh" +``` +As mentioned above, we want to simulate two non-mixing components. The respective fluid system is found in: + +```c++ +// The two-phase immiscible fluid system +#include <dumux/material/fluidsystems/2pimmiscible.hh> +``` + +This fluid system expects __phases__ as input and so far we have only included the components, which contain data on the pure component for all physical states. Thus, we need to include + +```c++ +// We will only have liquid phases here +#include <dumux/material/fluidsystems/1pliquid.hh> +``` + +which creates a _liquid phase_ from a given component. Finally, using all of the included classes we set the fluid system property by choosing that the non-wetting phase is a one-phase liquid (OnePLiquid) consisting of the incompressible fictitious component and that the wetting-phase consists of tabulated water in the immiscible fluid system: + + +```c++ +// we use the immiscible fluid system here +SET_PROP(ExerciseThreeTwoPTypeTag, FluidSystem) +{ +private: + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using TabulatedH2O = Components::TabulatedComponent<Components::H2O<Scalar>>; + using WettingPhase = typename FluidSystems::OnePLiquid<Scalar, TabulatedH2O>; + /*! + * Uncomment first line and comment second line for using the incompressible component + * Uncomment second line and comment first line for using the compressible component + */ + using NonWettingPhase = typename FluidSystems::OnePLiquid<Scalar, MyIncompressibleComponent<Scalar> >; + // using NonWettingPhase = typename FluidSystems::OnePLiquid<Scalar, MyCompressibleComponent<Scalar> >; + +public: + using type = typename FluidSystems::TwoPImmiscible<Scalar, WettingPhase, NonWettingPhase>; +}; +``` + +### 2.1. Incompressible component + +Open the file `myincompressiblecomponent.hh`. You can see in line 42 that a component should always derive from the _Base_ class (see `dumux/material/components/base.hh`), which defines the interface of a _DuMuX_ component with possibly required functions to be overloaded by the actual implementation. Additionally it is required for liquids to derive from the _Liquid_ class (see `dumux/material/components/liquid.hh`), for gases to derive from the _Gas_ class (see `dumux/material/components/gas.hh`) and for solids to derive from the _Solid_ class (see `dumux/material/components/solid.hh`), with functions specific to liquid, gas or solid. + +```c++ +/*! + * \ingroup Components + * \brief A ficitious component to be implemented in exercise 3. + * + * \tparam Scalar The type used for scalar values + */ +template <class Scalar> +class MyIncompressibleComponent +: public Components::Base<Scalar, MyIncompressibleComponent<Scalar> > +, public Components::Liquid<Scalar, MyIncompressibleComponent<Scalar> > +``` + +__Task__: + +Implement an incompressible component into the file `myincompressiblecomponent.hh`, which has the following specifications: + +| Parameter | unit | value | +| -----| --------| -------- | +| $`M`$ | $`Kg/mol`$ | $`131.39 \cdot 10^{-3}`$ | +| $`\rho_{liquid}`$ | $`Kg/m^3`$ | $`1460`$ | +| $`\mu_{liquid}`$ | $`Pa \cdot s`$ | $`5.7 \cdot 10^{-4}`$ | + +In order to do so, have a look at the files `dumux/material/components/base.hh` and `dumux/material/components/liquid.hh` to see how the interfaces are defined and overload them accordingly. + +In order to execute the program, change to the build directory and compile and execute the program by typing + +```bash +cd build-cmake/tutorial/ex3 +make exercise3_a +./exercise3_a exercise3_a.input +``` + +The saturation distribution of the nonwetting phase at the final simulation time should look like this: + + + +### 2.2. Compressible component + +We now want to implement a pressure-dependent density for our component. Open the file `mycompressiblecomponent.hh` and copy in the functions you implemented for the incompressible variant. Now substitute the method that returns the density by the following expression: + +$`\displaystyle \rho_{MyComp} = \rho_{min} + \frac{ \rho_{max} - \rho_{min} }{ 1 + \rho_{min}*e^{-1.0*k*(\rho_{max} - \rho_{min})*p} } `$ + +where $`p`$ is the pressure and $`\rho_{min} = 1440 `$, $`\rho_{max} = 1480 `$ and $`k = 5 \cdot 10^{-7} `$. Also, make sure the header is included in the `2pproblem.hh` file by uncommenting line 45. Furthermore, the new component has to be set as the non-wetting phase in the fluid system, i.e. comment line 90 and uncomment line 91. The non-wetting density distribution at the final simulation time should look like this: + + + +### 3. Implement a new fluid system + +The problem file for this part of the exercise is `2p2cproblem.hh`. We now want to implement a new fluid system consisting of two liquid phases, which are water and the previously implemented compressible component. We will consider compositional effects, which is why we now have to derive our _TypeTag_ (`ExerciseThreeBoxTwoPTwoCTypeTag`) from a _TypeTag_ (`ExerciseThreeTwoPTwoCTypeTag`) that derives from the `TwoPTwoC` model _TypeTag_: + +```c++ +// The numerical model +#include <dumux/porousmediumflow/2p2c/model.hh> +``` + +```c++ +// Create a new type tag for the problem +NEW_TYPE_TAG(ExerciseThreeTwoPTwoCTypeTag, INHERITS_FROM(TwoPTwoC)); +NEW_TYPE_TAG(ExerciseThreeBoxTwoPTwoCTypeTag, INHERITS_FROM(BoxModel, ExerciseThreeTwoPTwoCTypeTag)); +``` + +The new fluid system is to be implemented in the file `fluidsystems/h2omycompressiblecomponent.hh`. This is already included in the problem and the fluid system property is set accordingly. + +```c++ +// The fluid system that is created in this exercise +#include "fluidsystems/h2omycompressiblecomponent.hh" +``` + +```c++ +// The fluid system property +SET_PROP(ExerciseThreeTwoPTwoCTypeTag, FluidSystem) +{ +private: + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); +public: + using type = FluidSystems::H2OMyCompressibleComponent<Scalar>; +}; +``` + +In the `fluidsystems/h2omycompressiblecomponent.hh` file, your implemented component and the binary coefficient files are already included. + +```c++ +// the ficitious component that was created in exercise 3a +#include <tutorial/ex3/components/mycompressiblecomponent.hh> + +// the binary coefficients corresponding to this fluid system +#include <tutorial/ex3/binarycoefficients/h2omycompressiblecomponent.hh> +``` + +__Task__: + +Under the assumption that one molecule of `MyCompressibleComponent` displaces exactly one molecule of water, the water phase density can be expressed as follows: + +$` \rho_{w} = \frac{ \rho_{w, pure} }{ M_{H_2O} }*(M_{H_2O}*x_{H_2O} + M_{MyComponent}*x_{MyComponent}) `$ + +Implement this dependency in the `density()` method in the fluid system. In order to compile and execute the program run + +```bash +cd build-cmake/tutorial/ex3 +make exercise3_b +./exercise3_b exercise3_b.input +``` + +You will observe an error message and an abortion of the program. This is due to the fact that in order for the constraint solver and other mechanisms in the two-phase two-component model to work, an additional functionality in the component has to be implemented. The model has to know the vapour pressure. As in the previous exercise, check the `dumux/material/components/base.hh` file for this function and implement it into `mycompressiblecomponent.hh`. For the vapour pressure, use a value of $`3900`$ Pa. diff --git a/exercises/exercise-fluidsystem/binarycoefficients/h2omycompressiblecomponent.hh b/exercises/exercise-fluidsystem/binarycoefficients/h2omycompressiblecomponent.hh new file mode 100644 index 00000000..843a69a6 --- /dev/null +++ b/exercises/exercise-fluidsystem/binarycoefficients/h2omycompressiblecomponent.hh @@ -0,0 +1,74 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Binary coefficients for water and a ficticious component implemented in tutorial exercise 3a. + */ +#ifndef DUMUX_BINARY_COEFF_H2O_MYCOMPRESSIBLECOMPONENT_HH +#define DUMUX_BINARY_COEFF_H2O_MYCOMPRESSIBLECOMPONENT_HH + +namespace Dumux +{ +namespace BinaryCoeff +{ + +/*! + * \brief Binary coefficients for water and a ficticious component implemented in tutorial exercise 3a + * The implementation of the missing methods in this file is part of exercise 3b. + */ +class H2O_MyCompressibleComponent +{ +public: + /*! + * \brief Henry coefficient \f$[N/m^2]\f$ for the fictitous component in liquid water. + */ + template <class Scalar> + static Scalar henryMyCompressibleComponentInWater(Scalar temperature) + { + Scalar dumuxH = 1.5e-1 / 101.325; // unit [(mol/m^3)/Pa] + dumuxH *= 18.02e-6; //multiplied by molar volume of reference phase = water + return 1.0/dumuxH; // [Pa] + } + + /*! + * \brief Henry coefficient \f$[N/m^2]\f$ for water in the ficticious component. + */ + template <class Scalar> + static Scalar henryWaterInMyCompressibleComponent(Scalar temperature) + { + // arbitrary + return 1.0e8; // [Pa] + } + + /*! + * \brief Diffusion coefficient [m^2/s] for my ficticious component in liquid water or vice versa. + */ + template <class Scalar> + static Scalar liquidDiffCoeff(Scalar temperature, Scalar pressure) + { + // arbitrary + return 1.e-9; + } +}; + +} +} // end namespace + +#endif diff --git a/exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh b/exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh new file mode 100644 index 00000000..0d18c90a --- /dev/null +++ b/exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh @@ -0,0 +1,126 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup Components + * \brief A fictitious component to be implemented in exercise 3. + */ +#ifndef DUMUX_MYCOMPRESSIBLECOMPONENT_HH +#define DUMUX_MYCOMPRESSIBLECOMPONENT_HH + +#include <dumux/material/idealgas.hh> + +#include <dumux/material/components/base.hh> +#include <dumux/material/components/liquid.hh> + +namespace Dumux +{ +/*! + * \ingroup Components + * \brief A fictitious component to be implemented in exercise 3. + * + * \tparam Scalar The type used for scalar values + */ +template <class Scalar> +class MyCompressibleComponent +: public Components::Base<Scalar, MyCompressibleComponent<Scalar> > +, public Components::Liquid<Scalar, MyCompressibleComponent<Scalar> > +{ + +public: + /*! + * \brief A human readable name for MyCompressibleComponent. + */ + static std::string name() + { return "MyCompressibleComponent"; } + + /*! + * TODO: Copy the methods implemented in MyIncompressibleComponent and substitute + * the density calculation by the expression given in the exercise description. + */ + + /*! + * \brief Returns true if the liquid phase is assumed to be compressible + */ + static constexpr bool liquidIsCompressible() + { return true; } + + /*! + * \brief The molar mass in \f$\mathrm{[kg/mol]}\f$ of the component. + */ + static Scalar molarMass() + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement molar mass"); + } + + /*! + * \brief The density \f$\mathrm{[kg/m^3]}\f$ of the liquid component at a given pressure in + * \f$\mathrm{[Pa]}\f$ and temperature in \f$\mathrm{[K]}\f$. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidDensity(Scalar temperature, Scalar pressure) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement liquid density"); + } + + /*! + * \brief The molar density of MyCompressibleComponent in \f$\mathrm{[mol/m^3]}\f$ at a given pressure and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + * + */ + static Scalar liquidMolarDensity(Scalar temperature, Scalar pressure) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement liquid molar density"); + } + + /*! + * \brief The dynamic liquid viscosity \f$\mathrm{[Pa*s]}\f$ of the pure component. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidViscosity(Scalar temperature, Scalar pressure) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement liquid viscosity"); + } + + /*! + * \brief The vapor pressure in \f$\mathrm{[Pa]}\f$ of the component at a given + * temperature in \f$\mathrm{[K]}\f$. + * + * \param T temperature of the component in \f$\mathrm{[K]}\f$ + */ + static Scalar vaporPressure(Scalar t) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement vapour pressure"); + } +}; + +} // end namespace + +#endif diff --git a/exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh b/exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh new file mode 100644 index 00000000..dae8fdde --- /dev/null +++ b/exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh @@ -0,0 +1,112 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup Components + * \brief A fictitious component to be implemented in tutorial exercise 3. + */ +#ifndef DUMUX_MYINCOMPRESSIBLECOMPONENT_HH +#define DUMUX_MYINCOMPRESSIBLECOMPONENT_HH + +#include <dumux/material/idealgas.hh> + +#include <dumux/material/components/base.hh> +#include <dumux/material/components/liquid.hh> + +namespace Dumux +{ +/*! + * \ingroup Components + * \brief A fictitious component to be implemented in exercise 3. + * + * \tparam Scalar The type used for scalar values + */ +template <class Scalar> +class MyIncompressibleComponent +: public Components::Base<Scalar, MyIncompressibleComponent<Scalar> > +, public Components::Liquid<Scalar, MyIncompressibleComponent<Scalar> > +{ +public: + /*! + * \brief A human readable name for MyIncompressibleComponent. + */ + static std::string name() + { return "MyIncompressibleComponent"; } + + /*! + * TODO: Implement the methods for the component data given in the exercise description. + */ + + /*! + * \brief Returns true if the liquid phase is assumed to be compressible + */ + static constexpr bool liquidIsCompressible() + { return false; } + + /*! + * \brief The molar mass in \f$\mathrm{[kg/mol]}\f$ of the component. + */ + static Scalar molarMass() + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement molarMass()"); + } + + /*! + * \brief The density \f$\mathrm{[kg/m^3]}\f$ of the liquid component at a given pressure in + * \f$\mathrm{[Pa]}\f$ and temperature in \f$\mathrm{[K]}\f$. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidDensity(Scalar temperature, Scalar pressure) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement liquidDensity()"); + } + + /*! + * \brief The molar density of MyIncompressibleComponent in \f$\mathrm{[mol/m^3]}\f$ at a given pressure and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + * + */ + static Scalar liquidMolarDensity(Scalar temperature, Scalar pressure) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement liquidMolarDensity()"); + } + + /*! + * \brief The dynamic liquid viscosity \f$\mathrm{[Pa*s]}\f$ of the pure component. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidViscosity(Scalar temperature, Scalar pressure) + { + // TODO: replace the line below by a meaningful return statement + DUNE_THROW(Dune::NotImplemented, "Todo: implement liquidViscosity()"); + } +}; + +} // end namespace + +#endif diff --git a/exercises/exercise-fluidsystem/components/plotdensityfunction.py b/exercises/exercise-fluidsystem/components/plotdensityfunction.py new file mode 100644 index 00000000..2b256689 --- /dev/null +++ b/exercises/exercise-fluidsystem/components/plotdensityfunction.py @@ -0,0 +1,19 @@ +#!usr/bin/env python +import numpy as np +import matplotlib.pyplot as plt + +# function to calculate rho dependent on pressure +rho_min = 1440; +rho_max = 1480; +k = 5e-7; + +def rho(p): + return rho_min + (rho_max - rho_min)/(1 + rho_min*np.exp(-1.0*k*(rho_max - rho_min)*p)); + +# sample pressure in range (1e4, 1e7) and compute corresponding densities +p = np.logspace(4, 7, 100) +r = rho(p) + +# plot density vs. pressure +plt.semilogx(p, r) +plt.show() diff --git a/exercises/exercise-fluidsystem/exercise3.cc b/exercises/exercise-fluidsystem/exercise3.cc new file mode 100644 index 00000000..acfc230b --- /dev/null +++ b/exercises/exercise-fluidsystem/exercise3.cc @@ -0,0 +1,236 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief DOC ME! + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> +#include <dune/istl/io.hh> + +#include "2pproblem.hh" +#include "2p2cproblem.hh" + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/valgrind.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/newtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +/*! + * \brief Provides an interface for customizing error messages associated with + * reading in parameters. + * + * \param progName The name of the program, that was tried to be started. + * \param errorMsg The error message that was issued by the start function. + * Comprises the thing that went wrong and a general help message. + */ +void usage(const char *progName, const std::string &errorMsg) //TODO check usage +{ + if (errorMsg.size() > 0) { + std::string errorMessageOut = "\nUsage: "; + errorMessageOut += progName; + errorMessageOut += " [options]\n"; + errorMessageOut += errorMsg; + errorMessageOut += "\n\nThe list of mandatory options for this program is:\n" + "\t-TimeManager.TEnd End of the simulation [s] \n" + "\t-TimeManager.DtInitial Initial timestep size [s] \n" + "\t-Grid.File Name of the file containing the grid \n" + "\t definition in DGF format\n" + "\t-SpatialParams.LensLowerLeft coordinates of the lower left corner of the lens [m] \n" + "\t-SpatialParams.LensUpperRight coordinates of the upper right corner of the lens [m] \n" + "\t-Problem.Name String for naming of the output files \n" + "\n"; + std::cout << errorMessageOut + << "\n"; + } +} + +//////////////////////// +// the main function +//////////////////////// +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + // TYPETAG is set in CMakeLists.txt as compile time definition + // alternatively you could write `using TypeTag = TTAG(ExerciseThreeBoxTwoPTypeTag);` + // then, for the 2p2c problem you have to change this line to `using TypeTag = TTAG(ExerciseThreeBoxTwoPTypeTag);` + // and recompile the executable + using TypeTag = TTAG(TYPETAG); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv, usage); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam<Scalar>("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + // write solution and grid to vtk + vtkWriter.write(timeLoop->time()); + + } while (!timeLoop->finished()); + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/exercise-fluidsystem/exercise3_a.input b/exercises/exercise-fluidsystem/exercise3_a.input new file mode 100644 index 00000000..4aa77572 --- /dev/null +++ b/exercises/exercise-fluidsystem/exercise3_a.input @@ -0,0 +1,10 @@ +[TimeLoop] +TEnd = 20000 # duration of the simulation [s] +DtInitial = 10 # initial time step size [s] + +[Problem] +Name = exercise3_a + +[Grid] +UpperRight = 60 60 # x-/y-coordinates of the upper-right corner of the grid [m] +Cells = 60 60 # x-/y-resolution of the grid diff --git a/exercises/exercise-fluidsystem/exercise3_b.input b/exercises/exercise-fluidsystem/exercise3_b.input new file mode 100644 index 00000000..1e8340de --- /dev/null +++ b/exercises/exercise-fluidsystem/exercise3_b.input @@ -0,0 +1,10 @@ +[TimeLoop] +TEnd = 20000 # duration of the simulation [s] +DtInitial = 10 # initial time step size [s] + +[Problem] +Name = exercise3_b + +[Grid] +UpperRight = 60 60 # x-/y-coordinates of the upper-right corner of the grid [m] +Cells = 60 60 # x-/y-resolution of the grid diff --git a/exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh b/exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh new file mode 100644 index 00000000..0fd412e1 --- /dev/null +++ b/exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh @@ -0,0 +1,485 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief A fluid system with water and a fictitious component, which is to be + * implemented in tutorial exercise 3a, as phases and components. This + * fluid system is to be implemented in exercise 3b. + */ +#ifndef DUMUX_H2O_MYCOMPRESSIBLECOMPONENT_FLUID_SYSTEM_HH +#define DUMUX_H2O_MYCOMPRESSIBLECOMPONENT_FLUID_SYSTEM_HH + +#include <dumux/material/components/h2o.hh> +#include <dumux/material/components/tabulatedcomponent.hh> + +#include <dumux/material/fluidsystems/base.hh> + +// the fictitious component that was created in exercise 3a +#include <exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh> + +// the binary coefficients corresponding to this fluid system +#include <exercises/exercise-fluidsystem/binarycoefficients/h2omycompressiblecomponent.hh> + +namespace Dumux { +namespace FluidSystems { + +/*! + * \brief A compositional fluid consisting of two liquid phases, + * which are water and a fictitious component from tutorial exercise 3a. + */ +template <class Scalar, + class H2OType = Dumux::Components::TabulatedComponent<Dumux::Components::H2O<Scalar> > > +class H2OMyCompressibleComponent + : public BaseFluidSystem< Scalar, H2OMyCompressibleComponent<Scalar, H2OType> > +{ + typedef H2OMyCompressibleComponent<Scalar, H2OType> ThisType; + typedef BaseFluidSystem<Scalar, ThisType> Base; + +public: + typedef Dumux::MyCompressibleComponent<Scalar> MyCompressibleComponent; + typedef H2OType H2O; + + static constexpr int numPhases = 2; + static constexpr int numComponents = 2; + + static constexpr int phase0Idx = 0; // index of the first phase + static constexpr int phase1Idx = 1; // index of the second phase + + static constexpr int H2OIdx = 0; + static constexpr int NAPLIdx = 1; + // export component indices to indicate the main component + // of the corresponding phase at atmospheric pressure 1 bar + // and room temperature 20°C: + static constexpr int comp0Idx = H2OIdx; + static constexpr int comp1Idx = NAPLIdx; + + /*! + * \brief Initialize the fluid system's static parameters generically + * + * If a tabulated H2O component is used, we do our best to create + * tables that always work. + */ + static void init() + { + init(/*tempMin=*/273.15, + /*tempMax=*/623.15, + /*numTemp=*/100, + /*pMin=*/0.0, + /*pMax=*/20e6, + /*numP=*/200); + } + + /*! + * \brief Initialize the fluid system's static parameters using + * problem specific temperature and pressure ranges + * + * \param tempMin The minimum temperature used for tabulation of water [K] + * \param tempMax The maximum temperature used for tabulation of water [K] + * \param nTemp The number of ticks on the temperature axis of the table of water + * \param pressMin The minimum pressure used for tabulation of water [Pa] + * \param pressMax The maximum pressure used for tabulation of water [Pa] + * \param nPress The number of ticks on the pressure axis of the table of water + */ + static void init(Scalar tempMin, Scalar tempMax, unsigned nTemp, + Scalar pressMin, Scalar pressMax, unsigned nPress) + { + if (H2O::isTabulated) { + std::cout << "Initializing tables for the H2O fluid properties (" + << nTemp*nPress + << " entries).\n"; + + H2O::init(tempMin, tempMax, nTemp, + pressMin, pressMax, nPress); + } + } + + + /*! + * \brief Return whether a phase is liquid + * + * \param phaseIdx The index of the fluid phase to consider + */ + static constexpr bool isLiquid(int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + return true; + } + + static constexpr bool isIdealGas(int phaseIdx) + { return H2O::gasIsIdeal() && MyCompressibleComponent::gasIsIdeal(); } + + /*! + * \brief Returns true if and only if a fluid phase is assumed to + * be an ideal mixture. + * + * We define an ideal mixture as a fluid phase where the fugacity + * coefficients of all components times the pressure of the phase + * are indepent on the fluid composition. This assumtion is true + * if Henry's law and Raoult's law apply. If you are unsure what + * this function should return, it is safe to return false. The + * only damage done will be (slightly) increased computation times + * in some cases. + * + * \param phaseIdx The index of the fluid phase to consider + */ + static constexpr bool isIdealMixture(int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + return true; + } + + /*! + * \brief Returns true if and only if a fluid phase is assumed to + * be compressible. + * + * Compressible means that the partial derivative of the density + * to the fluid pressure is always larger than zero. + * + * \param phaseIdx The index of the fluid phase to consider + */ + static constexpr bool isCompressible(int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) + // the water component decides for the water phase... + return H2O::liquidIsCompressible(); + + // the NAPL component decides for the napl phase... + return MyCompressibleComponent::liquidIsCompressible(); + } + + /*! + * \brief Return the human readable name of a phase (used in indices) + */ + static std::string phaseName(int phaseIdx) + { + switch (phaseIdx) { + case phase0Idx: return "w"; + case phase1Idx: return "n"; + }; + DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx); + } + + /*! + * \brief Return the human readable name of a component (used in indices) + */ + static std::string componentName(int compIdx) + { + switch (compIdx) { + case H2OIdx: return H2O::name(); + case NAPLIdx: return MyCompressibleComponent::name(); + }; + DUNE_THROW(Dune::InvalidStateException, "Invalid component index " << compIdx); + } + + /*! + * \brief Return the molar mass of a component in [kg/mol]. + */ + static Scalar molarMass(int compIdx) + { + switch (compIdx) { + case H2OIdx: return H2O::molarMass(); + case NAPLIdx: return MyCompressibleComponent::molarMass(); + }; + DUNE_THROW(Dune::InvalidStateException, "Invalid component index " << compIdx); + } + + /*! + * \brief Given all mole fractions in a phase, return the phase + * density [kg/m^3]. + */ + using Base::density; + template <class FluidState> + static Scalar density(const FluidState &fluidState, int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) { + // See: doctoral thesis of Steffen Ochs 2007 + // Steam injection into saturated porous media : process analysis including experimental and numerical investigations + // http://elib.uni-stuttgart.de/bitstream/11682/271/1/Diss_Ochs_OPUS.pdf + + // Scalar rholH2O = H2O::liquidDensity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)); + // Scalar clH2O = rholH2O/H2O::molarMass(); + // Scalar x_H2O = fluidState.moleFraction (phase0Idx, H2OIdx); + // Scalar x_myComp = fluidState.moleFraction (phase0Idx, NAPLIdx); + + /*! + * TODO: implement the composition-dependent water density from the exercise sheet. + */ + return /*???*/1000.0; + } + else { + // assume the density of the fictious component to be independent of the composition + Scalar pressure = MyCompressibleComponent::liquidIsCompressible()?fluidState.pressure(phaseIdx):1e100; + return MyCompressibleComponent::liquidDensity(fluidState.temperature(phaseIdx), pressure); + } + } + + using Base::molarDensity; + /*! + * \brief The molar density \f$\rho_{mol,\alpha}\f$ + * of a fluid phase \f$\alpha\f$ in \f$\mathrm{[mol/m^3]}\f$ + * + * The molar density for the simple relation is defined by the + * mass density \f$\rho_\alpha\f$ and the molar mass of the main component + * + * The molar density for the complrex relation is defined by the + * mass density \f$\rho_\alpha\f$ and the mean molar mass \f$\overline M_\alpha\f$: + * + * \f[\rho_{mol,\alpha} = \frac{\rho_\alpha}{\overline M_\alpha} \;.\f] + */ + template <class FluidState> + static Scalar molarDensity(const FluidState &fluidState, int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + + Scalar T = fluidState.temperature(phaseIdx); + Scalar p = fluidState.pressure(phaseIdx); + + // liquid phase + if (phaseIdx == phase0Idx) + { + // assume pure water or that each gas molecule displaces exactly one + // molecule in the liquid. + return H2O::liquidMolarDensity(T, p); + } + else + { + // assume the molar density of the fictious component to be independent of the composition + Scalar pressure = MyCompressibleComponent::liquidIsCompressible()?fluidState.pressure(phaseIdx):1e100; + return MyCompressibleComponent::liquidMolarDensity(fluidState.temperature(phaseIdx), pressure); + } + } + + /*! + * \brief Return the viscosity of a phase. + */ + using Base::viscosity; + template <class FluidState> + static Scalar viscosity(const FluidState &fluidState, + int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) { + // assume pure water viscosity + return H2O::liquidViscosity(fluidState.temperature(phaseIdx), + fluidState.pressure(phaseIdx)); + } + else { + // assume pure NAPL viscosity + return MyCompressibleComponent::liquidViscosity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)); + } + } + + using Base::diffusionCoefficient; + template <class FluidState> + static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx) + { + DUNE_THROW(Dune::NotImplemented, "Diffusion coefficients"); + } + + /*! + * \brief Given a phase's composition, temperature and pressure, + * return the binary diffusion coefficient \f$\mathrm{[m^2/s]}\f$ for components + * \f$\mathrm{i}\f$ and \f$\mathrm{j}\f$ in this phase. + * \param fluidState The fluid state + * \param paramCache mutable parameters + * \param phaseIdx Index of the fluid phase + * \param compIIdx Index of the component i + * \param compJIdx Index of the component j + */ + using Base::binaryDiffusionCoefficient; + template <class FluidState> + static Scalar binaryDiffusionCoefficient(const FluidState &fluidState, + int phaseIdx, + int compIIdx, + int compJIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + assert(0 <= compIIdx && compIIdx < numComponents); + assert(0 <= compJIdx && compJIdx < numComponents); + + const Scalar T = fluidState.temperature(phaseIdx); + const Scalar p = fluidState.pressure(phaseIdx); + + // we assume the diffusion coefficient to be the same in both phases + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::liquidDiffCoeff(T, p); + } + + /* Henry coefficients + */ + template <class FluidState> + static Scalar henryCoefficient(const FluidState &fluidState, + int phaseIdx, + int compIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + assert(0 <= compIdx && compIdx < numComponents); + + const Scalar T = fluidState.temperature(phaseIdx); + const Scalar p = fluidState.pressure(phaseIdx); + + if (compIdx == NAPLIdx && phaseIdx == phase0Idx) + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::henryMyCompressibleComponentInWater(T)/p; + + else if (phaseIdx == phase1Idx && compIdx == H2OIdx) + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::henryWaterInMyCompressibleComponent(T)/p; + + else + DUNE_THROW(Dune::InvalidStateException, "non-existent henry coefficient for phase index " << phaseIdx + << " and component index " << compIdx); + } + + using Base::fugacityCoefficient; + /*! + * \brief Returns the fugacity coefficient \f$\mathrm{[-]}\f$ of a component in a + * phase. + * + * In this case, things are actually pretty simple. We have an ideal + * solution. Thus, the fugacity coefficient is 1 in the gas phase + * (fugacity equals the partial pressure of the component in the gas phase + * respectively in the liquid phases it is the inverse of the + * Henry coefficients scaled by pressure + * \param fluidState The fluid state + * \param phaseIdx The index of the phase + * \param compIdx The index of the component + */ + template <class FluidState> + static Scalar fugacityCoefficient(const FluidState &fluidState, + int phaseIdx, + int compIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + assert(0 <= compIdx && compIdx < numComponents); + + Scalar T = fluidState.temperature(phaseIdx); + Scalar p = fluidState.pressure(phaseIdx); + + if (phaseIdx == phase0Idx) { + if (compIdx == H2OIdx) + return H2O::vaporPressure(T)/p; + else if (compIdx == NAPLIdx) + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::henryMyCompressibleComponentInWater(T)/p; + } + + // for the NAPL phase, we assume currently that nothing is + // dissolved. this means that the affinity of the NAPL + // component to the NAPL phase is much higher than for the + // other components, i.e. the fugacity coefficient is much + // smaller. + Scalar phiNapl = MyCompressibleComponent::vaporPressure(T)/p; + if (compIdx == NAPLIdx) + return phiNapl; + else + return 1e6*phiNapl; + } + + template <class FluidState> + static Scalar kelvinVaporPressure(const FluidState &fluidState, + const int phaseIdx, + const int compIdx) + { + DUNE_THROW(Dune::NotImplemented, "FluidSystems::H2OMyCompressibleComponent::kelvinVaporPressure()"); + } + + /* partial pressures in the gas phase, taken from saturation vapor pressures + */ + template <class FluidState> + static Scalar partialPressureGas(const FluidState &fluidState, int phaseIdx, + int compIdx) + { + assert(0 <= compIdx && compIdx < numComponents); + + const Scalar T = fluidState.temperature(phaseIdx); + if (compIdx == NAPLIdx) + return MyCompressibleComponent::vaporPressure(T); + else if (compIdx == H2OIdx) + return H2O::vaporPressure(T); + else + DUNE_THROW(Dune::InvalidStateException, "non-existent component index " << compIdx); + } + + /* inverse vapor pressures, taken from inverse saturation vapor pressures + */ + template <class FluidState> + static Scalar inverseVaporPressureCurve(const FluidState &fluidState, + int phaseIdx, + int compIdx) + { + assert(0 <= compIdx && compIdx < numComponents); + + const Scalar pressure = fluidState.pressure(phaseIdx); + if (compIdx == NAPLIdx) + return MyCompressibleComponent::vaporTemperature(pressure); + else if (compIdx == H2OIdx) + return H2O::vaporTemperature(pressure); + else + DUNE_THROW(Dune::InvalidStateException, "non-existent component index " << compIdx); + } + + + + /*! + * \brief Given all mole fractions in a phase, return the specific + * phase enthalpy [J/kg]. + */ + using Base::enthalpy; + template <class FluidState> + static Scalar enthalpy(const FluidState &fluidState, + int phaseIdx) + { + DUNE_THROW(Dune::NotImplemented, "FluidSystems::H2OMyCompressibleComponent::enthalpy()"); + } + + using Base::heatCapacity; + template <class FluidState> + static Scalar heatCapacity(const FluidState &fluidState, + int phaseIdx) + { + DUNE_THROW(Dune::NotImplemented, "FluidSystems::H2OMyCompressibleComponent::heatCapacity()"); + } + + using Base::thermalConductivity; + template <class FluidState> + static Scalar thermalConductivity(const FluidState &fluidState, + int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + + const Scalar temperature = fluidState.temperature(phaseIdx) ; + const Scalar pressure = fluidState.pressure(phaseIdx); + if (phaseIdx == phase0Idx) + { + return H2O::liquidThermalConductivity(temperature, pressure); + } + else + { + return MyCompressibleComponent::liquidThermalConductivity(temperature, pressure); + } + DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx); + } + +private: + +}; +} // end namespace FluidSystems +} // end namespace Dumux + +#endif diff --git a/exercises/exercise-fluidsystem/spatialparams.hh b/exercises/exercise-fluidsystem/spatialparams.hh new file mode 100644 index 00000000..36297290 --- /dev/null +++ b/exercises/exercise-fluidsystem/spatialparams.hh @@ -0,0 +1,163 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The spatial parameters for the fully coupled tutorial problem + * which uses the twophase box model. + */ +#ifndef DUMUX_EXERCISE_THREE_SPATIAL_PARAMS_HH +#define DUMUX_EXERCISE_THREE_SPATIAL_PARAMS_HH + +// include parent spatialparameters +#include <dumux/material/spatialparams/fv.hh> + +// include material laws +#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> +#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> +#include <dumux/material/fluidmatrixinteractions/2p/linearmaterial.hh> + +namespace Dumux { + +/*! + * \ingroup TwoPBoxModel + * + * \brief The spatial parameters for the fully coupled tutorial problem + * which uses the twophase box model. + */ +template<class FVGridGeometry, class Scalar> +class ExerciseThreeSpatialParams +: public FVSpatialParams<FVGridGeometry, Scalar, ExerciseThreeSpatialParams<FVGridGeometry, Scalar>> +{ + using ThisType = ExerciseThreeSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVSpatialParams<FVGridGeometry, Scalar, ThisType>; + using GridView = typename FVGridGeometry::GridView; + + static constexpr int dim = GridView::dimension; + static constexpr int dimWorld = GridView::dimensionworld; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + // export permeability type + using PermeabilityType = Dune::FieldMatrix<Scalar, dim, dim>; + + using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; + using MaterialLawParams = typename MaterialLaw::Params; + + /*! + * \brief The constructor + * + * \param fvGridGeometry The finite volume grid geometry + */ + ExerciseThreeSpatialParams(std::shared_ptr<const FVGridGeometry>& fvGridGeometry) + : ParentType(fvGridGeometry) + , K_(0) + , KLens_(0) + { + //set main diagonal entries of the permeability tensor to a value + //setting to one value means: isotropic, homogeneous + for (int i = 0; i < dim; i++) + { + K_[i][i] = 1e-7; + KLens_[i][i] = 1e-10; + } + + //set residual saturations + materialParams_.setSwr(0.0); + materialParamsLens_.setSwr(0.1); + materialParams_.setSnr(0.0); + materialParamsLens_.setSnr(0.1); + + //parameters of Brooks & Corey Law + materialParams_.setPe(500.0); + materialParamsLens_.setPe(1000.0); + materialParams_.setLambda(2); + materialParamsLens_.setLambda(2); + } + + + /*! + * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + + { + if (isInLens(globalPos)) + return KLens_; + return K_; + } + + /*! + * \brief Define the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { + if (isInLens(globalPos)) + return 0.1; + return 0.2; + } + + /*! + * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). + * + * \param globalPos The global position + * + * \return the material parameters object + */ + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const + { + if (isInLens(globalPos)) + return materialParamsLens_; + return materialParams_; + } + + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The position of the center of the element + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { return FluidSystem::phase0Idx; } + + //! if we are in the lens + bool isInLens(const GlobalPosition& globalPos) const + { + const auto x = globalPos[0]; + const auto y = globalPos[1]; + return (x < 40 && x > 20 && y > 35 && y < 45) || + (x < 50 && x > 30 && y < 30 && y > 15); + } + +private: + + Dune::FieldMatrix<Scalar, dim, dim> K_; + Dune::FieldMatrix<Scalar, dim, dim> KLens_; + // Object that holds the values/parameters of the selected material law. + MaterialLawParams materialParams_; + MaterialLawParams materialParamsLens_; +}; +} // end namespace Dumux +#endif diff --git a/exercises/exercise-properties/CMakeLists.txt b/exercises/exercise-properties/CMakeLists.txt new file mode 100644 index 00000000..d700163f --- /dev/null +++ b/exercises/exercise-properties/CMakeLists.txt @@ -0,0 +1,11 @@ +# the compositional two-phase simulation program +dune_add_test(NAME exercise2 + SOURCES exercise2.cc + COMPILE_DEFINITIONS TYPETAG=Injection2p2pcCCProblem + CMD_ARGS exercise2.input) + +# add tutorial to the common target +add_dependencies(test_exercises exercise2) + +# add a symlink for the input file +dune_symlink_to_source_files(FILES "exercise2.input") diff --git a/exercises/exercise-properties/README.md b/exercises/exercise-properties/README.md new file mode 100644 index 00000000..aff0fbef --- /dev/null +++ b/exercises/exercise-properties/README.md @@ -0,0 +1,151 @@ +# Exercise #2 (DuMuX course) +<br> +## Problem set-up + +The problem setup is identical to the previous [_exercise 1_](../ex1/README.md). + +## Preparing the exercise + +* Navigate to the directory `dumux/tutorial/ex2` + +_Exercise 2_ deals with a two-phase compositional problem (__2p2c__). Goal is to learn how to use compile and runtime parameters and the _DuMuX property system_. + +<br><br> +### Task 1: Getting familiar with the code +<hr> + +Locate all the files you will need for this exercise +* The __main file__: `exercise2.cc` +* The __problem file__: `injection2p2cproblem.hh` +* The __spatial parameters file__: `injection2p2cspatialparams.hh` +* The __input file__: `exercise2.input` +* Two header files containing: + * a custom __local residual__ in: `mylocalresidual.hh` + * a custom __material law__ in: `mymateriallaw.hh` + + +<hr><br><br> +### Task 2: Compiling and running the program +<hr> + +* Change to the build-directory + +```bash +cd ../../build-cmake/tutorial/ex2 +``` + +* Compile the executable `exercise2` + +```bash +make exercise2 +``` + +* Run the problem and inspect the result + +```bash +./exercise2 +``` +Note: Because the input file has the same name as the +executable, DuMuX will find it automatically. + +If gnuplot is installed on your system, you should see a plot of the capillary pressure - saturation relationship. + +<hr><br><br> +### Task 3: Implement and use a different material law +<hr> + +DuMuX uses the term _material law_ to describe the law used to compute +* pc-Sw relations +* kr-Sw relations +* their inverse relations + +The file `mymateriallaw.hh` contains a custom implementation of such a material law. + +* Implement the method `Scalar pc(const Params ¶ms, Scalar swe)` by implementing your own capillary pressure relationship, e.g. a simple linear relationship $`p_C(S_w) = 1\cdot 10^5 \cdot (1-S_w) + p_e`$. + +Note: `MyMaterialLaw` uses the `BrooksCoreyParams` class as parameter input. You can get the entry pressure that is set in the spatial params as follows + +```c++ +const auto pe = params.pe(); +``` + +The type (i.e. C++ type) of the material law is set in the file `injection2p2cspatialparams.hh` by declaring the following alias in the public section of the spatial parameters class: + +```c++ + using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; +``` + +* Make DuMuX use your own material law by including the header `mymateriallaw.hh` and changing the alias `MaterialLaw`. This will make sure that your material law is used everywhere else in the code. + +Note: Also use the wrapper class `EffToAbsLaw`. It takes care of converting absolute to effective saturations considering residual saturations. `MyMaterialLaw` +as other material laws (like Brooks-Corey, VanGenuchten, ...) in DuMuX only deals with effective saturations. + +* Verify your changes by recompiling and running the program. You should see a plot of your new function. + +For the next task, disable the plotting feature by changing the settings in the input file `exercise2.input` + +```ini +[Problem] +OnlyPlotMaterialLaws = false +``` + +<hr><br><br> +### Task 4: Enable/Disable Gravity -> DuMuX parameters +<hr> + +DuMuX has many parameters that have default values. For example, all simulations consider gravity effects by default. +You can disable gravity for a study, simply by setting the parameter in the input file + +```ini +[Problem] +EnableGravity = false +``` + +Run the simulation with and without gravity. Change the `Problem.Name` parameter to create output files with different +names. Compare the results using paraview. You should immediately see the difference. + +A list of parameters that can be set through the input file is given [here](http://www.dumux.org/doxygen-stable/html-2.11/a06387.php). + + +<hr><br><br> +### Task 5: Implement your own local residual +<hr> + +Most types in DuMuX are properties that can be changed just like the material law. In the following task we implement our own 2p2c local residual, i.e. the class that computes the element residual in every Newton iteration. The file `mylocalresidual.hh` contains a copy of the similar to the original local residual class used for all compositional models renamed to `template<class TypeTag> class MyCompositionalLocalResidual`. + +* Make DuMuX use this new local residual by inluding the header `mylocalresidual.hh` and setting the corresponding property in the `Property` namespace in the file `injection2p2cproblem.hh` + +```c++ +// note that every property struct knows about TypeTag +SET_PROP(Injection2p2cTypeTag, LocalResidual) +{ + using type = MyCompositionalLocalResidual<TypeTag>; +}; + +// or using the convenience macro +SET_TYPE_PROP(Injection2p2cTypeTag, LocalResidual, + MyCompositionalLocalResidual<TypeTag>); +``` + +You want to make the new local residual special by adding a switch enabling / disabling diffusion. We will achieve this with a DuMuX parameter which is read from the input file and defaults to a property value if the input file doesn't contain the parameter. + +* Modify the `computeFlux` method to only call the `diffusiveFlux` method if diffusion is enabled. You can get the new parameter by adding the lines + +```c++ +// ... in the computeFlux method of MyCompositionalLocalResidual + auto enableDiffusion = getParam<bool>("Problem.EnableDiffusion", true); + +``` + +You can now enable and disable diffusion through the input file + +```ini +[Problem] +EnableDiffusion = true / false +``` + +* Verify the difference in the parameter $`x_w^{N2}`$, i.e. the mole fraction of nitrogen in the +water phase, with and without diffusion. + +Note that due to diffusion being a slow process you +can only see the difference in later times. diff --git a/exercises/exercise-properties/exercise2.cc b/exercises/exercise-properties/exercise2.cc new file mode 100644 index 00000000..2a7493e6 --- /dev/null +++ b/exercises/exercise-properties/exercise2.cc @@ -0,0 +1,200 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Test for the two-phase two-component CC model. + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/privarswitchnewtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +#include "injection2p2cproblem.hh" + +int main(int argc, char** argv)try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2p2pcCCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam<Scalar>("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using PrimaryVariableSwitch = typename GET_PROP_TYPE(TypeTag, PrimaryVariableSwitch); + using NewtonSolver = Dumux::PriVarSwitchNewtonSolver<Assembler, LinearSolver, PrimaryVariableSwitch>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + vtkWriter.write(timeLoop->time()); + + } while (!timeLoop->finished()); + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/exercise-properties/exercise2.input b/exercises/exercise-properties/exercise2.input new file mode 100644 index 00000000..85ea9662 --- /dev/null +++ b/exercises/exercise-properties/exercise2.input @@ -0,0 +1,25 @@ +[TimeLoop] +DtInitial = 3600 # in seconds +TEnd = 3.154e9 # in seconds, i.e ten years + +[Grid] +LowerLeft = 0 0 +UpperRight = 60 40 +Cells = 24 16 + +[Problem] +Name = infiltration +OnlyPlotMaterialLaws = true +AquiferDepth = 2700.0 # m +TotalAreaSpecificInflow = 1e-4 # kg / (s*m^2) +InjectionDuration = 2.628e6 # in seconds, i.e. one month + +# TODO: dumux-course-task +# Set Problem.EnableGravity +# Set Problem.EnableDiffusion + +[SpatialParams] +PermeabilityAquitard = 1e-15 # m^2 +EntryPressureAquitard = 4.5e4 # Pa +PermeabilityAquifer = 1e-12 # m^2 +EntryPressureAquifer = 1e4 # Pa diff --git a/exercises/exercise-properties/injection2p2cproblem.hh b/exercises/exercise-properties/injection2p2cproblem.hh new file mode 100644 index 00000000..a765f8bb --- /dev/null +++ b/exercises/exercise-properties/injection2p2cproblem.hh @@ -0,0 +1,279 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Problem where air is injected under a low permeable layer in a depth of 2700m. + */ +#ifndef DUMUX_INJECTION_2P2C_PROBLEM_HH +#define DUMUX_INJECTION_2P2C_PROBLEM_HH + +#include <dumux/porousmediumflow/2p2c/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> +#include <dumux/discretization/cellcentered/tpfa/properties.hh> + +#include "injection2p2cspatialparams.hh" + +// TODO: dumux-course-task +// Include the local residual header + +namespace Dumux { + +// foward declaration +template <class TypeTag> +class Injection2p2cProblem; + +// setup property TypeTag +namespace Properties { +NEW_TYPE_TAG(Injection2p2cTypeTag, INHERITS_FROM(TwoPTwoC)); +NEW_TYPE_TAG(Injection2p2pcCCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2p2cTypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2p2cTypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2p2cTypeTag, Problem, Injection2p2cProblem<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2p2cTypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// TODO: dumux-course-task +// change the local residual type to MyTwoPTwoCLocalResidual<TypeTag> + +// Set fluid configuration +SET_TYPE_PROP(Injection2p2cTypeTag, + FluidSystem, + FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), false /*useComplexRelations*/>); + +// Define whether mole(true) or mass (false) fractions are used +SET_BOOL_PROP(Injection2p2cTypeTag, UseMoles, true); +} // end namespace Properties + +/*! + * \ingroup TwoPTwoCModel + * \ingroup ImplicitTestProblems + * \brief Problem where air is injected under a low permeable layer in a depth of 2700m. + * + * The domain is sized 60m times 40m and consists of two layers, a moderately + * permeable one for \f$ y<22m\f$ and one with a lower permeablility + * in the rest of the domain. + * + * Nitrogen is injected into a water-filled aquifer through a well. First, we inject for one month. + * Then, we continue simulating the development of the nitrogen plume for 10 years. + * This is realized with a Neumann boundary condition at the right boundary + * (\f$ 7m<y<15m\f$). The aquifer is situated 2700m below sea level (the depth can be changed through the input file). + * The injected fluid phase migrates upwards due to buoyancy. + * It accumulates and partially enters the top layer lower permeable aquitard. + * + * The default setting for useMoles is true, i.e. each component is balaced in units of mole. + * The property useMoles can be set to either true or false in the + * problem file. If you change this, make sure that the according units are used in the problem setup. + * + * This problem uses the \ref TwoPTwoCModel. + */ +template <class TypeTag> +class Injection2p2cProblem : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + Injection2p2cProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // name of the problem and output file + name_ = getParam<std::string>("Problem.Name"); + // depth of the aquifer, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // inflow rate of nitrogen water vapor mixture, units: kg/(s m^2) + totalAreaSpecificInflow_ = getParam<Scalar>("Problem.TotalAreaSpecificInflow"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + const std::string& name() const + { return name_; } + + /*! + * \brief Returns the temperature in \f$ K \f$ + */ + Scalar temperature() const + { return 273.15 + 30; } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + + // and Neuman boundary conditions everywhere else + // note that we don't differentiate between Neumann and Robin boundary types + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + //if we are inside the injection zone set inflow Neumann boundary conditions + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // set the Neumann values for the Nitrogen component balance + // convert from units kg/(s*m^2) to mole/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -totalAreaSpecificInflow_/FluidSystem::molarMass(FluidSystem::N2Idx); + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + } + + return values; + } + + // \} + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + values.setState(Indices::firstPhaseOnly); + + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(temperature(), 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + // initially we have some nitrogen dissolved + // saturation mole fraction would be + // moleFracLiquidN2 = (pw + pc + p_vap^sat)/henry; + const Scalar moleFracLiquidN2 = pw*0.95/BinaryCoeff::H2O_N2::henry(temperature()); + + // note that because we start with a single phase system the primary variables + // are pl and x^w_N2. This will switch as soon after we start injecting to a two + // phase system so the primary variables will be pl and Sn (non-wetting saturation). + values[Indices::switchIdx] = moleFracLiquidN2; + values[Indices::pressureIdx] = pw; + + return values; + } + + // \} + + void setTime(Scalar time) + { + time_ = time; + } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar totalAreaSpecificInflow_; //! Area specific inflow rate in mole/(s*m^2) + Scalar time_; + Scalar injectionDuration_; //! Duration of the injection in seconds +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/exercise-properties/injection2p2cspatialparams.hh b/exercises/exercise-properties/injection2p2cspatialparams.hh new file mode 100644 index 00000000..ab9951e2 --- /dev/null +++ b/exercises/exercise-properties/injection2p2cspatialparams.hh @@ -0,0 +1,193 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ + +#ifndef DUMUX_INJECTION_SPATIAL_PARAMS_HH +#define DUMUX_INJECTION_SPATIAL_PARAMS_HH + +#include <dumux/material/spatialparams/fv.hh> +#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> +#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> +// TODO: dumux-course-task +// Inlcude your own material law + +#include <dumux/io/gnuplotinterface.hh> +#include <dumux/io/plotmateriallaw.hh> + +namespace Dumux { + +/*! + * \ingroup TwoPTwoCModel + * \ingroup ImplicitTestProblems + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ +template<class FVGridGeometry, class Scalar> +class InjectionSpatialParams +: public FVSpatialParams<FVGridGeometry, Scalar, InjectionSpatialParams<FVGridGeometry, Scalar>> +{ + using ThisType = InjectionSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVSpatialParams<FVGridGeometry, Scalar, ThisType>; + using GridView = typename FVGridGeometry::GridView; + + static const int dimWorld = GridView::dimensionworld; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + // export permeability type + using PermeabilityType = Scalar; + + // TODO: dumux-course-task + // Use your own material law instead + // Set the material law parameterized by absolute saturations + using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; + using MaterialLawParams = typename MaterialLaw::Params; + +public: + + /*! + * \brief The constructor + * + * \param fvGridGeometry The finite volume grid geometry + */ + InjectionSpatialParams(std::shared_ptr<const FVGridGeometry>& fvGridGeometry) + : ParentType(fvGridGeometry) + { + aquiferHeightFromBottom_ = 30.0; + + // intrinsic permeabilities + aquitardK_ = getParam<Scalar>("SpatialParams.PermeabilityAquitard"); + aquiferK_ = getParam<Scalar>("SpatialParams.PermeabilityAquifer"); + + // porosities + aquitardPorosity_ = 0.2; + aquiferPorosity_ = 0.4; + + // residual saturations + aquitardMaterialParams_.setSwr(0.2); + aquitardMaterialParams_.setSnr(0.0); + aquiferMaterialParams_.setSwr(0.2); + aquiferMaterialParams_.setSnr(0.0); + + // parameters for the Brooks-Corey law + aquitardMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquitard")); + aquiferMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquifer")); + aquitardMaterialParams_.setLambda(2.0); + aquiferMaterialParams_.setLambda(2.0); + + // plot the material laws using gnuplot and exit + if (getParam<bool>("Problem.OnlyPlotMaterialLaws")) + { + plotMaterialLaws(); + exit(0); + } + } + + /*! + * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + + { + if (isInAquitard_(globalPos)) + return aquitardK_; + return aquiferK_; + } + + /*! + * \brief Define the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardPorosity_; + return aquiferPorosity_; + } + + /*! + * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). + * + * \param globalPos The global position + * + * \return the material parameters object + */ + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardMaterialParams_; + return aquiferMaterialParams_; + } + + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The position of the center of the element + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { return FluidSystem::H2OIdx; } + + /*! + * \brief Creates a gnuplot output of the pc-Sw curve + */ + void plotMaterialLaws() + { + PlotMaterialLaw<Scalar, MaterialLaw> plotMaterialLaw; + GnuplotInterface<Scalar> gnuplot; + plotMaterialLaw.addpcswcurve(gnuplot, aquitardMaterialParams_, 0.2, 1.0, "upper layer (fine, aquitard)", "w lp"); + plotMaterialLaw.addpcswcurve(gnuplot, aquiferMaterialParams_, 0.2, 1.0, "lower layer (coarse, aquifer)", "w l"); + gnuplot.setOption("set xrange [0:1]"); + gnuplot.setOption("set label \"residual\\nsaturation\" at 0.1,100000 center"); + gnuplot.plot("pc-Sw"); + } + +private: + + static constexpr Scalar eps_ = 1e-6; + + bool isInAquitard_(const GlobalPosition &globalPos) const + { return globalPos[dimWorld-1] > aquiferHeightFromBottom_ + eps_; } + + Scalar aquitardK_; + Scalar aquiferK_; + Scalar aquiferHeightFromBottom_; + + Scalar aquitardPorosity_; + Scalar aquiferPorosity_; + + MaterialLawParams aquitardMaterialParams_; + MaterialLawParams aquiferMaterialParams_; +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/exercise-properties/mylocalresidual.hh b/exercises/exercise-properties/mylocalresidual.hh new file mode 100644 index 00000000..5c79e24b --- /dev/null +++ b/exercises/exercise-properties/mylocalresidual.hh @@ -0,0 +1,163 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Element-wise calculation of the local residual for problems + * using compositional fully implicit model. + */ +#ifndef DUMUX_MY_COMPOSITIONAL_LOCAL_RESIDUAL_HH +#define DUMUX_MY_COMPOSITIONAL_LOCAL_RESIDUAL_HH + +#include <dumux/common/properties.hh> + +namespace Dumux { + +/*! + * \ingroup Implicit + * \ingroup ImplicitLocalResidual + * \brief Element-wise calculation of the local residual for problems + * using compositional fully implicit model. + * + */ +template<class TypeTag> +class MyCompositionalLocalResidual: public GET_PROP_TYPE(TypeTag, BaseLocalResidual) +{ + using ParentType = typename GET_PROP_TYPE(TypeTag, BaseLocalResidual); + using Implementation = typename GET_PROP_TYPE(TypeTag, LocalResidual); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + using ResidualVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); + using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); + using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, GridFluxVariablesCache)::LocalView; + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Element = typename GridView::template Codim<0>::Entity; + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, GridVolumeVariables)::LocalView; + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using EnergyLocalResidual = typename GET_PROP_TYPE(TypeTag, EnergyLocalResidual); + + static constexpr int numPhases = GET_PROP_TYPE(TypeTag, ModelTraits)::numPhases(); + static constexpr int numComponents = GET_PROP_TYPE(TypeTag, ModelTraits)::numComponents(); + + enum { conti0EqIdx = Indices::conti0EqIdx }; + +public: + using ParentType::ParentType; + + /*! + * \brief Evaluate the amount of all conservation quantities + * (e.g. phase mass) within a sub-control volume. + * + * The result should be averaged over the volume (e.g. phase mass + * inside a sub control volume divided by the volume) + * + * \param storage The mass of the component within the sub-control volume + * \param scvIdx The SCV (sub-control-volume) index + * \param usePrevSol Evaluate function with solution of current or previous time step + */ + ResidualVector computeStorage(const Problem& problem, + const SubControlVolume& scv, + const VolumeVariables& volVars) const + { + ResidualVector storage(0.0); + + // compute storage term of all components within all phases + for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) + { + for (int compIdx = 0; compIdx < numComponents; ++compIdx) + { + auto eqIdx = conti0EqIdx + compIdx; + storage[eqIdx] += volVars.porosity() + * volVars.saturation(phaseIdx) + * volVars.molarDensity(phaseIdx) + * volVars.moleFraction(phaseIdx, compIdx); + } + } + + return storage; + } + + /*! + * \brief Evaluates the total flux of all conservation quantities + * over a face of a sub-control volume. + * + * \param flux The flux over the SCV (sub-control-volume) face for each component + * \param fIdx The index of the SCV face + * \param onBoundary A boolean variable to specify whether the flux variables + * are calculated for interior SCV faces or boundary faces, default=false + */ + ResidualVector computeFlux(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolumeFace& scvf, + const ElementFluxVariablesCache& elemFluxVarsCache) const + { + FluxVariables fluxVars; + fluxVars.init(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVarsCache); + // get upwind weights into local scope + ResidualVector flux(0.0); + + // TODO: dumux-course-task + // get parameter Problem.EnableDiffusion + + // advective fluxes + for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) + { + const auto diffusiveFluxes = fluxVars.molecularDiffusionFlux(phaseIdx); + for (int compIdx = 0; compIdx < numComponents; ++compIdx) + { + // get equation index + const auto eqIdx = conti0EqIdx + compIdx; + + // the physical quantities for which we perform upwinding + const auto upwindTerm = [phaseIdx,compIdx] (const auto& volVars) + { return volVars.molarDensity(phaseIdx)*volVars.moleFraction(phaseIdx, compIdx)*volVars.mobility(phaseIdx); }; + flux[eqIdx] += fluxVars.advectiveFlux(phaseIdx, upwindTerm); + + // TODO: dumux-course-task + // same here: only add diffusive fluxes if diffusion is enabled + flux[eqIdx] += diffusiveFluxes[compIdx]; + } + + //! Add advective phase energy fluxes. For isothermal model the contribution is zero. + EnergyLocalResidual::heatConvectionFlux(flux, fluxVars, phaseIdx); + } + + //! Add diffusive energy fluxes. For isothermal model the contribution is zero. + EnergyLocalResidual::heatConductionFlux(flux, fluxVars); + + return flux; + } + +protected: + Implementation *asImp_() + { return static_cast<Implementation *> (this); } + + const Implementation *asImp_() const + { return static_cast<const Implementation *> (this); } +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/exercise-properties/mymateriallaw.hh b/exercises/exercise-properties/mymateriallaw.hh new file mode 100644 index 00000000..e49c39a8 --- /dev/null +++ b/exercises/exercise-properties/mymateriallaw.hh @@ -0,0 +1,116 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Implementation of the capillary pressure and + * relative permeability <-> saturation relations. + * + */ +#ifndef DUMUX_MY_MATERIAL_LAW_HH +#define DUMUX_MY_MATERIAL_LAW_HH + +#include <dumux/material/fluidmatrixinteractions/2p/brookscoreyparams.hh> +#include <cmath> +#include <algorithm> + +namespace Dumux +{ +/*! + * \ingroup fluidmatrixinteractionslaws + * \note a simple material law using the BrooksCoreyParams + */ +template <class ScalarT, class ParamsT = BrooksCoreyParams<ScalarT> > +class MyMaterialLaw +{ +public: + typedef ParamsT Params; + typedef typename Params::Scalar Scalar; + + /*! + * \brief The capillary pressure-saturation curve + * \param swe saturation of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$ + * \param params A container object that is populated with the appropriate coefficients for the respective law. + * Therefore, in the (problem specific) spatialParameters first, the material law is chosen, + and then the params container is constructed accordingly. Afterwards the values are set there, too. + * \return capillary pressure + * TODO: dumux-course-task + * Implement the pc(swe) function + */ + static Scalar pc(const Params ¶ms, Scalar swe) + { + return 0.0; + } + + /*! + * \brief The relative permeability for the wetting phase of + * the medium implied by the Brooks-Corey + * parameterization. + * + * \param swe The mobile saturation of the wetting phase. + * \param params A container object that is populated with the appropriate coefficients for the respective law. + * Therefore, in the (problem specific) spatialParameters first, the material law is chosen, + * and then the params container is constructed accordingly. Afterwards the values are set there, too. + * \return Relative permeability of the wetting phase calculated as implied by Brooks & Corey. + * + * \note Instead of undefined behaviour if pc is not in the valid range, we return a valid number, + * by clamping the input. + */ + static Scalar krw(const Params ¶ms, Scalar swe) + { + using std::pow; + using std::min; + using std::max; + + swe = min(max(swe, 0.0), 1.0); // the equation below is only defined for 0.0 <= swe <= 1.0 + + return pow(swe, 2.0/params.lambda() + 3); + } + + /*! + * \brief The relative permeability for the non-wetting phase of + * the medium as implied by the Brooks-Corey + * parameterization. + * + * \param swe The mobile saturation of the wetting phase. + * \param params A container object that is populated with the appropriate coefficients for the respective law. + * Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container + * is constructed accordingly. Afterwards the values are set there, too. + * \return Relative permeability of the non-wetting phase calculated as implied by Brooks & Corey. + * + * \note Instead of undefined behaviour if pc is not in the valid range, we return a valid number, + * by clamping the input. + */ + static Scalar krn(const Params ¶ms, Scalar swe) + { + using std::pow; + using std::min; + using std::max; + + swe = min(max(swe, 0.0), 1.0); // the equation below is only defined for 0.0 <= swe <= 1.0 + + const Scalar exponent = 2.0/params.lambda() + 1; + const Scalar tmp = 1.0 - swe; + return tmp*tmp*(1.0 - pow(swe, exponent)); + } +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/extradoc/exercise1_nonisothermal.png b/exercises/extradoc/exercise1_nonisothermal.png new file mode 100644 index 0000000000000000000000000000000000000000..938ba158eb97e83d1ae80145161b94d2ab6137cf GIT binary patch literal 44121 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 literal 0 HcmV?d00001 diff --git a/exercises/extradoc/exercise1_setup.png b/exercises/extradoc/exercise1_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..db9c1b4acdfe9368781cd7593b0def3963146844 GIT binary patch literal 58149 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 Y^z0%1vhN><IFWs-te`HBmo@kQA7%r*5dZ)H literal 0 HcmV?d00001 diff --git a/exercises/extradoc/exercise2_properties.png b/exercises/extradoc/exercise2_properties.png new file mode 100644 index 0000000000000000000000000000000000000000..28c700ed18443d78995d890cb7fb085a84146ff7 GIT binary patch literal 27453 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 A#sB~S literal 0 HcmV?d00001 diff --git a/exercises/extradoc/exercise3_a_solution.png b/exercises/extradoc/exercise3_a_solution.png new file mode 100644 index 0000000000000000000000000000000000000000..fdf3ef23c81a0bc414554a9bc2e4f1e784e134c4 GIT binary patch literal 142019 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�H71hrClG-}9va$l5IyX0+O8OY+ z=-9pDIjTWzM`Lo^`vJV*I=_AUHalx+V`Jm&T&$A`<6tWkRa;vNT`cf;Je*E8@l96N z9W)``)dttsyI>)p7mt|0k8&=LfS>AE@dHRD0nX0?_lRDnWPgf5{r``k;rM@ZT*kO$ WT#8}~zLf14Ul}R+-!dd_KmI=~+vHaO literal 0 HcmV?d00001 diff --git a/exercises/extradoc/exercise3_a_solution2.png b/exercises/extradoc/exercise3_a_solution2.png new file mode 100644 index 0000000000000000000000000000000000000000..ba90e6fcfa783fcc5a4eaf1c5fbe252dc46ea8d9 GIT binary patch literal 60853 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±b858VCy<MlE7|*M%6voh zBl{)Rl$kaFzJHpd{JGedKAA>DlC~Jm!@=~WSaMjkMt-z+2tvVj4?o_v;@AC;Ek=({ zL+cU0z@ZZbzBw9}Gs-FV8FRqdVtG_gEtibw_ms8*UYClAHDrYpP43}&)<Js3chFI= z20pOZBX3E|1|^6YL$@9;K^(WFW^_+3ap&ov2ZZOZ{pHo-!dhOasF*LVs-|lG(xvNR zZk%DNmJo=74zfq8Sp^>+eYkjGNAg5WJsf33nNo>k6cp439HkiOZ%Zrk+ZP8TM4Y7a z3RP<G6B+1CXpB5CQ*Q-!LnzrStq=Fm*;E$3SrLdg&p|>UDhS_lb8~~&t}S~RI|W@k z)V_WpwFxY}l&?5FxFn2zQ4?1&{=>%1%xUtRT*4XwDC4DfJ0H43f&3CKP@nT;>>jnT z1q(3X$;5PgE|x)h9bS1)<ZA>34U9dM>;kFu6u{+F_EFlcl~x&e@|7<<w1~Hm-|=to za5Kciov+0Kkxc@=3n0FjLIn4w^MYyY1tjkAqE`N%;=2=+Lau`APqTN^?+dRr9Z{Ns zf~k5jKyHhl-x(*)`G|f~9x5{zXYVBnV3~@4?b1d(UInI6N57XO2Q@;pCXp5*jXHs( z{RHcRhiilQ*L7g-vX|s$0GL2*z0<A@$)r}tRxF^tw7*mmj@1!FH9|Bdg++mUmJg3_ zM<Q`N&K0h}U|^Scgl+gwK7d`?Z=O$jU;G!WHfu<8ffR;rz>f{I84g6a)}P-NJ}pvo z7Lt^6-zKT8W9Ov>hN&$dv{!$~vEsHauC6vuYUybKC>1w&(kjsQ;Ai6E#~E3!oEH@p zMWspnbcI6D!3aSlwNEj~goV+yix%T@Rv3`;+vQ6hb$aH`#KaIByH@gKOfNt^To1~A zmwX*Ik8_G|K?Wz?TIEH%oW3r~)zHvT5a+mX!t0F|Fwx`KM1mowj>g7DQwqwFH9ABZ zlL6v@U<A5M+Rqz}*_>NB7_e0_Vcu@L=oe%lWQH?GO}gIoV#sL;RV4?D#}M+x7CnW_ zAQcG*_AA99B8196UjF_iK-8!u3T?pq3prB45rT)(oJpCGHx@n)3XXy*tMq;`0m^S~ z4RVQ{iKerH2A*qh_7{=Nywo8$F`^d2N*ODJ12y*Fc3~!<{qDR>BPB29Q{6{x<FQhA z{H#doi+C9PZ6>c^uP+p+^gKk9)g%1m<=AgZoO@|5e16}%>#MA+-Z3V&wl8FY0Abfa zU3&+I7|DRHwAgCO%GHL`%O&)U*ko1&+}WeZN1qC>BN0!1o@%JBJ#|Xx@B8)d3VuiO zMI0g3^#ZER9S}?wFy$(u<KYLY#xpFJaQ~sxKLF|`{AdFQTCcr5s|_irUU17){h1`4 zxg46CmUsW@PbE%%rvE>ddYAJ5|KIArSMliT5t>tYXhuQ#Vp-SOPIDcPJNU%>3*c=Q A?f?J) literal 0 HcmV?d00001 diff --git a/exercises/extradoc/exercise3_setup.png b/exercises/extradoc/exercise3_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..eed8371e6a96f9b4d4eee22849f4b3bbbcd83fa1 GIT binary patch literal 45832 zcmeFa2T)aMw=Ifo02P5Yqeu`G6$y$;1_c!n1QZmNsDMaDKr(DagvI~}3X)YoM3Q95 zDoT)?Bqzx^=dj;cV0ZuL)PK&sRqvhq-mB_ew!MYTTHpG@oMVnT=EPNAR&vvZT^lGU zC^ku*JAH|Qg6a_k#X3c*-|&@<Uk0{NP%u+Soj#>#RX@;VYkqk$kgwI=REV98&4WXV zO7G+B(MQ|3w<=e;C2iZN_EsbC`hDH7yMltrm6!8kjwdwB8Y*$?8{Dm<Nj{^mOP}}c zkITy3wI{A~%n0&saJs~GXs0R5`t@vVEYsslcl6HXoROBZ_+wm{R8S&HS<`JNP&Yp< zU>kf+n2{Ev!HY`z5!K4OFQGxJR=)JYX5I1|X2m}G<u~`_BXm|iBp&uZ{UK&HLqp2x zjJSl?SzSF$Nyqqx8r7<6<)@S7HoNEf@9HO!)0L+8^jkMyv2SY5aS_VgPC@ah=Ta%g z$5K#IA|+RP+aRic;5JiQW_Wn|t>K`otSm>zpDFg9%|SsT>6UjBQ;t{FtU0wHw@A9J zFVgxDKX^8fcw(yl3D$jKw=d}mGqx<wO)V{Dea*dp|Gx8F{W-dTBX@6|*XwH#Ex5mW zUbFmad1!o4P|TEsA*qj?^EJaUG0{ABEd>S7_io9(xS+UKP|!scmF=hZCfQE2B{S#= z)&8(xwiH*p)%7vO-ikzO$x6#Czj{ke?V^oM?$TRls|C6Adv9NvT(U_chO$#zm$=Lq z#j7gyO-*-4G^CC6r4OHou_@Jm_WXJLSY=Cr=I-5nmo6!ovUh2_mmWMQ6m3%)BNf&e zceU%;o~dd^;o3`rvxx%(0bjlG3~7EMqs#{mA96jbSv<cxx4R?vX1gPEPj9c0u90wU z#b(-{*0T@sr?;10jT!rMO$@QjUqseRN%<;XV*J{U#~835pJd*wC?mpqd~#4saJze+ zkYIiL>d`M>q)ySvynHFfLuagOv@1<c?bIE0<KZAai>b*ew&X-cgWjIo?%$4T#uc4o zt0;H4J!0ek);Vo8XR&L1ckBHwXZs|zJ-BBmFYE7kW|qP~&a!vyut;RmYi^Ohswl|C zF&`-0cT!p*?{)I1z?MswE<IrW<E&<TUiXQi$id<M-Hq&=oP$qvb<Xa6=Iordl$A9! z6q8oZr*P@g*!bhkLKBmdS(8lmgD&-tq`#j(UsxEf_}n|Ns{&h_`53XmHMVwi$Wl8p z|8Y7#J~ul-@~e<gJ>|MNY4%{zj|XF49oW3SuYa1RiJR9<<>DRP`PV;w{P5<p9NysA zn#lV$JoN2;hx!(>3m5z5HKWWu{eydU?xb?mu#+_!4LusWk%EGbrbT2m1%;ELhQ_N! zd3|9~k7vI(C@<y~k<F$Wnj521Qc~hxb8&J;-%-Dycm2Aap5FQMdP+(<#>U1vlJlQF zojm{j8EtT9=Z-zM>&RU}H9uFc-lrX|t#z7`bj&J(_z^XS&##joWM+zNVc)LhR`}@j zUbS6#IEIx){L$QO@j;t}p-bsnvr+ZwN489{OeR%FL_{<-sd92&nD?JLJ`fol8)+m` z*4WZgWAh<3HT6zU2|jS<n|7v%NH2Z)g5#UlVtxH$rtFE1Up&9O@f?bY>Elyx7@u<+ z8sg&KL_DSvaRy)a_4iwwO_wlx9<@GyhRw4A+qd<k*{O?ChrO*cT&Srhn1st1o@#IR zk&%^_mb-A_f)w%JV4q-PWo6UH*yMzE`HWXqBV#@|w|<$%p*p9rkW<w)G6IHu&lFy< z`1FQ`hGM}Og1s6l8mk(s%Brr4r7lo&(_sw1O;Y3UpqWo6HFL6<|4>vcl986Cb$k`7 zW!muBTf}%E;K+E?XX8KU-$uL^J%0S|O|`ZUu`UIS!MoR-V*BIRu`2K9&vi~~x(*(< zwG2OfspQ?uJFmhbq6amUYT7;zu^%6#Wk0pJxX4-jbnQd0z0aO6IR3nEm7z^~umeVv z%EjLwr=|_t-MFqrUY`FThppXB>9fbY)%g!n{hXY%b)WUH5)PWN@cr^eDzA}+JDZ2f z(c62`Rm{R7(K0cmbKBMnI7ims=|7*eo9=IzZ%GTUYxQY7z4uv8;GR8uTsD&!dWIkK zi@}q8`8k12MJ1)KK0L%{@wNT)hd0`nq^@DYD;lkej7hzHf_CpR?|%8}`24x1y0X{r zPcOXmXpvX1tRY_Gx&1;vN3BlXxI?$5x3_$(@{l8oy0O>Pk80k72M<O>=pL_5@9%%# zuh(KAR^>gN*K!Fr<1uY)#Pm`Xz+Oc~4PX;|H7s5i78)9)b|mDj&GeD%#ZDa4D;Ba+ z*Jek9PHc9SDdHaJ?bQ>ht*B}6dhz12qRNRGr6;An9%k?E;xvSZ3yFxZatP^++&|-W zzOtf{Ch?f0BQuWNoozG}6ep?nj#{Y@ew5f(cg%Q~-~9K!2xfELWhJFp_3WiOo#3Wq zL*+APz8$YoNznN0DCM<Z>XuWKa*EMpU-jL)cb`6ex^MZ_9ZXt!%GZ2VO^qu+D|LP- zJ=p4}tFyE7?09#qN@_)syG>WFXz%sw*R#f6#8y>R9Xoz}+m0RFDj!F_bHpA#aDb;f z<YlUWTpA2R%R(1lsqlD_^QPU+^Uc$07IoT8b7d~M?o7rdk{l)yqHpRO8pP)7N`oxw zbuF8%!&#WV6%||0go||vFBBEep6luFpC7W!PS>q`>u;3SyEshB=9O<<Q^ot~S%}j% zjw=H#*`($S>y$>*Lbp9aS7KCBZx#D7k!SL>wYA6S*S~o2!ggvPwcSk!c4WU?5W|{N z7Q`!A%d=-;yfpZjZbc5QSYtzjewU<(nP#wgadB~tnysOnTxnH=LTvWZoc;V%lVyv& z*kZ37lTFX-g#|k^(L=ue<IhGK%}S%MCmmvCZSV3oZcfy#^pX=5Flzj`cH?#{F{T%v zHqHKl!#_V)lf5(^OkQ}vwD9VI_r;>d02k7nW{G6y^U47CvcB(r$Mv^!UN`@|b_f6J zwX!lIs~0}!KHWV(KR=w>9rWnYql$`(w6wG{kGI<o>Z{wfJ=_tKy<{`X*7WJqr$X** zyU}ku)UDbcZrpx2zqt5C!8t4Pd`nAZ<v7MPRG(D%Yq1<K1k1a3?eV{0K4Y~TH*VP4 z&Qprbe2#UPjFb~woY=(Is8J%h&&({yeAH?oTx?NSUA-lHp)kA1m$$oGN!`BVnWP$S z_Br`efD6M%7N(2omctGUqj`@XKc;2iZ+)e`m6xx(EqLkW_z2#xwvDvqVA?E&8Oamj zVtbyR-6UXgGs||}OwNruY=&E<LH6ZmcD(TRUUy3V`gK9l(!#ZbTbVOIAH$sNJ)br; zHTCxG+X63kB}GMk8peyNs;UA40xq;nC&okkQ{$M{b120`y?ZwknLQU-DJLev!4diK z<IF%p=~5vE9UkmZAK-qztILkf+}u0>TdUBU)1OyImTpaVknPZyhZ`f`zt0GEKi}$X z7wS$+?7y=i<<i`lRi_FM+%hW35nDXc9b)=jw?y)$Zs*eca7(7`bi8&UR)bn#B)N+B zB;A@*`uh6P(uDy6W|uCxWpIXug#}{&a&mG?h)JG}H)u*b&d#n=5h~S?Z0MEy$N38v zu(J$}jro?xFPCN|?C@=yl3nX+rk!)C8SA&~C*E4MKjmAuZe5XeJ~r6zp1!`;d3!8X zYzLEE#eP&*XO4W?IBL~6Kl^TtQNE-s*2gkyJdl}cC}X_DtW?BuM1jVcI5f+r$4*gJ zpxC<NI3FJg8^Zl;2u`+yOP$B+ypW((j?7fMcJJmhZWgwmo4C=SQxb6P^5yEr#=~zy z8{)O4m6VjUwL9^=&C^-aoT_Q&gY`+2w2aSX#z@s+@HHKn)R(j6#f`P@PC`Q;+ZBT6 zsy>)~$zvkfeSdxs3)m&xfwM~mPsVxRz&XX6O-)UuV&sJochR{vT2k$=Cn#yov}GbK zjE<Lz5l1*IEG#-Y+SxAg=&yZrQK0i!cR_Va3)w4p0rT5AS)-oaACu0N+Tm$CoM}m3 zT6AXMFQ0Rzy2nff>n+U4&CSh}Y>zRxGPxe;egFRb_wV16jhbwTnVxTG2@<uRTTLr$ zf?1xclBo!L`?jm2gF4+ar^qEZHBK(=9NXr{-zqAWdLq{d2?>$ANlQATKfjHpyc{pX zm{<*)((d9(!$qf4OD|u(9B5V|&|E6H4@OK}P*Bh)eJ~lwQrReV9~>zb{uCYTBK_FK z0vvd|IbI$foG;?cvnydQ*iSe4czGpQjsCP9O6?vi<R<-eWruykrhl82B`QI~px{S! z@09C&aFEr;f_PZ#=H_Oh;S6385fN@~<J>3o(mq_7lRuP6i~Z`Pi4dk2a+~+PcMOT` z;2CH2vo<msD)-$z|Llsg^1LN!+EQ0n*GJXjnvG4G0Ih(TnP>&q$5zLsrKOCF44jp@ z;HBPRMu(ZUpFeM!F*>w53-`{=&u33(4o^-_HkssXa`j|>9Tyk(;X|1RajJxiDuZE< ze8*Q-XtGd!DgMI;lVZQ)07_ffWo0_7$BX&I#*28F=4<n)1x#dsyxiVJM%p%TvK8X= zkwzXcZQZe>yR&ocDV{q&zmAQKrJ8lesHR(JXq*(4dhX}9>+!ev`1m5bm%frA<srO$ zQ>=@OSvS8u!VJS78GmtF|Lok?0GEJN0Vdtf&Q59X!?Ptg4Ug3q_5%Fw$ewvPJ$`Y0 zqlf!f{{k3z;k$iR{>E7X$B!SUa)d=+D-qMd)6u4bqb|HipJ4=>W{1=6^)5S`91$Kg zmoF)LRQvmL*DdVpPVwCM;)DUh`H3yfv}1Q;)9s(6h6V8O^xW)v`h8@ii(za`jI5ND zR6rcvm&gyd%isL?aU~^i&-%K$x?2wB#PHu^vl%aS89Or1)Q}cy-n`jsCVCyGoGujK z=<Y5J79;nD2cPI}qcqC*8v12C>DH*veAxkSuw%_Bc%-uTpFFTr1!!j{!lR>$;YYp; zT;2I{JhV2OM8;u?P3wFA{5h+B^s{qXZC@T%S6AcI9_#oN*W!DIV$CUed3hc<!@-6W z+J-FsnwYu-9ol9AC#`EKMorNv%{CL!!D;E~?W0zQw{N*vvFXoq!6bkS75Z?ypWbWP zbXUpRdbZWDxX5}2gAdg=HqIU|5h9KIw@^2|^zpIme4zyI>NoDO8gQMjLuz^g)_JzW zYuLKfwi)Kld--+2|HSbVCz6wsfe@yqr+1He@Ww_&99eN69=x=Ut#Nsbyxme;pPrSL zmQGJgb2c3A?LElJSzJ<bqT|z%2pybw$HvA+>|eO1q}W(v6HQ@867G(bYA%p$o%MR| z?QK+_*!!81iD8!&CXdx!*mSB+XQLe(wRH9JfoEcY3sXxrxW=}b*gU*g@Ym5V1!%<x zC)l3*)V41ooH!M)`}e@C1I5UkI&~lCXJlf+Tq4LEd&!Gkt~uGTffMMXV4sf){^Dyg zugqR-$R2D;pDveVvL7p8udJw`wtnd=Hr;3jyI2_<6?NFSt1Z~nZ@lAs0r9eiYqhbp zrR1BMoD`Ys34x=-7Gqr5Vt#&t#?2WpWdLQOce*R*=H{O6<}<2`*B)w2mEbPfcd$fc zx-p?dP#+);Xa^_u6kXMiA2I6L4sbobzP=AycAnb&_iC<>&77+L`R%d4zkl{zb?hx| z?M-SqHvq=))C-j_o<DadEwqy-)yYW~gY|qZb_odyW-VFv{_qwbZsY(77?w!T2=98j zYb<oWM^emYICFXl|G$n+<nAyL5(|R_u+zPRTTSK4m1OhYipShp{6azv9xlGKZ_Yf1 z<2NJ@om698L4b>|^{rcPr^iFdzp2J+6?k(h2iZ^6)z{a5rB=Ff1<R*f;JFV69bRiI z{ldBvt)x_ZGfdhiIVq_aC#HzEbODG^{o1u_ii#7N!}i8=6TM?nF;>D^nt5)Wg+9}h zld6E6m2WRJq}}cBD)!fmtF2Gc&vR$ue$!E(Wj{~Y;g1C$eVL+*p4wL=B_}t-++iAF zE$eKX$Ai8szrMPgnwjl5d{v_)r?fG^-3dlIGB!()(VhHFec{{M9V#CzhntB7;^j4i zuY?uEN-yKTLE<H1H)EopP$?-kSB{;(Pf$aG(G=K3QI@pg>7Vh-tHf(bSz1m5O#r?o z;c)t>*&KWp&bqzT3Q+g=`Kdu$Y$Yb!fjAsrV4}lUKeQ5H``|(Pso$+U--L&Ur>4#- zVMXC&>nkcQUAb}v@qQ_Jp%mNci&PqZEPJ9t8t3>I0*N7DZs+$G=@x@}hK4{U#zsb5 z2M*+ymU16HoYCsI5f1IdFQ{wM`su#<VxJPN$V6F5ppZ_n-`!#a5qG|AgSDS<5IuB% z_n3*pQ&Ajr@(3+iBcIq!qK60&4<KM&k(88V-^rn_d;4~6in02Q8*TXE@z=EWw_(Ru zw)%1?bMjqd9impe{tKqfdET8oL(7t{(nb7PsG1JrwwI!EUiqg=*QcFe<D45l-U*@8 z;xZ%tIP^8dX}ZvfPgO{Bum8OJanZBXqGtjgTl?rWKEg!*eWjYRGG-@_J;GM<RLxhl z+={f_itdNXmwu}KQBz|%-DJtFp0$vYy*T)RiHN4IC-rH<wIQOipR86QWBb>q7zeYi zlhnnyj!Je7@9LwMSQ)`mOpzVi72A6X9yaT8ll%Jmj_dzWR8&+k`MfqKIreJYO)SB~ zhYyMP1p$XrjLNL5oZTB(#*2Qens@|X)^SV9$tNs60!Q(Oq;yMkbEL?pg9k3G;j!2w zYBw{KKJ1p)9=tRW9#Y;@#$?#|F%CWqAUEROy8|FmA|sU(Z<p6(O(p3BS$6?Qb*v9c z$jr=)jEn?9A|#~zrOhLicwFt0g0;XHT$FzfoU3pF16M<A(I1<wR>ITu5l`@*aKOXa zr0Jn1Kx&RdhjvYcY}$RIC`e@f&10@ZoSd5+UxE8uT9{3^Rcr%$i#SGZB+*sw_1s~- zm&?y%=4)1QUo)S$rCU+U1>fLCy;9f+tDn`3tyQ5x_v7AUC(pN#9ggkdJa|w_YBq#a z2w(^kY}QpopC$tT4#11?3z@Xu3ppm4d(>z70b2I_r>n{Vp1Uex>b)@VP@o+=Jg6~F zBC1n`D}%{y1dg1a9+q23jElQ7-c?)~F2^+W&X-q*k>8{hA+X8wuKcTA#0{R!rn8z* z&yt;s?7I^L__|+?llS=sPw2@337VND1l%YZZQ|wGUtLwzh_DA|?(q)ptc9_{npk!6 z*DZ1jeK?!IzWhKt0IKeJg@uJKB6@(TqgHmMK_WXa&!a)9aEYm@)_HDwB9&rG;2KIw zO1^*J#b=~)>(;GfyPkf#NpCDACpRsgu?0&gV%&@UG&F==V4|a=BPl6qYip~ltgNaU zSfq`eQ@GF+XnlD5<Fg@0<!o9njpdGIvyBG|S$=Qy$HR;dffkI3u@vn-%2ZyI8SFxC zzND-yWEv@g7-QoqP1&zvsyiPKWs{dE8Lc$_!gj(|BO1!e4aIyd3#0H9#4*73$kHnC zgpUeg;@8Z50*Fq8BpeRXbZa&lM?^<2cJXCjQ&2F=$es=`E1~Bz3Rv*sxO3<zK8tXg zI5YUOAa%dgpHFV<uhYD+wY;t_)q1?EebIcZqkuf)PQH5Oibc_JUl0*WYSx{W+4D_O zQBwhM7%-P20GpX>c#?@d8ib_|53=cFWtz=@eo$fa^zJ~O8{&Y(3$x=yyz%Yv4t5Ld zA89*<##acf0Xt#WBuYi+4fOQ-j?k974c!9sxoyX`ZQHj!f8njhZ>c6FRWLI!3O~~x zpR0Y#?eVvpakr1L?kYY9WRahbzsKAB#D3H?G<eN0UobY7v$U*X5>2nFt1GW7FTe9{ zQQqEuaU3yPL730?E6W>7yCit)%v&XLw<PV-=_`2Zm0cF$HCXkiQm?<yZ`U;6u@e^N z<}~(J2pBS_n{A7(9A<P+Nly0m@xh^S_gR;FKnW(QvaHOc`m$0JiM*&2c=t!yAhsmO zm8hAzQU~CxWW*Ru3$2vH_QSR=LnAPRoUmnS{V_rSB<{0PPvHj!ry7g_x{{U2$v>Y| zZhXAq(c?$)@hV&(xhO`$dwY5eZW|crHIj3OfHl&OQaKvi_bbDx3U&Dv4LeMyyD&M- zymny}bgd35wd>*~&jypNCu%Av!ug5uZTUASt|UMIrHJj+)L?_l;+JMPyqVE<u~ApK zqL)WBd!_~k1|k%~*PZ%cGuijm`w_2fu+X&KMPf7o0Z~zRw&?_@-O25Jp#13ZV*<^* zo~Mo}SdO0&M9CT@=}ZmOxyDoORK9eYLQ{76RRZ`|(a<3DF)lWC7{II;hYP_WV)DX5 zTiEdVxw&<gf8@2tW{jOzQzOV6*^wewGExK{1kLs-*x1BZ+oY}YHcs~1wQJck>%9U4 zIdyiLRq^tyBR9PbJ$x-*3l@>sMDV6`Yk<Q5Bm7SoUWaFA+l){+5WEYbY(%@kA6M&Q zKLFRK7}UihTKKw2#$9*B()!NDX8}acY02(E;bHaz7s2g|&KAf8!9q5sn#p~rUmXx{ zH%<LS3ic2oPw&uB5U);2)U^aawMncjb|t2=tE&s7in4M#z!wY(0+(RxF5hhO;xGpX z$KywjvJlt>wq6MZjLhhH^B7xwQEzdJIFaKz_oz@b@m)xWS&s82m_wmvQPxD_rg+LL z|D6+mAT-dBGF-qOY&Q^>mu%dkcJX2yVpfjWjQG${HV%${t5V`DPiJ(CVDXlQ#WK~u z;C2*JqoZ<meNUTgPZ-vlmk4wRXrw&5I=D*qS|5GuA23xV07OHL<HNI4d||}Icx+8s z%n@74CQr8rSqxyWI3K&WhHu{*w?Dq!JVl4I`Uq4o1@pDdk2%Y4D{lSt>e%lT58jmb z;L2ugjn;37d!F;&*j-|~_>^x;@Z+`TOeU#KPM<xS`|(cu`Sa&bFW=-axDw$1!u))? zwLIrURx>=~Kfg0rL~Sea;{~2q4K9{aNFWAb-7L8tCgImrzutUovu@{k;^RR<jB7rB zjJosJccgE&tz|wXvYOh*H)1(qcy8BY&QIllb|!IGWtJ0;1vlf?^84WmT)XbFD&j`> zLS4^<h*LP@W;tg<M9Y?kc8ne~a{&LnV_nyxK#7le2ya)u7lP5WRq!tJ(G<+Ohm$EJ z74T!TCy7s-+<eVomD^iDBWbg*`1fBwLcB+A?teUmiJScQEcO2jY1MzmM6CV)r<R2( zDYFWPcUcSY|Gyo<|0X4ckIFHtS?wY*vux5g<HBk@H}W{ytm8*`#!ltPn75p}De$^# zAayu{g6*BoJ(j!;A|j{gCIqh#KXWeVZyVCKJOlSa&0wDrkNy5>XOdA<T6LsSO?5S> z6Qt$v3Lq`b@-<s&f|3zxY`YDX^%R}CrKRf*T#NadO<MW`=AJ$q|9w7x+SHwqhd4N< z2kOi~D<f|s6C^A^<p^hsmt|H?Im}s8lj!#qL!(NXIc+fQYPs7Lxcqro(ETI28XB#g zKI&N@>A5pTz97xf(bcsSA;eJGmgDlka^xa%R1_4=sb6ox+;v)=y`4nKuN|SIA)|-j zQcurM*xD4yr-DHfnZUrnQ*;cXjlM&+5ya1Uc8s)@v_?PlX{Ucp+)aD^_T12D<rL7f zGJeN&!DFze<Q%zcZocMJSzY<T8~BlXT2hCT*|w{>={OP5m3JiWQ~wut4YcI{?AZ~p ze&8up9cDYX?3b}}5n@mPLjHM`#d2W{3xOus&b)bvrC=zfik_kfKMb()QW4+@yv5!A z9~?0se>Su%O-=MxGFi3W-))>R`sx1aVG|ckJ$?O+j;-?ZEbEsqf|cGEH)1Nh;wmp? zFLZKCugVRu5^k=lO4O@<4|i*iz#<rU2h+Dyr6AYY)m7qmynl^Q#%!0rkmXP#h^YIk zDQ#?QjvhUVzo&+p(!o-amxjsB_!hyS*v}<a%5iKticz1uWU$!eMnqi!0ttv)OfKwa zWz{rsL9mdRnCPWENZ+_>r}A>HaD<D8hi7CmmX!JaeP0WCu?4wfx0D=Q@T#h+h{M9n zIX2S?QJ^3ULdE2p3wc<qg$oKDIG-6Gq3p@3%2FUQRxvS>iRR($h4w_cLv-w!`_`>n zsqL$TR0ah;(|n33vMl|Se)|0R@8EYFz_Xv=;{&w|dY#eCWwO79Ad@BmQXaKzUUMo( z8E`Y{a^w|N)84SLHMrF|Z)vW~iAg?-7W2vr0F}E{yb$*=HonfxwC`cs(%hyechlv| z7jc1{+Bb*}b-=;{S+&gM@_`|CHX0rpl2xIduGMtkW9)*MCYwB;%_QcqP&NqiRUuq< zlcNThvDw*KIQ12b<L&9`xv;SC^XE@}pvRX&QAm!4D%m1~0OIrL69F#k2XWyDVlft4 z(HRZoSz2?0f`TL&tvirl!Yqq^rU9NPDG&a(^SPJTmNlOd8vMHS%HDsu6i^-Xl}6n8 zh@{AB%~Is?Y=2zSiB`)@!;nGmQ#pdh!ps;qBy;i-ukkfP;KP~5m3206&MtJZ-#~1v zdt#C|<2u*u`yQN7?}c2DBXKmgNvSYUK4C%Bh$s<k&TxN!`apc)+YA20o-Ow0%Ui~P zZcJiJhL-%zyvB_mM>m2+PRW`qo_MY%u(IukPtFadklPUj9|yarImCmo@6$n!WhQ^C zhJowpy}-Fjs&_BnxigAvof=LMwie=Ifc=&WDs1z~LJUNB&FwJyI5H;9=2f<G2}VpI z_50JOB+#ZYK;=j;?=f?ErcA&&g8#1t#Xr_rNSeuEN=`X(ju;5@!FaRBN>NuwTOZJt zygVYY>!jl_KDi9$PKVI{f=^eE?OJo{*sg6WSnT)3oH%irUr_A#r|XRExwbDuD}gKd z`BaX~tRkv^;k17-v-I?*=t715TQhr%fPy%EbZc~1jBf`_OsKNyDrb2@$$^&>(B1MI zx<iDp0<V+rs#enQ6t9;hSNPIDANpqs{@Dfpa|glXG~fi?8vD%5zr(B8eLFO$h~q0K zCr7tN#BCdKHa*$nYCW%7tvZL}E8(`y#s&(%yHUh<JcM1pZJ(s(QS_tIctT_@`l=)Q z`}&X*mqrkH{(K3N)$sRm85zQH5_j)T&Q10QgJ&{qNWKi})~xtA)D|xx9a$e#S-pJx zrKV|OgXsT6N^$Sw<4r;8SvKC01a;F<;PrqxAASQ~ZNV@TS<J=xX>eV`-pWRGahiGG zUvSh!T^ny_B7cO8$f~riscFxeQ<j!KRs<6B3=2;eqH>IhNx5eF*B$;n7Ncpnfv^=B zN-#TeXU?2K)>l=v2~HX8Z|vfjPqs?3K^=rhcb=Cu4W3uV#qWjo&gHP*OqcsmDiu2g zP`9y0os{YEi_A;{qCI~6LXdFkn>RmuT7Ilvy?XZv1A@0XvqM$!`gNFPUEN-=YDfr7 z_N$ZAz&u;Y+0Kl#weGQdzU;y*xt7;JAjnH?&>B*e6%GS*!hU4a|5iu{%^{)ri{h1% z5*RZUUSWClZ{G$H`)M>NIU#|U$`SI`eT3chIPCh(`|Fp&(Et#za6{{tAt1r>aw;dA z-@OY2$EBP+0LH7OB22m_M%8wt_48M`-G6Hy-2ISgfvCjHY#bL431OvjETLJp=_f1L zwkvPm$em|a5h(&N$o`9u*y#m=6O_@v*Asv**3i&k2C>^diWKAxcfX_B=Y<)O)f8y1 zOioG39*p}91E(N){zAtDLa-9%(%NZO0g|fRaqUK=0Ea=FPE1T7t4Ys$>#%Ct#1CcT zMFPDM9FeH&ya&yTT9C92H8noo7Eee^V48rV^~AQW+2XW3FI!#eY1bNa0?`69tbTH) zkAA1ub}p5VCT(9ni^&G?AK~Kz+Drvux~EZ1Nr`WO&m5D0#1pbQgvje>3J^BWX)`l3 z@KZ&)oxeySBppF2fp|qm(;RS9NXWKF6dV|<+Rl(F-Vv^6o}L7a1+bigAwe<s>|AJC znoTYD00?T(tI^jIx_p3(%Z8uru0qz<th=N;*mkI5cE=;aS2G_BA`PX2?umh%>QAf* zP>NScNe~k8kG65_$LJ?64x1#g1IHademS3~>z$6q0CLx=(5modjXsTvihA9U{wsma zap1r&ez66zGn%Fw*aQSQ3YilR(g>PrBIEV?v5;@|c}jC{TSnFKDnO*M*>Up_n)!i` zD%U>>5|7XZ8D%d{r4MJ#BOQYDWuVmw4KP5TY89?uPlGItlF4p_H+Z(FRVg29Cp?zV zinNdg@^8Y7r7PqjL2ObF(YfcTTX()FDk^F)&bF@&<Ne>lrxra^pO5<jHWE;aJ*D2u z$A@n~RQJ<MkG;R`H2YuWeqA?S?=JRNx_o&OVmJ1olh@VNv+uO$;*_W$0g{&yeN7zn zDBYU&guIP}w0)U5bA9NeIcIjowyPx2b{TVaVjI~aG9e@`NUD;0rPb5^Gv*|Q=W5S| z;1Jlp=}z9B@$OPW0YZZM2)W$t+qS79SH^DD^;MG7S@jHbz#vsw<7!PE^;L+ou#xNI z$uB(H!yIM{)xCdv!ujkR8#{aV`^cC>TwFxr8B(_ZZ|@UWJA!b25d0;-pkQ{yMNAm# z3?#%wN55`?;j00n?S?)Fnz<)Wp0taYNl4_tc*ic}zleCY>KFLcvl*z<A*JF>;H3VA zeW9igqhK>=&X_eOPZ=Yt-JCUaMHj<Flz9EvG)|&ws%a;PMAl8rpD(Px&w7-X7sBgr zH~;oRf0BG+SN=GwN=rPV$1$V{s2pz}JG4Oq2|)h6b1s@|mvzAuY!}WR+x79r`jI@a zfF7C;pFClvI$BYAW;yy^v2PnsI)V>0je<aW&8aj^=;<l$5ttOj!D}KbysT%YI46h; z5_F$rXm~i~DGv~R_#nY0NT;p1Mf~$0r22nn3i`+imcyU#yqNx+$E0eZ<f&bd%%<!) zST^T;WT)N^Dt;B=)$3$N>HKtizqV@Klez6o)628Z{H?BpFSV}DF3;E21&Jlv!l^Pp z?}a~4mwK}LW$uXg<2{rNH@B#>U5h`g)t_AdVro(I)RiZOPp$=7){M_CXuG+|9&<ly zE9=l=X3_bp?Brd?KX2~+GYK#Q|C^K0`ax#@7V-RBN4*L3@k)Ly$NR~%jXZ9`s~JuR z3p0rCw1_5bgFOH24QYpw-#pk$DcWPUIlD+u(bp`Kl@Gm`lJj{#S-tS4kX>bOZ%^pa zWQ7J3p<2{2XqTWBNrYYnNhV<16=@fQsMEQ-jlmOj#ksZj68rU@qmXO3&W7WIs~&j^ zuinS)U)+qeyE{B3=rB=-c|sd*(;uBal%@~R%zLYdiUk5DycoOXd(8!%JY;FFT_&z0 zPA?lSK_wx<E@*nNHIeeb^)c$_8GsF<3nMuoYx+^G)4(q%n1)P~G(@6sdFokq)<80@ z42MWBJY;PvP#Z<@O2fH1mGy+Z<NOYj`qf)GgGE+{agtx@A9`^;&Aj*b2FT5Bf%MY< z5w%53nU;penbwqpNTW~;bBGxf(5f{n-3S*sS?;Ox%1Jw+4r)YhClfsM;p>UF7X%#o ze?&t{599*UQfPEF4K=kB-8xFjC{A49<m(O>&e_j}qucC=8yg#~+h+hF1+Cb^2xh_o z(r&jWPbQ|O-0XXkYSeb`+Eow7w>aGrEVEyyG>8Zsv<tm2_#NxzryLj_re&d?pskXV zxvGXs-*epA!$dVqqvjUdTFLn8wzbW=^Os2^@?c7fsGy)tgJB9Hmt%Z<E_6tEkEu67 z+zVb4k&g{B$M(>W27>`4QtAkM?kos-XDNa9TCc`IJhzD>w#`Co=S=#_xUJWnugK5O z2cr~ia3bBb^E<GipP%2t6gI(vm^Zh&C{%_7TShoiv87S>7K;W$0vi^7{|<#1)1K}R z&?Qo{F!Tv&JtTb9hJDKu>(&_>E|NX-jXR3x`CejjARQQF7n_9!Oxg%qSE#R_J$vTn z=EgJR@JK%<waZUGhQ5IWbpUW0A^9g1t5_0u`vJ|$=56A&e6p67me9HPn%%mtwLD3; zjg7$<4)ye0O}8*qAYPSF-T3?YVO9i%gs}8e!!2S*kD8iR1|gHG29VU*Y4p`)Gi&L| zUU~+Gg<QU@-^D+ooM6oI5;ZL?)15C4u|N?hL?8slOVcFsbZ%}g;M(+1Wm8ioNZhBT z!U+>U$D?^qM$C(~s5Mn5Ws@{COf*bx<8>fVHoP(?$5&>*SHUe_UzrpB#kV-Oej=BW z<<zeEzKe>IVcYEb9rZ5f_bWtznnnonKJBfI_=O7!3hg_LGQWwhdY(qy0XG`9>lWIy zY18mx9~Nh1WF*6S{EO5DTS$RY@yKuA?(e7GXL0cM`d1yo088#7Q?-~^i-FpUN=iG# z3FSE^0Q5LEWIA>mm_*~+4{iGD^Yu>ax8#yE1p|YGt;Z0n0#I63h3hoijTa*yp`K<Q zab_L=TJyVuqy^W>AFE!y)E*DByWMkD=y0~4@8#e4*Q(%H4O<Lkbb2dy75R=g`^q4M z0V-p%pD0I$c#Q3>NUBN<f~&m}1<!O|O$<Po3V|~YP$5Z1h3ba6`7u(m8i2m0W;^T( zv>z{q0V@fWAqPjxEH4uyqr=E&N}|jJ3hD7bBy~X0;}Q0VUro4mK|(@8TKX|D#0gsJ zt7|B@yC}9kfUQC_1Mp7hfZ9{si?vXOVmVNI2kZWD;||!K>ski{U|xdc?E4f7y)(^d zRn^tiA+eE^%=;0oOqxmvM)08b?a?;Z(?6pUO0Glhgb6PZ?2p2=Q7u4dfA9qJUShLe zAz9Ja)Ru;xxF&7kJo@P%7QbvSh1C(tS36hi!9{y>;>;HC%G+Fren(k(oLr)H6dc1& z1_mNS{{!Va$Rl7I6m}A^NU6hA0yY|nRHyAz3{n<0CpK$N58{HB#io`$-TAZ1oNiX< zw%^-)+<YMA`>Icm1t^Ymx^U)M=XQqpPf?tSY}|ZON}6pmB&@UUFVc~O*y4Jc>UC6< z!H=kGxZ3<rD5z0DLI^tvfe~iaVXiV5A=s#W>^8mqRadXxQ}|RSU;p=Guv<wQEZfDg z3F?5oUC=Y5q$7@ujSa;WUn5kNe2pWkVz%k&iBlnkRc9W%Z|#A*y@{@j_jZ_3JQBZq z_kxw>i0RJ_M+r9(u5)j+W<xcL)BE>_q*s}2I7dsX{A=kJKI{{-T9xmG^n2{KOA(=A z6#Q$oj?zD-X#K`;@232V^AG7RMLZ9q$c5Xw5n&m#O;}{L$)S9$`0dN{@QvB`{95Cy zzb&v>uiI%E?IGh#=jrOSe32%TO~f^RdN3t-P;ygPk5TgsU1#y7W?@s|pa|G}^ctVa zYGTz6VAb%wAUM&kUiy0qQa?`95>x!`b0zO5+XCDc{JE3-!DZ5TtE@w<Cy(i>+-JWk zhTnMp^M>M|Nq{^0XA=JFNwB@1x)*fBvK9cJ`hQ@q?&Tcym7!wsFStqo+k4^#w8}@% za(&_-qc*7>88M-{QJX|y<dbd7HhJSo9PcOTS9UVeuxR1<<3*h0y}-u>ye5ZGm8hJg zS50tQqq{93`G!ypGDrthT@Z3Qlucy<r?fNWRW8%RYb`g+m2TA|Kp()9+6jNK3${$q z{S(>yg}OPj;Q2-rCY4oHnFFa6Lri<0lJR4k^KK-9Z3862Dtqa~1x2(jFM}m*{y-WQ z>P>+?`C<16w{iLUZwKxIz1hvQxrATv|4~`Vn>_k(huThh`dJ7s1ps8>&w$YhkTMym zZa>!>E;jC4%Fr)A8|h?T@0CnE-CEv>l09*~TN=r$ff+z{qp&VJK40Dx<})lBqB$fH z#aAG5ZEkrvA!HB4r=UX9H8kABl9-%KR0qOm0lzsM0fLGO+4OI)a}8zSlrVW=JkJ+y zNIK~LX7A!#!{FBFz7SOm;1J`??10gb4Bw6d0yT#j<Ba(DF*)*t-1J}r-%|2pR_cF? zr~|(yb|X9g*JYD|V+d6uYBY(mIrvmSoACyeb*Y1fLMD<ij;Ob3#>_M|*+;EL6^aYp zy1C^*`<^5A#@GX&b|F{YQq&~4@vcNJVei3jLn+C$XHVu}a>JoRhy48gC8$84vN)-5 z`4o2EDhaUunqoJg$yC^B3Jfgp;|O$xvLn}tb-TCa`LbWhYZ>ey08hyZ+F^V8<cVFs za?AHy2`FhaFfxjXh$t`~9vEO~U?+=)ws)osG^O+T7c)-&SD-mZ#`fMNMcwtUwnCw| z*ugFaC1L^Ud9Gi)h;^taFaNzcGx(-KFl$K}$k|?V8x#{j2|yMZ#JKI-As9i$eXyv` z+cSg$@W3A^y#!vw_5}bw0fc}IK%ig}ir*obMKMTZq&^DoSXo)w`3B=M<ll7A9}s!) z-~o}37pEdJ9!s*1+S=Mi*$04&0fa&S?zyup@iZpQH!v-YxDe&0Go{aV|7U=VyPrH| zVAth~S_M+KPz%ZhtcH~&&z^O5aRKPuA*)xfpoR_+7jHa!-H{Kl6a>aPkI~iu0Rq&3 zs4v^dk};aQ8|sqGOhB-qJ@oXt1_r|O0}1M+#Yr%X8Vh^~L$XEsqY_XlY>k7!G}-Hm zA{R4A1bnzu^`0%CuudcmNGY1#sOve3+Q{h=Eu`xK!pJ=#?gaW|KQbtQi;hdKKL1#F zbr_%~5w+H$xOz$Rr#MweNXTr$B<f9wBG=w9A6eg{orG=%=lKwUS4%rhp-~`1r)}RI zXvsL*BV%Yd2+%7*g`<jxzOAbpmygMycnBJ^qO6R^us#u*YNLgzIA0lrGpKWxHL54d zmFnxSKc?O%8Fas5JVMT14@E(<B$T{BD1#SDP$zXjU%$T`NmNYY5jH}$BSsz<<1=cs z%B9!AnMGz|xG{Ac(dIl+H~SxeDzO~D0@jQ6FLg^H`L+wtrIk-4Rvg(HO=Dia0<G<b zuk!HoTcMUW8Wl&??=KVB#{|;)D7DNv2*J~!7D9C!*}rAs7DS~GWI!6A?{3zy5WO9u zoDVAx>dBPM&`s|{%R49ltVzUwu#?JrK>`yP6(@{Xqa}kq;xAFcNec-9mVF?5sXv<$ zF$4;SQFV0zg<zATEguh)qUCvC?{|8VMDV2t{_tCWyv=F&56*!V!r(7#I;xD*YmACZ zqO5$i3P)9y6W#kr{rFxrX~IFs(*dQnHGM90<;W*~viUjPPF#79_`CP-<Cg^n4>9Op zIMJjd3AQnD<;$1;Ed(Vl$y1<s$SP-ZD=jeMNBxIdN1Z(ErnhwCTNE=R%Q5y^X1SnM zxvCs&UMx;d`pbmx7Z{@sdJSRgb^JxYyh(R2eQRb1ed~wQdw&;y_k0;oZeSNPklL9_ z(VqWHk8rWzpEnf$Oak`SKa=o3Jqe#~fWdL{DAqc>_S3;v@$nUZ$HnxlJ2V(@b`7ko z_?>tLuCHo+?!i;OdgLa}$vgQ3%-C@cM;nnS59rwZk5?%8_bKk*{Aa8xX7Ehsp4i8V zgf;SSkRK)?IYt!Op{yVc6?$AyenF*p^XFGrO(9{Fun_)3U%!7~zyPU#U0ng_0H9jT zCF+^_Uj_xO;(x)mIc9<)<K=4kt+FG%zV0^(NLphp{~onrzF>3My$Y0#Gbdl5zy?Bo zw9Fvbykywz|B|77`6olGc2D8tmrXSkYDKFK(B$-*Q{A}TV}F*5>Dw=&HdKXc8Z9uG z!TzG?64g=Al=&ca`WbbT4g*di|DLx!@r$=@RrEN&pYyk6uHbW-kmc96?g^!m$9_@D z5ddb1m9j)d3+hf8#IGjaz9<-&1(2O*0jLgXhu;y+Tu2aQ7d`;1w5>7fq<F;^dg<UV z)?g*#&l~&wg6+LG`$|try^o2>g3HZqwoL>Fi8{aHPE$=Gc+@16Orb&x%nqO~|L2@P z`Q6Q(KX$(AxO~~SXVo%AKutsAWJ$^Wua|uH4n;IYWT8M=X!7nr#R$B|(9rh3V0v8! z|6+P4Xlf|-#S%Q(3V8(j_h0VONn?G$kSNe3O0$5$@1PomP$||<A=@hxENTy42a3LG zbR(Gr{w0KbnE*?+Ha2c%iRdjfoq2`gm7-#e;(s7otkoX|5`@uD4)xhbm+w_vUgoES zP{jtuk!aTe31Vz?^d^=L(^O0iwh-y(mf)8NM=)ubsBR&eLYSD0fQuLVQGUX>c>!fA z2pqoT9u!rfdDUTP)23vcm6{_+@jP*@PLaAz?-@{tRY`ZvGbbv@st_*BG@2e}GOt%a zW1q~DS6e}n)uXElLG}>>-M+|Jq6rDwd7y{NR`HjpQifOn{2#!o1c;_;kntD{QL84* z&tHoIM}$Yh!T~b-U0hsHw7WQmunl#wP}w>x&31Q}1ddCFUr0%&2s3IhRx>s<M0Dd@ zUsc7UZECNoI_R{%`gnDLR($-?ix<@x#dq%6lO#_;W`f@2t!DwW4)yix!9^>e(Tre{ zu8n@7E|b3i3Uu&f5I_qLH-6i`;Z>F4;^c0eV8O+SO2i|1w~iKQjlB~hmFbq^oGmSs zk~5;BiUcKe5AG)SUOL$;2muU|0AvVk=Fpd=H*U&$FsWu~pmZq;Y;auM=)3L#0Cs?8 z?(Dwrq`9#`Zvu$CVjjxsR%aspEI>Ns__1S842h4EYUp(WMtkK*X)!TI3zmVciQUrb za~0@80|q~e_qq3ZX^MT}2=}s(*ucDS13AV$Rd_3tI@cGejtCDs1+{g0FbQCWYxc{$ z<XPHX**gJ^6KYolASTrv-oP?oTZ3*3sR)YEr6Oqs;+ghVgk?9xjYISVdsK2!=O`+V z=X^-BKL3sbhB{ps-4@W~iD*VtTQ`m1PEK@IOH)&G@3Y&6hW04+&q75L2@P#xqwKm% z?X0Y3Q0tFv!Aq!USQ!J6JqQ%BwV=9z+C}i<pdq&t*{D}&H*<a0u3b>fS~T6QdD<d+ z!iyde9eCDehxtLTms5vTKJt*;j-Av!n6gIRhLqCTNtD+T508jwX=yr}Y3I(Ko*pZd zjq#yu35)UeQUrA7ke6J81+M#WLju7j)s5liOgWLsDl`ZnloSCedyB=yh2kvUti)N* z7d~|UG0nAm81WlgNZ5~1Ki`W~)INk+{g9@>;1C77*4=?Ah-9E}xPrQ4)%0YjhkXi( zgB!d!pp#HHpzWi20x=52@>y6R=#`-D3FIGrIoXNub}5gvkQcj9DOQa%(MkrSN96hJ z_a;k30pxKa=@exz`sNp?zl`1@V&vIU)c-RXqvZdy<65F(mgp*hMm*iwg2KX$O-+mF zWn>5IMM=W|Fm40&6~ThEH@^K{9HqiL&<@58{VhmR&vl}BFx@9lX`S6-**qIYnol96 zBNTT}XplUzVz(KlaD0~tbvTjax-fkmZPSp+dM8s&E^b*UCR(+iChY1a=2D$f3KtY! zyU^u|-Xp3E?$L5Dr;I4Z0E6@OA1WTwJ%}$;YzRB_Vgm~dyY#9j@SHi9hE+JMmb*8; z((sH>9C6<FiOEyv-kq8a1zJ=rzUThtg8p{I1SPyVW?4Z<fNET36gT0KTcL9UKuu5M z5;^GnLG}95vex2207&T@9lt$c{iPE=z3-nl6#q;DHsn8(@PB#|F6*vurAk#X8V*Wv zu9P4N&rih1vu?RH->h0^@HSQZ)?Qz`miENK*~QNfL@NDsWOQ%Oy%IZX+b|^MwHxuj zTapC$M{Xc(6tkK_Rj>oC8en8C&_hZlfd7tx3kWS(b%p+#*cO;}fJ&l7mrFe>BQ>=y zb|)V96&2V>9gs1Uw$n;sm(Gah|JGbs$!ih{HVmBD=le@Ti-D4My=9+MrY-L(?)MzF zJ-?Af%h{!&-ePikPvhcz%TqTuyE3MB4dc>LORFwlouziMrI5_bMX1m=u?SDqYC>?( zIFm3*Xx&hr|0*J)H@U&cAIe<9Xd>4J(y-=V1_NFuRppwToaHmx_<Pex(J_2W?4q}K zq1hu?+fc?Ijm)2ct$NFA`71wa`3FzaR8%HpAG&-Qtrr_8)21y4{RN{ZS1(d~g&(_e zWxv~G^?!%uXU95c_bd_3v$V82K>KuIijdZ9sIR|*N{?zZoI^cK`qEtg;v<4>d-PpO z&h~`SLMOX-fO^q`!>#YYI7?o{OG!zLzpSRR>3H&J+3V&-)jbN~$wB#hC|OzS+>)Cj z-uE3;c-tjz^eUU%r_laY@awn;foJ?(*P>T~f%zgGQKG*V-4_U;39$fRa7Q*8brJFq z-V%OIu!dl<Se!rs6YVD;izWKuoIQJX;qP&&krto6jo@6p=<>+IV=cpraGlnkw<l7j z_VkHZy|XlxP*}=(u#_dC{W|LPs8h3Df|<Iq^%?8Mj)O^C`u&t|StJgg57)VJ`7%@U zYt3OW$F~FTTsJgqs=bzMSgM>#=l3=_^wQ;~`RNN$kpTAVS*U5lY0WLO>|0NAb-X=x z>_Sk5B3MGG8lPrP-^Ls!l!^*j{2V|_8S|bpG}0<8q-C##D4BR3;C(o7G;wtJhH0hv z)-EAqtHu#~PVvhAM`j+!!(Ky`JGc177Sa&6(Ugm7N8*esG{~=mf`;hC_j}c4lUlyc zNxfh<5iIC5U0k$JEmuLy2C5qs9nLCT3_C5!;#4=zw<j9xAOGPtSXVS6q*IqdJ25>C z$N_z+&x;qEs3)E_y)8?MjqW~axx_GQA!pg0mAP%(HVi33@epJ@;UFGAqKuIMe1QtL zbh<%EmQ_@kex?0UUq2VAzW6>py<wQBUVQb=?hoD4uIA<klU{GPb~Ed%yU>a|hm2$6 zDpV%^kg%tmr^!-P;C($kxVqr9>D-e_*^b?|H0F~`f>)KqQZq94I(f*v-G9NTXP{Qd z@Vfq)P9c&xs>VpdI!kVRqy%GiWwY@o1Lu+rhljli6eV)17HC3-v({ca;Xf#3ZgRbF z;-G?`IF$>{6b+tg(U|BDLBv*2El{poM--~ZRqAp1M8?L7{iO6irh92g+97p$)_Xzj zC*Ad$o1@(}%e--CDbD?XnETjRTACClRfIAvEq&^;QcXauWI*S-x%sn_lGk+>E-qz5 z8w2a}{kypB{Ltt;J|PqMqu%meO3L)7VaufxPA2tCrJS+vth%F42+ozHxOi+tDyt(! zCMq)chp_zsGnnLNgp#(4lQk)ci3>Sm3pr?S6klhsBn_IC|0lccFd=@zaVxlBYZ{XJ zlSyk8k;)Q&dZE}=D?UNf7#p{6VoO>(vsVH2rcIZx?57!Msi~|K;pZ=_tPCu;h4dK; zO>0vR8K2Lof+Z74x4=0FlovYUEA!M|*P!&#_wNTcJ$0eUYHCjI&kQai#JbrtkF#e; z15NfOFFFH9MmgBKIl0+RZWg!F=WF|R#ZLLm4dug+0#{Mq`X-oObSaIi&s@bPoL^}2 zHEBRBTBt!M{72L0gK32!du}BqG#r#Myc1w_<fyVzp0D2TjEbRes7}A4+)l;9eKJVQ zX#J6sR8}ANONs@PO-;Mk#dxF+&)S#X?MAnUCO~q*z#+0s1<uMUQc8k4VR<yJrY7pj zz0a_lfl*u%Zlqr4bv~@3ccMTc{Cgo{8V?7xr4QtslJ-17!FtQgY|T&MZVaM|B5#u4 z-qLE}K-;-gl_e6*wnK*^^(5VfNG8U^zWwU<5(=W~sg|WNw9^heX+}j(Qlw+8eD7cQ z_~49OKq>&Mlnw#Wr3gjz4w&to<_?&>FBh&5QB@a9luYnMsSG5BqXa;4-L+4WV%gpl z>!xSL{OT*4L~dLfm!}cETAMwb({!Po{Q{E^h9ny(JiBBoG?g?+!!n^-yMa_|InmQ* z4ndI?-t*}x+P92qYwMgy3A+^GSAX$%Qb>J+JHtZGl4bJ}L?i`CDJ7YMP*VA#M~bNo z>P66r!<|vY?|c}-Y(y5R(2Mt0hEJ1)i1H9LiwzXK+t*5dl$~bV`-pru+gOBxXQ6nZ zLgg`qe4m=NZpfKdh2hvCwK+63#1jV&-!nKNgk%^Yli&PS1fib+Xprvl8&_%KMH}Zo ze=SX#5u?!Y(rNv22~CLCjf{{PinQWc0@|<pAL3>b(3_Ya9_-=&(QJ8nKIguDM7*L| z;Wif<M*bgnq7uffMAeV9(u!D*b$tG^H0K<LuCL(j^V}^5=1tIqr5kcYLdj<NnQQBY zhvGLTddedd-y`pVrh9}m?#|ECEw=l>thFHYgIO|#*G4Y3dzaismH{C{lvpC5OPxyV zx366GRh{+yF{Hssz9A%V5fcTQ?H?zCPQU@56N5;RMa0Am%_lfFF!$G%vo5XvB!Clk zLn7n-<kXaNvq@i7g!2*2QtOl2+IPvcLT*XH{N)NtE&Qg6s+aFhHZ&v;EG#N3#D09A zA>2f!<>cTHYQ8g28yA8nVsTPnm(x00$0{jA2(J)9BMX%L`gL3WGgg8`LrK9RiYT4w zz84ni6upGNOU?k@?}*Azbhbe5$6}}vG9Tk+1eE9vvvXueBnSXq-SsR{2r9wcAnVA7 zuHzK1u7U^vlYv^O9h}#z$dg&fn!gSS(L~7S!!wu)VqlIo7Ec%{Y`A7qcbCp;uEQ^O zRdDO~4hTCWE{?prxT#x6)W6W3;aW<pp{0FJEuC!U{CtW;PqguEY8I`dsjk8L&FS5X z$s*~Vi{bX{Qel@mJA0ebEq=H$R5vu(X0%_$50PeENFTw#5qd$IV?Iaz)B+$CrVDKt z@yH0^k%Bb>zu6I)g_>(Jk->sK4e2<0fHk7Dn#fY+J|Xg<%w#7#7u}aX`hL&q#bZ)@ z^Q2bx{9HJT1hEL3whZi(u|;29&C*l!Mh~LW=FXB=wFY$1fBf+Mecx*ai=Ni|@B94T zj&3QnJbCR}-McjBp`nr-vf0RKIZMc{UgnPWns<ftn-}N%g}BHC3RX8Yy(rL{C%@Lr zb(7YqaG}}$U3{mi*xQ(_BQMSy)_x%Bv><GhLl!HJsGJ}oW)YAlSf~zZG)E>AZ4<#} z65%+XL2VgoX27Kpbt5BzM+#(XA&Y7;$5Y(9Ddo($$aKmg8FIEaGPcCJytQ~vrZ5=_ zj&E*Oi=<#9YIli_gp1$;#C#Rqt0^d)vwhY5^na%~-^9Ufm`G*UHyQ99^fB21jR+y< z)jodj^!Lpa_UIKLLA7n$ixutgRnHsJM^Q|d&wG+=`|uH+xM*<7a>8q6CO4iG4_dXZ znWMw>nly1#<PXoPa5;Gtb{<|^CK<G<B;VdVR%4ndQaV|#WtQ4{f8VFP0^XC^whs+X ztT5-qx8m4xytSZ1_RzWKFukG9fQqGEjkww?E6*E9wN5~vtW&#OgDY=tf%i~>@h;0c zI9H-`xuXUJNP;c?lLY%G?SpOe&m{cMPr@g9L>(+nTSP?uwiE8pHkP>yuMQ|jC98Ok zMJzE2dEtT&`{>d3q=WudOQyJ`CDrS^%w@&ZC|k~U>vcWchU;IQMhC``^p?dTh>+1$ zysWnNBicy8?qz~^9=?YT2hj+>L9C)_9~gDK(x9sF=28_zMq)g$a%j2U;LYxzL%xL| z8J!8a)uq?+L_P>oaB!7qd<wOF4zdypElYzf4r5-yRn^t|@}Pwv(nUzgG(tH7#WSH& zC0-8#k|QHIoXV=Jb(gj3kHXT4f7S`q=64=Ny66T(Or8@&2jqkV0t*Bj*S`YEF=QHs zDNR!&=sgUz6I4>`SptBY&^|SjaKms~Xv<ae;|EP=Vu7l-l272W2<uGcY`M_Q^mPJV ze_c8eBs%o<MC)gt!iRLA@J&-2q3)@-{A^@wEQZ_w1`8#Fi$i^Tp1aG&%oodbw~v3h zH<h=#v^)l3hgUrhK<)#PZ<A>uXF;{#5z~%*w5skzYx@hLjcIrFQKwuRr<r2daAJbj z(%jsM&W&k!MV#@=QwpeN5tph1MXigTmAw;r4h|b1ejy@K-HOnT97x$hAP-7Px(l+Q z&LBA~OdD!AqHCz68-qZ;uKOOL?c%_37lrm}F3W5ly=lKH$uD9h5L}2no-=1Uq~Fh9 zyyzUCUA1EX@*|>R0P1X|u{LP1;1jd4`gnjv6#WIDCKS!~Q_<i|!i8p&X%{q08=F^( z6)rCODS_}pzLkr%R%$?>Ln}OT5(;)9OQW&xC|E|;i|B%;ebl!+L=ygbayRr#Xih;i zN&}zLYS%4b+HsDm?e=^*UB=*Y?F_$LGSjATN^Xf`6S}2@k|rtEzIa8$)j@RoMZ!cn z?2?@D=;;=tALxyP4y~_-UtSD3Tm9olGvp~mDggbY_h0a<vbs)nLtX5l`0MCs!}<=_ z?aNgu2jKfRJp6*74N9XHJ}*E?(U#F2#|LMLYz>rgir>vVUwwt{sU8Qw9t6;HA0Kin zrPxkrkC-Kqf`D*c6gd+p`>&!>2QZ~B51<!$A!D1-ZvqL%i7R_7uJ_xH6!81-^r(8s z+A%(BH>eBw`t=N}J7aU-WNjVL%^5%F?7Xg@I_wNIddbKspz;JVL{xQXA=`{>x3xV0 zA@EfTd1)Hiw>hR3pj5r8cl)HhWiX!s={hJah{HW%i+nW=SHLreS=Yi+Qy|XSF!Du| zEh1*?D}%5t?L>`N6kYFuQhimTiNXMM51Gt9;l7)1xhe&nCfkiMF8geSnDq2{Le_*F z^(=z&O|^mw2wEyCHj5KA9gqqsD0p=)OMkr4rWa3$dJH6IHksCjU9gQoF5^^?*E(ut zX!}F=2w5x;tqRe@k<b!>r<u(3+It6Cp$o{DLe&YiQXq01s1gYhu>}`2i4Fj&XkXK9 z7j^9oDk_|K-q<*8Tb9jvYt?#EtCe*Bd2lPtPzDdhWd?e*quiN@K=Ep+JcC~w06kQ2 z@vZF1XyYcN!duXM8VMpH#4yO>7&T`I1eZc7*TUFQRG`ec&cKs+m{zZI&YTYh?xfmP zGHTSK_Gp3u73ToM5sH0i7LKy~16wyB^@wyQa$VRFFU3d>h%Zs!4$gw$T^ttYppd$| zFf)qp&ZKA0r~l4+R%Jx(b^QCIPK^BoGLzr>;_{0dWtLynmXG=iL@n3XGRNW25iMVF ztl86Ols8dm%=piSrEW)>Hgl}v?Bh@2YJy7XcC%wdH3)hmTv>fC^zf>(aI`pg@+j@* zB!>U5!0!I^hE$awM3W(kt<s`C8<9E|kX|)`JPWTWQxnH8cz3K$h097~{m7j$>at-q z7XM8wTD<hXkmY}HBqw%5HlajZ?Ld$gA<$ifx{4m)khp$e6Yr-wWN)4jWpL*TmlaXp zyr>D~?@6&S;+Ziv#ed%XGYS9fg#RO_z~n4Cv{1F3mU9myX8ZumW`$<QZxhIz>OhH% z^2DYUu{|O=sdd~G>j4ZcW6KB_dFL+}c_wJpoV4<92QH$FaDn*cK**4<rldJ`;sh7k zqC=q_3ju?W23kH4jQ$c*-DVK%pe7UY<UDwP&^ki-0)s2L+ccJ;pi~CJs>a(cgGHjc zk5KulaHSx9z-`yI(H+0|0e#-p;S{qXCt<Qv0Ll<>XV3a)LuPd?(`J%T)gb#qZCVd5 zg-%>aDg2jP7$W|u)2+ek^B2ltBU-Vb<sLW;N_0-CE-Nc*Zgzn1Uj)dM_&q78%M+*K z&R!S;#YBdKLO*$HNQUr~gdm1!<3=WasSv?;j0c`bmG0?_uUy6uw*|#)Bn@hq^HjzX zy9t*D5xoIiD{SgMT}YgXDF6f14O#&}5{?nQyZVq*vWN6Vf(p)VZWul1(As`ZZmC0# z_`MV2JK;N^O(x1Rv%vqc%LNIy=(;nBF>*~@S?>48b$)rJy3GnIgV3~I*MmTbL@66s zHKJ6okTV6^psXE0f!27R0bL1hBxpA?^7#QJ(bk#&h2S`EkZky`U$(SI(7eY^2PK+R zEDU1JH&&qHKKf*~2R>$VY?VO|C~0X>Beo3fD?s-Uza?oY7E42P-N3J1!3Z0(No4f; z50~*h+8Rl8MuX5Ni~av<?@Pd`Uf;DfYF5!8MY4-BhSJJZB#~&PM8wXJq=;2!mL|Ip zl{r&L8bnbRk)gpn?4)E?SZHU8%$9S%OYQ%EpL2cZoa?*JcfRvo-*(yiN-e+j`@QQO zp67n<=e~oZx)9+CUh*?z&-5K{*;s?UQiwtqP`{G3KM&Ta81(F@S&saJxVRRg`i?Ha z_pY_CuX1y`eY&F&fG5Kh-LqvtoHyxZ0~DS=0&a@?ODi2)+hjGbn?e=233-Sc5Kf*y zyIm2wD`<wx3RU>+X-;bp<_e05pCkT^GpSRoV=?yGw&1NAQi}tDX*2hKAuS+H?n6Lt zg`=EITMKVYm<XJ?3|T<i!-uP(pG@!bF_Dd0uJW;3CuaW%YwPf>&as!-@sBrfPL-I) z2=yQ}H&kX0mPv)<IIb)v87P9ps18XM89me_i9j@vG7V#`_yd4Y!OU58CXdK6lZHxQ zQDnY#Pr9~_{%-}8fV!QXGuT72V{RR;is1&%4oPNdq;1*Pk`TBM_BN=8TTnA#6%bDm zC?=W!xPuaNd4}upDI|8JID+zlJ=68G!OZVzYH)^7hc+5hdmCg3ItdC)z+A5VM?g_O z1lpHY(g#=$b>JhzbRSg$c}?DBpaT*|Xn3A<Y3d35qpQmu{2kzk{P6agW@w2qGCXob zWey@<NatIhJeiV3_Nh0ORaFNu-pEH0iSJyL`P8bS<82(Lv-YZ~>?#(qWc|77qnA}a zefmuR&8%Nsh1FuSvfR*6X$aM&r&hY(W)d}KP;N#bEI*v8JeEpR`XENt)#X-MNmYEw zmi*({`;Wy0Ui#ExLdq52jvx=Xt<xWm7>E@!kG;b7L%v#d(eweS6)wSgz`_8l4Iom2 z^_rai*&CdBl8&L5oj#gC-(DCNz&J8Mw<h5#NA!N_Q@rN>CBk8Y`1e=yR5$)7V#+-d zACY6y(KZ3`o($4|i@5WIjSW0hY6zM>e6i%F>*eAH#fx1MNvO4hdQk6>*UqLTt|NC9 za~~i20GqXCp0BYqdvYdO(20rc*nVmYhvz3-W(f1hOwR*D#e4b0r$@VV8g(HVJDhCn z4x0(^e?G-r%H>5RQScH{1vb&go4q5f@VuljV?oy8!nTwj;KR2Jqd9^hB?j|u6a3-E zSch@m4@{tlX`eS^uctpC!ynM%&sH#kp%yjIS}Tayv3prc&0>}OzW@`U<d;8oCBt^R z<17BW0cVxDbl75*BU2{`!p@tU?Wc|Y-QoFP(Wggd=ik@)dl3F}ZPK1H5bRW$BkbZL z_Gg~SFSO#e04VoynVIsJe(xgZv!_U9=To)j)U_mzVDB0OnTI>NQ88twj%&Sr6<%4Y zN)xgl%V>JcrHOaS6Yof21}tZ^W4a=CnxT{l>H-cgoSMXX4lb?uBAxB%78BNvaLVSc zC6$RCTAf<?>v|2O1{!44q6ax%4XuOb!dYUY22Y|1q7Xq-dj9m;v+t-O8e+G`^@O!T z7pvSu<d~Gi-+GDNPzXOU>-o6a%rM^?p6Iy^q{*<ne7?Vtw-O0{LUxE8GhuxTf!<jY zeR2X(oh2y+Z~qQPB`FXBjcY-q3$Wog`<JZ}F%L_$iQb=S;YUS0XuEpPm9FQ_H`w<_ zG+8{(^?Xf)Rvi?9J*(^L>VUlx+cN-<G120biv5kn1i^_mk_dk`$89+Rr&P{u?eghY zNX(>ZFkOUru;Czr*U=2)roW<zspv+VLK7e361zx6XnOQ4c9>(d-!1{?g2m8+z_f## z4uNh0$Y@$}&QuQ{z@>+JkI)wh=I;Cz62w7eJ5bA=<-rjNKn}a+WR~Ej(!YLlcJ``3 zRJZ2SKy%v#Z}}fs;!{-ItE;LaCOo{s{PBe(Fu-GY8jKMa7WB>$dKW0kpg^r^JyqoF z<-|@eqW7b$^^Zq9SpNg_j2F-NHG0iK=o%1jO$a(m1{C@7E4rYhOFAFXCc%Okl|pas zjCT3D8$#+TbJXkny_!!GGK-PJvY=(l&sSWC>r#K!nO8FF=+~$1XwV(5t<F9^1$@<_ zYzrI?r9{ta_)I+p=$*}_er**Z7T0(C<OtskQw)-m2U@Jqv^jw=46%e&fbbFWsY);& z6l?nATJ8inKW0BHmYRV1j2)K-eBG`vY?`1*%u7+t4b*hjUK+U4dA8ERaz{#!WRRvf zJX`w!hNIa7)qZeL%9ZZ!7dZv;?>isK@-X+fLs(VK+?omR!p?4wEHanwJOzmobNdV< zrRb9OemvJ95Puea*SlJAVV`7nI+hFkjew|se-T>IZmkoJp8&a!(TjeEw981DEsF4} zsu$0BEzQ(CGJTk5Wv_=fU|slbc|a#lpw|U4);(%mu$X}~w7Y5DQA8gT<a9)Pe(Ps( zXuf0@EID#}hk__HkIC+G;sXf*m=*Pk0V_wJCNLP)$#xeG{6a!+&yo?8zDb|M#BhN! z3$4&$+VlalMo^ejL7s+tmRm>6Z?jKD0%`qMmGGMc@#WbIc^IrksE&X^<~6)tHG0tK z-1|eSH792*kc-+gCwlgbM!A1N3o&8QU@LeDu|1irwO|Lrex`gxKXn&&iaE!2eV_B! zARl9bpynd_caN2H^A5}28y`+SP<lMIY4ii58+bBNbOCl43EdTFj-a(6qM{wyh%J|W zRO_SVmXlv7xJ?cT1L;#4_Y@`G+`?uP+#u6ybp|2r;N)WnA|i2|82ygG5t&Z`=BKU* z51_$5fyq7rq20de%`a3e4#i_&r!sMSD*7ZpJmp-OR*V$q(e&#dA!!0?HW44;KKk1u z5(4d@-l081(}xL?UbuLfZSlMWjP1WIIQy(}2F&a!U4Xv>HS+QQ7f2(pFZ1_x{+}Mq z=1GQQ!dtudLleV2r6*F??@iO&o3`M_=DRajuRXP4<({Go8zmOs{uJnL9sGGir>4vE zJA#yb6-CqI@4u@$f60rvc%H=K)pO?N3*wNucx{B&j88Jf!60S5^&0Vhy3|_HlvBQw zamhk$-(9ZHsFs=6{>VSxRk<gFq<M=2*&P;GmLfk@(f6|j)Dd^x{wa^X^ZpOnn+rd6 z(r5nZJM*Wi`u~v&oq<vI4j#3OGiJn+Pq;8}AjKlLc-BfaIQ3lD+7KtAxt(1;D2y0L zS^okI7f5Nwl`p$lB;q|gf(=HRYrE9MMortTTao*V0}5|OXa!1$urC%?>brVz5~X7Y z6hs9kI@C#x4??BmQ13W#^5pjM6=$ayFZpXm8f18z203z`K>GM<B&v)AiiGIzB9A{R zQTT(4vKh3b0KE`=4uKm)@$Eq6#FqebKEx^1sZ~u)!feTAEsa6)WA)IWXo#<^t7ntG z!8*^PKhR;PvmpS;O)ZoMLX}-0JOF%v5Y<3@0{np=P{VTvT11-R+z?f)`7-}*#nRES z1}g-b9M?Cy+h(szn>;Px%u^Rd{OHhyv`kuSdw0}%4OZQY<mAVXA2S$^19?z)z?m(6 z<Y@;Qtx)^(jzv%WNzkbgQhfuRN={bx?7ie*)^_!82iOpy-+q@G>Eq{Vp`1B!r`cYA zp{Kce`SvQ#2tbd&$fiw%Z|43Ox(T4T`^uDGDc~AkQ&C*(0{!MXP@e#{sk%Rd1%rq; z&ZU{`yWQAnvDc;VTUujhS^|Dcs*b-|F4$%EhLNUEPFc9q%uLsTJV<fDCWFLNr59I7 z7<~lN`r(5E``#2ArZoP2H6#u5#m+2hi?jg?z250BcP1vby5Gh7;HDtWcmP8M3Qn-8 z27eGFzx^iS6X*PTjYwGRDRjd)&DWrLbusmnE3~JsAFG5saBDE@vZ77QO%H*}i~d#B z)ld@j8+#9pwK$R5re`K380HAOX`FUvg{18tB58`b=7H;{hgPAj2pSh29;`fi6{H`S za%WLCgpeO<;8AYhio6-Ss8tG@2=ow^yySjh!5$2_E?h(C0eBY?^QxL6*mL-fH9J1< zS|X`+;0tf)y!`R)P^NyOpNP3yD)|*N4y8sVkeZ1+pE}*I{tCiLgvp6Of_;J`#MyF- zzWQV1{Q$23DOte(t}qXz)L4d?an>+q#+r#hp{BvtEq%Mz37UtV#k5}L>#PXL@lFIw z=<{@gt+k(0HYSR$Hl+=AbB2Jf(;X{L0g1<ISz&zk#vU?w(rqt&BwWnK{0M{b61TQf zU8ZHFpIaT#f*J7Q3^ih3dE}fiG0ilBsG20v@-Q&4Wo^-kKS1z(0K9{wjnK>{awAlq zQTOCgBfcFP8X6WB@l$USkJgJjckV#O9ATfr%Y@Y<X$kO)@7>4M8@^Fudg%20tSG2W z;MttO%methFK31oMi`dx1Ne>cJc04NbX)6SJ$?O^YHxin@U9~<6WL0zV^CDov%84H z*rL>~X&z=7uCwo60AtplVxKo_MWRv0H^^YX1+GX#IC6l9P8+1&&B`KAqFh?7kyB+_ z?;k}t8_gYeLd1JI_(L$R5oje`>Qw~qG2J|?gvhPTLI~dxh!Qnc;zEs$<{%gw#I+gg zoS${Aq_Tb9yZ!|Ax1I;tqiX8H8t7P)y>6>6Sr~d^L7E!V_S8X6lI&T;LHluz>MFb` z2k(s_!>1_Tl2UcMV$Y4)*O?GEo`FGKu0}OBjuIg+l3xGfl!l}+M<rB;KhiGO*RN)K z9GPnx+t~1^p*#`Gu^XbqGwhob4xjn4<+ZjlcQ-zsIeZRYt5q40ndVWW)YSaB1^?4d zYi}PbQtXgK-sn1|(}K9D?Ze*OJO$kO(uNkCk%G4W4j4=GsKFTyuk$R$vQ2qp<VpR% zf4-3W=GgH+>BRf{jxYlMUE#(5?}N<=L9Sg?*=<s5*}7_4SeUaD*$Xpw8UO?D*gG_` zSF%@ZrOyh_r(#QT4}OPTlj3mm#i_n*H0I!ov^zs2az7fL3TY6>@s6F=&ek9f3ouUm zC7=kFO|KNbiUd<~Tj55w(Hd>tDDh;0B#!U_MG-zV>Q3^NcP#4jkF7)gWu~Q{Y1j-c zV;q9FAR|SJWyE?JwZcKbb}+;AYc+swJeBAB(9qn)xX-n^H`zaaUt`l|f3{@xuip+- z<W>REcwbw)9W^`zQ$lpTQL&hurtomG)tYNHg(qL>QZ6;~vmx(fw<I@k04Ut@<;%-~ z9HN6zos|fZQ%9FE8$`>MpE~q^o4UIF&;qS}#B~&13IIA_=bRl85dm_bBn&K|m(g4r zCd1XA_%rxPIm93nju&30+%KLvQ3B%(nH&Kj%fz(y!Ok-R-4&?bx<G!3D7_s8j)e4` zKGhF6Bvk<|PrulE37P7i<RU+!kAJ=qwCk@~xiTFG1gLyIK0ctcy(Wsl=;<R>XLl5E zSAQ`8DAGy09LsAQLI&VEZ>Q-7oPvR>;xr;Qi<+{gm(=%k9D{dDAW=e;pI}B}XJ^Nw z2AUb7CncPf(BGmcD7f9TJm=uBoBA}zI){UOa7~>wi`w>=L=XvKDe?(ux^>f{1E!B} zh1x!z5DH<I_!waF3RU(-RAK@G0<<>Zk1xPfBDdK93MX3nKpmZ1ARwo1N*<QC@5`hs z;jED=DncqCqhN%>)2yOGc|5hUB!ZMcLyYW;>XcT7p3TbO)!IoUatZb{5HERcq^zN- zDF^Ttm{2*1iEve3GyeLoG1G3mi|5anY2*VV`_O>{_Px=IxVWMnYOQ))s@bl{7egp$ zhLe=k!4Sc~Vjd#%BRL)uq{>Wmi>Csc4FM=yo`A2#_i7UpjCNnJi1)3g6tK^NL=PK7 zY)hILrxgaymweuFtxKM0!g6bGJ60cAN&*)2)0@DfmQ#|ZjeO+7h3UL6tKzU?I!IGN zTc9pKhzH#GWCL}z?*k)BPNqYNg(w+d+Kd-Pj~9g&tl;4(jaF9njz!nbV+2kqDF?jB zD25#Xrwp#NRH_{W82pr!QUWrd5@DOs7Hk(nNr-f)O}D);UCRN>?Sj3%z0&vlIt@Uh ziB^FmtRZldpFn{nWH^}Y5=zBt=2f_#Q+dinLIqXH0FwQq(kH~Ot+jQ$0dlrfF`8$Q zC_*$B(<k}}d7x&d1T@pOF0G45nW3wcXzmg{V435qlUy{KHvN&xB)2Lp^5PVw)HQI; zcWKVhta?OJy0E$!H9L+rk5NaLBq>F@3(vwr_L>*E+pgo^*uCtDI-_*j21!SD0(e)) zKlTKAX#Q=;QnBo=8WrqI;Xijgva!KFOlr_bP)<&r-4+pcGb9{a5(NE3JeR<*)w5o% zVi|4&w|0FqB_rd8oY*vvNW?nllCB4Et5LNb(*8}Xb&qyAB0|JFCGuaTp&Xo8UAWNN z7F=+(7D;3yBiE==kpPjurB#*$pAud1E6@MLbR0MMcewO-a6+PZEcgEb_z?R>{u00E z>H{oNA%9=UQ?k7IS7b1WcVx)Y@+^IFYT6<=tmLoSv*9v%#r2KB;<<Uqi}a1B9GZ9j z{2A@OQ`ZPIr{^s8+)Q3GG11LnXO5vt$Y>Vhzu$RPqchpim~?*1tZkv#5FRoZ>T}4o z!%S<YvsX7vJQu4`br@6k;LF}3*&EK89nxXGvG+1F4S(!8Y&?O(3W(5sv^fr{E04Yf zLq8Kr=QuHmRv1cNsg@N=rMi`tbH_3V)!%AOn~t|Kf6Yol6tw;?VOCo=q9$l5^?(wG z{1C*b2DA@?ZDR7o^bI+hOibvZmiQe+C;9oir!J%ki5?KDKlMaWo?9%Eawh5UT|x{y zaiRmn??-5o1X^_Bgg!_kP#J#%Z_I8lKAUY-siR|K=yj9IVWtxZf_)nJ4!@bqdJ47+ z+CN??Fo~+IV_5&o`I1IpVM|}SU(g^UHESUkS2BpxZ)4Ta1PzPzLp*BuA9^k*kV*py zP@dpX!hpKI@U1c@1ACo-N5E8K_@xvS#sQr9XO<FkGOkpz`+r}cwG+BSsAXD4*zH#E zXzp>+)BE5GAE_y2cm6L|Aumehd6xF|h9IuC<1X^{&Nn6L&=!EsLBUbxQwBre_>ZXb z0@Q}Kp87~CdYcP?L8YUhgSbIe@d-SEy<?fd%X!)3ujx{A(>TlbA=)OO&)OnEV}ns- z0O6oJPZRX7gAZV-RoaIb2S30;PT<Q`IQ~+3&N&X9bsV~~1h>*WnR8<wU@_?=^6$sP z(9isOj;_DU?7N8rd_nwfcc2roU#IiS7tP6wd?)Y=9MY!dWzs256n&SYw0n5B^?0{p zd^#(K_JH*sqjWV1#%mK?N*?TkMQHa2F(IFj&G@9=eJ_ncC>}^aD;KtP>cdBm*7VQw z0k(uDPe3SuDh_9@$0JfJ{p+*MEP2!{+TxeBwT+CtQzHjwuODt(7R~BuUp0~qVnt4Z zNCZvgbonr}_+U~Ypy+c_xUr{@`z}BEOyc9?eU^*Yq9g^*n*8W6N@7j0Eg*JKXy81h zpj2K)6B3Yh>~R;}y@=ValPn@BDJmJMd+6LC#Ya?B)RL#Pu%aS5O4%KUx-$rA890TV zfl1U*DEPlYO-=SJXcjN{1s(o3i&}Gc(CH?0dJ4Ft3`RmiW&#jJdNm8A$!8VH^iOIl ziu9P$AsM9><?{2~CQ2rUav77VdR|8Czq~PGtDTlJ936rwcf@cIPq})$C>z~HVjDM7 zhDEu!xa8#I5U{$|Ta*JYt30|$>J5noK}3V!6;Z|`Y{<k!xyf4z2kw(58iK77xCgND zwK2_WaAYH-E})Wp6YrmAx~BDf4D*O7;Hz`o7u|jQ)&hjLbzs@yXJ1!uuTl#?+~=|B zO@|C6=c!82%<;|QgDbTqbi95WeFr@_2$;B)M^IY2&C!G5JUKChHL+1bLPA7jv80wF ziRYGHeT`BsI}Jc<L{7hajxOreV8nse0KLFAA%T%XqEEKjUvdhD8;x%18wURDimU<N z70Zwj@$j^^x9gy}0-X!&k066$TQs=tmQaAlv3*DA7;zI5xI2O)jNtt6;lq}emT>Tz z!KJX47FI%rmeM2JOY9F&%MS<=B*TwKQQ9btyB~o9f^%r3mZfET?K5jGV`e>UM_RJy z&XcOaq&`Um6N%_A#5BYWQd;i>XuF_H3c?&Tg+0*nv4(XONgmAQ$b<?JH{6i#JLTC} zjtrq{2EbR1FwSx}bV1-X;3H&xD;9mTo)#w5U&NOlxM0LqgNfAQv%1o^C3aynnja<l zYncDY{;-P;Xe}oNc-#?z^;EnzY9JVW_wNCEFpuMBT}6(?P&8Y6(VX9Sbh*84gD82k zjf=N=jWY!M;gR9<G9sK-I%4}OLV(1$cYu^y5bbafdf}F0*z`8FGUwaGXD$t9(r$Ay z0jQjQf*}+PqI9%om_P&hoh)m?UhDcIL7HWLp%JstZRxC^FA1SYY23H;G<gRU`ddz+ z+k;IaB84R-FxFdqnan5QbIp}oTcy>R_zn=EQ8>(i0Ghn}_;DL~^*qr{o0eW+zfN9q z=axTT*Uw}gr*OoP3%6)53d>xzll}XbUGlG&tPaDsPHgFWncS5Kn5)6(c7Tj=UD`gL zysu3;IVi7#cN2SN%Q`ZF8<%|7azZx9b3s6ixtb<H^HVu?EQV1A<A<fwq+$VdV{U_% zLRd06{gFLnHdMpA6ItVWnVqnSW>vU%(~$dvUP32wHPvXsCNCfe>8)F<KA9IoW2e70 zKnHf#lIS5veMYFD0yr<)@T;oOmp;(}jl%{oJCT+wJ8bmiZ07+P<(*-Y0FgnUAPPMf zxs*uFp|X;sO$G)i`&c%D2ZVVRE598F453g$oD!!7hKs0qB7K9;a#e&tKxx^?%+8LE zVKje@f?1Mi$mk|o=1^Qz9*E&83*Bsn?mD4%DW<}XW-3o4@@_A;SakomqoYv)B5dFf z*eI9!YcQE^7l>d`%kCov23F;-EW7Vme1<wDn>`Mi2vGMyXfx7Vhrt7xB=EFRM&<Px zLZ<f*YR=o?k_;z5M^w0?u(qK4M?~&fU{54Ie%vdM#wASRR+%M){em-@@LzEUIN+|u z-n)Ifnb>ba`{z=?Mq;7}kcQu5_!GRhk;D3}?&<0}ZDYgwSfG@KhW$4_E5b)O!uZCn zk^&7<OUPFM1A+A42&fZedk3yVRP}G(TuS3tqS2Ig^3!8oib^>+mIi3-+Ieui4_Ad< zyc^u5jdMKQak`UUOEd_+C1a%D?B%8cJ$e?<fe8piD)pY{as%VUvC>{kTCV+*B)xRx z$@5m(cJ5<1eMu<~JHX&!`uD>Cw}lFb?y3h<Cc3k$YfEeH9OQ?#Kk92NLeEE^8PfQe zm}B6Pn~Z;6VFDpMSc~f^@ya2-K*8-Zv|6`8F&q-(Up{=BYY)0TlvZ)f!36c(Kp&#B ziHgbb3QQGjm)6Wz<~Co2Uvhc$UPRba;l`AKTB?MoC}zrNE~irOW%ML~f}7p_{Et%S zVN8@=d*TnEXV#IElXLQu0P7P<Xih|26>W4YOx*15i0_Gh725yndA@IRpJB7cHWeEi zYl`DX`-tBmCR1U&&7Y#YAtZw7whr!7jVR%vtIVI(;lJBahRSogDO*uevIjDeHw8I& z4}axtE_;{qzb*h0vwB(CUt)c6yC+YdhCP?fzJ1sFo9Di-u0E`<{}CKurvGVXzQ?*m z{U>OmW0G?Nb1ynN+61ry%)?pTJ*;j(6{pMD({~;ELIhAQm4nDP#4DGmy~V?O!20HN zefryqezT?Ng3%rQuXNDMiw|qX(X%%Kg3UrRC|vXrvvU8U^$C>dEANYmTNUAGqZ1RG zg4b#%!!NvRQMvp}(NVwfN71pdQEBv?xp^_bv?KcZ+aO;8zXJ_3mGw)nV(5~RBxLBP zWaI{ULp0-ww)#-c<V2iFh#bi4<d5jMgeTF~_VY4w?cC-#>d?kojef;2RyC@yD6JlA z6~9&H+?=~`<TWvs0uOAt+FP{Z5^Dzktm3@uzg5&n{FXDmxxJwE=DP?>BS=3H4Tm-+ z6Gwv||8dnttG!)jUqR4hWd*&-SEwZCuQox24LuuxM0N$*{R2{jy!l=9y1EleASm}K zwoOV!=B&d<6^!v|G&G$4@oA9N%V=<@3$=bpATm@sfs!#5&X5fRCR9+OKfC?|FfbID z!Q6JoIveaC51naKC|nK(BQcK!zlhfN`3+)kgwI~%`W80juS{5>{bu$>R^>9V^6gND zjv0)WNZ6L_)+S1d%%q#fvVtEEWJ6y!9iPab)z;O~a<;~!{&<#u7uj@rua%FF<>kwl zn;q>#M|!b|`1-stMRZ|ckTXcVfbMiyB~3a)tuvv~wEQCOO1Kv2GmZm>J4}rlK@xLq z?B`dm@YldDaRIZ9{zW%>6+eGAx)8XpzQ%zOCxV&0rM2J}8jXMWo28S}N9@phwP{fX z*zXAcZ{Ga*Xqx!~HX6}5Zbomi^H>*yk(Rb-(V|uMzZw~=<Jf(tX>y=fy)ZC-ZwOR_ z>+#?SJ>R@}L!t(B1f-(~M{*%pp5D}%9slsc#hzBFe(qb&RO;J2vNP(Lm`oBqPaGs< zRXaGOQMe*9DA6Z~ukG)@@3*t-!=jmxqxZ{kDUY8~Q@c#z5=a-UNRNq$Nk+#5gpU#X z9DV-F9&0PBjiRD5Q_u758<DDGj)xlA-|8<N1vkJ*Pj3*NwV<W}Vi%2U2YIfKfb%%< z?g?_{BP(q7#5`sws@yelsIh>;n;ecWZy%pH5x}K-@XN*_*<UE+4}-K4;fp^j+Sy@T zVa_%--Ry^9@p|B3!3*dud`+S7VisF2GqqkGJ%2t5Iie9Pioq&f9Z(_&`_UsxAOOo{ z*SM53Y)*)w08#Y4u?N-gsw$pq&jVgft(mNG-VEE^2+nNm<-D@8vIDQ+I5FhWGlZrC zIkZQJc*CRv0QL*>qMKxzpEyx?eMSo?DO4UcWE;zU(5>x9F*Y>h^DlUJSZwC7gcz#g zadEHe%C#>6N}XEw+=K!EA=|659q9bGM=n88)(Z>o=fJa~QjY$uD34Jq98_miqwJ6@ z5<hMpHTs|>eXINEfQUEJi;f4m>^tVn9`F46RTf7OMSb23TGSHkH8sGmNh4N43#Y@Q zC;G73l|XXUz_5+R@J|+rk!6DQh_2?-Sf-_YsO3w*eXuoBwJ?zQVF0b?%=xa1aC%b^ zh^5@r{A(EjuS&70eAJ0Reg<t`%5op~Hc=B$ANidPW!Oh*lpT;}>_J0_INrVG1o{sw zxiTt>pT@tf7h4`4g*bP>DqRN#kZ3EP`hquEHc~U}quJRWWH>p?vyzg^r?#*2GXAk0 z*xcpXc>}}44UsQYSIaS-q{E;^jCfM2H8;IV2IL$f_lNll?hI6#x7kYtX(HvxK`Nwl zGbFd)57`6UC0H=n8|=spC~A%KS8~BYG0$zCug3eS=equ5bH{KI&pKp@yBVfT1veaT zEq8UIS!5odGl&004?F<r2*fn^?j>6=>KqH5^AVAi;iN*bhVX9yGY~0TA_qJ<nmqX& zjd$4c9vQ#bE-G4b{kPKbk@jf0_VbeTZ~grfQe1Shy*&iy1VItR#!x_6Nx@U3gEjf` zrOKaMwdOBNagLMi2I<MW9=F<$ABQ2Z`~rCd(dq68rxjfx3mCAxGdcrd36EfUr5Y9f zmHv=H!U2Tu)2-Y>g}49Q>8?ITO#p|~bEuRPgC6ik3Kdr~*?X@HJ!7dqJ02ivmZWnZ zSO|7Q1XO6-(TDdV^nY#2XK+S^hg%oQkd5a#)SXDX8gbVEhiRB>HzfWb%~=Tbh}IHZ zRBqqCjk#OuhHV20xpcdrB)zidt9iNVai!C>vdR@QtoZ|2!Dyj8OpJt(stznjhDisQ zsEDukVWs0^Hx-J`ojo251wBIdh7NX!n1OwzhA?pl!8+Y2DM@<HvVYB+K4Px7DaZw6 zDBJ82W?o(%0*qlo6e04<r#@Z}2^qpxgC-``U184vj@Y`j@O8@Z%Jmm)qM1e8;V2@e z(Ab!WH#Ickp>>Hbu?cn5q)_hK(*B8@(lOxUgOLGB2^&v9NdYW>=q)?o^oCRE9xC+) zg=;k;jr}v&Us%+j`w~5M#L(~7JQgHdF=8m?sS|UZHcv7nCs`~Olo?x)Lo|YvRROW; zvr*;xo~qOe4o=xETQH+Wu{fHtoM}iQP>&=F4hnUfCC>{B-7GT4sZXLB%)Ms}Mn#xR z0#x^ir{?_m^DhV3!Jv@^v1SjD{liDh!ZV&!Bw{i=(tl!#<QR{Q)eKG$mL~F5?4sn9 zNKpE|k>)`nUT&gJO%$kz494l2ls4RB_GfQV63yVF8gcf}nl9IR%;Q=T?vdCpEgX4L zT#r+)L;%|XjTU7GmmQM6gyZYhE!;H3*uA;jJ5-U9$+qUk-1|xQ`&RBnfF=%(|BwMV zv$7_`wtY~%?AkfbNvf-1NpKmT;Vr(#L7zJZ?tci*uVyus>}zq4WW4|QIFrFB7y@v% zEsYRBcC4K>>oRa0aq)$U4M*erg##weWjf;Q4Gz}J>RQ3OXM<z+$J&PXHTC){)b2Zu zHvL}nq*{*rI+OkD_e%VovfLaFZ3?RG%V);K<grO^%=}S(o)^}vmrm>Y(oD>I8Wo*0 zoZC{{e+h6uIws%LNq?32xf05$P2gZPuQU<3iie!DL0&!~)>NCv=Y3COm{Lj(&BU_3 zF*fWCwibF_0@uQYTeo~IFALW*GKz|fOig%3339QN`#mriPWO65v!Fmf7!alB_2Nwr zfU*sCSxbI7QBe|ZoJlhj<B!&LAHSi%h|ds=y0W5dlSC+0pVFRQ8);~H_)vS>KKWkH zyQA)7wGWy6hxhLfRg#8a_kM=VG5~KufVxh*-m>Ib-qyCyKUO5{tF5hdO?6|G_klO- zE%1%e%if8R<me_%Z7+>4y>3YreHeG}fyYpJLuTU@Q)=0Gz|yM>dZ+%TAk>jH7bX-J zA6KW!()5aY&pdeX=-hyr_g>N2oU<KlnxwZ~*AnRbSPiayP>7tkr0o&0<$rY7D%<Dm zv!=aj985b~lWJ>gNYj1M1A^e<j^aJ2XYTkFcwDMxF$6LhT~-pJ$+x0R&iqnQTi00o zB8Rs7Q>l}}5>iiV^yO6(-}hbh;zc3<BE;*}bA{iSK4CJwV)F7>tZc8*qkT?UckU=m zc;@AuXRwYvwx(OEwM9V4?Tho4Lo`1c(YjddOG;(iX3z6Eu14i~V>&V-<M);KepGkT zr%y2tG79`xZ;}xAe-oRZ-w-E&+UUSH?*~Z}SXEt_4yUfgcBDIsUlCr~sk~;DOKQng zHR>jBJUIvk2!W{j2RFO=^<Yvg_NpL*slvz4-(A~uLvvw!Yin0hLw2vDwtJnN9N)^7 zC#-Cca-6h!u-DuIL9CO)+v;i=DXHHfdJB7Ie*vdH13Qh8#zDnQ2b;YMxek|8B!q<> zTm5(2Jkv0@SQZl4-BT|obv<Is!?U#m<N9JuL(~^9eIoRSwNG&hyLY)3i$2)&@PQe% zO5bEGO~)!RdEYNfQJU!LdgOW}{8soEKE9LkgJ~dQID7?YXw5s(ylWlAVJ+8&m6jKY zZxk1pP`{|k**N#n)5Mg-tdyMOWQXdsNZYK&rl$6PdbfLdd96un3}f}(y0dQSi{W1x zj<$wY&KAavPgNByoSaTHHKx^PSuG2qrKY67ZWO`WYi@V<7e(guy}Ir?L#%^VZwk94 z5v88XWLUPh=C}0S&42D(P^NrluI!hskxs~0WUY4}!^U83Xic-;+fx6<abz~ecN*Di zJkK0>^-8>KAC>3feS^@TAXGyw+UhX?@(f#w-KUL0(TinvThrhk5PHaHE3@U;yyFNv zczjID%Dx8$y{BY2ceY^9cx~3__&y??@!}b@d|^4UXDFc1rGFhvx$eDq6#w*;gV=J( zjgMAp$JY+Yj*&M%=0w8=v^Ju<J84j{EZ!oufBx}1{vf{v1(x~69yDv|wu`<AS<z?- zT|Fh&dQP5@Ks9O=+R-PHu~ju3jeHZ|CSw^?8ab47V%xKpYh|joFA{1Bf2)6O`lK-m zz77+e^fmmed^41=U8&fO;4NoLZ`=0RZ0wKw2W9V`2s=s<UhczSJo6pvl*Dk3Wo|!S zzUf*)K@MYsu$(Qk^d>X^IZjP{JcDw^IN#zemQi^uEZg-24s%}{bqY^pbVpq+Xt}ye z?`W4_zE>^Q4|X>w66&7BcC^7yP7YIQdd<7qh-j1jdd6WMhN(;XoIVfV;{M~LBY9KT zI>Y|?^F-SZ3VbQaH+^ET-lE9dq#%1R@4UH(hllf<h#QkWyq9I>50P*mJ2Q5gky)38 zbi|^MLLT%P<AwNgH4H*$<{7--^egcPHnKZ>@tiGXW%w(6{kL<*+3)(7njrgc{^K(Y eFI!wS$*Ej+>7eTUgO%jBG}N?rC8_*+;a>nLaz3m8 literal 0 HcmV?d00001 diff --git a/exercises/solution/CMakeLists.txt b/exercises/solution/CMakeLists.txt new file mode 100644 index 00000000..ac5b07f6 --- /dev/null +++ b/exercises/solution/CMakeLists.txt @@ -0,0 +1,2 @@ +add_subdirectory(ex1) +add_subdirectory(ex2) diff --git a/exercises/solution/ex1/CMakeLists.txt b/exercises/solution/ex1/CMakeLists.txt new file mode 100644 index 00000000..bf559fc2 --- /dev/null +++ b/exercises/solution/ex1/CMakeLists.txt @@ -0,0 +1,21 @@ +# the immiscible two-phase simulation program +#dune_add_test(NAME exercise1_2p_solution +# SOURCES exercise1_2p_solution.cc +# CMD_ARGS exercise1.input) + +# the compositional two-phase two-component simulation program +dune_add_test(NAME exercise1_2p2c_solution + SOURCES exercise1_2p2c.cc + CMD_ARGS exercise1.input) + +# the two-phase non-isothermal simulation program +dune_add_test(NAME exercise1_2pni_solution + SOURCES exercise1_2pni_solution.cc + CMD_ARGS exercise1.input) + + +# add tutorial to the common target +add_dependencies(test_exercises exercise1_2p2c_solution exercise1_2pni_solution) + +# add a symlink for the input file +dune_symlink_to_source_files(FILES "exercise1.input") diff --git a/exercises/solution/ex1/exercise1.input b/exercises/solution/ex1/exercise1.input new file mode 100644 index 00000000..545a170f --- /dev/null +++ b/exercises/solution/ex1/exercise1.input @@ -0,0 +1,27 @@ +[TimeLoop] +DtInitial = 3600 # in seconds +TEnd = 3.154e9 # in seconds, i.e ten years + +[Grid] +LowerLeft = 0 0 +UpperRight = 60 40 +Cells = 24 16 + +[Problem] +Name = injection +OnlyPlotMaterialLaws = true +AquiferDepth = 2700.0 # m +InjectionDuration = 2.628e6 # in seconds, i.e. one month +TotalAreaSpecificInflow = -1e-4 # kg/(s*m^2) + +[SpatialParams] +PermeabilityAquitard = 1e-15 # m^2 +EntryPressureAquitard = 4.5e4 # Pa +PermeabilityAquifer = 1e-12 # m^2 +EntryPressureAquifer = 1e4 # Pa + +# these parameters are only used in the nonisothermal model. Uncomment them for that +[Component] +SolidDensity = 2700 # solid density of granite +SolidThermalConductivity = 2.8 # solid thermal conducitivity of granite +SolidHeatCapacity = 790 # solid heat capacity of granite diff --git a/exercises/solution/ex1/exercise1_2p2c.cc b/exercises/solution/ex1/exercise1_2p2c.cc new file mode 100644 index 00000000..55496aad --- /dev/null +++ b/exercises/solution/ex1/exercise1_2p2c.cc @@ -0,0 +1,198 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \brief The main file for the 2p2c porousmediumflow problem in exercise1 + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/valgrind.hh> +#include <dumux/common/dumuxmessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/privarswitchnewtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +#include "injection2p2cproblem.hh" + +//////////////////////// +// the main function +//////////////////////// +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2p2cCCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using PrimaryVariableSwitch = typename GET_PROP_TYPE(TypeTag, PrimaryVariableSwitch); + using NewtonSolver = Dumux::PriVarSwitchNewtonSolver<Assembler, LinearSolver, PrimaryVariableSwitch>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); + while (!timeLoop->finished()) + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + // output to vtk + vtkWriter.write(timeLoop->time()); + } + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/solution/ex1/exercise1_2pni_solution.cc b/exercises/solution/ex1/exercise1_2pni_solution.cc new file mode 100644 index 00000000..68f9d3b5 --- /dev/null +++ b/exercises/solution/ex1/exercise1_2pni_solution.cc @@ -0,0 +1,198 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \brief The solution main file for the two-phase porousmediumflow problem of exercise 1 + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/newtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +// The problem file, where setup-specific boundary and initial conditions are defined. +#include "injection2pniproblem.hh" + +//////////////////////// +// the main function +//////////////////////// +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2pNICCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); + while (!timeLoop->finished()) + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + // output to vtk + vtkWriter.write(timeLoop->time()); + } + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/solution/ex1/injection2p2cproblem.hh b/exercises/solution/ex1/injection2p2cproblem.hh new file mode 100644 index 00000000..d33e5a46 --- /dev/null +++ b/exercises/solution/ex1/injection2p2cproblem.hh @@ -0,0 +1,271 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The two-phase porousmediumflow problem for exercise 1 + */ +#ifndef DUMUX_EX1_INJECTION_2P2C_PROBLEM_HH +#define DUMUX_EX1_INJECTION_2P2C_PROBLEM_HH + +#include <dumux/discretization/cellcentered/tpfa/properties.hh> +#include <dumux/porousmediumflow/2p2c/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> + +#include "injection2pspatialparams.hh" + +namespace Dumux { + +// forward declare problem +template <class TypeTag> +class Injection2p2cProblem; + +namespace Properties { +NEW_TYPE_TAG(Injection2p2cTypeTag, INHERITS_FROM(TwoPTwoC)); +NEW_TYPE_TAG(Injection2p2cCCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2p2cTypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2p2cTypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2p2cTypeTag, Problem, Injection2p2cProblem<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2p2cTypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set fluid configuration +SET_TYPE_PROP(Injection2p2cTypeTag, FluidSystem, FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), /*useComplexRelations=*/ false>); + +// Define whether mole(true) or mass (false) fractions are used +SET_BOOL_PROP(Injection2p2cTypeTag, UseMoles, true); +} // end namespace Properties + +/*! + * \ingroup TwoPTwoCModel + * \ingroup ImplicitTestProblems + * \brief Gas injection problem where a gas (here nitrogen) is injected into a fully + * water saturated medium. During buoyancy driven upward migration the gas + * passes a high temperature area. + * + * The domain is sized 60 m times 40 m. + * + * For the mass conservation equation neumann boundary conditions are used on + * the top, on the bottom and on the right of the domain, while dirichlet conditions + * 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 + * boundaries. + * + * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a + * + * This problem uses the \ref TwoPModel model. + */ +template<class TypeTag> +class Injection2p2cProblem : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + Injection2p2cProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // 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, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + totalAreaSpecificInflow_ = getParam<Scalar>("Problem.TotalAreaSpecificInflow"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + std::string name() const + { return name_+"-2p2c"; } + + /*! + * \brief Returns the temperature \f$ K \f$ + */ + Scalar temperature() const + { + return 273.15 + 30; // [K] + } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + // if we are inside the injection zone set inflow Neumann boundary conditions + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // TODO: dumux-course-task + //instead of setting -1e-4 here directly use totalAreaSpecificInflow_ in the computation + + // inject nitrogen. negative values mean injection + // convert from units kg/(s*m^2) to mole/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = totalAreaSpecificInflow_/FluidSystem::molarMass(FluidSystem::N2Idx); + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + } + + return values; + } + + // \} + + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + values.setState(Indices::firstPhaseOnly); + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(temperature(), 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + // initially we have some nitrogen dissolved + // saturation mole fraction would be + // moleFracLiquidN2 = (pw + pc + p_vap^sat)/henry; + const Scalar moleFracLiquidN2 = pw*0.95/BinaryCoeff::H2O_N2::henry(temperature()); + + // note that because we start with a single phase system the primary variables + // are pl and x^w_N2. This will switch as soon after we start injecting to a two + // phase system so the primary variables will be pl and Sn (non-wetting saturation). + values[Indices::pressureIdx] = pw; + values[Indices::switchIdx] = moleFracLiquidN2; + + return values; + } + + // \} + + //! set the time for the time dependent boundary conditions (called from main) + void setTime(Scalar time) + { time_ = time; } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar injectionDuration_; //! Duration of the injection in seconds + Scalar time_; + Scalar totalAreaSpecificInflow_; + +}; + +} //end namespace Dumux + +#endif diff --git a/exercises/solution/ex1/injection2pniproblem.hh b/exercises/solution/ex1/injection2pniproblem.hh new file mode 100644 index 00000000..70135414 --- /dev/null +++ b/exercises/solution/ex1/injection2pniproblem.hh @@ -0,0 +1,252 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief The two-phase nonisothermal porousmediumflow problem for exercise 1 + */ + +#ifndef DUMUX_EX1_INJECTION_PROBLEM_2PNI_HH +#define DUMUX_EX1_INJECTION_PROBLEM_2PNI_HH + +#include <dumux/discretization/cellcentered/tpfa/properties.hh> +#include <dumux/porousmediumflow/2p/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> + +#include "injection2pspatialparams.hh" + +namespace Dumux { + +// forward declare problem +template <class TypeTag> +class InjectionProblem2PNI; + +namespace Properties { +NEW_TYPE_TAG(Injection2pNITypeTag, INHERITS_FROM(TwoPNI)); +NEW_TYPE_TAG(Injection2pNICCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2pNITypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2pNITypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2pNITypeTag, Problem, InjectionProblem2PNI<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2pNITypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +// Set fluid configuration +SET_TYPE_PROP(Injection2pNITypeTag, FluidSystem, FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), false>); +} // end namespace Properties + +/*! + * \ingroup TwoPModel + * \ingroup ImplicitTestProblems + * \brief Gas injection problem where a gas (here nitrogen) is injected into a fully + * water saturated medium. During buoyancy driven upward migration the gas + * passes a high temperature area. + * + * The domain is sized 60 m times 40 m. + * + * For the mass conservation equation neumann boundary conditions are used on + * the top, on the bottom and on the right of the domain, while dirichlet conditions + * 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 + * boundaries. + * + * At the dirichlet boundaries a hydrostatic pressure and a gas saturation of zero a + * + * This problem uses the \ref TwoPModel model. + */ +template<class TypeTag> +class InjectionProblem2PNI : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + InjectionProblem2PNI(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // 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, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + std::string name() const + { return "injection-2pni"; } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + PrimaryVariables neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + PrimaryVariables values(0.0); + + // if we are inside the injection zone set inflow Neumann boundary conditions + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // inject nitrogen. negative values mean injection + // units kg/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -1e-4; + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + values[Indices::energyEqIdx] = 0.0; + } + + return values; + } + + // \} + + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(283.15, 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + values[Indices::pressureIdx] = pw; + values[Indices::saturationIdx] = 0.0; + + values[Indices::temperatureIdx] = 283.0 + (aquiferDepth_ - globalPos[1])*0.03; + if (globalPos[0] > 20 - eps_ && globalPos[0] < 30 + eps_ && globalPos[1] > 5 - eps_ && globalPos[1] < 35 + eps_) + values[Indices::temperatureIdx] = 380; + + return values; + } + + // \} + + //! set the time for the time dependent boundary conditions (called from main) + void setTime(Scalar time) + { time_ = time; } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar injectionDuration_; //! Duration of the injection in seconds + Scalar time_; +}; + +} //end namespace Dumux + +#endif diff --git a/exercises/solution/ex1/injection2pspatialparams.hh b/exercises/solution/ex1/injection2pspatialparams.hh new file mode 100644 index 00000000..979f14ce --- /dev/null +++ b/exercises/solution/ex1/injection2pspatialparams.hh @@ -0,0 +1,164 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ + +#ifndef DUMUX_EX1_INJECTION_SPATIAL_PARAMS_HH +#define DUMUX_EX1_INJECTION_SPATIAL_PARAMS_HH + +#include <dumux/material/spatialparams/fv.hh> +#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> +#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> + +#include <dumux/io/gnuplotinterface.hh> +#include <dumux/io/plotmateriallaw.hh> + +namespace Dumux { + +/*! + * \ingroup TwoPTwoCModel + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ +template<class FVGridGeometry, class Scalar> +class InjectionSpatialParams +: public FVSpatialParams<FVGridGeometry, Scalar, InjectionSpatialParams<FVGridGeometry, Scalar>> +{ + using ThisType = InjectionSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVSpatialParams<FVGridGeometry, Scalar, ThisType>; + using GridView = typename FVGridGeometry::GridView; + static const int dimWorld = GridView::dimensionworld; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + // export permeability type + using PermeabilityType = Scalar; + + using MaterialLaw = EffToAbsLaw<RegularizedBrooksCorey<Scalar>>; + using MaterialLawParams = typename MaterialLaw::Params; + + /*! + * \brief The constructor + * + * \param fvGridGeometry The finite volume grid geometry + */ + InjectionSpatialParams(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + aquiferHeightFromBottom_ = 30.0; + + // intrinsic permeabilities + aquitardK_ = getParam<Scalar>("SpatialParams.PermeabilityAquitard"); + aquiferK_ = getParam<Scalar>("SpatialParams.PermeabilityAquifer"); + + // porosities + aquitardPorosity_ = 0.2; + aquiferPorosity_ = 0.4; + + // residual saturations + aquitardMaterialParams_.setSwr(0.2); + aquitardMaterialParams_.setSnr(0.0); + aquiferMaterialParams_.setSwr(0.2); + aquiferMaterialParams_.setSnr(0.0); + + // parameters for the Brooks-Corey law + aquitardMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquitard")); + aquiferMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquifer")); + aquitardMaterialParams_.setLambda(2.0); + aquiferMaterialParams_.setLambda(2.0); + } + + /*! + * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + + { + if (isInAquitard_(globalPos)) + return aquitardK_; + return aquiferK_; + } + + /*! + * \brief Define the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardPorosity_; + return aquiferPorosity_; + } + + /*! + * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). + * + * \param globalPos The global position + * + * \return the material parameters object + */ + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardMaterialParams_; + return aquiferMaterialParams_; + } + + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The position of the center of the element + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { return FluidSystem::H2OIdx; } + +private: + + static constexpr Scalar eps_ = 1e-6; + + bool isInAquitard_(const GlobalPosition &globalPos) const + { return globalPos[dimWorld-1] > aquiferHeightFromBottom_ + eps_; } + + Scalar aquitardK_; + Scalar aquiferK_; + Scalar aquiferHeightFromBottom_; + + + Scalar aquitardPorosity_; + Scalar aquiferPorosity_; + + MaterialLawParams aquitardMaterialParams_; + MaterialLawParams aquiferMaterialParams_; +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/solution/ex2/CMakeLists.txt b/exercises/solution/ex2/CMakeLists.txt new file mode 100644 index 00000000..fe1e8746 --- /dev/null +++ b/exercises/solution/ex2/CMakeLists.txt @@ -0,0 +1,10 @@ +# the compositional two-phase simulation program +dune_add_test(NAME exercise2_solution + SOURCES exercise2_solution.cc + CMD_ARGS exercise2.input -Problem.OnlyPlotMaterialLaws false) + +# add tutorial to the common target +add_dependencies(test_exercises exercise2_solution) + +# add a symlink for the input file +dune_symlink_to_source_files(FILES "exercise2.input") diff --git a/exercises/solution/ex2/exercise2.input b/exercises/solution/ex2/exercise2.input new file mode 100644 index 00000000..df7737b8 --- /dev/null +++ b/exercises/solution/ex2/exercise2.input @@ -0,0 +1,24 @@ +[TimeLoop] +DtInitial = 3600 # in seconds +TEnd = 3.154e9 # in seconds, i.e ten years + +[Grid] +LowerLeft = 0 0 +UpperRight = 60 40 +Cells = 24 16 + +[Problem] +Name = infiltration +OnlyPlotMaterialLaws = true +AquiferDepth = 2700.0 # m +TotalAreaSpecificInflow = 1e-4 # kg / (s*m^2) +InjectionDuration = 2.628e6 # in seconds, i.e. one month + +EnableGravity = true +EnableDiffusion = true + +[SpatialParams] +PermeabilityAquitard = 1e-15 # m^2 +EntryPressureAquitard = 4.5e4 # Pa +PermeabilityAquifer = 1e-12 # m^2 +EntryPressureAquifer = 1e4 # Pa diff --git a/exercises/solution/ex2/exercise2_solution.cc b/exercises/solution/ex2/exercise2_solution.cc new file mode 100644 index 00000000..2a7493e6 --- /dev/null +++ b/exercises/solution/ex2/exercise2_solution.cc @@ -0,0 +1,200 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Test for the two-phase two-component CC model. + */ +#include <config.h> + +#include <ctime> +#include <iostream> + +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> + +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +#include <dumux/common/dumuxmessage.hh> +#include <dumux/common/defaultusagemessage.hh> + +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/privarswitchnewtonsolver.hh> + +#include <dumux/assembly/fvassembler.hh> +#include <dumux/assembly/diffmethod.hh> + +#include <dumux/discretization/methods.hh> + +#include <dumux/io/vtkoutputmodule.hh> +#include <dumux/io/grid/gridmanager.hh> + +#include "injection2p2cproblem.hh" + +int main(int argc, char** argv)try +{ + using namespace Dumux; + + // define the type tag for this problem + using TypeTag = TTAG(Injection2p2pcCCTypeTag); + + // initialize MPI, finalize is done automatically on exit + const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); + + // print dumux start message + if (mpiHelper.rank() == 0) + DumuxMessage::print(/*firstCall=*/true); + + // parse command line arguments and input file + Parameters::init(argc, argv); + + // try to create a grid (from the given grid file or the input file) + GridManager<typename GET_PROP_TYPE(TypeTag, Grid)> gridManager; + gridManager.init(); + + //////////////////////////////////////////////////////////// + // run instationary non-linear problem on this grid + //////////////////////////////////////////////////////////// + + // we compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); + + // create the finite volume grid geometry + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + auto fvGridGeometry = std::make_shared<FVGridGeometry>(leafGridView); + fvGridGeometry->update(); + + // the problem (initial and boundary conditions) + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + auto problem = std::make_shared<Problem>(fvGridGeometry); + + // the solution vector + using SolutionVector = typename GET_PROP_TYPE(TypeTag, SolutionVector); + SolutionVector x(fvGridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + // the grid variables + using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables); + auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); + gridVariables->init(x, xOld); + + // get some time loop parameters + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // check if we are about to restart a previously interrupted simulation + Scalar restartTime = 0; + if (Parameters::getTree().hasKey("Restart") || Parameters::getTree().hasKey("TimeLoop.Restart")) + restartTime = getParam<Scalar>("TimeLoop.Restart"); + + // intialize the vtk output module + using VtkOutputFields = typename GET_PROP_TYPE(TypeTag, VtkOutputFields); + VtkOutputModule<TypeTag> vtkWriter(*problem, *fvGridGeometry, *gridVariables, x, problem->name()); + VtkOutputFields::init(vtkWriter); //! Add model specific output fields + + // instantiate time loop + auto timeLoop = std::make_shared<TimeLoop<Scalar>>(restartTime, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + + // the assembler with time loop for instationary problem + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); + + // the linear solver + using LinearSolver = AMGBackend<TypeTag>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, fvGridGeometry->dofMapper()); + + // the non-linear solver + using PrimaryVariableSwitch = typename GET_PROP_TYPE(TypeTag, PrimaryVariableSwitch); + using NewtonSolver = Dumux::PriVarSwitchNewtonSolver<Assembler, LinearSolver, PrimaryVariableSwitch>; + NewtonSolver nonLinearSolver(assembler, linearSolver); + + // time loop + timeLoop->start(); do + { + // set previous solution for storage evaluations + assembler->setPreviousSolution(xOld); + + //set time in problem (is used in time-dependent Neumann boundary condition) + problem->setTime(timeLoop->time()+timeLoop->timeStepSize()); + + // solve the non-linear system with time step control + nonLinearSolver.solve(x, *timeLoop); + + // make the new solution the old solution + xOld = x; + gridVariables->advanceTimeStep(); + + // advance to the time loop to the next step + timeLoop->advanceTimeStep(); + + // report statistics of this time step + timeLoop->reportTimeStep(); + + // set new dt as suggested by the newton solver + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + vtkWriter.write(timeLoop->time()); + + } while (!timeLoop->finished()); + + timeLoop->finalize(leafGridView.comm()); + + //////////////////////////////////////////////////////////// + // finalize, print dumux message to say goodbye + //////////////////////////////////////////////////////////// + + // print dumux end message + if (mpiHelper.rank() == 0) + { + Parameters::print(); + DumuxMessage::print(/*firstCall=*/false); + } + + return 0; +} // end main +catch (Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +catch (Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +catch (Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} diff --git a/exercises/solution/ex2/injection2p2cproblem.hh b/exercises/solution/ex2/injection2p2cproblem.hh new file mode 100644 index 00000000..8c62fdf5 --- /dev/null +++ b/exercises/solution/ex2/injection2p2cproblem.hh @@ -0,0 +1,278 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Problem where air is injected under a low permeable layer in a depth of 2700m. + */ +#ifndef DUMUX_INJECTION_2P2C_PROBLEM_HH +#define DUMUX_INJECTION_2P2C_PROBLEM_HH + +#include <dumux/porousmediumflow/2p2c/model.hh> +#include <dumux/porousmediumflow/problem.hh> +#include <dumux/material/fluidsystems/h2on2.hh> +#include <dumux/discretization/cellcentered/tpfa/properties.hh> + +#include "injection2p2cspatialparams.hh" + +#include "mylocalresidual.hh" + +namespace Dumux { + +// foward declaration +template <class TypeTag> +class Injection2p2cProblem; + +// setup property TypeTag +namespace Properties { +NEW_TYPE_TAG(Injection2p2cTypeTag, INHERITS_FROM(TwoPTwoC)); +NEW_TYPE_TAG(Injection2p2pcCCTypeTag, INHERITS_FROM(CCTpfaModel, Injection2p2cTypeTag)); + +// Set the grid type +SET_TYPE_PROP(Injection2p2cTypeTag, Grid, Dune::YaspGrid<2>); + +// Set the problem property +SET_TYPE_PROP(Injection2p2cTypeTag, Problem, Injection2p2cProblem<TypeTag>); + +// Set the spatial parameters +SET_TYPE_PROP(Injection2p2cTypeTag, SpatialParams, + InjectionSpatialParams<typename GET_PROP_TYPE(TypeTag, FVGridGeometry), + typename GET_PROP_TYPE(TypeTag, Scalar)>); + +SET_TYPE_PROP(Injection2p2cTypeTag, LocalResidual, MyCompositionalLocalResidual<TypeTag>); + +// Set fluid configuration +SET_TYPE_PROP(Injection2p2cTypeTag, + FluidSystem, + FluidSystems::H2ON2<typename GET_PROP_TYPE(TypeTag, Scalar), false /*useComplexRelations*/>); + +// Define whether mole(true) or mass (false) fractions are used +SET_BOOL_PROP(Injection2p2cTypeTag, UseMoles, true); +} // end namespace Properties + +/*! + * \ingroup TwoPTwoCModel + * \ingroup ImplicitTestProblems + * \brief Problem where air is injected under a low permeable layer in a depth of 2700m. + * + * The domain is sized 60m times 40m and consists of two layers, a moderately + * permeable one for \f$ y<22m\f$ and one with a lower permeablility + * in the rest of the domain. + * + * Nitrogen is injected into a water-filled aquifer through a well. First, we inject for one month. + * Then, we continue simulating the development of the nitrogen plume for 10 years. + * This is realized with a Neumann boundary condition at the right boundary + * (\f$ 7m<y<15m\f$). The aquifer is situated 2700m below sea level (the depth can be changed through the input file). + * The injected fluid phase migrates upwards due to buoyancy. + * It accumulates and partially enters the top layer lower permeable aquitard. + * + * The default setting for useMoles is true, i.e. each component is balaced in units of mole. + * The property useMoles can be set to either true or false in the + * problem file. If you change this, make sure that the according units are used in the problem setup. + * + * This problem uses the \ref TwoPTwoCModel. + */ +template <class TypeTag> +class Injection2p2cProblem : public PorousMediumFlowProblem<TypeTag> +{ + using ParentType = PorousMediumFlowProblem<TypeTag>; + + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem); + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using NumEqVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); + using PrimaryVariables = typename GET_PROP_TYPE(TypeTag, PrimaryVariables); + using BoundaryTypes = typename GET_PROP_TYPE(TypeTag, BoundaryTypes); + using FVGridGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + + enum { dimWorld = GridView::dimensionworld }; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + Injection2p2cProblem(std::shared_ptr<const FVGridGeometry> fvGridGeometry) + : ParentType(fvGridGeometry) + { + // initialize the tables of the fluid system + FluidSystem::init(/*tempMin=*/273.15, + /*tempMax=*/423.15, + /*numTemp=*/50, + /*pMin=*/0.0, + /*pMax=*/30e6, + /*numP=*/300); + + // name of the problem and output file + name_ = getParam<std::string>("Problem.Name"); + // depth of the aquifer, units: m + aquiferDepth_ = getParam<Scalar>("Problem.AquiferDepth"); + // inflow rate of nitrogen water vapor mixture, units: kg/(s m^2) + totalAreaSpecificInflow_ = getParam<Scalar>("Problem.TotalAreaSpecificInflow"); + // the duration of the injection, units: second + injectionDuration_ = getParam<Scalar>("Problem.InjectionDuration"); + } + + /*! + * \name Problem parameters + */ + // \{ + + /*! + * \brief Returns the problem name + * + * This is used as a prefix for files generated by the simulation. + */ + const std::string& name() const + { return name_; } + + /*! + * \brief Returns the temperature in \f$ K \f$ + */ + Scalar temperature() const + { return 273.15 + 30; } + + // \} + + /*! + * \name Boundary conditions + */ + // \{ + + /*! + * \brief Specifies which kind of boundary condition should be + * used for which equation on a given boundary segment. + * + * \param bcTypes The boundary types for the conservation equations + * \param globalPos The position for which the bc type should be evaluated + */ + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + if (globalPos[0] < eps_) + bcTypes.setAllDirichlet(); + + // and Neuman boundary conditions everywhere else + // note that we don't differentiate between Neumann and Robin boundary types + else + bcTypes.setAllNeumann(); + + return bcTypes; + } + + /*! + * \brief Evaluates the boundary conditions for a Dirichlet + * boundary segment + * + * \param globalPos The global position + */ + PrimaryVariables dirichletAtPos(const GlobalPosition &globalPos) const + { + return initialAtPos(globalPos); + } + + /*! + * \brief Evaluate the boundary conditions for a neumann + * boundary segment. + * + * \param values Stores the Neumann values for the conservation equations in + * \f$ [ \textnormal{unit of conserved quantity} / (m^(dim-1) \cdot s )] \f$ + * \param globalPos The position of the integration point of the boundary segment. + * + * For this method, the \a values parameter stores the mass flux + * in normal direction of each phase. Negative values mean influx. + */ + NumEqVector neumannAtPos(const GlobalPosition &globalPos) const + { + // initialize values to zero, i.e. no-flow Neumann boundary conditions + NumEqVector values(0.0); + + //if we are inside the injection zone set inflow Neumann boundary conditions + if (time_ < injectionDuration_ + && globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->fvGridGeometry().bBoxMax()[0]) + { + // set the Neumann values for the Nitrogen component balance + // convert from units kg/(s*m^2) to mole/(s*m^2) + values[Indices::conti0EqIdx + FluidSystem::N2Idx] = -totalAreaSpecificInflow_/FluidSystem::molarMass(FluidSystem::N2Idx); + values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0; + } + + return values; + } + + // \} + + /*! + * \name Volume terms + */ + // \{ + + /*! + * \brief Evaluate the initial value for a control volume. + * + * \param globalPos The position for which the initial condition should be evaluated + * + * For this method, the \a values parameter stores primary + * variables. + */ + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables values(0.0); + values.setState(Indices::firstPhaseOnly); + + // get the water density at atmospheric conditions + const Scalar densityW = FluidSystem::H2O::liquidDensity(temperature(), 1.0e5); + + // assume an intially hydrostatic liquid pressure profile + // note: we subtract rho_w*g*h because g is defined negative + const Scalar pw = 1.0e5 - densityW*this->gravity()[dimWorld-1]*(aquiferDepth_ - globalPos[dimWorld-1]); + + // initially we have some nitrogen dissolved + // saturation mole fraction would be + // moleFracLiquidN2 = (pw + pc + p_vap^sat)/henry; + const Scalar moleFracLiquidN2 = pw*0.95/BinaryCoeff::H2O_N2::henry(temperature()); + + // note that because we start with a single phase system the primary variables + // are pl and x^w_N2. This will switch as soon after we start injecting to a two + // phase system so the primary variables will be pl and Sn (non-wetting saturation). + values[Indices::switchIdx] = moleFracLiquidN2; + values[Indices::pressureIdx] = pw; + + return values; + } + + // \} + + void setTime(Scalar time) + { + time_ = time; + } + +private: + static constexpr Scalar eps_ = 1e-6; + std::string name_; //! Problem name + Scalar aquiferDepth_; //! Depth of the aquifer in m + Scalar totalAreaSpecificInflow_; //! Area specific inflow rate in mole/(s*m^2) + Scalar time_; + Scalar injectionDuration_; //! Duration of the injection in seconds +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/solution/ex2/injection2p2cspatialparams.hh b/exercises/solution/ex2/injection2p2cspatialparams.hh new file mode 100644 index 00000000..4c89071a --- /dev/null +++ b/exercises/solution/ex2/injection2p2cspatialparams.hh @@ -0,0 +1,190 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ + +#ifndef DUMUX_INJECTION_SPATIAL_PARAMS_HH +#define DUMUX_INJECTION_SPATIAL_PARAMS_HH + +#include <dumux/material/spatialparams/fv.hh> +#include <dumux/material/fluidmatrixinteractions/2p/regularizedbrookscorey.hh> +#include <dumux/material/fluidmatrixinteractions/2p/efftoabslaw.hh> +// TODO: dumux-course-task +// Inlcude your own material law +#include "mymateriallaw.hh" + +#include <dumux/io/gnuplotinterface.hh> +#include <dumux/io/plotmateriallaw.hh> + +namespace Dumux { + +/*! + * \ingroup TwoPTwoCModel + * \brief Definition of the spatial parameters for the injection problem + * which uses the isothermal two-phase two-component + * fully implicit model. + */ +template<class FVGridGeometry, class Scalar> +class InjectionSpatialParams +: public FVSpatialParams<FVGridGeometry, Scalar, InjectionSpatialParams<FVGridGeometry, Scalar>> +{ + using ThisType = InjectionSpatialParams<FVGridGeometry, Scalar>; + using ParentType = FVSpatialParams<FVGridGeometry, Scalar, ThisType>; + using GridView = typename FVGridGeometry::GridView; + static const int dimWorld = GridView::dimensionworld; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + +public: + // export permeability type + using PermeabilityType = Scalar; + + // TODO: dumux-course-task + // Use your own material law instead + // Set the material law parameterized by absolute saturations + using MaterialLaw = EffToAbsLaw<MyMaterialLaw<Scalar>>; + using MaterialLawParams = typename MaterialLaw::Params; + + /*! + * \brief The constructor + * + * \param fvGridGeometry The finite volume grid geometry + */ + InjectionSpatialParams(std::shared_ptr<const FVGridGeometry>& fvGridGeometry) + : ParentType(fvGridGeometry) + { + aquiferHeightFromBottom_ = 30.0; + + // intrinsic permeabilities + aquitardK_ = getParam<Scalar>("SpatialParams.PermeabilityAquitard"); + aquiferK_ = getParam<Scalar>("SpatialParams.PermeabilityAquifer"); + + // porosities + aquitardPorosity_ = 0.2; + aquiferPorosity_ = 0.4; + + // residual saturations + aquitardMaterialParams_.setSwr(0.2); + aquitardMaterialParams_.setSnr(0.0); + aquiferMaterialParams_.setSwr(0.2); + aquiferMaterialParams_.setSnr(0.0); + + // parameters for the Brooks-Corey law + aquitardMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquitard")); + aquiferMaterialParams_.setPe(getParam<Scalar>("SpatialParams.EntryPressureAquifer")); + aquitardMaterialParams_.setLambda(2.0); + aquiferMaterialParams_.setLambda(2.0); + + // plot the material laws using gnuplot and exit + if (getParam<bool>("Problem.OnlyPlotMaterialLaws")) + { + plotMaterialLaws(); + exit(0); + } + } + + /*! + * \brief Define the intrinsic permeability \f$\mathrm{[m^2]}\f$. + * + * \param globalPos The global position + */ + PermeabilityType permeabilityAtPos(const GlobalPosition& globalPos) const + + { + if (isInAquitard_(globalPos)) + return aquitardK_; + return aquiferK_; + } + + /*! + * \brief Define the porosity \f$\mathrm{[-]}\f$. + * + * \param globalPos The global position + */ + Scalar porosityAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardPorosity_; + return aquiferPorosity_; + } + + /*! + * \brief Function for defining the parameters needed by constitutive relationships (kr-sw, pc-sw, etc.). + * + * \param globalPos The global position + * + * \return the material parameters object + */ + const MaterialLawParams& materialLawParamsAtPos(const GlobalPosition& globalPos) const + { + if (isInAquitard_(globalPos)) + return aquitardMaterialParams_; + return aquiferMaterialParams_; + } + + /*! + * \brief Function for defining which phase is to be considered as the wetting phase. + * + * \return the wetting phase index + * \param globalPos The position of the center of the element + */ + template<class FluidSystem> + int wettingPhaseAtPos(const GlobalPosition& globalPos) const + { return FluidSystem::H2OIdx; } + + /*! + * \brief Creates a gnuplot output of the pc-Sw curve + */ + void plotMaterialLaws() + { + PlotMaterialLaw<Scalar, MaterialLaw> plotMaterialLaw; + GnuplotInterface<Scalar> gnuplot; + plotMaterialLaw.addpcswcurve(gnuplot, aquitardMaterialParams_, 0.2, 1.0, "upper layer (fine, aquitard)", "w lp"); + plotMaterialLaw.addpcswcurve(gnuplot, aquiferMaterialParams_, 0.2, 1.0, "lower layer (coarse, aquifer)", "w l"); + gnuplot.setOption("set xrange [0:1]"); + gnuplot.setOption("set label \"residual\\nsaturation\" at 0.1,100000 center"); + gnuplot.plot("pc-Sw"); + } + +private: + + static constexpr Scalar eps_ = 1e-6; + + bool isInAquitard_(const GlobalPosition &globalPos) const + { return globalPos[dimWorld-1] > aquiferHeightFromBottom_ + eps_; } + + Scalar aquitardK_; + Scalar aquiferK_; + Scalar aquiferHeightFromBottom_; + + Scalar aquitardPorosity_; + Scalar aquiferPorosity_; + + MaterialLawParams aquitardMaterialParams_; + MaterialLawParams aquiferMaterialParams_; +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/solution/ex2/mylocalresidual.hh b/exercises/solution/ex2/mylocalresidual.hh new file mode 100644 index 00000000..ac668555 --- /dev/null +++ b/exercises/solution/ex2/mylocalresidual.hh @@ -0,0 +1,163 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Element-wise calculation of the local residual for problems + * using compositional fully implicit model. + */ +#ifndef DUMUX_MY_COMPOSITIONAL_LOCAL_RESIDUAL_HH +#define DUMUX_MY_COMPOSITIONAL_LOCAL_RESIDUAL_HH + +#include <dumux/common/properties.hh> + +namespace Dumux +{ +/*! + * \ingroup Implicit + * \ingroup ImplicitLocalResidual + * \brief Element-wise calculation of the local residual for problems + * using compositional fully implicit model. + * + */ +template<class TypeTag> +class MyCompositionalLocalResidual: public GET_PROP_TYPE(TypeTag, BaseLocalResidual) +{ + using ParentType = typename GET_PROP_TYPE(TypeTag, BaseLocalResidual); + using Implementation = typename GET_PROP_TYPE(TypeTag, LocalResidual); + using Scalar = typename GET_PROP_TYPE(TypeTag, Scalar); + using Problem = typename GET_PROP_TYPE(TypeTag, Problem); + using FVElementGeometry = typename GET_PROP_TYPE(TypeTag, FVGridGeometry)::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + using ResidualVector = typename GET_PROP_TYPE(TypeTag, NumEqVector); + using FluxVariables = typename GET_PROP_TYPE(TypeTag, FluxVariables); + using ElementFluxVariablesCache = typename GET_PROP_TYPE(TypeTag, GridFluxVariablesCache)::LocalView; + using Indices = typename GET_PROP_TYPE(TypeTag, ModelTraits)::Indices; + using GridView = typename GET_PROP_TYPE(TypeTag, GridView); + using Element = typename GridView::template Codim<0>::Entity; + using ElementVolumeVariables = typename GET_PROP_TYPE(TypeTag, GridVolumeVariables)::LocalView; + using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables); + using EnergyLocalResidual = typename GET_PROP_TYPE(TypeTag, EnergyLocalResidual); + + static constexpr int numPhases = GET_PROP_TYPE(TypeTag, ModelTraits)::numPhases(); + static constexpr int numComponents = GET_PROP_TYPE(TypeTag, ModelTraits)::numComponents(); + + enum { conti0EqIdx = Indices::conti0EqIdx }; + +public: + using ParentType::ParentType; + + /*! + * \brief Evaluate the amount of all conservation quantities + * (e.g. phase mass) within a sub-control volume. + * + * The result should be averaged over the volume (e.g. phase mass + * inside a sub control volume divided by the volume) + * + * \param storage The mass of the component within the sub-control volume + * \param scvIdx The SCV (sub-control-volume) index + * \param usePrevSol Evaluate function with solution of current or previous time step + */ + ResidualVector computeStorage(const Problem& problem, + const SubControlVolume& scv, + const VolumeVariables& volVars) const + { + ResidualVector storage(0.0); + + // compute storage term of all components within all phases + for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) + { + for (int compIdx = 0; compIdx < numComponents; ++compIdx) + { + auto eqIdx = conti0EqIdx + compIdx; + storage[eqIdx] += volVars.porosity() + * volVars.saturation(phaseIdx) + * volVars.molarDensity(phaseIdx) + * volVars.moleFraction(phaseIdx, compIdx); + } + } + + return storage; + } + + /*! + * \brief Evaluates the total flux of all conservation quantities + * over a face of a sub-control volume. + * + * \param flux The flux over the SCV (sub-control-volume) face for each component + * \param fIdx The index of the SCV face + * \param onBoundary A boolean variable to specify whether the flux variables + * are calculated for interior SCV faces or boundary faces, default=false + */ + ResidualVector computeFlux(const Problem& problem, + const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolumeFace& scvf, + const ElementFluxVariablesCache& elemFluxVarsCache) const + { + FluxVariables fluxVars; + fluxVars.init(problem, element, fvGeometry, elemVolVars, scvf, elemFluxVarsCache); + // get upwind weights into local scope + ResidualVector flux(0.0); + + auto enableDiffusion = getParam<bool>("Problem.EnableDiffusion", true); + + // advective fluxes + for (int phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) + { + const auto diffusiveFluxes = fluxVars.molecularDiffusionFlux(phaseIdx); + for (int compIdx = 0; compIdx < numComponents; ++compIdx) + { + // get equation index + const auto eqIdx = conti0EqIdx + compIdx; + + // the physical quantities for which we perform upwinding + const auto upwindTerm = [phaseIdx,compIdx] (const auto& volVars) + { return volVars.molarDensity(phaseIdx)*volVars.moleFraction(phaseIdx, compIdx)*volVars.mobility(phaseIdx); }; + flux[eqIdx] += fluxVars.advectiveFlux(phaseIdx, upwindTerm); + + // TODO: dumux-course-task + // same here: only add diffusive fluxes if diffusion is enabled + if (enableDiffusion) + flux[eqIdx] += diffusiveFluxes[compIdx]; + } + + //! Add advective phase energy fluxes. For isothermal model the contribution is zero. + EnergyLocalResidual::heatConvectionFlux(flux, fluxVars, phaseIdx); + } + + //! Add diffusive energy fluxes. For isothermal model the contribution is zero. + EnergyLocalResidual::heatConductionFlux(flux, fluxVars); + + return flux; + } + +protected: + Implementation *asImp_() + { return static_cast<Implementation *> (this); } + + const Implementation *asImp_() const + { return static_cast<const Implementation *> (this); } +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/solution/ex2/mymateriallaw.hh b/exercises/solution/ex2/mymateriallaw.hh new file mode 100644 index 00000000..fe36bec6 --- /dev/null +++ b/exercises/solution/ex2/mymateriallaw.hh @@ -0,0 +1,114 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief Implementation of the capillary pressure and + * relative permeability <-> saturation relations. + * + */ +#ifndef DUMUX_MY_MATERIAL_LAW_HH +#define DUMUX_MY_MATERIAL_LAW_HH + +#include <dumux/material/fluidmatrixinteractions/2p/brookscoreyparams.hh> +#include <cmath> +#include <algorithm> + +namespace Dumux +{ +/*! + * \ingroup fluidmatrixinteractionslaws + * \note a simple material law using the BrooksCoreyParams + */ +template <class ScalarT, class ParamsT = BrooksCoreyParams<ScalarT> > +class MyMaterialLaw +{ +public: + typedef ParamsT Params; + typedef typename Params::Scalar Scalar; + + /*! + * \brief The capillary pressure-saturation curve + * \param swe saturation of the wetting phase \f$\mathrm{[\overline{S}_w]}\f$ + * \param params A container object that is populated with the appropriate coefficients for the respective law. + * Therefore, in the (problem specific) spatialParameters first, the material law is chosen, + and then the params container is constructed accordingly. Afterwards the values are set there, too. + * \return capillary pressure + */ + static Scalar pc(const Params ¶ms, Scalar swe) + { + return 1.0e5*(1.0-swe) + params.pe(); + } + + /*! + * \brief The relative permeability for the wetting phase of + * the medium implied by the Brooks-Corey + * parameterization. + * + * \param swe The mobile saturation of the wetting phase. + * \param params A container object that is populated with the appropriate coefficients for the respective law. + * Therefore, in the (problem specific) spatialParameters first, the material law is chosen, + * and then the params container is constructed accordingly. Afterwards the values are set there, too. + * \return Relative permeability of the wetting phase calculated as implied by Brooks & Corey. + * + * \note Instead of undefined behaviour if pc is not in the valid range, we return a valid number, + * by clamping the input. + */ + static Scalar krw(const Params ¶ms, Scalar swe) + { + using std::pow; + using std::min; + using std::max; + + swe = min(max(swe, 0.0), 1.0); // the equation below is only defined for 0.0 <= swe <= 1.0 + + return pow(swe, 2.0/params.lambda() + 3); + } + + /*! + * \brief The relative permeability for the non-wetting phase of + * the medium as implied by the Brooks-Corey + * parameterization. + * + * \param swe The mobile saturation of the wetting phase. + * \param params A container object that is populated with the appropriate coefficients for the respective law. + * Therefore, in the (problem specific) spatialParameters first, the material law is chosen, and then the params container + * is constructed accordingly. Afterwards the values are set there, too. + * \return Relative permeability of the non-wetting phase calculated as implied by Brooks & Corey. + * + * \note Instead of undefined behaviour if pc is not in the valid range, we return a valid number, + * by clamping the input. + */ + static Scalar krn(const Params ¶ms, Scalar swe) + { + using std::pow; + using std::min; + using std::max; + + swe = min(max(swe, 0.0), 1.0); // the equation below is only defined for 0.0 <= swe <= 1.0 + + const Scalar exponent = 2.0/params.lambda() + 1; + const Scalar tmp = 1.0 - swe; + return tmp*tmp*(1.0 - pow(swe, exponent)); + } +}; + +} // end namespace Dumux + +#endif diff --git a/exercises/solution/ex3/h2omycompressiblecomponent.hh b/exercises/solution/ex3/h2omycompressiblecomponent.hh new file mode 100644 index 00000000..7ffb47b3 --- /dev/null +++ b/exercises/solution/ex3/h2omycompressiblecomponent.hh @@ -0,0 +1,489 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * + * \brief A fluid system with water and a fictitious component, which is to be + * implemented in tutorial exercise 3a, as phases and components. This + * fluid system is to be implemented in exercise 3b. + */ +#ifndef DUMUX_H2O_MYCOMPRESSIBLECOMPONENT_FLUID_SYSTEM_HH +#define DUMUX_H2O_MYCOMPRESSIBLECOMPONENT_FLUID_SYSTEM_HH + +#include <dumux/material/components/h2o.hh> +#include <dumux/material/components/tabulatedcomponent.hh> + +#include <dumux/material/fluidsystems/base.hh> + +// the fictitious component that was created in exercise 3a +#include <tutorial/ex3/components/mycompressiblecomponent.hh> + +// the binary coefficients corresponding to this fluid system +#include <tutorial/ex3/binarycoefficients/h2omycompressiblecomponent.hh> + +namespace Dumux +{ +namespace FluidSystems +{ + +/*! + * \brief A compositional fluid consisting of two liquid phases, + * which are water and a fictitious component from tutorial exercise 3a. + */ +template <class TypeTag, class Scalar, + class H2OType = Dumux::Components::TabulatedComponent<Dumux::Components::H2O<Scalar> > > +class H2OMyCompressibleComponent + : public BaseFluidSystem< Scalar, H2OMyCompressibleComponent<TypeTag, Scalar, H2OType> > +{ + typedef H2OMyCompressibleComponent<TypeTag, Scalar, H2OType> ThisType; + typedef BaseFluidSystem<Scalar, ThisType> Base; + +public: + typedef Dumux::MyCompressibleComponent<Scalar> MyCompressibleComponent; + typedef H2OType H2O; + + static constexpr int numPhases = 2; + static constexpr int numComponents = 2; + + static constexpr int phase0Idx = 0; // index of the first phase + static constexpr int phase1Idx = 1; // index of the second phase + + static constexpr int H2OIdx = 0; + static constexpr int NAPLIdx = 1; + // export component indices to indicate the main component + // of the corresponding phase at atmospheric pressure 1 bar + // and room temperature 20°C: + static constexpr int comp0Idx = H2OIdx; + static constexpr int comp1Idx = NAPLIdx; + + /*! + * \brief Initialize the fluid system's static parameters generically + * + * If a tabulated H2O component is used, we do our best to create + * tables that always work. + */ + static void init() + { + init(/*tempMin=*/273.15, + /*tempMax=*/623.15, + /*numTemp=*/100, + /*pMin=*/0.0, + /*pMax=*/20e6, + /*numP=*/200); + } + + /*! + * \brief Initialize the fluid system's static parameters using + * problem specific temperature and pressure ranges + * + * \param tempMin The minimum temperature used for tabulation of water [K] + * \param tempMax The maximum temperature used for tabulation of water [K] + * \param nTemp The number of ticks on the temperature axis of the table of water + * \param pressMin The minimum pressure used for tabulation of water [Pa] + * \param pressMax The maximum pressure used for tabulation of water [Pa] + * \param nPress The number of ticks on the pressure axis of the table of water + */ + static void init(Scalar tempMin, Scalar tempMax, unsigned nTemp, + Scalar pressMin, Scalar pressMax, unsigned nPress) + { + if (H2O::isTabulated) { + std::cout << "Initializing tables for the H2O fluid properties (" + << nTemp*nPress + << " entries).\n"; + + H2O::init(tempMin, tempMax, nTemp, + pressMin, pressMax, nPress); + } + } + + + /*! + * \brief Return whether a phase is liquid + * + * \param phaseIdx The index of the fluid phase to consider + */ + static constexpr bool isLiquid(int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + return true; + } + + static constexpr bool isIdealGas(int phaseIdx) + { return H2O::gasIsIdeal() && MyCompressibleComponent::gasIsIdeal(); } + + /*! + * \brief Returns true if and only if a fluid phase is assumed to + * be an ideal mixture. + * + * We define an ideal mixture as a fluid phase where the fugacity + * coefficients of all components times the pressure of the phase + * are indepent on the fluid composition. This assumtion is true + * if Henry's law and Raoult's law apply. If you are unsure what + * this function should return, it is safe to return false. The + * only damage done will be (slightly) increased computation times + * in some cases. + * + * \param phaseIdx The index of the fluid phase to consider + */ + static constexpr bool isIdealMixture(int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + return true; + } + + /*! + * \brief Returns true if and only if a fluid phase is assumed to + * be compressible. + * + * Compressible means that the partial derivative of the density + * to the fluid pressure is always larger than zero. + * + * \param phaseIdx The index of the fluid phase to consider + */ + static constexpr bool isCompressible(int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) + // the water component decides for the water phase... + return H2O::liquidIsCompressible(); + + // the NAPL component decides for the napl phase... + return MyCompressibleComponent::liquidIsCompressible(); + } + + /*! + * \brief Return the human readable name of a phase (used in indices) + */ + static std::string phaseName(int phaseIdx) + { + switch (phaseIdx) { + case phase0Idx: return "w"; + case phase1Idx: return "n"; + }; + DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx); + } + + /*! + * \brief Return the human readable name of a component (used in indices) + */ + static std::string componentName(int compIdx) + { + switch (compIdx) { + case H2OIdx: return H2O::name(); + case NAPLIdx: return MyCompressibleComponent::name(); + }; + DUNE_THROW(Dune::InvalidStateException, "Invalid component index " << compIdx); + } + + /*! + * \brief Return the molar mass of a component in [kg/mol]. + */ + static Scalar molarMass(int compIdx) + { + switch (compIdx) { + case H2OIdx: return H2O::molarMass(); + case NAPLIdx: return MyCompressibleComponent::molarMass(); + }; + DUNE_THROW(Dune::InvalidStateException, "Invalid component index " << compIdx); + } + + /*! + * \brief Given all mole fractions in a phase, return the phase + * density [kg/m^3]. + */ + using Base::density; + template <class FluidState> + static Scalar density(const FluidState &fluidState, int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) { + // See: doctoral thesis of Steffen Ochs 2007 + // Steam injection into saturated porous media : process analysis including experimental and numerical investigations + // http://elib.uni-stuttgart.de/bitstream/11682/271/1/Diss_Ochs_OPUS.pdf + Scalar rholH2O = H2O::liquidDensity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)); + Scalar clH2O = rholH2O/H2O::molarMass(); + Scalar x_H2O = fluidState.moleFraction(phase0Idx, H2OIdx); + Scalar x_myComp = fluidState.moleFraction(phase0Idx, NAPLIdx); + + // return composition-dependent water phase density + return clH2O*(H2O::molarMass()*x_H2O + MyCompressibleComponent::molarMass()*x_myComp); + } + else { + // assume the density of the fictious component to be independent of the composition + Scalar pressure = MyCompressibleComponent::liquidIsCompressible()?fluidState.pressure(phaseIdx):1e100; + return MyCompressibleComponent::liquidDensity(fluidState.temperature(phaseIdx), pressure); + } + } + + using Base::molarDensity; + /*! + * \brief The molar density \f$\rho_{mol,\alpha}\f$ + * of a fluid phase \f$\alpha\f$ in \f$\mathrm{[mol/m^3]}\f$ + * + * The molar density for the simple relation is defined by the + * mass density \f$\rho_\alpha\f$ and the molar mass of the main component + * + * The molar density for the complrex relation is defined by the + * mass density \f$\rho_\alpha\f$ and the mean molar mass \f$\overline M_\alpha\f$: + * + * \f[\rho_{mol,\alpha} = \frac{\rho_\alpha}{\overline M_\alpha} \;.\f] + */ + template <class FluidState> + static Scalar molarDensity(const FluidState &fluidState, int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + + Scalar T = fluidState.temperature(phaseIdx); + Scalar p = fluidState.pressure(phaseIdx); + + // liquid phase + if (phaseIdx == phase0Idx) + { + // assume pure water or that each gas molecule displaces exactly one + // molecule in the liquid. + return H2O::liquidMolarDensity(T, p); + } + else + { + // assume the molar density of the fictious component to be independent of the composition + Scalar pressure = MyCompressibleComponent::liquidIsCompressible()?fluidState.pressure(phaseIdx):1e100; + return MyCompressibleComponent::liquidMolarDensity(fluidState.temperature(phaseIdx), pressure); + } + } + + /*! + * \brief Return the viscosity of a phase. + */ + using Base::viscosity; + template <class FluidState> + static Scalar viscosity(const FluidState &fluidState, + int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) { + // assume pure water viscosity + return H2O::liquidViscosity(fluidState.temperature(phaseIdx), + fluidState.pressure(phaseIdx)); + } + else { + // assume pure NAPL viscosity + return MyCompressibleComponent::liquidViscosity(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)); + } + } + + using Base::diffusionCoefficient; + template <class FluidState> + static Scalar diffusionCoefficient(const FluidState &fluidState, int phaseIdx, int compIdx) + { + DUNE_THROW(Dune::NotImplemented, "Diffusion coefficients"); + } + + /*! + * \brief Given a phase's composition, temperature and pressure, + * return the binary diffusion coefficient \f$\mathrm{[m^2/s]}\f$ for components + * \f$\mathrm{i}\f$ and \f$\mathrm{j}\f$ in this phase. + * \param fluidState The fluid state + * \param paramCache mutable parameters + * \param phaseIdx Index of the fluid phase + * \param compIIdx Index of the component i + * \param compJIdx Index of the component j + */ + using Base::binaryDiffusionCoefficient; + template <class FluidState> + static Scalar binaryDiffusionCoefficient(const FluidState &fluidState, + int phaseIdx, + int compIIdx, + int compJIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + assert(0 <= compIIdx && compIIdx < numComponents); + assert(0 <= compJIdx && compJIdx < numComponents); + + const Scalar T = fluidState.temperature(phaseIdx); + const Scalar p = fluidState.pressure(phaseIdx); + + // we assume the diffusion coefficient to be the same in both phases + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::liquidDiffCoeff(T, p); + } + + /* Henry coefficients + */ + template <class FluidState> + static Scalar henryCoefficient(const FluidState &fluidState, + int phaseIdx, + int compIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + assert(0 <= compIdx && compIdx < numComponents); + + const Scalar T = fluidState.temperature(phaseIdx); + const Scalar p = fluidState.pressure(phaseIdx); + + if (compIdx == NAPLIdx && phaseIdx == phase0Idx) + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::henryMyCompressibleComponentInWater(T)/p; + + else if (phaseIdx == phase1Idx && compIdx == H2OIdx) + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::henryWaterInMyCompressibleComponent(T)/p; + + else + DUNE_THROW(Dune::InvalidStateException, "non-existent henry coefficient for phase index " << phaseIdx + << " and component index " << compIdx); + } + + using Base::fugacityCoefficient; + /*! + * \brief Returns the fugacity coefficient \f$\mathrm{[-]}\f$ of a component in a + * phase. + * + * In this case, things are actually pretty simple. We have an ideal + * solution. Thus, the fugacity coefficient is 1 in the gas phase + * (fugacity equals the partial pressure of the component in the gas phase + * respectively in the liquid phases it is the inverse of the + * Henry coefficients scaled by pressure + * \param fluidState The fluid state + * \param phaseIdx The index of the phase + * \param compIdx The index of the component + */ + template <class FluidState> + static Scalar fugacityCoefficient(const FluidState &fluidState, + int phaseIdx, + int compIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + assert(0 <= compIdx && compIdx < numComponents); + + Scalar T = fluidState.temperature(phaseIdx); + Scalar p = fluidState.pressure(phaseIdx); + + if (phaseIdx == phase0Idx) { + if (compIdx == H2OIdx) + return H2O::vaporPressure(T)/p; + else if (compIdx == NAPLIdx) + return Dumux::BinaryCoeff::H2O_MyCompressibleComponent::henryMyCompressibleComponentInWater(T)/p; + } + + // for the NAPL phase, we assume currently that nothing is + // dissolved. this means that the affinity of the NAPL + // component to the NAPL phase is much higher than for the + // other components, i.e. the fugacity coefficient is much + // smaller. + Scalar phiNapl = MyCompressibleComponent::vaporPressure(T)/p; + if (compIdx == NAPLIdx) + return phiNapl; + else + return 1e6*phiNapl; + } + + template <class FluidState> + static Scalar kelvinVaporPressure(const FluidState &fluidState, + const int phaseIdx, + const int compIdx) + { + DUNE_THROW(Dune::NotImplemented, "FluidSystems::H2OMyCompressibleComponent::kelvinVaporPressure()"); + } + + /* partial pressures in the gas phase, taken from saturation vapor pressures + */ + template <class FluidState> + static Scalar partialPressureGas(const FluidState &fluidState, int phaseIdx, + int compIdx) + { + assert(0 <= compIdx && compIdx < numComponents); + + const Scalar T = fluidState.temperature(phaseIdx); + if (compIdx == NAPLIdx) + return MyCompressibleComponent::vaporPressure(T); + else if (compIdx == H2OIdx) + return H2O::vaporPressure(T); + else + DUNE_THROW(Dune::InvalidStateException, "non-existent component index " << compIdx); + } + + /* inverse vapor pressures, taken from inverse saturation vapor pressures + */ + template <class FluidState> + static Scalar inverseVaporPressureCurve(const FluidState &fluidState, + int phaseIdx, + int compIdx) + { + assert(0 <= compIdx && compIdx < numComponents); + + const Scalar pressure = fluidState.pressure(phaseIdx); + if (compIdx == NAPLIdx) + return MyCompressibleComponent::vaporTemperature(pressure); + else if (compIdx == H2OIdx) + return H2O::vaporTemperature(pressure); + else + DUNE_THROW(Dune::InvalidStateException, "non-existent component index " << compIdx); + } + + /*! + * \brief Given all mole fractions in a phase, return the specific + * phase enthalpy [J/kg]. + */ + using Base::enthalpy; + template <class FluidState> + static Scalar enthalpy(const FluidState &fluidState, + int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + if (phaseIdx == phase0Idx) { + return H2O::liquidEnthalpy(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)); + } + else { + return MyCompressibleComponent::liquidEnthalpy(fluidState.temperature(phaseIdx), fluidState.pressure(phaseIdx)); + } + DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx); + } + + using Base::heatCapacity; + template <class FluidState> + static Scalar heatCapacity(const FluidState &fluidState, + int phaseIdx) + { + DUNE_THROW(Dune::NotImplemented, "FluidSystems::H2ONAPL::heatCapacity()"); + } + + using Base::thermalConductivity; + template <class FluidState> + static Scalar thermalConductivity(const FluidState &fluidState, + int phaseIdx) + { + assert(0 <= phaseIdx && phaseIdx < numPhases); + + const Scalar temperature = fluidState.temperature(phaseIdx) ; + const Scalar pressure = fluidState.pressure(phaseIdx); + if (phaseIdx == phase0Idx) + { + return H2O::liquidThermalConductivity(temperature, pressure); + } + else + { + return MyCompressibleComponent::liquidThermalConductivity(temperature, pressure); + } + DUNE_THROW(Dune::InvalidStateException, "Invalid phase index " << phaseIdx); + } + +private: + +}; +} // end namespace FluidSystems +} // end namespace Dumux + +#endif diff --git a/exercises/solution/ex3/mycompressiblecomponent.hh b/exercises/solution/ex3/mycompressiblecomponent.hh new file mode 100644 index 00000000..c19fae6d --- /dev/null +++ b/exercises/solution/ex3/mycompressiblecomponent.hh @@ -0,0 +1,124 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup Components + * \brief A fictitious component to be implemented in exercise 3. + */ +#ifndef DUMUX_MYCOMPRESSIBLECOMPONENT_HH +#define DUMUX_MYCOMPRESSIBLECOMPONENT_HH + +#include <dumux/material/idealgas.hh> + +#include <dumux/material/components/base.hh> +#include <dumux/material/components/liquid.hh> + +#include "myincompressiblecomponent.hh" + +namespace Dumux +{ +/*! + * \ingroup Components + * \brief A fictitious component to be implemented in exercise 3. + * + * \tparam Scalar The type used for scalar values + */ +template <class Scalar> +class MyCompressibleComponent +: public Components::Base<Scalar, MyIncompressibleComponent<Scalar> > +, public Components::Liquid<Scalar, MyIncompressibleComponent<Scalar> > +{ +public: + /*! + * \brief A human readable name for MyCompressibleComponent. + */ + static std::string name() + { return "MyCompressibleComponent"; } + + /*! + * \brief The molar mass in \f$\mathrm{[kg/mol]}\f$ of MyCompressibleComponent. + */ + static Scalar molarMass() + { + return 131.39e-3; // [kg/mol] + } + + /*! + * \brief The density of MyCompressibleComponent at a given pressure and temperature \f$\mathrm{[kg/m^3]}\f$. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidDensity(Scalar temperature, Scalar pressure) + { + static const Scalar rho_min = 1440; + static const Scalar rho_max = 1480; + static const Scalar k = 5e-7; + + using std::exp; + return rho_min + (rho_max - rho_min)/(1 + rho_min*exp(-1.0*k*(rho_max - rho_min)*pressure)); // [kg/m^3] + } + + /*! + * \brief The molar density of MyCompressibleComponent in \f$\mathrm{[mol/m^3]}\f$ at a given pressure and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + * + */ + static Scalar liquidMolarDensity(Scalar temperature, Scalar pressure) + { return liquidDensity(temperature, pressure)/molarMass(); } + + + /*! + * \brief The dynamic viscosity \f$\mathrm{[Pa*s]}\f$ of MyCompressibleComponent. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidViscosity(Scalar temperature, Scalar pressure) + { + return 5.7e-4;// [Pa*s] + } + + /***************************************************************** + * The function below is implemented in the scope of exercise 3b * + *****************************************************************/ + + /*! + * \brief The vapor pressure in \f$\mathrm{[Pa]}\f$ of MyCompressibleComponent + * at a given temperature. + * + * \param T temperature of component in \f$\mathrm{[K]}\f$ + */ + static Scalar vaporPressure(Scalar T) + { + return 3900; // [Pa] (at 20C) + } + + /*! + * \brief Returns true if the liquid phase is assumed to be compressible + */ + static constexpr bool liquidIsCompressible() + { return true; } +}; + +} // end namespace + +#endif diff --git a/exercises/solution/ex3/myincompressiblecomponent.hh b/exercises/solution/ex3/myincompressiblecomponent.hh new file mode 100644 index 00000000..24fe6556 --- /dev/null +++ b/exercises/solution/ex3/myincompressiblecomponent.hh @@ -0,0 +1,101 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** + * See the file COPYING for full copying permissions. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see <http://www.gnu.org/licenses/>. * + *****************************************************************************/ +/*! + * \file + * \ingroup Components + * \brief A fictitious component to be implemented in tutorial exercise 3. + */ +#ifndef DUMUX_MYINCOMPRESSIBLECOMPONENT_HH +#define DUMUX_MYINCOMPRESSIBLECOMPONENT_HH + +#include <dumux/material/idealgas.hh> + +#include <dumux/material/components/base.hh> +#include <dumux/material/components/liquid.hh> + +namespace Dumux +{ +/*! + * \ingroup Components + * \brief A fictitious component to be implemented in exercise 3. + * + * \tparam Scalar The type used for scalar values + */ +template <class Scalar> +class MyIncompressibleComponent +: public Components::Base<Scalar, MyIncompressibleComponent<Scalar> > +, public Components::Liquid<Scalar, MyIncompressibleComponent<Scalar> > +{ +public: + /*! + * \brief A human readable name for MyIncompressibleComponent. + */ + static std::string name() + { return "MyIncompressibleComponent"; } + + /*! + * \brief The molar mass in \f$\mathrm{[kg/mol]}\f$ of MyIncompressibleComponent. + */ + static Scalar molarMass() + { + return 131.39e-3; // [kg/mol] + } + + /*! + * \brief The density of MyIncompressibleComponent at a given pressure and temperature \f$\mathrm{[kg/m^3]}\f$. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidDensity(Scalar temperature, Scalar pressure) + { + return 1460.0; // [kg/m^3] + } + + /*! + * \brief The molar density of MyIncompressibleComponent in \f$\mathrm{[mol/m^3]}\f$ at a given pressure and temperature. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + * + */ + static Scalar liquidMolarDensity(Scalar temperature, Scalar pressure) + { return liquidDensity(temperature, pressure)/molarMass(); } + + /*! + * \brief The dynamic viscosity \f$\mathrm{[Pa*s]}\f$ of MyIncompressibleComponent. + * + * \param temperature temperature of component in \f$\mathrm{[K]}\f$ + * \param pressure pressure of component in \f$\mathrm{[Pa]}\f$ + */ + static Scalar liquidViscosity(Scalar temperature, Scalar pressure) + { + return 5.7e-4;// [Pa*s] + } + + /*! + * \brief Returns true if the liquid phase is assumed to be compressible + */ + static constexpr bool liquidIsCompressible() + { return false; } +}; + +} // end namespace + +#endif -- GitLab