diff --git a/.patches/exercise-mainfile/exercise-mainfile.patch b/.patches/exercise-mainfile/exercise-mainfile.patch index b760bf7c9d2d84698e738a0a23e2225f821619b9..54087404143354b1d2dc043187bf97d9da3ef73f 100644 --- a/.patches/exercise-mainfile/exercise-mainfile.patch +++ b/.patches/exercise-mainfile/exercise-mainfile.patch @@ -1,56 +1,26 @@ -diff -ruN exercises/exercise-mainfile/1pproblem.hh exercises/solution/exercise-mainfile/1pproblem.hh ---- exercises/exercise-mainfile/1pproblem.hh 2024-07-08 09:06:59.589159960 +0200 -+++ exercises/solution/exercise-mainfile/1pproblem.hh 2024-07-08 09:06:59.617159848 +0200 -@@ -24,9 +24,9 @@ - #ifndef DUMUX_EX_MAINFILE_ONEP_TEST_PROBLEM_HH - #define DUMUX_EX_MAINFILE_ONEP_TEST_PROBLEM_HH - -+#include <dumux/porousmediumflow/problem.hh> - #include <dumux/common/properties.hh> - #include <dumux/common/boundarytypes.hh> --#include <dumux/porousmediumflow/problem.hh> - - namespace Dumux { - -@@ -55,7 +55,7 @@ - OnePTestProblem(std::shared_ptr<const GridGeometry> gridGeometry) - : ParentType(gridGeometry) - { -- FluidSystem::Component::init(/*tempMin=*/273.15, -+ FluidSystem::Component::init(/*tempMin=*/272.15, - /*tempMax=*/294.15, - /*numTemp=*/10, - /*pMin=*/1.0e4, -@@ -104,7 +104,6 @@ - { - return PrimaryVariables(1.0e5); - } -- - }; - - } // end namespace Dumux diff -ruN exercises/exercise-mainfile/CMakeLists.txt exercises/solution/exercise-mainfile/CMakeLists.txt ---- exercises/exercise-mainfile/CMakeLists.txt 2024-07-08 09:06:59.589159960 +0200 -+++ exercises/solution/exercise-mainfile/CMakeLists.txt 2024-07-08 09:06:59.617159848 +0200 -@@ -1,12 +1,9 @@ +--- exercises/exercise-mainfile/CMakeLists.txt 2024-07-17 10:22:05.932307007 +0200 ++++ exercises/solution/exercise-mainfile/CMakeLists.txt 2024-07-17 10:53:48.856804228 +0200 +@@ -1,12 +1,7 @@ # the one-phase simulation program -dumux_add_test(NAME exercise_mainfile_a - SOURCES exercise1pamain.cc) -+dumux_add_test(NAME exercise_mainfile_a_solution -+ SOURCES exercise1pa_solution_main.cc -+ COMPILE_DEFINITIONS TYPETAG=OnePIncompressible) - +- -dumux_add_test(NAME exercise_mainfile_b - SOURCES exercise1pbmain.cc) - -dumux_add_test(NAME exercise_mainfile_c - SOURCES exercise1pcmain.cc) -+# here, add the two-phase non-isothermal simulation program ++dumux_add_test(NAME exercise_mainfile_a_solution ++ SOURCES exercise1pa_solution_main.cc ++ COMPILE_DEFINITIONS TYPETAG=OnePIncompressible) # add a symlink for each input file - add_input_file_links() +-add_input_file_links() ++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-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/exercise1pamain.cc 2024-07-16 09:26:32.478904819 +0200 +++ exercises/solution/exercise-mainfile/exercise1pamain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,142 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -197,8 +167,8 @@ 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-08 09:06:59.617159848 +0200 -@@ -0,0 +1,143 @@ ++++ exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc 2024-07-17 10:13:11.041822458 +0200 +@@ -0,0 +1,142 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/***************************************************************************** @@ -224,7 +194,6 @@ diff -ruN exercises/exercise-mainfile/exercise1pa_solution_main.cc exercises/sol + */ +#include <config.h> + -+#include "1pproblem.hh" +#include "properties.hh" + +#include <iostream> @@ -301,8 +270,8 @@ diff -ruN exercises/exercise-mainfile/exercise1pa_solution_main.cc exercises/sol + + Dune::Timer timer; + -+ // TODO: dumux-course-task -+ // change the differentiation method to analytic by changing from DiffMethod::numeric to DiffMethod::analytic ++ // TODO: dumux-course-task 3 ++ // Change the differentiation method to analytic by changing from DiffMethod::numeric to DiffMethod::analytic + + // the assembler for stationary problems + using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>; @@ -343,7 +312,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-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/exercise1pbmain.cc 2024-07-16 09:26:32.478904819 +0200 +++ exercises/solution/exercise-mainfile/exercise1pbmain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,132 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -479,7 +448,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-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/exercise1pcmain.cc 2024-07-16 09:26:32.478904819 +0200 +++ exercises/solution/exercise-mainfile/exercise1pcmain.cc 1970-01-01 01:00:00.000000000 +0100 @@ -1,158 +0,0 @@ -// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- @@ -641,7 +610,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 2024-07-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/exercise_mainfile_a.input 2024-07-17 10:40:13.034110630 +0200 +++ exercises/solution/exercise-mainfile/exercise_mainfile_a.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -[Grid] @@ -664,8 +633,8 @@ 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-08 09:06:59.617159848 +0200 -@@ -0,0 +1,17 @@ ++++ exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input 2024-07-17 10:40:16.508138378 +0200 +@@ -0,0 +1,18 @@ +[Grid] +LowerLeft = 0 0 +UpperRight = 1 1 @@ -683,8 +652,10 @@ diff -ruN exercises/exercise-mainfile/exercise_mainfile_a_solution.input exercis + +[Assembly.NumericDifference] +PriVarMagnitude = 1e5 ++BaseEpsilon = 1e-10 +\ No newline at end of file diff -ruN exercises/exercise-mainfile/exercise_mainfile_b.input exercises/solution/exercise-mainfile/exercise_mainfile_b.input ---- exercises/exercise-mainfile/exercise_mainfile_b.input 2024-07-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/exercise_mainfile_b.input 2024-07-16 09:26:32.478904819 +0200 +++ exercises/solution/exercise-mainfile/exercise_mainfile_b.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,17 +0,0 @@ -[Grid] @@ -705,7 +676,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-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/exercise_mainfile_c.input 2024-07-16 09:26:32.478904819 +0200 +++ exercises/solution/exercise-mainfile/exercise_mainfile_c.input 1970-01-01 01:00:00.000000000 +0100 @@ -1,21 +0,0 @@ -[TimeLoop] @@ -729,42 +700,24 @@ diff -ruN exercises/exercise-mainfile/exercise_mainfile_c.input exercises/soluti - -[Assembly.NumericDifference] -PriVarMagnitude = 1e5 -\ Kein Zeilenumbruch am Dateiende. +\ No newline at end of file diff -ruN exercises/exercise-mainfile/properties.hh exercises/solution/exercise-mainfile/properties.hh ---- exercises/exercise-mainfile/properties.hh 2024-07-08 09:06:59.589159960 +0200 -+++ exercises/solution/exercise-mainfile/properties.hh 2024-07-08 09:06:59.617159848 +0200 -@@ -35,20 +35,19 @@ - #include <dumux/discretization/ccmpfa.hh> - #include <dumux/discretization/box.hh> +--- exercises/exercise-mainfile/properties.hh 2024-07-17 10:13:11.040822436 +0200 ++++ exercises/solution/exercise-mainfile/properties.hh 2024-07-17 10:13:11.041822458 +0200 +@@ -37,8 +37,8 @@ -- #include <dumux/porousmediumflow/1p/model.hh> --// TODO: dumux-course-task 3 + // TODO: dumux-course-task 3 -// uncomment the incompressiblelocalresidual which is a specialization of the standard immiscible localresidual for one phase incompressible cases and provides an analytic jacobian. -// #include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> -+// TODO: dumux-course-task +// uncomment the incompressiblelocalresidual which is a specialization of the standard immisible localresidual for one phase incompressible cases and provides an analytic jacobian. +#include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> #include "1pspatialparams.hh" #include "1pproblem.hh" +@@ -80,8 +80,8 @@ - namespace Dumux::Properties { - --// Create the new type tag nodes: -+// Create the new type tag nodes. - // Here we define the incompressible type tag as well as the compressible type tag. --// The incompressible uses a different fluidsystem than the compressible -+// The incompressible uses a different fluidsystem than the compressible. - namespace TTag { - struct OnePBase { using InheritsFrom = std::tuple<OneP>; }; - struct OnePIncompressible { using InheritsFrom = std::tuple<OnePBase, CCTpfaModel>; }; -@@ -79,10 +78,10 @@ - using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; - }; - --// TODO: dumux-course-task 3 -+// TODO: dumux-course-task + // TODO: dumux-course-task 3 // set the OneP Incompressible local residual for the OnePIncompressible type tag. This provides an analytic jacobian to be used for the analytic solution. Change that by setting: -// template<class TypeTag> -// struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; }; @@ -774,11 +727,10 @@ 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-08 09:06:59.589159960 +0200 +--- exercises/exercise-mainfile/README.md 2024-07-17 10:13:11.040822436 +0200 +++ exercises/solution/exercise-mainfile/README.md 1970-01-01 01:00:00.000000000 +0100 -@@ -1,203 +0,0 @@ +@@ -1,196 +0,0 @@ -# Exercise Mainfiles (DuMuX course) --<br> - -## Problem set-up - @@ -803,9 +755,7 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main - -* Navigate to the directory `dumux-course/exercises/exercise-mainfile` - --<br><br> --### Task 1: Getting familiar with the code --<hr> +-## Task 1: Getting familiar with the code - -Locate all the files you will need for this exercise -* The __main file__ for the __incompressible, stationary__ problem : `exercise1pamain.cc` @@ -819,8 +769,8 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main -* The __input file__ for the __compressible, instationary__ problem: `exercise_mainfile_c.input` - -Please pay special attention to the similarities and differences in the three main files. --The first main file is solved linearly and does not need a newton solver or any other nonlinear solver method. --The second problem is a nonlinear problem and uses newton's method to solve the system. +-The first main file is solved linearly and does not need a Newton solver or any other nonlinear solver method. +-The second problem is a nonlinear problem and uses Newton's method to solve the system. -The third problem is nonlinear and additionally instationary. -Therefore, a time loop needs to be included in the main file. - @@ -851,15 +801,15 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main - -// the problem (initial and boundary conditions) -using Problem = GetPropType<TypeTag, Properties::Problem>; --auto problem = std::make_shared<Problem>(fvGridGeometry); +-auto problem = std::make_shared<Problem>(gridGeometry); - -// the solution vector -using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; --SolutionVector x(fvGridGeometry->numDofs()); +-SolutionVector x(gridGeometry->numDofs()); - -// the grid variables -using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; --auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); +-auto gridVariables = std::make_shared<GridVariables>(problem, gridGeometry); -gridVariables->init(x); - -// initialize the vtk output module @@ -887,7 +837,7 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main - -// the assembler with time loop for instationary problem -using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; --auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); +-auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld); - -// the linear solver -using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>; @@ -928,9 +878,7 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main -timeLoop->finalize(leafGridView.comm()); -``` - --<br><br><br> --### Task 2: Compiling and running an executable --<hr> +-## Task 2: Compiling and running an executable - -* Change to the build-directory - @@ -958,9 +906,7 @@ diff -ruN exercises/exercise-mainfile/README.md exercises/solution/exercise-main -paraview 1p_incompressible_stationary.pvd -``` - --<br><br><br> --### Task 3: Analytical differentiation --<hr> +-## Task 3: Analytical differentiation - -In the input file `exercise_mainfile_a.input`, you will see that there is a variable `BaseEpsilon`. -This defines the base value for the epsilon used in the numeric differentiation. diff --git a/exercises/exercise-mainfile/README.md b/exercises/exercise-mainfile/README.md index 0f8ee4742f6c7cf62a4340b88714efd317d5dd87..e93bf2ced64d9528ef3cc8c1e47cbb548090c3fb 100644 --- a/exercises/exercise-mainfile/README.md +++ b/exercises/exercise-mainfile/README.md @@ -1,5 +1,4 @@ # Exercise Mainfiles (DuMuX course) -<br> ## Problem set-up @@ -24,9 +23,7 @@ In the beginning, there is a uniform pressure of $1\cdot 10^5 Pa$ in the whole d * Navigate to the directory `dumux-course/exercises/exercise-mainfile` -<br><br> -### Task 1: Getting familiar with the code -<hr> +## Task 1: Getting familiar with the code Locate all the files you will need for this exercise * The __main file__ for the __incompressible, stationary__ problem : `exercise1pamain.cc` @@ -40,8 +37,8 @@ Locate all the files you will need for this exercise * The __input file__ for the __compressible, instationary__ problem: `exercise_mainfile_c.input` Please pay special attention to the similarities and differences in the three main files. -The first main file is solved linearly and does not need a newton solver or any other nonlinear solver method. -The second problem is a nonlinear problem and uses newton's method to solve the system. +The first main file is solved linearly and does not need a Newton solver or any other nonlinear solver method. +The second problem is a nonlinear problem and uses Newton's method to solve the system. The third problem is nonlinear and additionally instationary. Therefore, a time loop needs to be included in the main file. @@ -72,15 +69,15 @@ auto gridGeometry = std::make_shared<GridGeometry>(leafGridView); // the problem (initial and boundary conditions) using Problem = GetPropType<TypeTag, Properties::Problem>; -auto problem = std::make_shared<Problem>(fvGridGeometry); +auto problem = std::make_shared<Problem>(gridGeometry); // the solution vector using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; -SolutionVector x(fvGridGeometry->numDofs()); +SolutionVector x(gridGeometry->numDofs()); // the grid variables using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; -auto gridVariables = std::make_shared<GridVariables>(problem, fvGridGeometry); +auto gridVariables = std::make_shared<GridVariables>(problem, gridGeometry); gridVariables->init(x); // initialize the vtk output module @@ -108,7 +105,7 @@ timeLoop->setMaxTimeStepSize(maxDt); // the assembler with time loop for instationary problem using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; -auto assembler = std::make_shared<Assembler>(problem, fvGridGeometry, gridVariables, timeLoop); +auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop, xOld); // the linear solver using LinearSolver = ILUBiCGSTABIstlSolver<LinearSolverTraits<GridGeometry>, LinearAlgebraTraitsFromAssembler<Assembler>>; @@ -149,9 +146,7 @@ timeLoop->start(); do timeLoop->finalize(leafGridView.comm()); ``` -<br><br><br> -### Task 2: Compiling and running an executable -<hr> +## Task 2: Compiling and running an executable * Change to the build-directory @@ -179,9 +174,7 @@ make exercise_mainfile_a exercise_mainfile_b exercise_mainfile_c paraview 1p_incompressible_stationary.pvd ``` -<br><br><br> -### Task 3: Analytical differentiation -<hr> +## Task 3: Analytical differentiation In the input file `exercise_mainfile_a.input`, you will see that there is a variable `BaseEpsilon`. This defines the base value for the epsilon used in the numeric differentiation. diff --git a/exercises/exercise-mainfile/properties.hh b/exercises/exercise-mainfile/properties.hh index ce835d308f37dad995e6ca7956896d47c037f399..309a066e30fdca6f2961942583263003ec0853ad 100644 --- a/exercises/exercise-mainfile/properties.hh +++ b/exercises/exercise-mainfile/properties.hh @@ -35,7 +35,6 @@ #include <dumux/discretization/ccmpfa.hh> #include <dumux/discretization/box.hh> - #include <dumux/porousmediumflow/1p/model.hh> // TODO: dumux-course-task 3 // uncomment the incompressiblelocalresidual which is a specialization of the standard immiscible localresidual for one phase incompressible cases and provides an analytic jacobian. diff --git a/exercises/solution/exercise-mainfile/1pproblem.hh b/exercises/solution/exercise-mainfile/1pproblem.hh index c59565097b35efb053895b9a96f2747963c3650b..8f1ec58929232756025e5d14f8daffc7ae9cb8d8 100644 --- a/exercises/solution/exercise-mainfile/1pproblem.hh +++ b/exercises/solution/exercise-mainfile/1pproblem.hh @@ -24,9 +24,9 @@ #ifndef DUMUX_EX_MAINFILE_ONEP_TEST_PROBLEM_HH #define DUMUX_EX_MAINFILE_ONEP_TEST_PROBLEM_HH -#include <dumux/porousmediumflow/problem.hh> #include <dumux/common/properties.hh> #include <dumux/common/boundarytypes.hh> +#include <dumux/porousmediumflow/problem.hh> namespace Dumux { @@ -55,7 +55,7 @@ public: OnePTestProblem(std::shared_ptr<const GridGeometry> gridGeometry) : ParentType(gridGeometry) { - FluidSystem::Component::init(/*tempMin=*/272.15, + FluidSystem::Component::init(/*tempMin=*/273.15, /*tempMax=*/294.15, /*numTemp=*/10, /*pMin=*/1.0e4, @@ -104,6 +104,7 @@ public: { return PrimaryVariables(1.0e5); } + }; } // end namespace Dumux diff --git a/exercises/solution/exercise-mainfile/CMakeLists.txt b/exercises/solution/exercise-mainfile/CMakeLists.txt index fe4b84747f2b0c41e5e6177b08bf3ebb8fa932e1..ace271dd31b259da48c142b2e798b1545e7a307c 100644 --- a/exercises/solution/exercise-mainfile/CMakeLists.txt +++ b/exercises/solution/exercise-mainfile/CMakeLists.txt @@ -3,7 +3,5 @@ dumux_add_test(NAME exercise_mainfile_a_solution SOURCES exercise1pa_solution_main.cc COMPILE_DEFINITIONS TYPETAG=OnePIncompressible) -# here, add the two-phase non-isothermal simulation program - # add a symlink for each input file -add_input_file_links() +add_input_file_links() \ No newline at end of file diff --git a/exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc b/exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc index 22d8495b519bb647aa03d5f5242578c77941c7fd..c25d369209e2aa93b6ad49af4495f1e034f51fa6 100644 --- a/exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc +++ b/exercises/solution/exercise-mainfile/exercise1pa_solution_main.cc @@ -23,7 +23,6 @@ */ #include <config.h> -#include "1pproblem.hh" #include "properties.hh" #include <iostream> @@ -100,8 +99,8 @@ int main(int argc, char** argv) Dune::Timer timer; - // TODO: dumux-course-task - // change the differentiation method to analytic by changing from DiffMethod::numeric to DiffMethod::analytic + // TODO: dumux-course-task 3 + // Change the differentiation method to analytic by changing from DiffMethod::numeric to DiffMethod::analytic // the assembler for stationary problems using Assembler = FVAssembler<TypeTag, DiffMethod::analytic>; diff --git a/exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input b/exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input index f3d01fc5abac4e26e944289f7dd973b7d4c922d8..c9eb9c076df76a47da255df6927046b771bb2088 100644 --- a/exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input +++ b/exercises/solution/exercise-mainfile/exercise_mainfile_a_solution.input @@ -15,3 +15,4 @@ PermeabilityLens = 1e-12 # [m^2] [Assembly.NumericDifference] PriVarMagnitude = 1e5 +BaseEpsilon = 1e-10 \ No newline at end of file diff --git a/exercises/solution/exercise-mainfile/properties.hh b/exercises/solution/exercise-mainfile/properties.hh index e6f9e93cc7966dc5209c2934248c51dbf24692be..ee94cf20eddeb736f98a6086c42bd8e858371e95 100644 --- a/exercises/solution/exercise-mainfile/properties.hh +++ b/exercises/solution/exercise-mainfile/properties.hh @@ -36,7 +36,7 @@ #include <dumux/discretization/box.hh> #include <dumux/porousmediumflow/1p/model.hh> -// TODO: dumux-course-task +// TODO: dumux-course-task 3 // uncomment the incompressiblelocalresidual which is a specialization of the standard immisible localresidual for one phase incompressible cases and provides an analytic jacobian. #include <dumux/porousmediumflow/1p/incompressiblelocalresidual.hh> @@ -45,9 +45,9 @@ namespace Dumux::Properties { -// Create the new type tag nodes. +// Create the new type tag nodes: // Here we define the incompressible type tag as well as the compressible type tag. -// The incompressible uses a different fluidsystem than the compressible. +// The incompressible uses a different fluidsystem than the compressible namespace TTag { struct OnePBase { using InheritsFrom = std::tuple<OneP>; }; struct OnePIncompressible { using InheritsFrom = std::tuple<OnePBase, CCTpfaModel>; }; @@ -78,7 +78,7 @@ public: using type = FluidSystems::OnePLiquid<Scalar, Components::SimpleH2O<Scalar> >; }; -// TODO: dumux-course-task +// TODO: dumux-course-task 3 // set the OneP Incompressible local residual for the OnePIncompressible type tag. This provides an analytic jacobian to be used for the analytic solution. Change that by setting: template<class TypeTag> struct LocalResidual<TypeTag, TTag::OnePIncompressible> { using type = OnePIncompressibleLocalResidual<TypeTag>; };