From e4acd62af2d83ed0279b5c57df2337afc98185b6 Mon Sep 17 00:00:00 2001 From: IvBu <ivan.buntic@iws.uni-stuttgart.de> Date: Thu, 27 Feb 2025 13:53:32 +0100 Subject: [PATCH] [exercises] Consistent image names. --- .patches/exercise-basic/exercise-basic.patch | 30 +++---- .../exercise-biomineralization.patch | 48 +++++----- .../exercise-coupling-ff-pm.patch | 84 +++++++++--------- .../exercise-fluidsystem.patch | 52 +++++------ .../exercise-fractures.patch | 48 +++++----- .../exercise-mainfile/exercise-mainfile.patch | 28 +++--- .patches/exercise-model/exercise-model.patch | 14 +-- exercises/exercise-basic/README.md | 4 +- .../exercise-biomineralization/README.md | 6 +- .../interface/README.md | 4 +- .../turbulence/README.md | 2 +- exercises/exercise-fluidsystem/README.md | 8 +- exercises/exercise-fractures/README.md | 8 +- exercises/exercise-mainfile/README.md | 2 +- exercises/exercise-model/README.md | 2 +- exercises/extradoc/exercise2_properties.png | Bin 27453 -> 0 bytes ...l.png => exercise_basic_nonisothermal.png} | Bin ...se1_setup.png => exercise_basic_setup.png} | Bin ...ng => exercise_biomin_injection_final.png} | Bin ...png => exercise_biomin_porosity_final.png} | Bin ...in_setup.png => exercise_biomin_setup.png} | Bin ...png => exercise_ffpm_turb_diffusivity.png} | Bin ...ow.png => exercise_ffpm_vertical_flow.png} | Bin ...e.png => exercise_ffpm_wave_interface.png} | Bin ...xercise_fluidsystem_a_densityfunction.png} | Bin ...ng => exercise_fluidsystem_a_solution.png} | Bin ...g => exercise_fluidsystem_a_solution2.png} | Bin ...tup.png => exercise_fluidsystem_setup.png} | Bin ...actures_a.png => exercise_fractures_a.png} | Bin ...actures_b.png => exercise_fractures_b.png} | Bin ...sol.png => exercise_fractures_initsol.png} | Bin ...setup.png => exercise_fractures_setup.png} | Bin ...tup.png => exercise_mainfile_1p_setup.png} | Bin ...ise.gif => exercise_model_mri_denoise.gif} | Bin ...se1_setup.png => exercise_basic_setup.png} | Bin ...ise.gif => exercise_model_mri_denoise.gif} | Bin slides/model.md | 2 +- slides/problem.md | 2 +- 38 files changed, 172 insertions(+), 172 deletions(-) delete mode 100644 exercises/extradoc/exercise2_properties.png rename exercises/extradoc/{exercise1_nonisothermal.png => exercise_basic_nonisothermal.png} (100%) rename exercises/extradoc/{exercise1_setup.png => exercise_basic_setup.png} (100%) rename exercises/extradoc/{exercisebiomin_injectionFinal.png => exercise_biomin_injection_final.png} (100%) rename exercises/extradoc/{exercisebiomin_porosityFinal.png => exercise_biomin_porosity_final.png} (100%) rename exercises/extradoc/{exercisebiomin_setup.png => exercise_biomin_setup.png} (100%) rename exercises/extradoc/{ex_ff-pm-turb_diffusivity.png => exercise_ffpm_turb_diffusivity.png} (100%) rename exercises/extradoc/{ex_ff-pm-vertical-flow.png => exercise_ffpm_vertical_flow.png} (100%) rename exercises/extradoc/{ex_ff-pm-wave-interface.png => exercise_ffpm_wave_interface.png} (100%) rename exercises/extradoc/{exercise-fluidsystem_a_densityfunction.png => exercise_fluidsystem_a_densityfunction.png} (100%) rename exercises/extradoc/{exercise-fluidsystem_a_solution.png => exercise_fluidsystem_a_solution.png} (100%) rename exercises/extradoc/{exercise-fluidsystem_a_solution2.png => exercise_fluidsystem_a_solution2.png} (100%) rename exercises/extradoc/{exercise-fluidsystem_setup.png => exercise_fluidsystem_setup.png} (100%) rename exercises/extradoc/{exercisefractures_a.png => exercise_fractures_a.png} (100%) rename exercises/extradoc/{exercisefractures_b.png => exercise_fractures_b.png} (100%) rename exercises/extradoc/{exercisefractures_initsol.png => exercise_fractures_initsol.png} (100%) rename exercises/extradoc/{exercisefractures_setup.png => exercise_fractures_setup.png} (100%) rename exercises/extradoc/{exercise1_1p_setup.png => exercise_mainfile_1p_setup.png} (100%) rename exercises/extradoc/{exercisemodel_mri_denoise.gif => exercise_model_mri_denoise.gif} (100%) rename slides/img/{exercise1_setup.png => exercise_basic_setup.png} (100%) rename slides/img/{exercisemodel_mri_denoise.gif => exercise_model_mri_denoise.gif} (100%) diff --git a/.patches/exercise-basic/exercise-basic.patch b/.patches/exercise-basic/exercise-basic.patch index 5b19ef06..49d699e7 100644 --- a/.patches/exercise-basic/exercise-basic.patch +++ b/.patches/exercise-basic/exercise-basic.patch @@ -1,5 +1,5 @@ diff -ruN exercises/exercise-basic/2pmain.cc exercises/solution/exercise-basic/2pmain.cc ---- exercises/exercise-basic/2pmain.cc 2024-07-17 13:58:18.204850249 +0200 +--- exercises/exercise-basic/2pmain.cc 2025-02-13 16:25:25.584470713 +0100 +++ exercises/solution/exercise-basic/2pmain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,145 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -149,7 +149,7 @@ diff -ruN exercises/exercise-basic/2pmain.cc exercises/solution/exercise-basic/2 -} // end main diff -ruN exercises/exercise-basic/2pnimain.cc exercises/solution/exercise-basic/2pnimain.cc --- exercises/exercise-basic/2pnimain.cc 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-basic/2pnimain.cc 2024-07-17 13:58:18.212850366 +0200 ++++ exercises/solution/exercise-basic/2pnimain.cc 2025-02-13 16:25:25.632470178 +0100 @@ -0,0 +1,138 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: @@ -290,8 +290,8 @@ diff -ruN exercises/exercise-basic/2pnimain.cc exercises/solution/exercise-basic + return 0; +} // end main diff -ruN exercises/exercise-basic/CMakeLists.txt exercises/solution/exercise-basic/CMakeLists.txt ---- exercises/exercise-basic/CMakeLists.txt 2024-07-17 14:10:30.239561158 +0200 -+++ exercises/solution/exercise-basic/CMakeLists.txt 2024-07-17 14:11:44.100637927 +0200 +--- exercises/exercise-basic/CMakeLists.txt 2025-02-13 16:25:25.584470713 +0100 ++++ exercises/solution/exercise-basic/CMakeLists.txt 2025-02-13 16:25:25.632470178 +0100 @@ -1,12 +1,9 @@ # SPDX-FileCopyrightInfo: Copyright © DuMux-Course contributors, see AUTHORS.md in root folder # SPDX-License-Identifier: GPL-3.0-or-later @@ -309,8 +309,8 @@ diff -ruN exercises/exercise-basic/CMakeLists.txt exercises/solution/exercise-ba # add a symlink for each input file add_input_file_links() diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/exercise-basic/injection2pniproblem.hh ---- exercises/exercise-basic/injection2pniproblem.hh 2024-07-17 13:58:18.208850308 +0200 -+++ exercises/solution/exercise-basic/injection2pniproblem.hh 2024-07-17 13:58:18.212850366 +0200 +--- exercises/exercise-basic/injection2pniproblem.hh 2025-02-13 16:25:25.584470713 +0100 ++++ exercises/solution/exercise-basic/injection2pniproblem.hh 2025-02-13 16:25:25.632470178 +0100 @@ -7,7 +7,7 @@ /*! * \file @@ -401,7 +401,7 @@ diff -ruN exercises/exercise-basic/injection2pniproblem.hh exercises/solution/ex } diff -ruN exercises/exercise-basic/injection2pproblem.hh exercises/solution/exercise-basic/injection2pproblem.hh ---- exercises/exercise-basic/injection2pproblem.hh 2024-07-17 13:58:18.208850308 +0200 +--- exercises/exercise-basic/injection2pproblem.hh 2025-02-13 16:25:25.585470702 +0100 +++ exercises/solution/exercise-basic/injection2pproblem.hh 1970-01-01 01:00:00.000000000 +0100 @@ -1,211 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -616,8 +616,8 @@ diff -ruN exercises/exercise-basic/injection2pproblem.hh exercises/solution/exer - -#endif diff -ruN exercises/exercise-basic/params.input exercises/solution/exercise-basic/params.input ---- exercises/exercise-basic/params.input 2023-10-13 18:08:54.710521000 +0200 -+++ exercises/solution/exercise-basic/params.input 2024-07-17 10:58:43.905583103 +0200 +--- exercises/exercise-basic/params.input 2025-02-13 16:25:25.585470702 +0100 ++++ exercises/solution/exercise-basic/params.input 2025-02-13 16:25:25.632470178 +0100 @@ -24,7 +24,7 @@ Aquifer.Snr = 0.0 @@ -631,7 +631,7 @@ diff -ruN exercises/exercise-basic/params.input exercises/solution/exercise-basi +SolidThermalConductivity = 2.8 # solid thermal conducitivity of granite +SolidHeatCapacity = 790 # solid heat capacity of granite diff -ruN exercises/exercise-basic/properties2p.hh exercises/solution/exercise-basic/properties2p.hh ---- exercises/exercise-basic/properties2p.hh 2024-07-17 13:58:18.208850308 +0200 +--- exercises/exercise-basic/properties2p.hh 2025-02-13 16:25:25.585470702 +0100 +++ exercises/solution/exercise-basic/properties2p.hh 1970-01-01 01:00:00.000000000 +0100 @@ -1,63 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -698,8 +698,8 @@ diff -ruN exercises/exercise-basic/properties2p.hh exercises/solution/exercise-b - -#endif diff -ruN exercises/exercise-basic/properties2pni.hh exercises/solution/exercise-basic/properties2pni.hh ---- exercises/exercise-basic/properties2pni.hh 2024-07-17 13:58:18.208850308 +0200 -+++ exercises/solution/exercise-basic/properties2pni.hh 2024-07-17 13:58:18.212850366 +0200 +--- exercises/exercise-basic/properties2pni.hh 2025-02-13 16:25:25.585470702 +0100 ++++ exercises/solution/exercise-basic/properties2pni.hh 2025-02-13 16:25:25.632470178 +0100 @@ -24,13 +24,9 @@ namespace Dumux::Properties { @@ -716,7 +716,7 @@ diff -ruN exercises/exercise-basic/properties2pni.hh exercises/solution/exercise } // end namespace TTag diff -ruN exercises/exercise-basic/README.md exercises/solution/exercise-basic/README.md ---- exercises/exercise-basic/README.md 2024-07-17 14:11:07.348102188 +0200 +--- exercises/exercise-basic/README.md 2025-02-27 12:15:52.107700508 +0100 +++ exercises/solution/exercise-basic/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,94 +0,0 @@ -# Exercise Basics (DuMuX course) @@ -726,7 +726,7 @@ diff -ruN exercises/exercise-basic/README.md exercises/solution/exercise-basic/R -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-course/raw/master/exercises/extradoc/exercise1_setup.png" width="1000"> +-<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_basic_setup.png" width="1000"> - -## Preparing the exercise - @@ -810,6 +810,6 @@ diff -ruN exercises/exercise-basic/README.md exercises/solution/exercise-basic/R - - __Boundary conditions:__ Dirichlet boundary conditions at the left boundary with the same temperature gradient as in the initial conditions. For the Neumann conditions, assign an energy flux at the injection point of N$_2$ and no-flow conditions for the energy balance to the rest of the boundaries. - --<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise1_nonisothermal.png" width="800"> +-<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_basic_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 `params.input`, you just need to _uncomment_ them. diff --git a/.patches/exercise-biomineralization/exercise-biomineralization.patch b/.patches/exercise-biomineralization/exercise-biomineralization.patch index fb7d5f82..41c34e3b 100644 --- a/.patches/exercise-biomineralization/exercise-biomineralization.patch +++ b/.patches/exercise-biomineralization/exercise-biomineralization.patch @@ -1,6 +1,6 @@ diff -ruN exercises/exercise-biomineralization/biominproblem.hh exercises/solution/exercise-biomineralization/biominproblem.hh ---- exercises/exercise-biomineralization/biominproblem.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/biominproblem.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/biominproblem.hh 2025-02-13 16:25:25.586470691 +0100 ++++ exercises/solution/exercise-biomineralization/biominproblem.hh 2025-02-13 16:25:25.632470178 +0100 @@ -19,10 +19,12 @@ // TODO: dumux-course-task @@ -70,8 +70,8 @@ diff -ruN exercises/exercise-biomineralization/biominproblem.hh exercises/soluti { return Kxx_; diff -ruN exercises/exercise-biomineralization/biominspatialparams.hh exercises/solution/exercise-biomineralization/biominspatialparams.hh ---- exercises/exercise-biomineralization/biominspatialparams.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/biominspatialparams.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/biominspatialparams.hh 2025-02-13 16:25:25.586470691 +0100 ++++ exercises/solution/exercise-biomineralization/biominspatialparams.hh 2025-02-13 16:25:25.632470178 +0100 @@ -18,7 +18,7 @@ #include <dumux/material/fluidmatrixinteractions/porosityprecipitation.hh> // TODO: dumux-course-task @@ -91,8 +91,8 @@ diff -ruN exercises/exercise-biomineralization/biominspatialparams.hh exercises/ Scalar initialPorosity_; diff -ruN exercises/exercise-biomineralization/chemistry/simplebiominreactions.hh exercises/solution/exercise-biomineralization/chemistry/simplebiominreactions.hh ---- exercises/exercise-biomineralization/chemistry/simplebiominreactions.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/chemistry/simplebiominreactions.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/chemistry/simplebiominreactions.hh 2025-02-13 16:25:25.586470691 +0100 ++++ exercises/solution/exercise-biomineralization/chemistry/simplebiominreactions.hh 2025-02-13 16:25:25.632470178 +0100 @@ -73,24 +73,26 @@ // define and compute some parameters for convenience: const Scalar xwCa = volVars.moleFraction(liquidPhaseIdx,CaIdx); @@ -143,8 +143,8 @@ diff -ruN exercises/exercise-biomineralization/chemistry/simplebiominreactions.h private: diff -ruN exercises/exercise-biomineralization/CMakeLists.txt exercises/solution/exercise-biomineralization/CMakeLists.txt ---- exercises/exercise-biomineralization/CMakeLists.txt 2024-07-17 11:27:28.798347462 +0200 -+++ exercises/solution/exercise-biomineralization/CMakeLists.txt 2024-07-17 11:27:28.798347462 +0200 +--- exercises/exercise-biomineralization/CMakeLists.txt 2025-02-13 16:25:25.585470702 +0100 ++++ exercises/solution/exercise-biomineralization/CMakeLists.txt 2025-02-13 16:25:25.632470178 +0100 @@ -2,9 +2,9 @@ # SPDX-License-Identifier: GPL-3.0-or-later @@ -158,8 +158,8 @@ diff -ruN exercises/exercise-biomineralization/CMakeLists.txt exercises/solution # add a symlink for each input file add_input_file_links() diff -ruN exercises/exercise-biomineralization/components/biofilm.hh exercises/solution/exercise-biomineralization/components/biofilm.hh ---- exercises/exercise-biomineralization/components/biofilm.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/components/biofilm.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/components/biofilm.hh 2025-02-13 16:25:25.586470691 +0100 ++++ exercises/solution/exercise-biomineralization/components/biofilm.hh 2025-02-13 16:25:25.632470178 +0100 @@ -12,9 +12,10 @@ #ifndef DUMUX_BIOFILM_HH #define DUMUX_BIOFILM_HH @@ -173,8 +173,8 @@ diff -ruN exercises/exercise-biomineralization/components/biofilm.hh exercises/s namespace Dumux::Components { diff -ruN exercises/exercise-biomineralization/fluidmatrixinteractions/permeabilitypowerlaw.hh exercises/solution/exercise-biomineralization/fluidmatrixinteractions/permeabilitypowerlaw.hh ---- exercises/exercise-biomineralization/fluidmatrixinteractions/permeabilitypowerlaw.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/fluidmatrixinteractions/permeabilitypowerlaw.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/fluidmatrixinteractions/permeabilitypowerlaw.hh 2025-02-13 16:25:25.586470691 +0100 ++++ exercises/solution/exercise-biomineralization/fluidmatrixinteractions/permeabilitypowerlaw.hh 2025-02-13 16:25:25.632470178 +0100 @@ -41,10 +41,11 @@ using std::pow; // TODO: dumux-course-task @@ -189,8 +189,8 @@ diff -ruN exercises/exercise-biomineralization/fluidmatrixinteractions/permeabil }; diff -ruN exercises/exercise-biomineralization/fluidsystems/biomin.hh exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh ---- exercises/exercise-biomineralization/fluidsystems/biomin.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/fluidsystems/biomin.hh 2025-02-13 16:25:25.586470691 +0100 ++++ exercises/solution/exercise-biomineralization/fluidsystems/biomin.hh 2025-02-13 16:25:25.632470178 +0100 @@ -219,7 +219,7 @@ static void init() { @@ -201,8 +201,8 @@ diff -ruN exercises/exercise-biomineralization/fluidsystems/biomin.hh exercises/ } diff -ruN exercises/exercise-biomineralization/params.input exercises/solution/exercise-biomineralization/params.input ---- exercises/exercise-biomineralization/params.input 2024-07-17 10:58:43.893583024 +0200 -+++ exercises/solution/exercise-biomineralization/params.input 2024-07-17 10:58:43.905583103 +0200 +--- exercises/exercise-biomineralization/params.input 2025-02-13 16:25:25.587470680 +0100 ++++ exercises/solution/exercise-biomineralization/params.input 2025-02-13 16:25:25.632470178 +0100 @@ -16,10 +16,10 @@ InitBiofilm = 0.05 # [-] initial volumefraction biofilm @@ -234,8 +234,8 @@ diff -ruN exercises/exercise-biomineralization/params.input exercises/solution/e +[PowerLaw] +Exponent = 5.0 diff -ruN exercises/exercise-biomineralization/properties.hh exercises/solution/exercise-biomineralization/properties.hh ---- exercises/exercise-biomineralization/properties.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/properties.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/properties.hh 2025-02-13 16:25:25.587470680 +0100 ++++ exercises/solution/exercise-biomineralization/properties.hh 2025-02-13 16:25:25.632470178 +0100 @@ -18,17 +18,20 @@ #include <dumux/discretization/cctpfa.hh> #include <dumux/porousmediumflow/2pncmin/model.hh> @@ -269,7 +269,7 @@ diff -ruN exercises/exercise-biomineralization/properties.hh exercises/solution/ public: using type = FluidSystems::BioMin<Scalar, CO2Impl, H2OType>; diff -ruN exercises/exercise-biomineralization/README.md exercises/solution/exercise-biomineralization/README.md ---- exercises/exercise-biomineralization/README.md 2024-07-17 10:58:43.889582997 +0200 +--- exercises/exercise-biomineralization/README.md 2025-02-27 13:25:14.896978114 +0100 +++ exercises/solution/exercise-biomineralization/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,257 +0,0 @@ -# Exercise Biomineralization (DuMuX Course) @@ -283,7 +283,7 @@ diff -ruN exercises/exercise-biomineralization/README.md exercises/solution/exer - -Disclaimer: Please note, that this is not a realistic scenario. No one would think of storing gaseous CO<sub>2</sub> in this subcritical setting. - -- +- - - -## Preparing the exercise @@ -417,7 +417,7 @@ diff -ruN exercises/exercise-biomineralization/README.md exercises/solution/exer - - The result for the porosity should look like this: - --  +-  - -### 5. CO<sub>2</sub> injection to test aquitard integrity - @@ -432,7 +432,7 @@ diff -ruN exercises/exercise-biomineralization/README.md exercises/solution/exer -``` -The result for the biomineralization process during the CO<sub>2</sub> injection should look like this: - -- +- - -### 6. Change the permeability law - @@ -530,8 +530,8 @@ diff -ruN exercises/exercise-biomineralization/README.md exercises/solution/exer -output.CellData.append((S_gas_0-S_gas_1),'diffS_gas'); -``` diff -ruN exercises/exercise-biomineralization/solidsystems/biominsolidphase.hh exercises/solution/exercise-biomineralization/solidsystems/biominsolidphase.hh ---- exercises/exercise-biomineralization/solidsystems/biominsolidphase.hh 2024-07-17 11:27:28.870349025 +0200 -+++ exercises/solution/exercise-biomineralization/solidsystems/biominsolidphase.hh 2024-07-17 11:27:28.878349199 +0200 +--- exercises/exercise-biomineralization/solidsystems/biominsolidphase.hh 2025-02-13 16:25:25.587470680 +0100 ++++ exercises/solution/exercise-biomineralization/solidsystems/biominsolidphase.hh 2025-02-13 16:25:25.632470178 +0100 @@ -15,12 +15,12 @@ #include <string> #include <dune/common/exceptions.hh> diff --git a/.patches/exercise-coupling-ff-pm/exercise-coupling-ff-pm.patch b/.patches/exercise-coupling-ff-pm/exercise-coupling-ff-pm.patch index b70084c5..5882eb22 100644 --- a/.patches/exercise-coupling-ff-pm/exercise-coupling-ff-pm.patch +++ b/.patches/exercise-coupling-ff-pm/exercise-coupling-ff-pm.patch @@ -1,6 +1,6 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt ---- exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt 2025-02-13 16:25:25.587470680 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/interface/CMakeLists.txt 2025-02-13 16:25:25.632470178 +0100 @@ -1,10 +1,30 @@ # SPDX-FileCopyrightInfo: Copyright © DuMux-Course contributors, see AUTHORS.md in root folder # SPDX-License-Identifier: GPL-3.0-or-later @@ -36,8 +36,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/CMakeLists.txt exercises/s # add a symlink for each input file add_input_file_links() diff -ruN exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh ---- exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh 2025-02-13 16:25:25.588470669 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh 2025-02-13 16:25:25.632470178 +0100 @@ -71,8 +71,7 @@ const auto& globalPos = scvf.dofPosition(); @@ -135,8 +135,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/freeflowsubproblem.hh exer } diff -ruN exercises/exercise-coupling-ff-pm/interface/main.cc exercises/solution/exercise-coupling-ff-pm/interface/main.cc ---- exercises/exercise-coupling-ff-pm/interface/main.cc 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/interface/main.cc 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/interface/main.cc 2025-02-13 16:25:25.588470669 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/interface/main.cc 2025-02-13 16:25:25.633470167 +0100 @@ -52,9 +52,7 @@ using FreeflowTypeTag = Properties::TTag::FreeflowOneP; using PorousMediumTypeTag = Properties::TTag::PorousMediumFlowOneP; @@ -263,8 +263,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/main.cc exercises/solution using PorousMediumSolutionVector = GetPropType<PorousMediumTypeTag, Properties::SolutionVector>; VtkOutputModule<PorousMediumGridVariables, PorousMediumSolutionVector> porousMediumVtkWriter(*porousMediumGridVariables, diff -ruN exercises/exercise-coupling-ff-pm/interface/params.input exercises/solution/exercise-coupling-ff-pm/interface/params.input ---- exercises/exercise-coupling-ff-pm/interface/params.input 2024-07-31 14:00:26.830895056 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/interface/params.input 2024-07-31 14:00:26.830895056 +0200 +--- exercises/exercise-coupling-ff-pm/interface/params.input 2025-02-13 16:25:25.588470669 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/interface/params.input 2025-02-13 16:25:25.633470167 +0100 @@ -1,16 +1,14 @@ -# # TODO: dumux-course-task 1.C: uncomment the following group [Grid] -# # for dune-subgrid @@ -301,8 +301,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/params.input exercises/sol Verbosity = true Positions0 = 0.0 1.0 diff -ruN exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh ---- exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh 2024-07-24 09:36:05.710158540 +0200 +--- exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh 2025-02-13 16:25:25.588470669 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh 2025-02-13 16:25:25.633470167 +0100 @@ -68,9 +68,10 @@ // set Neumann BCs to all boundaries first values.setAllNeumann(); @@ -316,8 +316,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/porousmediumsubproblem.hh // set the coupling boundary condition at the interface if (couplingManager().isCoupledEntity(CouplingManager::darcyIdx, scvf)) diff -ruN exercises/exercise-coupling-ff-pm/interface/properties.hh exercises/solution/exercise-coupling-ff-pm/interface/properties.hh ---- exercises/exercise-coupling-ff-pm/interface/properties.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/interface/properties.hh 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/interface/properties.hh 2025-02-13 16:25:25.588470669 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/interface/properties.hh 2025-02-13 16:25:25.633470167 +0100 @@ -16,9 +16,9 @@ #include <dumux/multidomain/staggeredtraits.hh> #include <dumux/multidomain/boundary/stokesdarcy/couplingmanager.hh> @@ -374,7 +374,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/properties.hh exercises/so template<class TypeTag> diff -ruN exercises/exercise-coupling-ff-pm/interface/README.md exercises/solution/exercise-coupling-ff-pm/interface/README.md ---- exercises/exercise-coupling-ff-pm/interface/README.md 2024-07-31 14:00:26.830895056 +0200 +--- exercises/exercise-coupling-ff-pm/interface/README.md 2025-02-27 13:37:11.431157884 +0100 +++ exercises/solution/exercise-coupling-ff-pm/interface/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,175 +0,0 @@ -## 1. Changing the interface @@ -382,7 +382,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/README.md exercises/soluti -In this part of the exercise, a simple coupled system consisting of a one-phase (1p) free flow and a one-phase flow in a porous medium is set up. Both subproblems have no-flow boundaries at the sides. -Currently, a velocity profile is set on the upper free flow boundary, which leads to a vertical flow into the porous medium: - -- +- - -Note that we neglect the influence of gravity and only solve for the stationary problem in this exercise. - @@ -546,15 +546,15 @@ diff -ruN exercises/exercise-coupling-ff-pm/interface/README.md exercises/soluti - -Recompile and rerun to check if the final result looks something like this: - -- +- - -*Extra Points:* -Rather than enforcing a pressure difference across the domain, an inflow velocity profile could be set. -What changes to the left boundary conditions in the free-flow domain would you make to introduce this? What conditions can be enforced on the right boundary? -Hint: A relation between velocity and position is used for the vertical velocity component in the original form of the `dirichletAtPos` method. diff -ruN exercises/exercise-coupling-ff-pm/models/CMakeLists.txt exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt ---- exercises/exercise-coupling-ff-pm/models/CMakeLists.txt 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/models/CMakeLists.txt 2025-02-13 16:25:25.589470658 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/models/CMakeLists.txt 2025-02-13 16:25:25.633470167 +0100 @@ -1,9 +1,32 @@ # SPDX-FileCopyrightInfo: Copyright © DuMux-Course contributors, see AUTHORS.md in root folder # SPDX-License-Identifier: GPL-3.0-or-later @@ -593,8 +593,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/CMakeLists.txt exercises/solu + +dune_symlink_to_source_files(FILES "params_orig_a.input" "params_b_c.input" plotFluxes.py) diff -ruN exercises/exercise-coupling-ff-pm/models/main.cc exercises/solution/exercise-coupling-ff-pm/models/main.cc ---- exercises/exercise-coupling-ff-pm/models/main.cc 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/models/main.cc 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/models/main.cc 2025-02-13 16:25:25.589470658 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/models/main.cc 2025-02-13 16:25:25.633470167 +0100 @@ -127,9 +127,15 @@ auto porousMediumGridVariables = std::make_shared<PorousMediumGridVariables>(porousMediumProblem, porousMediumFvGridGeometry); porousMediumGridVariables->init(sol[porousMediumIdx]); @@ -616,7 +616,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/main.cc exercises/solution/ex GetPropType<FreeflowTypeTag, Properties::IOFields>::initOutputModule(freeflowVtkWriter); diff -ruN exercises/exercise-coupling-ff-pm/models/params_b_c.input exercises/solution/exercise-coupling-ff-pm/models/params_b_c.input --- exercises/exercise-coupling-ff-pm/models/params_b_c.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-coupling-ff-pm/models/params_b_c.input 2024-07-16 16:24:43.138116435 +0200 ++++ exercises/solution/exercise-coupling-ff-pm/models/params_b_c.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,57 @@ +[TimeLoop] +DtInitial = 100 # s @@ -676,7 +676,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/params_b_c.input exercises/so +[Assembly] +NumericDifference.BaseEpsilon = 1e-8 diff -ruN exercises/exercise-coupling-ff-pm/models/params.input exercises/solution/exercise-coupling-ff-pm/models/params.input ---- exercises/exercise-coupling-ff-pm/models/params.input 2024-07-17 19:47:15.764585106 +0200 +--- exercises/exercise-coupling-ff-pm/models/params.input 2025-02-13 16:25:25.589470658 +0100 +++ exercises/solution/exercise-coupling-ff-pm/models/params.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,58 +0,0 @@ -[TimeLoop] @@ -739,7 +739,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/params.input exercises/soluti -NumericDifference.BaseEpsilon = 1e-8 diff -ruN exercises/exercise-coupling-ff-pm/models/params_orig_a.input exercises/solution/exercise-coupling-ff-pm/models/params_orig_a.input --- exercises/exercise-coupling-ff-pm/models/params_orig_a.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-coupling-ff-pm/models/params_orig_a.input 2024-07-17 10:59:09.002904720 +0200 ++++ exercises/solution/exercise-coupling-ff-pm/models/params_orig_a.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,56 @@ +[TimeLoop] +DtInitial = 100 # s @@ -798,8 +798,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/params_orig_a.input exercises +[Assembly] +NumericDifference.BaseEpsilon = 1e-8 diff -ruN exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh ---- exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh 2025-02-13 16:25:25.589470658 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh 2025-02-13 16:25:25.633470167 +0100 @@ -52,10 +52,15 @@ // primary variable indices static constexpr int conti0EqIdx = Indices::conti0EqIdx; @@ -921,8 +921,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/porousmediumsubproblem.hh exe std::shared_ptr<CouplingManager> couplingManager_; diff -ruN exercises/exercise-coupling-ff-pm/models/properties.hh exercises/solution/exercise-coupling-ff-pm/models/properties.hh ---- exercises/exercise-coupling-ff-pm/models/properties.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/models/properties.hh 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/models/properties.hh 2025-02-13 16:25:25.589470658 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/models/properties.hh 2025-02-13 16:25:25.633470167 +0100 @@ -25,12 +25,14 @@ #include <dumux/discretization/cctpfa.hh> #include <dumux/material/fluidmatrixinteractions/diffusivityconstanttortuosity.hh> @@ -1005,7 +1005,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/properties.hh exercises/solut template<class TypeTag> struct EnableGridGeometryCache<TypeTag, TTag::FreeflowNC> { static constexpr bool value = true; }; diff -ruN exercises/exercise-coupling-ff-pm/models/README.md exercises/solution/exercise-coupling-ff-pm/models/README.md ---- exercises/exercise-coupling-ff-pm/models/README.md 2024-07-18 12:31:29.324898816 +0200 +--- exercises/exercise-coupling-ff-pm/models/README.md 2025-02-13 16:25:25.589470658 +0100 +++ exercises/solution/exercise-coupling-ff-pm/models/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,118 +0,0 @@ -## 2. Changing the porous medium model @@ -1127,7 +1127,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/models/README.md exercises/solution/ - -Now you are able to simulate a complete drying of the porous medium. Have a look the resulting liquid saturation distribution within the porous medium (with using paraview). diff -ruN exercises/exercise-coupling-ff-pm/README.md exercises/solution/exercise-coupling-ff-pm/README.md ---- exercises/exercise-coupling-ff-pm/README.md 2024-07-31 14:00:29.098952621 +0200 +--- exercises/exercise-coupling-ff-pm/README.md 2025-02-13 16:25:25.587470680 +0100 +++ exercises/solution/exercise-coupling-ff-pm/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,125 +0,0 @@ -# Exercise Coupling free flow/porous medium flow (DuMuX Course) @@ -1256,8 +1256,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/README.md exercises/solution/exercis -* [**Exercise 2:** Changing the porous medium model](./models/README.md) -* [**Exercise 3:** Introducing a turbulence model in the free flow domain](./turbulence/README.md) diff -ruN exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt ---- exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt 2025-02-13 16:25:25.589470658 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/CMakeLists.txt 2025-02-13 16:25:25.633470167 +0100 @@ -1,10 +1,33 @@ # SPDX-FileCopyrightInfo: Copyright © DuMux-Course contributors, see AUTHORS.md in root folder # SPDX-License-Identifier: GPL-3.0-or-later @@ -1296,8 +1296,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/CMakeLists.txt exercises/ # add a symlink for each input file add_input_file_links() diff -ruN exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh ---- exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh 2025-02-13 16:25:25.590470647 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh 2025-02-13 16:25:25.633470167 +0100 @@ -8,8 +8,8 @@ * \file * \brief The free-flow sub problem @@ -1513,8 +1513,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/freeflowsubproblem.hh exe return values; } diff -ruN exercises/exercise-coupling-ff-pm/turbulence/main.cc exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc ---- exercises/exercise-coupling-ff-pm/turbulence/main.cc 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/turbulence/main.cc 2025-02-13 16:25:25.590470647 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/main.cc 2025-02-13 16:25:25.633470167 +0100 @@ -122,11 +122,12 @@ couplingManager->init(freeflowProblem, porousMediumProblem, sol); @@ -1545,7 +1545,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/main.cc exercises/solutio porousMediumProblem->postTimeStep(sol[porousMediumIdx], *porousMediumGridVariables, timeLoop->timeStepSize()); diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params_b.input exercises/solution/exercise-coupling-ff-pm/turbulence/params_b.input --- exercises/exercise-coupling-ff-pm/turbulence/params_b.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/params_b.input 2024-07-16 16:24:43.138116435 +0200 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/params_b.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,72 @@ +[TimeLoop] +DtInitial = 1e-1 # [s] @@ -1621,7 +1621,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params_b.input exercises/ +IsFlatWallBounded = True diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params_c_d.input exercises/solution/exercise-coupling-ff-pm/turbulence/params_c_d.input --- exercises/exercise-coupling-ff-pm/turbulence/params_c_d.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/params_c_d.input 2024-07-16 16:24:43.138116435 +0200 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/params_c_d.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,72 @@ +[TimeLoop] +DtInitial = 1e-1 # [s] @@ -1696,7 +1696,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params_c_d.input exercise +[RANS] +IsFlatWallBounded = True diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params.input exercises/solution/exercise-coupling-ff-pm/turbulence/params.input ---- exercises/exercise-coupling-ff-pm/turbulence/params.input 2024-07-16 16:24:43.138116435 +0200 +--- exercises/exercise-coupling-ff-pm/turbulence/params.input 2025-02-13 16:25:25.590470647 +0100 +++ exercises/solution/exercise-coupling-ff-pm/turbulence/params.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,73 +0,0 @@ -[TimeLoop] @@ -1774,7 +1774,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params.input exercises/so -SolidHeatCapacity = 790 diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params_orig_a.input exercises/solution/exercise-coupling-ff-pm/turbulence/params_orig_a.input --- exercises/exercise-coupling-ff-pm/turbulence/params_orig_a.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/params_orig_a.input 2024-07-16 16:24:43.138116435 +0200 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/params_orig_a.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,72 @@ +[TimeLoop] +DtInitial = 1e-1 # [s] @@ -1849,8 +1849,8 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/params_orig_a.input exerc +[RANS] +IsFlatWallBounded = True diff -ruN exercises/exercise-coupling-ff-pm/turbulence/properties.hh exercises/solution/exercise-coupling-ff-pm/turbulence/properties.hh ---- exercises/exercise-coupling-ff-pm/turbulence/properties.hh 2024-07-17 19:47:15.764585106 +0200 -+++ exercises/solution/exercise-coupling-ff-pm/turbulence/properties.hh 2024-07-17 19:47:15.772585303 +0200 +--- exercises/exercise-coupling-ff-pm/turbulence/properties.hh 2025-02-13 16:25:25.590470647 +0100 ++++ exercises/solution/exercise-coupling-ff-pm/turbulence/properties.hh 2025-02-13 16:25:25.633470167 +0100 @@ -8,8 +8,8 @@ * \file * \brief The coupled exercise properties file or the turbulent case. @@ -1892,7 +1892,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/properties.hh exercises/s // Set the coupling manager diff -ruN exercises/exercise-coupling-ff-pm/turbulence/README.md exercises/solution/exercise-coupling-ff-pm/turbulence/README.md ---- exercises/exercise-coupling-ff-pm/turbulence/README.md 2024-07-24 09:37:33.016088677 +0200 +--- exercises/exercise-coupling-ff-pm/turbulence/README.md 2025-02-27 13:35:35.491939880 +0100 +++ exercises/solution/exercise-coupling-ff-pm/turbulence/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,126 +0,0 @@ -## 3. Use a turbulence model in the free flow domain @@ -1974,7 +1974,7 @@ diff -ruN exercises/exercise-coupling-ff-pm/turbulence/README.md exercises/solut -In paraview you may compare the magnitude of $`D`$ and $`D_\textrm{t}`$ to see where the transport is affected by turbulence. -The result for the turbulent diffusivity should look like this: - -- +- - -### Task B: Use symmetry boundary conditions - diff --git a/.patches/exercise-fluidsystem/exercise-fluidsystem.patch b/.patches/exercise-fluidsystem/exercise-fluidsystem.patch index 5f89a35e..cfd62958 100644 --- a/.patches/exercise-fluidsystem/exercise-fluidsystem.patch +++ b/.patches/exercise-fluidsystem/exercise-fluidsystem.patch @@ -1,6 +1,6 @@ diff -ruN exercises/exercise-fluidsystem/2p2cproblem.hh exercises/solution/exercise-fluidsystem/2p2cproblem.hh ---- exercises/exercise-fluidsystem/2p2cproblem.hh 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/2p2cproblem.hh 2024-07-18 13:47:42.192717667 +0200 +--- exercises/exercise-fluidsystem/2p2cproblem.hh 2025-02-13 16:25:25.590470647 +0100 ++++ exercises/solution/exercise-fluidsystem/2p2cproblem.hh 2025-02-13 16:25:25.633470167 +0100 @@ -12,7 +12,7 @@ #ifndef DUMUX_EXERCISE_FLUIDSYSTEM_B_PROBLEM_HH #define DUMUX_EXERCISE_FLUIDSYSTEM_B_PROBLEM_HH @@ -11,8 +11,8 @@ diff -ruN exercises/exercise-fluidsystem/2p2cproblem.hh exercises/solution/exerc #include <dumux/common/boundarytypes.hh> #include <dumux/common/properties.hh> diff -ruN exercises/exercise-fluidsystem/2pproperties.hh exercises/solution/exercise-fluidsystem/2pproperties.hh ---- exercises/exercise-fluidsystem/2pproperties.hh 2024-07-18 14:25:25.701687082 +0200 -+++ exercises/solution/exercise-fluidsystem/2pproperties.hh 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/2pproperties.hh 2025-02-13 16:25:25.590470647 +0100 ++++ exercises/solution/exercise-fluidsystem/2pproperties.hh 2025-02-13 16:25:25.633470167 +0100 @@ -25,15 +25,13 @@ #include "spatialparams.hh" @@ -52,8 +52,8 @@ diff -ruN exercises/exercise-fluidsystem/2pproperties.hh exercises/solution/exer public: using type = typename FluidSystems::TwoPImmiscible<Scalar, LiquidWaterPhase, LiquidMyComponentPhase>; diff -ruN exercises/exercise-fluidsystem/aparams.input exercises/solution/exercise-fluidsystem/aparams.input ---- exercises/exercise-fluidsystem/aparams.input 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/aparams.input 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/aparams.input 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/aparams.input 2025-02-13 16:25:25.633470167 +0100 @@ -3,7 +3,7 @@ DtInitial = 10 # initial time step size [s] @@ -70,8 +70,8 @@ diff -ruN exercises/exercise-fluidsystem/aparams.input exercises/solution/exerci -PlotDensity = false # plot density over pressure for your component +PlotDensity = true # plot density over pressure for your component diff -ruN exercises/exercise-fluidsystem/bparams.input exercises/solution/exercise-fluidsystem/bparams.input ---- exercises/exercise-fluidsystem/bparams.input 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/bparams.input 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/bparams.input 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/bparams.input 2025-02-13 16:25:25.633470167 +0100 @@ -3,7 +3,7 @@ DtInitial = 10 # initial time step size [s] @@ -82,8 +82,8 @@ diff -ruN exercises/exercise-fluidsystem/bparams.input exercises/solution/exerci [SpatialParams] BrooksCoreyPcEntry = 5.0e2 # [Pa] diff -ruN exercises/exercise-fluidsystem/CMakeLists.txt exercises/solution/exercise-fluidsystem/CMakeLists.txt ---- exercises/exercise-fluidsystem/CMakeLists.txt 2024-07-17 14:23:53.007057346 +0200 -+++ exercises/solution/exercise-fluidsystem/CMakeLists.txt 2024-07-17 14:23:53.011057409 +0200 +--- exercises/exercise-fluidsystem/CMakeLists.txt 2025-02-13 16:25:25.590470647 +0100 ++++ exercises/solution/exercise-fluidsystem/CMakeLists.txt 2025-02-13 16:25:25.633470167 +0100 @@ -3,18 +3,16 @@ # executables for exercise part a & b @@ -110,8 +110,8 @@ diff -ruN exercises/exercise-fluidsystem/CMakeLists.txt exercises/solution/exerc -# add a symlink for the grids folder -dune_symlink_to_source_files(FILES grids) diff -ruN exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh exercises/solution/exercise-fluidsystem/components/mycompressiblecomponent.hh ---- exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/components/mycompressiblecomponent.hh 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/components/mycompressiblecomponent.hh 2025-02-13 16:25:25.633470167 +0100 @@ -38,7 +38,7 @@ static std::string name() { return "MyCompressibleComponent"; } @@ -173,8 +173,8 @@ diff -ruN exercises/exercise-fluidsystem/components/mycompressiblecomponent.hh e }; diff -ruN exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh exercises/solution/exercise-fluidsystem/components/myincompressiblecomponent.hh ---- exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/components/myincompressiblecomponent.hh 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/components/myincompressiblecomponent.hh 2025-02-13 16:25:25.633470167 +0100 @@ -48,10 +48,7 @@ */ static Scalar molarMass() @@ -213,7 +213,7 @@ diff -ruN exercises/exercise-fluidsystem/components/myincompressiblecomponent.hh diff -ruN exercises/exercise-fluidsystem/components/plotdensityfunction.py exercises/solution/exercise-fluidsystem/components/plotdensityfunction.py --- exercises/exercise-fluidsystem/components/plotdensityfunction.py 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-fluidsystem/components/plotdensityfunction.py 2024-07-18 13:47:42.196717705 +0200 ++++ exercises/solution/exercise-fluidsystem/components/plotdensityfunction.py 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,22 @@ +#!usr/bin/env python +# SPDX-FileCopyrightInfo: Copyright © DuMux-Course contributors, see AUTHORS.md in root folder @@ -238,8 +238,8 @@ diff -ruN exercises/exercise-fluidsystem/components/plotdensityfunction.py exerc +plt.semilogx(p, r) +plt.show() diff -ruN exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh exercises/solution/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh ---- exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent.hh 2025-02-13 16:25:25.633470167 +0100 @@ -20,10 +20,10 @@ #include <dumux/material/fluidsystems/base.hh> @@ -276,8 +276,8 @@ diff -ruN exercises/exercise-fluidsystem/fluidsystems/h2omycompressiblecomponent else { diff -ruN exercises/exercise-fluidsystem/main.cc exercises/solution/exercise-fluidsystem/main.cc ---- exercises/exercise-fluidsystem/main.cc 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/main.cc 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/main.cc 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/main.cc 2025-02-13 16:25:25.633470167 +0100 @@ -36,7 +36,7 @@ int main(int argc, char** argv) { @@ -303,7 +303,7 @@ diff -ruN exercises/exercise-fluidsystem/main.cc exercises/solution/exercise-flu using IOFields = GetPropType<TypeTag, Properties::IOFields>; VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables, x, problem->name()); diff -ruN exercises/exercise-fluidsystem/README.md exercises/solution/exercise-fluidsystem/README.md ---- exercises/exercise-fluidsystem/README.md 2024-07-18 14:23:13.194674429 +0200 +--- exercises/exercise-fluidsystem/README.md 2025-02-27 13:29:17.190831141 +0100 +++ exercises/solution/exercise-fluidsystem/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,265 +0,0 @@ -# Exercise Fluidsystem (DuMuX Course) @@ -314,7 +314,7 @@ diff -ruN exercises/exercise-fluidsystem/README.md exercises/solution/exercise-f - -The domain has a size of 60 m 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). - --<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise-fluidsystem_setup.png" width="700"> +-<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_fluidsystem_setup.png" width="700"> - - -## Task 1: Getting familiar with the code @@ -460,7 +460,7 @@ diff -ruN exercises/exercise-fluidsystem/README.md exercises/solution/exercise-f - -The saturation distribution of the nonwetting phase, here S$`_{napl}`$ (the phase consisting of our fictitious incompressible component), at the final simulation time should look like this: - -- +- - -### Task 2.2: Compressible component - @@ -470,12 +470,12 @@ diff -ruN exercises/exercise-fluidsystem/README.md exercises/solution/exercise-f - -where $`p`$ is the pressure and $`\rho_{min} = 1440.0 \, kg/m^3`$, $`\rho_{max} = 1480.0 \, kg/m^3`$ and $`k = 5 \cdot 10^{-7} `$. Also, make sure the header is included in the `2pproperties.hh` file by uncommenting the corresponding line. Furthermore, the new component has to be set as a liquid phase in the fluid system. To do so, search for `TODO: dumux-course-task 2.2`. Comment out the corresponding line and uncomment the other. The density distribution of this phase (rho$`_{napl}`$) at the final simulation time should look like this: - -- +- - -You can plot the density of the phase consisting of your compressible component by setting `PlotDensity` in `aparams.input` to `true` and starting the simulation again. -Compare the gnuplot output to the following plot of the density function from above: - --<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise-fluidsystem_a_densityfunction.png" width="500"> +-<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_fluidsystem_a_densityfunction.png" width="500"> - -## Task 3: Implement a new fluid system - Part b - @@ -572,8 +572,8 @@ diff -ruN exercises/exercise-fluidsystem/README.md exercises/solution/exercise-f -./exercise_fluidsystem_b bparams.input -``` diff -ruN exercises/exercise-fluidsystem/spatialparams.hh exercises/solution/exercise-fluidsystem/spatialparams.hh ---- exercises/exercise-fluidsystem/spatialparams.hh 2024-07-18 13:47:42.192717667 +0200 -+++ exercises/solution/exercise-fluidsystem/spatialparams.hh 2024-07-18 13:47:42.196717705 +0200 +--- exercises/exercise-fluidsystem/spatialparams.hh 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fluidsystem/spatialparams.hh 2025-02-13 16:25:25.633470167 +0100 @@ -113,13 +113,17 @@ template<class FluidSystem> int wettingPhaseAtPos(const GlobalPosition& globalPos) const diff --git a/.patches/exercise-fractures/exercise-fractures.patch b/.patches/exercise-fractures/exercise-fractures.patch index 2fab87df..b9c9d0d7 100644 --- a/.patches/exercise-fractures/exercise-fractures.patch +++ b/.patches/exercise-fractures/exercise-fractures.patch @@ -1,6 +1,6 @@ diff -ruN exercises/exercise-fractures/CMakeLists.txt exercises/solution/exercise-fractures/CMakeLists.txt ---- exercises/exercise-fractures/CMakeLists.txt 2024-07-17 11:27:28.798347462 +0200 -+++ exercises/solution/exercise-fractures/CMakeLists.txt 2024-07-17 11:27:28.798347462 +0200 +--- exercises/exercise-fractures/CMakeLists.txt 2025-02-13 16:25:25.591470635 +0100 ++++ exercises/solution/exercise-fractures/CMakeLists.txt 2025-02-13 16:25:25.633470167 +0100 @@ -1,9 +1,26 @@ # SPDX-FileCopyrightInfo: Copyright © DuMux-Course contributors, see AUTHORS.md in root folder # SPDX-License-Identifier: GPL-3.0-or-later @@ -32,7 +32,7 @@ diff -ruN exercises/exercise-fractures/CMakeLists.txt exercises/solution/exercis add_input_file_links() diff -ruN exercises/exercise-fractures/exercise_fractures_solution_a.input exercises/solution/exercise-fractures/exercise_fractures_solution_a.input --- exercises/exercise-fractures/exercise_fractures_solution_a.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-fractures/exercise_fractures_solution_a.input 2020-11-12 12:07:04.129814352 +0100 ++++ exercises/solution/exercise-fractures/exercise_fractures_solution_a.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,41 @@ +[TimeLoop] +TEnd = 30000 # [s] @@ -77,7 +77,7 @@ diff -ruN exercises/exercise-fractures/exercise_fractures_solution_a.input exerc +SpatialParams.Barrier.Swr = 0.0 diff -ruN exercises/exercise-fractures/exercise_fractures_solution_b.input exercises/solution/exercise-fractures/exercise_fractures_solution_b.input --- exercises/exercise-fractures/exercise_fractures_solution_b.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-fractures/exercise_fractures_solution_b.input 2020-11-12 12:07:04.129814352 +0100 ++++ exercises/solution/exercise-fractures/exercise_fractures_solution_b.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,41 @@ +[TimeLoop] +TEnd = 30000 # [s] @@ -122,7 +122,7 @@ diff -ruN exercises/exercise-fractures/exercise_fractures_solution_b.input exerc +SpatialParams.Barrier.Swr = 0.0 diff -ruN exercises/exercise-fractures/exercise_fractures_solution_c.input exercises/solution/exercise-fractures/exercise_fractures_solution_c.input --- exercises/exercise-fractures/exercise_fractures_solution_c.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-fractures/exercise_fractures_solution_c.input 2020-11-12 12:07:04.129814352 +0100 ++++ exercises/solution/exercise-fractures/exercise_fractures_solution_c.input 2025-02-13 16:25:25.633470167 +0100 @@ -0,0 +1,41 @@ +[TimeLoop] +TEnd = 30000 # [s] @@ -166,8 +166,8 @@ diff -ruN exercises/exercise-fractures/exercise_fractures_solution_c.input exerc +SpatialParams.Barrier.Snr = 0.0 +SpatialParams.Barrier.Swr = 0.0 diff -ruN exercises/exercise-fractures/fractureproblem.hh exercises/solution/exercise-fractures/fractureproblem.hh ---- exercises/exercise-fractures/fractureproblem.hh 2024-07-17 11:27:28.874349112 +0200 -+++ exercises/solution/exercise-fractures/fractureproblem.hh 2024-07-17 11:27:28.882349286 +0200 +--- exercises/exercise-fractures/fractureproblem.hh 2025-02-13 16:25:25.592470624 +0100 ++++ exercises/solution/exercise-fractures/fractureproblem.hh 2025-02-13 16:25:25.633470167 +0100 @@ -59,6 +59,10 @@ std::shared_ptr<typename ParentType::SpatialParams> spatialParams, const std::string& paramGroup) @@ -199,8 +199,8 @@ diff -ruN exercises/exercise-fractures/fractureproblem.hh exercises/solution/exe return values; } diff -ruN exercises/exercise-fractures/fracturespatialparams.hh exercises/solution/exercise-fractures/fracturespatialparams.hh ---- exercises/exercise-fractures/fracturespatialparams.hh 2024-07-17 11:27:28.874349112 +0200 -+++ exercises/solution/exercise-fractures/fracturespatialparams.hh 2024-07-17 11:27:28.886349373 +0200 +--- exercises/exercise-fractures/fracturespatialparams.hh 2025-02-13 16:25:25.592470624 +0100 ++++ exercises/solution/exercise-fractures/fracturespatialparams.hh 2025-02-13 16:25:25.633470167 +0100 @@ -41,6 +41,7 @@ using Element = typename GridView::template Codim<0>::Entity; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; @@ -322,8 +322,8 @@ diff -ruN exercises/exercise-fractures/fracturespatialparams.hh exercises/soluti } // end namespace Dumux diff -ruN exercises/exercise-fractures/main.cc exercises/solution/exercise-fractures/main.cc ---- exercises/exercise-fractures/main.cc 2024-07-17 11:27:28.874349112 +0200 -+++ exercises/solution/exercise-fractures/main.cc 2024-07-17 11:27:28.886349373 +0200 +--- exercises/exercise-fractures/main.cc 2025-02-13 16:25:25.593470613 +0100 ++++ exercises/solution/exercise-fractures/main.cc 2025-02-13 16:25:25.634470156 +0100 @@ -245,4 +245,5 @@ Parameters::print(); @@ -331,8 +331,8 @@ diff -ruN exercises/exercise-fractures/main.cc exercises/solution/exercise-fract + }// end main diff -ruN exercises/exercise-fractures/matrixproblem.hh exercises/solution/exercise-fractures/matrixproblem.hh ---- exercises/exercise-fractures/matrixproblem.hh 2024-07-17 11:27:28.874349112 +0200 -+++ exercises/solution/exercise-fractures/matrixproblem.hh 2024-07-17 11:27:28.886349373 +0200 +--- exercises/exercise-fractures/matrixproblem.hh 2025-02-13 16:25:25.594470602 +0100 ++++ exercises/solution/exercise-fractures/matrixproblem.hh 2025-02-13 16:25:25.634470156 +0100 @@ -65,11 +65,18 @@ : ParentType(gridGeometry, spatialParams, paramGroup) , boundaryOverPressure_(getParamFromGroup<Scalar>(paramGroup, "Problem.BoundaryOverPressure")) @@ -456,8 +456,8 @@ diff -ruN exercises/exercise-fractures/matrixproblem.hh exercises/solution/exerc } // end namespace Dumux diff -ruN exercises/exercise-fractures/matrixspatialparams.hh exercises/solution/exercise-fractures/matrixspatialparams.hh ---- exercises/exercise-fractures/matrixspatialparams.hh 2024-07-17 11:27:28.874349112 +0200 -+++ exercises/solution/exercise-fractures/matrixspatialparams.hh 2024-07-17 11:27:28.886349373 +0200 +--- exercises/exercise-fractures/matrixspatialparams.hh 2025-02-13 16:25:25.594470602 +0100 ++++ exercises/solution/exercise-fractures/matrixspatialparams.hh 2025-02-13 16:25:25.634470156 +0100 @@ -40,6 +40,7 @@ using Element = typename GridView::template Codim<0>::Entity; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; @@ -467,8 +467,8 @@ diff -ruN exercises/exercise-fractures/matrixspatialparams.hh exercises/solution public: diff -ruN exercises/exercise-fractures/params.input exercises/solution/exercise-fractures/params.input ---- exercises/exercise-fractures/params.input 2023-10-13 18:08:54.714521020 +0200 -+++ exercises/solution/exercise-fractures/params.input 2020-05-08 12:16:18.919855703 +0200 +--- exercises/exercise-fractures/params.input 2025-02-13 16:25:25.594470602 +0100 ++++ exercises/solution/exercise-fractures/params.input 2025-02-13 16:25:25.634470156 +0100 @@ -5,6 +5,9 @@ [Problem] @@ -510,8 +510,8 @@ diff -ruN exercises/exercise-fractures/params.input exercises/solution/exercise- +SpatialParams.Swr = 0.0 +SpatialParams.SwrBarrier = 0.0 diff -ruN exercises/exercise-fractures/properties.hh exercises/solution/exercise-fractures/properties.hh ---- exercises/exercise-fractures/properties.hh 2024-07-17 11:27:28.874349112 +0200 -+++ exercises/solution/exercise-fractures/properties.hh 2024-07-17 11:27:28.886349373 +0200 +--- exercises/exercise-fractures/properties.hh 2025-02-13 16:25:25.594470602 +0100 ++++ exercises/solution/exercise-fractures/properties.hh 2025-02-13 16:25:25.634470156 +0100 @@ -45,6 +45,7 @@ // with tpfa. #include <dumux/multidomain/facet/cellcentered/tpfa/properties.hh> @@ -530,7 +530,7 @@ diff -ruN exercises/exercise-fractures/properties.hh exercises/solution/exercise struct Grid<TypeTag, TTag::MatrixProblem> { using type = Dune::ALUGrid<2, 2, Dune::simplex, Dune::conforming>; }; template<class TypeTag> diff -ruN exercises/exercise-fractures/README.md exercises/solution/exercise-fractures/README.md ---- exercises/exercise-fractures/README.md 2023-10-13 18:08:54.714521020 +0200 +--- exercises/exercise-fractures/README.md 2025-02-27 13:31:58.057789567 +0100 +++ exercises/solution/exercise-fractures/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,216 +0,0 @@ -# Exercise Discrete Fractures (DuMuX Course) @@ -541,7 +541,7 @@ diff -ruN exercises/exercise-fractures/README.md exercises/solution/exercise-fra - -We consider a domain of 100 x 100 m with a set of ten fractures. This geometry has been taken from [Flemisch et al. (2018)](https://www.sciencedirect.com/science/article/pii/S0309170817300143), but was slightly modified to better fit to the purposes of this exercise. Apart from one fracture extending up to the top boundary, all other fractures are immersed, meaning that the fracture tips lie within the domain (see image below). - -- +- - -In the initial setup of this exercise, we want to consider buoyancy-driven upwards migration of nitrogen (gas) in a fully water-saturated medium. Thus, as initial conditions we use hydrostatic pressure conditions and a zero nitrogen saturation. On the boundaries we apply Neumann no-flow boundary conditions on the left and right sides, while using Dirichlet boundary conditions on the top and the bottom of the domain. We set the initial conditions as boundary conditions on the Dirichlet segments, except for the middle part of the lower boundary ($`y = 0 \wedge x > 25 \wedge x < 75`$), where we set a non-zero nitrogen saturation (settable via the input file). Through this segment of the lower boundary, nitrogen can intrude the domain and flow upwards driven by buoyancy. - @@ -650,7 +650,7 @@ diff -ruN exercises/exercise-fractures/README.md exercises/solution/exercise-fra - -Take a look at the results by opening the files `matrix.pvd` and `fractures.pvd` with _Paraview_. In order to increase the visibility of the fracture solution, you might want to apply the tube filter to it (e.g. with a tube radius of 0.2). The result should look like this: - -- +- - -You can see how the fractures act as preferential flowpaths in the upwards movement of nitrogen due to their higher permeabilities. Additionally, you can observe comparatively high nitrogen saturations in the fracture tips as a result of the fractures acting as capillary traps due to the lower capillary pressures inside them. Consider turning them into capillary barriers, e.g. by setting __SpatialParams.VGAlpha = 1e-5__ in the __Fracture__ group in the input file (`params.input`). The nitrogen saturations in the fractures (especially in the fracture tips) should now be lower than in the surrounding matrix. Do not forget to reset __SpatialParams.VGAlpha = 1e-1__ in the input file after you are done. - @@ -660,7 +660,7 @@ diff -ruN exercises/exercise-fractures/README.md exercises/solution/exercise-fra - -Furthermore, modify the function `dirichletAtPos(...)` in `matrixproblem.hh` such that an overpressure is added to the initial pressure and a non-zero saturation is applied on the right Dirichlet segment ($`x = 100 \wedge y > 75`$). For this you can use the private variables `boundaryOverPressure_` and `boundarySaturation_` which are stored in the matrix problem and are read from the input file. Compile and execute the program again. The resulting water pressure distribution should look like this: - -- +- - -## Task B: Turn the fractures into barriers - @@ -704,7 +704,7 @@ diff -ruN exercises/exercise-fractures/README.md exercises/solution/exercise-fra - -This means we have to use Neumann-type interior boundary conditions here. Change this accordingly, compile and rerun the exercise again. You should now be able to see jumps in pressure in the matrix domain with an especially prominent one across the first vertical fracture (see image below). - -- +- - -### Task C: Define both open fractures and barriers - diff --git a/.patches/exercise-mainfile/exercise-mainfile.patch b/.patches/exercise-mainfile/exercise-mainfile.patch index 4ef11fa0..5cfe16a8 100644 --- a/.patches/exercise-mainfile/exercise-mainfile.patch +++ b/.patches/exercise-mainfile/exercise-mainfile.patch @@ -1,6 +1,6 @@ diff -ruN exercises/exercise-mainfile/CMakeLists.txt exercises/solution/exercise-mainfile/CMakeLists.txt ---- exercises/exercise-mainfile/CMakeLists.txt 2024-07-17 14:07:42.177109339 +0200 -+++ exercises/solution/exercise-mainfile/CMakeLists.txt 2024-07-17 13:58:18.220850484 +0200 +--- exercises/exercise-mainfile/CMakeLists.txt 2025-02-13 16:25:25.596470580 +0100 ++++ exercises/solution/exercise-mainfile/CMakeLists.txt 2025-02-13 16:25:25.635470145 +0100 @@ -2,14 +2,9 @@ # SPDX-License-Identifier: GPL-3.0-or-later @@ -22,7 +22,7 @@ diff -ruN exercises/exercise-mainfile/CMakeLists.txt exercises/solution/exercise +add_input_file_links() \ No newline at end of file diff -ruN exercises/exercise-mainfile/exercise1pamain.cc exercises/solution/exercise-mainfile/exercise1pamain.cc ---- exercises/exercise-mainfile/exercise1pamain.cc 2024-07-17 13:58:18.212850366 +0200 +--- exercises/exercise-mainfile/exercise1pamain.cc 2025-02-13 16:25:25.596470580 +0100 +++ exercises/solution/exercise-mainfile/exercise1pamain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,130 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -157,7 +157,7 @@ diff -ruN exercises/exercise-mainfile/exercise1pamain.cc exercises/solution/exer -}// end main diff -ruN exercises/exercise-mainfile/exercise1pa_solution_main.cc exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc --- exercises/exercise-mainfile/exercise1pa_solution_main.cc 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc 2024-07-17 13:58:18.220850484 +0200 ++++ exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc 2025-02-13 16:25:25.635470145 +0100 @@ -0,0 +1,130 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: @@ -290,7 +290,7 @@ diff -ruN exercises/exercise-mainfile/exercise1pa_solution_main.cc exercises/sol + +}// end main diff -ruN exercises/exercise-mainfile/exercise1pbmain.cc exercises/solution/exercise-mainfile/exercise1pbmain.cc ---- exercises/exercise-mainfile/exercise1pbmain.cc 2024-07-17 13:58:18.212850366 +0200 +--- exercises/exercise-mainfile/exercise1pbmain.cc 2025-02-13 16:25:25.596470580 +0100 +++ exercises/solution/exercise-mainfile/exercise1pbmain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,120 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -414,7 +414,7 @@ diff -ruN exercises/exercise-mainfile/exercise1pbmain.cc exercises/solution/exer - -}// end main diff -ruN exercises/exercise-mainfile/exercise1pcmain.cc exercises/solution/exercise-mainfile/exercise1pcmain.cc ---- exercises/exercise-mainfile/exercise1pcmain.cc 2024-07-17 13:58:18.212850366 +0200 +--- exercises/exercise-mainfile/exercise1pcmain.cc 2025-02-13 16:25:25.596470580 +0100 +++ exercises/solution/exercise-mainfile/exercise1pcmain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,146 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -564,7 +564,7 @@ diff -ruN exercises/exercise-mainfile/exercise1pcmain.cc exercises/solution/exer - -}// end main diff -ruN exercises/exercise-mainfile/exercise_mainfile_a.input exercises/solution/exercise-mainfile/exercise_mainfile_a.input ---- exercises/exercise-mainfile/exercise_mainfile_a.input 2023-10-13 18:08:54.718521039 +0200 +--- exercises/exercise-mainfile/exercise_mainfile_a.input 2025-02-13 16:25:25.596470580 +0100 +++ exercises/solution/exercise-mainfile/exercise_mainfile_a.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -[Grid] @@ -587,7 +587,7 @@ diff -ruN exercises/exercise-mainfile/exercise_mainfile_a.input exercises/soluti -BaseEpsilon = 1e-10 diff -ruN exercises/exercise-mainfile/exercise_mainfile_a_solution.input exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input --- exercises/exercise-mainfile/exercise_mainfile_a_solution.input 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input 2024-07-17 14:08:11.237533494 +0200 ++++ exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input 2025-02-13 16:25:25.635470145 +0100 @@ -0,0 +1,18 @@ +[Grid] +LowerLeft = 0 0 @@ -608,7 +608,7 @@ diff -ruN exercises/exercise-mainfile/exercise_mainfile_a_solution.input exercis +PriVarMagnitude = 1e5 +BaseEpsilon = 1e-10 diff -ruN exercises/exercise-mainfile/exercise_mainfile_b.input exercises/solution/exercise-mainfile/exercise_mainfile_b.input ---- exercises/exercise-mainfile/exercise_mainfile_b.input 2023-10-13 18:08:54.718521039 +0200 +--- exercises/exercise-mainfile/exercise_mainfile_b.input 2025-02-13 16:25:25.596470580 +0100 +++ exercises/solution/exercise-mainfile/exercise_mainfile_b.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -[Grid] @@ -629,7 +629,7 @@ diff -ruN exercises/exercise-mainfile/exercise_mainfile_b.input exercises/soluti -[Assembly.NumericDifference] -PriVarMagnitude = 1e5 diff -ruN exercises/exercise-mainfile/exercise_mainfile_c.input exercises/solution/exercise-mainfile/exercise_mainfile_c.input ---- exercises/exercise-mainfile/exercise_mainfile_c.input 2024-07-17 14:08:27.885776444 +0200 +--- exercises/exercise-mainfile/exercise_mainfile_c.input 2025-02-13 16:25:25.597470568 +0100 +++ exercises/solution/exercise-mainfile/exercise_mainfile_c.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -[TimeLoop] @@ -654,8 +654,8 @@ diff -ruN exercises/exercise-mainfile/exercise_mainfile_c.input exercises/soluti -[Assembly.NumericDifference] -PriVarMagnitude = 1e5 diff -ruN exercises/exercise-mainfile/properties.hh exercises/solution/exercise-mainfile/properties.hh ---- exercises/exercise-mainfile/properties.hh 2024-07-17 13:58:18.212850366 +0200 -+++ exercises/solution/exercise-mainfile/properties.hh 2024-07-17 13:58:18.220850484 +0200 +--- exercises/exercise-mainfile/properties.hh 2025-02-13 16:25:25.597470568 +0100 ++++ exercises/solution/exercise-mainfile/properties.hh 2025-02-13 16:25:25.635470145 +0100 @@ -25,8 +25,8 @@ #include <dumux/porousmediumflow/1p/model.hh> @@ -679,7 +679,7 @@ diff -ruN exercises/exercise-mainfile/properties.hh exercises/solution/exercise- // the fluid system for compressible tests diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-mainfile/README.md ---- exercises/exercise-mainfile/README.md 2024-07-17 11:27:28.682344944 +0200 +--- exercises/exercise-mainfile/README.md 2025-02-27 12:13:40.959238376 +0100 +++ exercises/solution/exercise-mainfile/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,196 +0,0 @@ -# Exercise Mainfiles (DuMuX course) @@ -699,7 +699,7 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main - -The problem set-up for all three examples is always the same: It is a two dimensional problem and the domain is $1 m$ by $1 m$. It is a heterogeneous set-up with a lens in the middle of the domain which has a lower permeability ($1\cdot 10^{-12} m^2$ compared to $1\cdot 10^{-10} m^2$ in the rest of the domain). - --<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise1_1p_setup.png" width="1000"> +-<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_mainfile_1p_setup.png" width="1000"> - -In the beginning, there is a uniform pressure of $1\cdot 10^5 Pa$ in the whole domain. On the top and the bottom border, dirichlet boundary conditions are set with a pressure of $1\cdot 10^5 Pa$ on top and $2 \cdot 10^5 Pa$ on the bottom. At the sides, there is no in- or outflow and there are no source terms. - diff --git a/.patches/exercise-model/exercise-model.patch b/.patches/exercise-model/exercise-model.patch index 24d64926..726d98be 100644 --- a/.patches/exercise-model/exercise-model.patch +++ b/.patches/exercise-model/exercise-model.patch @@ -1,6 +1,6 @@ diff -ruN exercises/exercise-model/CMakeLists.txt exercises/solution/exercise-model/CMakeLists.txt ---- exercises/exercise-model/CMakeLists.txt 2024-07-17 14:21:07.400210015 +0200 -+++ exercises/solution/exercise-model/CMakeLists.txt 2024-07-17 14:21:07.404210034 +0200 +--- exercises/exercise-model/CMakeLists.txt 2025-02-13 16:25:25.597470568 +0100 ++++ exercises/solution/exercise-model/CMakeLists.txt 2025-02-13 16:25:25.635470145 +0100 @@ -3,5 +3,5 @@ dune_symlink_to_source_files(FILES images params.input) @@ -9,8 +9,8 @@ diff -ruN exercises/exercise-model/CMakeLists.txt exercises/solution/exercise-mo +dumux_add_test(NAME exercise_nonlineardiffusion_sol SOURCES main.cc) diff -ruN exercises/exercise-model/main.cc exercises/solution/exercise-model/main.cc ---- exercises/exercise-model/main.cc 2024-07-17 14:21:07.400210015 +0200 -+++ exercises/solution/exercise-model/main.cc 2024-07-17 14:21:07.404210034 +0200 +--- exercises/exercise-model/main.cc 2025-02-13 16:25:25.598470557 +0100 ++++ exercises/solution/exercise-model/main.cc 2025-02-13 16:25:25.635470145 +0100 @@ -29,6 +29,8 @@ #include <dumux/nonlinear/newtonsolver.hh> #include <dumux/assembly/fvassembler.hh> @@ -148,7 +148,7 @@ diff -ruN exercises/exercise-model/main.cc exercises/solution/exercise-model/mai }// end main diff -ruN exercises/exercise-model/model.hh exercises/solution/exercise-model/model.hh --- exercises/exercise-model/model.hh 1970-01-01 01:00:00.000000000 +0100 -+++ exercises/solution/exercise-model/model.hh 2024-07-18 10:07:49.719993891 +0200 ++++ exercises/solution/exercise-model/model.hh 2025-02-13 16:25:25.635470145 +0100 @@ -0,0 +1,210 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: @@ -361,7 +361,7 @@ diff -ruN exercises/exercise-model/model.hh exercises/solution/exercise-model/mo + +#endif diff -ruN exercises/exercise-model/README.md exercises/solution/exercise-model/README.md ---- exercises/exercise-model/README.md 2024-07-18 10:13:40.660815419 +0200 +--- exercises/exercise-model/README.md 2025-02-27 13:33:20.492673922 +0100 +++ exercises/solution/exercise-model/README.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,195 +0,0 @@ -# Exercise Model (DuMuX course) @@ -509,7 +509,7 @@ diff -ruN exercises/exercise-model/README.md exercises/solution/exercise-model/R -__The final result should look like this:__ -<figure> - <center> -- <img src="../extradoc/exercisemodel_mri_denoise.gif" alt="denoising"/> +- <img src="../extradoc/exercise_model_mri_denoise.gif" alt="denoising"/> - <figcaption> <b> Fig.1 </b> - Denosing of MRI image using nonlinear diffusion model.</figcaption> - </center> -</figure> diff --git a/exercises/exercise-basic/README.md b/exercises/exercise-basic/README.md index e98dbf05..40acd722 100644 --- a/exercises/exercise-basic/README.md +++ b/exercises/exercise-basic/README.md @@ -5,7 +5,7 @@ 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-course/raw/master/exercises/extradoc/exercise1_setup.png" width="1000"> +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_basic_setup.png" width="1000"> ## Preparing the exercise @@ -89,6 +89,6 @@ $\displaystyle d_\text{aquifer}=2700~\text{m}$. Additionally, add a subdomain (2 __Boundary conditions:__ Dirichlet boundary conditions at the left boundary with the same temperature gradient as in the initial conditions. For the Neumann conditions, assign an energy flux at the injection point of N$_2$ and no-flow conditions for the energy balance to the rest of the boundaries. -<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise1_nonisothermal.png" width="800"> +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_basic_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 `params.input`, you just need to _uncomment_ them. diff --git a/exercises/exercise-biomineralization/README.md b/exercises/exercise-biomineralization/README.md index b3ac137f..fb11f089 100644 --- a/exercises/exercise-biomineralization/README.md +++ b/exercises/exercise-biomineralization/README.md @@ -9,7 +9,7 @@ The domain has a size of 20 x 15 m and contains a sealing aquitard in the middle Disclaimer: Please note, that this is not a realistic scenario. No one would think of storing gaseous CO<sub>2</sub> in this subcritical setting. - + ## Preparing the exercise @@ -143,7 +143,7 @@ make exercise_biomin The result for the porosity should look like this: -  +  ### 5. CO<sub>2</sub> injection to test aquitard integrity @@ -158,7 +158,7 @@ Run two simulations and compare them side by side by creating two input files, o ``` The result for the biomineralization process during the CO<sub>2</sub> injection should look like this: - + ### 6. Change the permeability law diff --git a/exercises/exercise-coupling-ff-pm/interface/README.md b/exercises/exercise-coupling-ff-pm/interface/README.md index c13802cf..618a83ed 100644 --- a/exercises/exercise-coupling-ff-pm/interface/README.md +++ b/exercises/exercise-coupling-ff-pm/interface/README.md @@ -3,7 +3,7 @@ In this part of the exercise, a simple coupled system consisting of a one-phase (1p) free flow and a one-phase flow in a porous medium is set up. Both subproblems have no-flow boundaries at the sides. Currently, a velocity profile is set on the upper free flow boundary, which leads to a vertical flow into the porous medium: - + Note that we neglect the influence of gravity and only solve for the stationary problem in this exercise. @@ -167,7 +167,7 @@ values.setBeaversJoseph(1 - scvf.directionIndex()); Recompile and rerun to check if the final result looks something like this: - + *Extra Points:* Rather than enforcing a pressure difference across the domain, an inflow velocity profile could be set. diff --git a/exercises/exercise-coupling-ff-pm/turbulence/README.md b/exercises/exercise-coupling-ff-pm/turbulence/README.md index fc678829..41e428d3 100644 --- a/exercises/exercise-coupling-ff-pm/turbulence/README.md +++ b/exercises/exercise-coupling-ff-pm/turbulence/README.md @@ -77,7 +77,7 @@ In addition to the standard variables and parameters, you can now analyze turbul In paraview you may compare the magnitude of $`D`$ and $`D_\textrm{t}`$ to see where the transport is affected by turbulence. The result for the turbulent diffusivity should look like this: - + ### Task B: Use symmetry boundary conditions diff --git a/exercises/exercise-fluidsystem/README.md b/exercises/exercise-fluidsystem/README.md index b603ba49..f612b492 100644 --- a/exercises/exercise-fluidsystem/README.md +++ b/exercises/exercise-fluidsystem/README.md @@ -6,7 +6,7 @@ The aim of this exercise is to get familiar with the _DuMu<sup>x</sup>_ way of i The domain has a size of 60 m 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). -<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise-fluidsystem_setup.png" width="700"> +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_fluidsystem_setup.png" width="700"> ## Task 1: Getting familiar with the code @@ -152,7 +152,7 @@ make exercise_fluidsystem_a The saturation distribution of the nonwetting phase, here S$`_{napl}`$ (the phase consisting of our fictitious incompressible component), at the final simulation time should look like this: - + ### Task 2.2: Compressible component @@ -162,12 +162,12 @@ $`\displaystyle \rho_{MyComp} = \rho_{min} + \frac{ \rho_{max} - \rho_{min} }{ 1 where $`p`$ is the pressure and $`\rho_{min} = 1440.0 \, kg/m^3`$, $`\rho_{max} = 1480.0 \, kg/m^3`$ and $`k = 5 \cdot 10^{-7} `$. Also, make sure the header is included in the `2pproperties.hh` file by uncommenting the corresponding line. Furthermore, the new component has to be set as a liquid phase in the fluid system. To do so, search for `TODO: dumux-course-task 2.2`. Comment out the corresponding line and uncomment the other. The density distribution of this phase (rho$`_{napl}`$) at the final simulation time should look like this: - + You can plot the density of the phase consisting of your compressible component by setting `PlotDensity` in `aparams.input` to `true` and starting the simulation again. Compare the gnuplot output to the following plot of the density function from above: -<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise-fluidsystem_a_densityfunction.png" width="500"> +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_fluidsystem_a_densityfunction.png" width="500"> ## Task 3: Implement a new fluid system - Part b diff --git a/exercises/exercise-fractures/README.md b/exercises/exercise-fractures/README.md index 76fdef25..4d3779c0 100644 --- a/exercises/exercise-fractures/README.md +++ b/exercises/exercise-fractures/README.md @@ -6,7 +6,7 @@ In this exercise we are going to use the _DuMuX multidomain_ framework, and in p We consider a domain of 100 x 100 m with a set of ten fractures. This geometry has been taken from [Flemisch et al. (2018)](https://www.sciencedirect.com/science/article/pii/S0309170817300143), but was slightly modified to better fit to the purposes of this exercise. Apart from one fracture extending up to the top boundary, all other fractures are immersed, meaning that the fracture tips lie within the domain (see image below). - + In the initial setup of this exercise, we want to consider buoyancy-driven upwards migration of nitrogen (gas) in a fully water-saturated medium. Thus, as initial conditions we use hydrostatic pressure conditions and a zero nitrogen saturation. On the boundaries we apply Neumann no-flow boundary conditions on the left and right sides, while using Dirichlet boundary conditions on the top and the bottom of the domain. We set the initial conditions as boundary conditions on the Dirichlet segments, except for the middle part of the lower boundary ($`y = 0 \wedge x > 25 \wedge x < 75`$), where we set a non-zero nitrogen saturation (settable via the input file). Through this segment of the lower boundary, nitrogen can intrude the domain and flow upwards driven by buoyancy. @@ -115,7 +115,7 @@ make exercise_fractures Take a look at the results by opening the files `matrix.pvd` and `fractures.pvd` with _Paraview_. In order to increase the visibility of the fracture solution, you might want to apply the tube filter to it (e.g. with a tube radius of 0.2). The result should look like this: - + You can see how the fractures act as preferential flowpaths in the upwards movement of nitrogen due to their higher permeabilities. Additionally, you can observe comparatively high nitrogen saturations in the fracture tips as a result of the fractures acting as capillary traps due to the lower capillary pressures inside them. Consider turning them into capillary barriers, e.g. by setting __SpatialParams.VGAlpha = 1e-5__ in the __Fracture__ group in the input file (`params.input`). The nitrogen saturations in the fractures (especially in the fracture tips) should now be lower than in the surrounding matrix. Do not forget to reset __SpatialParams.VGAlpha = 1e-1__ in the input file after you are done. @@ -125,7 +125,7 @@ In order for the influence of the fractures to be more visible in the resulting Furthermore, modify the function `dirichletAtPos(...)` in `matrixproblem.hh` such that an overpressure is added to the initial pressure and a non-zero saturation is applied on the right Dirichlet segment ($`x = 100 \wedge y > 75`$). For this you can use the private variables `boundaryOverPressure_` and `boundarySaturation_` which are stored in the matrix problem and are read from the input file. Compile and execute the program again. The resulting water pressure distribution should look like this: - + ## Task B: Turn the fractures into barriers @@ -169,7 +169,7 @@ To summarize: when using Neumann-type interior boundary conditions, flux continu This means we have to use Neumann-type interior boundary conditions here. Change this accordingly, compile and rerun the exercise again. You should now be able to see jumps in pressure in the matrix domain with an especially prominent one across the first vertical fracture (see image below). - + ### Task C: Define both open fractures and barriers diff --git a/exercises/exercise-mainfile/README.md b/exercises/exercise-mainfile/README.md index e93bf2ce..6f5b9c88 100644 --- a/exercises/exercise-mainfile/README.md +++ b/exercises/exercise-mainfile/README.md @@ -15,7 +15,7 @@ To summarize, the problems differ in: The problem set-up for all three examples is always the same: It is a two dimensional problem and the domain is $1 m$ by $1 m$. It is a heterogeneous set-up with a lens in the middle of the domain which has a lower permeability ($1\cdot 10^{-12} m^2$ compared to $1\cdot 10^{-10} m^2$ in the rest of the domain). -<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise1_1p_setup.png" width="1000"> +<img src="https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/exercises/extradoc/exercise_mainfile_1p_setup.png" width="1000"> In the beginning, there is a uniform pressure of $1\cdot 10^5 Pa$ in the whole domain. On the top and the bottom border, dirichlet boundary conditions are set with a pressure of $1\cdot 10^5 Pa$ on top and $2 \cdot 10^5 Pa$ on the bottom. At the sides, there is no in- or outflow and there are no source terms. diff --git a/exercises/exercise-model/README.md b/exercises/exercise-model/README.md index a51c9851..119b1225 100644 --- a/exercises/exercise-model/README.md +++ b/exercises/exercise-model/README.md @@ -143,7 +143,7 @@ are preserved. The conductance acts as a threshold for the image intensity gradi __The final result should look like this:__ <figure> <center> - <img src="../extradoc/exercisemodel_mri_denoise.gif" alt="denoising"/> + <img src="../extradoc/exercise_model_mri_denoise.gif" alt="denoising"/> <figcaption> <b> Fig.1 </b> - Denosing of MRI image using nonlinear diffusion model.</figcaption> </center> </figure> diff --git a/exercises/extradoc/exercise2_properties.png b/exercises/extradoc/exercise2_properties.png deleted file mode 100644 index 28c700ed18443d78995d890cb7fb085a84146ff7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27453 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 A#sB~S diff --git a/exercises/extradoc/exercise1_nonisothermal.png b/exercises/extradoc/exercise_basic_nonisothermal.png similarity index 100% rename from exercises/extradoc/exercise1_nonisothermal.png rename to exercises/extradoc/exercise_basic_nonisothermal.png diff --git a/exercises/extradoc/exercise1_setup.png b/exercises/extradoc/exercise_basic_setup.png similarity index 100% rename from exercises/extradoc/exercise1_setup.png rename to exercises/extradoc/exercise_basic_setup.png diff --git a/exercises/extradoc/exercisebiomin_injectionFinal.png b/exercises/extradoc/exercise_biomin_injection_final.png similarity index 100% rename from exercises/extradoc/exercisebiomin_injectionFinal.png rename to exercises/extradoc/exercise_biomin_injection_final.png diff --git a/exercises/extradoc/exercisebiomin_porosityFinal.png b/exercises/extradoc/exercise_biomin_porosity_final.png similarity index 100% rename from exercises/extradoc/exercisebiomin_porosityFinal.png rename to exercises/extradoc/exercise_biomin_porosity_final.png diff --git a/exercises/extradoc/exercisebiomin_setup.png b/exercises/extradoc/exercise_biomin_setup.png similarity index 100% rename from exercises/extradoc/exercisebiomin_setup.png rename to exercises/extradoc/exercise_biomin_setup.png diff --git a/exercises/extradoc/ex_ff-pm-turb_diffusivity.png b/exercises/extradoc/exercise_ffpm_turb_diffusivity.png similarity index 100% rename from exercises/extradoc/ex_ff-pm-turb_diffusivity.png rename to exercises/extradoc/exercise_ffpm_turb_diffusivity.png diff --git a/exercises/extradoc/ex_ff-pm-vertical-flow.png b/exercises/extradoc/exercise_ffpm_vertical_flow.png similarity index 100% rename from exercises/extradoc/ex_ff-pm-vertical-flow.png rename to exercises/extradoc/exercise_ffpm_vertical_flow.png diff --git a/exercises/extradoc/ex_ff-pm-wave-interface.png b/exercises/extradoc/exercise_ffpm_wave_interface.png similarity index 100% rename from exercises/extradoc/ex_ff-pm-wave-interface.png rename to exercises/extradoc/exercise_ffpm_wave_interface.png diff --git a/exercises/extradoc/exercise-fluidsystem_a_densityfunction.png b/exercises/extradoc/exercise_fluidsystem_a_densityfunction.png similarity index 100% rename from exercises/extradoc/exercise-fluidsystem_a_densityfunction.png rename to exercises/extradoc/exercise_fluidsystem_a_densityfunction.png diff --git a/exercises/extradoc/exercise-fluidsystem_a_solution.png b/exercises/extradoc/exercise_fluidsystem_a_solution.png similarity index 100% rename from exercises/extradoc/exercise-fluidsystem_a_solution.png rename to exercises/extradoc/exercise_fluidsystem_a_solution.png diff --git a/exercises/extradoc/exercise-fluidsystem_a_solution2.png b/exercises/extradoc/exercise_fluidsystem_a_solution2.png similarity index 100% rename from exercises/extradoc/exercise-fluidsystem_a_solution2.png rename to exercises/extradoc/exercise_fluidsystem_a_solution2.png diff --git a/exercises/extradoc/exercise-fluidsystem_setup.png b/exercises/extradoc/exercise_fluidsystem_setup.png similarity index 100% rename from exercises/extradoc/exercise-fluidsystem_setup.png rename to exercises/extradoc/exercise_fluidsystem_setup.png diff --git a/exercises/extradoc/exercisefractures_a.png b/exercises/extradoc/exercise_fractures_a.png similarity index 100% rename from exercises/extradoc/exercisefractures_a.png rename to exercises/extradoc/exercise_fractures_a.png diff --git a/exercises/extradoc/exercisefractures_b.png b/exercises/extradoc/exercise_fractures_b.png similarity index 100% rename from exercises/extradoc/exercisefractures_b.png rename to exercises/extradoc/exercise_fractures_b.png diff --git a/exercises/extradoc/exercisefractures_initsol.png b/exercises/extradoc/exercise_fractures_initsol.png similarity index 100% rename from exercises/extradoc/exercisefractures_initsol.png rename to exercises/extradoc/exercise_fractures_initsol.png diff --git a/exercises/extradoc/exercisefractures_setup.png b/exercises/extradoc/exercise_fractures_setup.png similarity index 100% rename from exercises/extradoc/exercisefractures_setup.png rename to exercises/extradoc/exercise_fractures_setup.png diff --git a/exercises/extradoc/exercise1_1p_setup.png b/exercises/extradoc/exercise_mainfile_1p_setup.png similarity index 100% rename from exercises/extradoc/exercise1_1p_setup.png rename to exercises/extradoc/exercise_mainfile_1p_setup.png diff --git a/exercises/extradoc/exercisemodel_mri_denoise.gif b/exercises/extradoc/exercise_model_mri_denoise.gif similarity index 100% rename from exercises/extradoc/exercisemodel_mri_denoise.gif rename to exercises/extradoc/exercise_model_mri_denoise.gif diff --git a/slides/img/exercise1_setup.png b/slides/img/exercise_basic_setup.png similarity index 100% rename from slides/img/exercise1_setup.png rename to slides/img/exercise_basic_setup.png diff --git a/slides/img/exercisemodel_mri_denoise.gif b/slides/img/exercise_model_mri_denoise.gif similarity index 100% rename from slides/img/exercisemodel_mri_denoise.gif rename to slides/img/exercise_model_mri_denoise.gif diff --git a/slides/model.md b/slides/model.md index 6d30e3ba..52ea56d3 100644 --- a/slides/model.md +++ b/slides/model.md @@ -259,7 +259,7 @@ i.e. `TTag::DiffusionModel` ## Exercise: Model Implementation of a **nonlinear diffusion model** for denoising of an MRI image -<img src="img/exercisemodel_mri_denoise.gif" alt="denoising" width="300"/> +<img src="img/exercise_model_mri_denoise.gif" alt="denoising" width="300"/> ## Tasks diff --git a/slides/problem.md b/slides/problem.md index f6320c50..275db908 100644 --- a/slides/problem.md +++ b/slides/problem.md @@ -6,7 +6,7 @@ title: DuMu^x^ applications ## Simulation goal -<img style="float: right;" src="img/exercise1_setup.png"> +<img style="float: right;" src="img/exercise_basic_setup.png"> ## Gas injection / immiscible two phase flow -- GitLab