Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • dumux-repositories/dumux-course
1 result
Show changes
Commits on Source (3)
diff -ruN exercises/exercise-grids/CMakeLists.txt exercises/solution/exercise-grids/CMakeLists.txt
--- exercises/exercise-grids/CMakeLists.txt 2024-05-21 14:15:07.149554794 +0200
+++ exercises/solution/exercise-grids/CMakeLists.txt 2024-05-21 14:15:07.213555107 +0200
--- exercises/exercise-grids/CMakeLists.txt 2023-03-31 13:48:56.162686698 +0200
+++ exercises/solution/exercise-grids/CMakeLists.txt 2023-03-31 13:48:56.182686617 +0200
@@ -1,5 +1,5 @@
# the grid exercise simulation program
-dumux_add_test(NAME exercise_grids
......@@ -9,7 +9,7 @@ diff -ruN exercises/exercise-grids/CMakeLists.txt exercises/solution/exercise-gr
# add a symlink for each input file
diff -ruN exercises/exercise-grids/grids/grid_structured.dgf exercises/solution/exercise-grids/grids/grid_structured.dgf
--- exercises/exercise-grids/grids/grid_structured.dgf 2024-05-21 14:15:07.149554794 +0200
--- exercises/exercise-grids/grids/grid_structured.dgf 2023-03-31 13:48:56.162686698 +0200
+++ exercises/solution/exercise-grids/grids/grid_structured.dgf 1970-01-01 01:00:00.000000000 +0100
@@ -1,6 +0,0 @@
-DGF
......@@ -19,7 +19,7 @@ diff -ruN exercises/exercise-grids/grids/grid_structured.dgf exercises/solution/
-30 20 % cells in x and y direction
-#
diff -ruN exercises/exercise-grids/grids/grid_structured.geo exercises/solution/exercise-grids/grids/grid_structured.geo
--- exercises/exercise-grids/grids/grid_structured.geo 2024-05-21 14:15:07.149554794 +0200
--- exercises/exercise-grids/grids/grid_structured.geo 2023-03-31 13:48:56.162686698 +0200
+++ exercises/solution/exercise-grids/grids/grid_structured.geo 1970-01-01 01:00:00.000000000 +0100
@@ -1,30 +0,0 @@
-X = 60;
......@@ -53,8 +53,8 @@ diff -ruN exercises/exercise-grids/grids/grid_structured.geo exercises/solution/
-Transfinite Volume "*";
-
diff -ruN exercises/exercise-grids/main.cc exercises/solution/exercise-grids/main.cc
--- exercises/exercise-grids/main.cc 2024-05-21 14:15:07.149554794 +0200
+++ exercises/solution/exercise-grids/main.cc 2024-05-21 14:15:07.213555107 +0200
--- exercises/exercise-grids/main.cc 2023-03-31 13:48:56.162686698 +0200
+++ exercises/solution/exercise-grids/main.cc 2023-03-31 13:48:56.182686617 +0200
@@ -18,7 +18,7 @@
*****************************************************************************/
/*!
......@@ -65,8 +65,8 @@ diff -ruN exercises/exercise-grids/main.cc exercises/solution/exercise-grids/mai
#include <config.h>
diff -ruN exercises/exercise-grids/params.input exercises/solution/exercise-grids/params.input
--- exercises/exercise-grids/params.input 2024-05-29 14:31:49.246625171 +0200
+++ exercises/solution/exercise-grids/params.input 2024-05-21 14:15:07.213555107 +0200
--- exercises/exercise-grids/params.input 2023-03-31 13:48:56.162686698 +0200
+++ exercises/solution/exercise-grids/params.input 2023-03-31 13:48:56.182686617 +0200
@@ -3,13 +3,34 @@
TEnd = 3.154e9 # in seconds, i.e ten years
......@@ -111,21 +111,9 @@ diff -ruN exercises/exercise-grids/params.input exercises/solution/exercise-grid
-Aquifer.Snr = 0.0
\ No newline at end of file
+Aquifer.Snr = 0.0
diff -ruN exercises/exercise-grids/problem.hh exercises/solution/exercise-grids/problem.hh
--- exercises/exercise-grids/problem.hh 2024-05-21 14:15:07.149554794 +0200
+++ exercises/solution/exercise-grids/problem.hh 2024-05-21 14:15:07.213555107 +0200
@@ -134,7 +134,7 @@
}
/*!
- * \brief Evaluate the boundary conditions for a neumann
+ * \brief Evaluate the boundary conditions for a Neumann
* boundary segment.
*
* \param globalPos The position of the integration point of the boundary segment.
diff -ruN exercises/exercise-grids/properties.hh exercises/solution/exercise-grids/properties.hh
--- exercises/exercise-grids/properties.hh 2024-05-29 14:31:49.246625171 +0200
+++ exercises/solution/exercise-grids/properties.hh 2024-05-21 14:15:07.213555107 +0200
--- exercises/exercise-grids/properties.hh 2023-03-31 13:48:56.162686698 +0200
+++ exercises/solution/exercise-grids/properties.hh 2023-03-31 13:48:56.182686617 +0200
@@ -17,9 +17,9 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*****************************************************************************/
......@@ -177,9 +165,9 @@ diff -ruN exercises/exercise-grids/properties.hh exercises/solution/exercise-gri
// Set the problem property
template<class TypeTag>
diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/README.md
--- exercises/exercise-grids/README.md 2024-05-21 14:15:07.149554794 +0200
--- exercises/exercise-grids/README.md 2024-07-16 16:06:28.053964733 +0200
+++ exercises/solution/exercise-grids/README.md 1970-01-01 01:00:00.000000000 +0100
@@ -1,169 +0,0 @@
@@ -1,159 +0,0 @@
-# Exercise Grids (DuMuX course)
-<br>
-
......@@ -208,9 +196,7 @@ diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/R
-
-As you may have noticed, the resolution of our grid isn't quite optimal. A finer grid could help to show a more realistic picture of the physics.
-
-<br><br>
-### Task 1: Applying a Global Refinement
-<hr>
-## Task 1: Applying a Global Refinement
-
-A simple strategy for addressing this resolution issue would be a global refinement.
-In the `[Grid]` section of your input file, you can add a parameter `Refinement`.
......@@ -220,9 +206,7 @@ diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/R
-
-The simulation should take much more time. Luckily there are other ways to resolve your grid that will not be as computationally expensive.
-
-<br><br>
-### Task 2: Changing the Grid Type
-<hr>
-## Task 2: Changing the Grid Type
-
-Up until now, we have used a basic uniform structured grid. This grid is provided in the Dune environment and is called the YASP grid (Yet Another Structured Parallel Grid).
-
......@@ -231,10 +215,10 @@ diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/R
-```c++
-// Set the grid type
-template<class TypeTag>
-struct Grid<TypeTag, TTag::Injection2pTypeTag> { using type = Dune::YaspGrid<2>; };
-struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2>; };
-```
-
-This sets the Grid, which belongs to the `Injection2pTypeTag` type tag, and calls the manager with a basic `YaspGrid` in the second dimension.
-This sets the Grid, which belongs to the `Injection2p` type tag, and calls the manager with a basic `YaspGrid` in the second dimension.
-
-If we look in the grid manager header file, `dumux/dumux/io/grid/gridmanager_yasp.hh`,
-we will see that there are a few grid development options. Until now, we have used the most basic definition.
......@@ -266,9 +250,7 @@ diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/R
-
-* > __Task 2__: Following the format shown above, change the grid type specified in `properties.hh`. Make the required changes to the input file and run the simulation.
-
-<br><br>
-### Task 3: Grid Zoning and Grading
-<hr>
-## Task 3: Grid Zoning and Grading
-
-The `Positions0` and `Positions1` parameters will segment the grid into zones split at the values provided. In this case, the X-direction
-will be made of one zone between 0 and 60, and the Y-direction will be split into one zone between 0 and 40.
......@@ -317,9 +299,7 @@ diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/R
-Grading1 = 1.0 -1.3 1.3 1.0
-```
-
-<br><br>
-### Task 4: Reading in a Structured Grid (*.dgf or *.msh grid files)
-<hr>
-## Task 4: Reading in a Structured Grid (*.dgf or *.msh grid files)
-
-DuMu$^\mathsf{X}$ can also read in grids from external files. There are two supported file types: `.dgf` grids, and `.msh` grids.
-* __`.dgf`__ grids (DUNE Grid Format grids) are developed within the dune environment and are often used in dumux tests.
......@@ -334,15 +314,13 @@ diff -ruN exercises/exercise-grids/README.md exercises/solution/exercise-grids/R
-```
-Our `dim` and `dimworld` will both be 2, we can use `Dune::cube` as our `elType` (element type), and for the `refinementType` we can use `Dune::nonconforming`.
-
-There are two external structured grid files located in the `grid/` folder (`grid_structured.msh` and `grid_structured.dgf`). A path to one of these grids should be included in the input file.
-There are two external structured grid files located in the `grid/` folder (`grid_structured.msh` and `grid_structured.dgf`). A path to one of these grids should be included in the input file by adding the parameter `File` in the `[Grid]` section.
-
-
-* > __Task 4__: Edit the grid properties to set up an ALUGrid made of cubes. Call one of the structured meshes via the input file.
-
-
-<br><br>
-### Task 5: Reading in a Unstructured Grid (*.dgf or *.msh grid files)
-<hr>
-## Task 5: Reading in a Unstructured Grid (*.dgf or *.msh grid files)
-
-An example of an unstructured grid is located in the `grid/` folder (`grid_unstructured.msh`)
-
......
......@@ -26,9 +26,7 @@ The upper right point of our domain is defined using the first parameter, and al
As you may have noticed, the resolution of our grid isn't quite optimal. A finer grid could help to show a more realistic picture of the physics.
<br><br>
### Task 1: Applying a Global Refinement
<hr>
## Task 1: Applying a Global Refinement
A simple strategy for addressing this resolution issue would be a global refinement.
In the `[Grid]` section of your input file, you can add a parameter `Refinement`.
......@@ -38,9 +36,7 @@ This will apply a global refinement to the grid you provided. A refinement of va
The simulation should take much more time. Luckily there are other ways to resolve your grid that will not be as computationally expensive.
<br><br>
### Task 2: Changing the Grid Type
<hr>
## Task 2: Changing the Grid Type
Up until now, we have used a basic uniform structured grid. This grid is provided in the Dune environment and is called the YASP grid (Yet Another Structured Parallel Grid).
......@@ -49,10 +45,10 @@ In the properties file (`properties.hh`), the grid properties are defined using
```c++
// Set the grid type
template<class TypeTag>
struct Grid<TypeTag, TTag::Injection2pTypeTag> { using type = Dune::YaspGrid<2>; };
struct Grid<TypeTag, TTag::Injection2p> { using type = Dune::YaspGrid<2>; };
```
This sets the Grid, which belongs to the `Injection2pTypeTag` type tag, and calls the manager with a basic `YaspGrid` in the second dimension.
This sets the Grid, which belongs to the `Injection2p` type tag, and calls the manager with a basic `YaspGrid` in the second dimension.
If we look in the grid manager header file, `dumux/dumux/io/grid/gridmanager_yasp.hh`,
we will see that there are a few grid development options. Until now, we have used the most basic definition.
......@@ -84,9 +80,7 @@ Grading1 = 1.0
* > __Task 2__: Following the format shown above, change the grid type specified in `properties.hh`. Make the required changes to the input file and run the simulation.
<br><br>
### Task 3: Grid Zoning and Grading
<hr>
## Task 3: Grid Zoning and Grading
The `Positions0` and `Positions1` parameters will segment the grid into zones split at the values provided. In this case, the X-direction
will be made of one zone between 0 and 60, and the Y-direction will be split into one zone between 0 and 40.
......@@ -135,9 +129,7 @@ Grading0 = 1.0 -1.3
Grading1 = 1.0 -1.3 1.3 1.0
```
<br><br>
### Task 4: Reading in a Structured Grid (*.dgf or *.msh grid files)
<hr>
## Task 4: Reading in a Structured Grid (*.dgf or *.msh grid files)
DuMu$^\mathsf{X}$ can also read in grids from external files. There are two supported file types: `.dgf` grids, and `.msh` grids.
* __`.dgf`__ grids (DUNE Grid Format grids) are developed within the dune environment and are often used in dumux tests.
......@@ -152,15 +144,13 @@ GridManager<Dune::ALUGrid<dim, dimworld, elType, refinementType>>
```
Our `dim` and `dimworld` will both be 2, we can use `Dune::cube` as our `elType` (element type), and for the `refinementType` we can use `Dune::nonconforming`.
There are two external structured grid files located in the `grid/` folder (`grid_structured.msh` and `grid_structured.dgf`). A path to one of these grids should be included in the input file.
There are two external structured grid files located in the `grid/` folder (`grid_structured.msh` and `grid_structured.dgf`). A path to one of these grids should be included in the input file by adding the parameter `File` in the `[Grid]` section.
* > __Task 4__: Edit the grid properties to set up an ALUGrid made of cubes. Call one of the structured meshes via the input file.
<br><br>
### Task 5: Reading in a Unstructured Grid (*.dgf or *.msh grid files)
<hr>
## Task 5: Reading in a Unstructured Grid (*.dgf or *.msh grid files)
An example of an unstructured grid is located in the `grid/` folder (`grid_unstructured.msh`)
......
......@@ -25,10 +25,10 @@
#ifndef DUMUX_EXGRIDS_INJECTION_PROBLEM_2P_HH
#define DUMUX_EXGRIDS_INJECTION_PROBLEM_2P_HH
#include <dumux/porousmediumflow/problem.hh>
#include <dumux/common/properties.hh>
#include <dumux/common/boundarytypes.hh>
#include <dumux/common/numeqvector.hh>
#include <dumux/porousmediumflow/problem.hh>
namespace Dumux {
......@@ -134,7 +134,7 @@ public:
}
/*!
* \brief Evaluate the boundary conditions for a neumann
* \brief Evaluate the boundary conditions for a Neumann
* boundary segment.
*
* \param globalPos The position of the integration point of the boundary segment.
......@@ -147,12 +147,11 @@ public:
// if we are inside the injection zone set inflow Neumann boundary conditions
// using < boundary + eps_ or > boundary - eps_ is safer for floating point comparisons
// than using <= or >= as it is robust with regard to imprecision introduced by rounding errors.
if (time_ < injectionDuration_
&& globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->gridGeometry().bBoxMax()[0])
if (injectionActive() && onInjectionBoundary(globalPos))
{
// inject nitrogen. negative values mean injection
// units kg/(s*m^2)
values[Indices::conti0EqIdx + FluidSystem::N2Idx]= -1e-4/FluidSystem::molarMass(FluidSystem::N2Idx);
values[Indices::conti0EqIdx + FluidSystem::N2Idx]= -1e-4;
values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0;
}
......@@ -188,6 +187,18 @@ public:
void setTime(Scalar time)
{ time_ = time; }
//! Return true if the injection is currently active
bool injectionActive() const
{ return time_ < injectionDuration_; }
//! Return true if the given position is in the injection boundary region
bool onInjectionBoundary(const GlobalPosition& globalPos) const
{
return globalPos[1] < 15. + eps_
&& globalPos[1] > 7. - eps_
&& globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_;
}
private:
static constexpr Scalar eps_ = 1e-6;
std::string name_; //! Problem name
......
......@@ -25,10 +25,10 @@
#ifndef DUMUX_EXGRIDS_INJECTION_PROBLEM_2P_HH
#define DUMUX_EXGRIDS_INJECTION_PROBLEM_2P_HH
#include <dumux/porousmediumflow/problem.hh>
#include <dumux/common/properties.hh>
#include <dumux/common/boundarytypes.hh>
#include <dumux/common/numeqvector.hh>
#include <dumux/porousmediumflow/problem.hh>
namespace Dumux {
......@@ -147,12 +147,11 @@ public:
// if we are inside the injection zone set inflow Neumann boundary conditions
// using < boundary + eps_ or > boundary - eps_ is safer for floating point comparisons
// than using <= or >= as it is robust with regard to imprecision introduced by rounding errors.
if (time_ < injectionDuration_
&& globalPos[1] < 15 + eps_ && globalPos[1] > 7 - eps_ && globalPos[0] > 0.9*this->gridGeometry().bBoxMax()[0])
if (injectionActive() && onInjectionBoundary(globalPos))
{
// inject nitrogen. negative values mean injection
// units kg/(s*m^2)
values[Indices::conti0EqIdx + FluidSystem::N2Idx]= -1e-4/FluidSystem::molarMass(FluidSystem::N2Idx);
values[Indices::conti0EqIdx + FluidSystem::N2Idx]= -1e-4;
values[Indices::conti0EqIdx + FluidSystem::H2OIdx] = 0.0;
}
......@@ -188,6 +187,18 @@ public:
void setTime(Scalar time)
{ time_ = time; }
//! Return true if the injection is currently active
bool injectionActive() const
{ return time_ < injectionDuration_; }
//! Return true if the given position is in the injection boundary region
bool onInjectionBoundary(const GlobalPosition& globalPos) const
{
return globalPos[1] < 15. + eps_
&& globalPos[1] > 7. - eps_
&& globalPos[0] > this->gridGeometry().bBoxMax()[0] - eps_;
}
private:
static constexpr Scalar eps_ = 1e-6;
std::string name_; //! Problem name
......
......@@ -23,6 +23,8 @@ Implementations of the Dune grid interface
* **SubGrid** (meta-grid, turn subdomain into grid)
* **GeometryGrid** (meta-grid, grid by coordinate transformation)
[Overview of grid features](https://www.dune-project.org/doc/grids/)
## Create grid
* Set grid types via properties specialization:
......