From cb8b0efbd4534453fbba35e459c2d797ef268767 Mon Sep 17 00:00:00 2001 From: Martin Utz <martin.utz@baw.de> Date: Wed, 1 Apr 2020 14:02:47 +0200 Subject: [PATCH] [examples][shallowwater] Improve example structure (cherry picked from commit 8732166adba7bc898bcac9bf5cc0968716f53511) --- examples/README.md | 2 +- examples/shallowwaterfriction/.doc_config | 26 +- examples/shallowwaterfriction/README.md | 1032 ++--------------- examples/shallowwaterfriction/doc/_intro.md | 139 +++ examples/shallowwaterfriction/doc/intro.md | 97 -- examples/shallowwaterfriction/doc/main.md | 301 +++++ .../shallowwaterfriction/doc/main_intro.md | 12 + examples/shallowwaterfriction/doc/swe.md | 570 +++++++++ .../shallowwaterfriction/doc/swe_intro.md | 17 + examples/shallowwaterfriction/img/domain.png | Bin 18385 -> 0 bytes examples/shallowwaterfriction/img/result.png | Bin 35503 -> 0 bytes .../shallowwaterfriction/img/swe_result.png | Bin 0 -> 117570 bytes examples/shallowwaterfriction/main.cc | 186 +-- examples/shallowwaterfriction/problem.hh | 178 +-- examples/shallowwaterfriction/properties.hh | 51 +- .../shallowwaterfriction/spatialparams.hh | 74 +- 16 files changed, 1444 insertions(+), 1241 deletions(-) create mode 100644 examples/shallowwaterfriction/doc/_intro.md delete mode 100644 examples/shallowwaterfriction/doc/intro.md create mode 100644 examples/shallowwaterfriction/doc/main.md create mode 100644 examples/shallowwaterfriction/doc/main_intro.md create mode 100644 examples/shallowwaterfriction/doc/swe.md create mode 100644 examples/shallowwaterfriction/doc/swe_intro.md delete mode 100644 examples/shallowwaterfriction/img/domain.png delete mode 100644 examples/shallowwaterfriction/img/result.png create mode 100644 examples/shallowwaterfriction/img/swe_result.png diff --git a/examples/README.md b/examples/README.md index 9d3e0ba9a2..cff9e3ed7c 100644 --- a/examples/README.md +++ b/examples/README.md @@ -29,7 +29,7 @@ You learn how to ### [:open_file_folder: Example 3: Shallow water model](shallowwaterfriction/README.md) -The shallow water flow model is applied to simulate steady subcritical flow in a river including a bottom friction model. +The shallow water flow model is applied to simulate steady subcritical flow in a channel including a bottom friction model. You learn how to * solve a shallow water flow problem including bottom friction diff --git a/examples/shallowwaterfriction/.doc_config b/examples/shallowwaterfriction/.doc_config index 7ac7201b34..d5233fd849 100644 --- a/examples/shallowwaterfriction/.doc_config +++ b/examples/shallowwaterfriction/.doc_config @@ -1,9 +1,29 @@ { "README.md" : [ - "doc/intro.md", + "doc/_intro.md" + ], + + "doc/swe.md" : [ + "doc/swe_intro.md", "properties.hh", - "spatialparams.hh", "problem.hh", + "spatialparams.hh" + ], + + "doc/main.md" : [ + "doc/main_intro.md", "main.cc" - ] + ], + + "navigation" : { + "mainpage" : "README.md", + "subpages" : [ + "doc/swe.md", + "doc/main.md" + ], + "subtitles" : [ + "Shallow water flow simulation setup", + "Main program flow" + ] + } } diff --git a/examples/shallowwaterfriction/README.md b/examples/shallowwaterfriction/README.md index e71e3b5460..29cb808d13 100644 --- a/examples/shallowwaterfriction/README.md +++ b/examples/shallowwaterfriction/README.md @@ -1,25 +1,60 @@ <!-- Important: This file has been automatically generated by generate_example_docs.py. Do not edit this file directly! --> # Shallow water flow with bottom friction -This example shows how the shallow water flow model can be -applied to simulate steady subcritical flow including -bottom friction (bed shear stress). +In this example, the shallow water flow model is applied to simulate +a steady subcritical flow including bottom friction (bed shear stress). __You will learn how to__ * solve a shallow water flow problem including bottom friction * compute and output (VTK) an analytical reference solution -__Result__. The numerical and analytical solutions for the problem will look like this: +__Result__. The numerical and analytical solutions for the free surface will look like this: - +<figure> + <center> + <img src="img/swe_result.png" alt="Shallow water result" width="60%"/> + <figcaption> <b> Fig.1 </b> - Setup and result for the shallow water problem with bottom friction.</figcaption> + </center> +</figure> __Table of contents__. This description is structured as follows: [[_TOC_]] -## Mathematical model -The 2D shallow water equations (SWEs) are given by +## Problem set-up +### Model domain +The model domain is given by a rough channel with a slope of 0.001. +The domain is 500 meters long and 5 meters wide. +The bottom altitude is 10 m at the inflow and hence 9.5 m at the outflow. +Bottom friction is considered by applying +Manning's law ($`n`$ = 0.025). + +### Boundary conditions +At the lateral sides a no-flow boundary condition is applied. Also no friction is +considered there and therefore a no slip boundary +condition is applied. These are the default boundary condition for the shallow +water model. At the left border a discharge boundary condition +is applied as inflow boundary condition with $`q = -1.0 m^2 s^{-1}`$. +At the right border a fixed water depth boundary condition +is applied for the outflow. Normal flow is assumed, therefore the water +depth at the right border is calculated using the equation +of Gauckler, Manning and Strickler. + +### Initial conditons +The initial water depth is set to 1 m, which is slightly higher than the normal flow +water depth (0.87 m). Therefore, we expect a decreasing +water level during the simulation until the normal flow condition is reached in +the entire model domain. The inital velocity is set to zero. + +## Model description +As mentioned above, this examples uses the shallow water equations (SWEs) to solve the problem. +These are a depth averaged simplification of the Navier-Stokes equations. To calculate the +bottom friction Manning's law is used. An alternative is Nikuradse's law, which is also implemented +in DuMu<sup>x</sup>. + +### Shallow water model +The shallow water equations are given as: ```math \frac{\partial \mathbf{U}}{\partial t} + @@ -35,54 +70,61 @@ where $`\mathbf{U}`$, $`\mathbf{F}`$ and $`\mathbf{G}`$ defined as \mathbf{G} = \begin{bmatrix} hv \\ huv \\ hv^2 + \frac{1}{2} gh^2 \end{bmatrix} ``` -$`Z`$ is the bedSurface, $`h`$ the water depth, $`u`$ the velocity in -x-direction and $`v`$ the velocity in y-direction, $`g`$ is the constant of gravity. +$`h`$ the water depth, $`u`$ the velocity in x-direction and $`v`$ the velocity in y-direction, +$`g`$ is the constant of gravity. -The source terms for the bed friction $`\mathbf{S_b}`$ and bed slope +The source terms for the bed slope $`\mathbf{S_b}`$ and friction $`\mathbf{S_f}`$ are given as ```math \mathbf{S_b} = \begin{bmatrix} 0 \\ -gh \frac{\partial z}{\partial x} \\ -gh \frac{\partial z}{\partial y}\end{bmatrix}, -\mathbf{S_f} = \begin{bmatrix} 0 \\ -ghS_{fx} \\ -ghS_{fy}\end{bmatrix}. +\mathbf{S_f} = \begin{bmatrix} 0 \\ghS_{fx} \\ghS_{fy}\end{bmatrix}. ``` -For this example, a cell-centered finite volume method (`cctpfa`) is applied to solve the SWEs -in combination with a fully-implicit time discretization. For cases where no sharp fronts or -traveling waves occur it is possible to apply time steps larger than CFL number = 1 to reduce -the computation time. Even if a steady state solution is considered, an implicit time stepping method -is applied. +with the bedSurface $`z`$. $`S_{fx}`$ and $`S_{fy}`$ are the bed shear stess +components in x- and y-direction, which are calculated by Manning's law. -## Problem set-up +### Mannings law +The empirical Manning model specifies the bed shear stress by the following equations: -The model domain is given by a rough channel with a slope of 0.001. -The domain is 500 meters long and 10 meters wide. -. +```math +S_{fx} = \frac{n^2u}{R_{hy}^{4/3}} \sqrt(u^2 + v^2), -Bottom friction is considered by applying -the friction law of Manning (Manning n = 0.025). At the lateral sides no friction is considered and a -no-flow no slip boundary condition is applied. This is the default boundary condition for the shallow water model. +S_{fy} = \frac{n^2v}{R_{hy}^{4/3}} \sqrt(u^2 + v^2) +``` + +$`n`$ is Manning's friction value and $`R_{hy}`$ is the hydraulic radius, +which is assumed to be equal to the water depth $`h`$. -At the left border a discharge boundary condition -is applied as inflow boundary condition with q = -1.0 ($`m^2 s^{-1}`$). At the right border a water fixed depth boundary condition -is applied for the outflow. Normal flow is assumed, therefore the water depth at the right border is calculated after -the of Gaukler-Manning-Strickler equation: +### Analytical solution +Since normal flow conditions are assumed, the analytic solution is calculated using the equation +of Gauckler, Manning and Strickler: ```math v_m = n^{-1} R_{hy}^{2/3} I_s^{1/2} ``` -Where the mean velocity $`v_m`$ is given as $`v_m = \frac{q}{h}`$, -$`n`$ is the friction value after Manning. $`R_{hy}`$ the hydraulic radius, which is assumed to be equal to -the water depth. $`I_s`$ is the bed slope and $`q`$ the unity inflow discharge +Where the mean velocity $`v_m`$ is given as + +```math +v_m = \frac{q}{h} +``` + +$`I_s`$ is the bed slope and $`q`$ the unity inflow discharge. + +Hence, the water depth $`h`$ can be calculated by -The water depth h can be calculated as ```math h = \left(\frac{n q}{\sqrt{I_s}} \right)^{3/5} ``` -The formula of Gaukler Manning and Strickler is also used to calculate the analytic solution. All parameters -for the simulation are given in the file `params.input`. +### Discretisation +For this example, a cell-centered finite volume method (cctpfa) is applied to solve the SWEs +in combination with a fully-implicit time discretization. For cases where no sharp fronts or +traveling waves occur it is possible to apply time steps larger than CFL number = 1 to reduce +the computation time. Even if a steady state solution is considered, an implicit time stepping method +is applied. # Implementation @@ -98,925 +140,13 @@ for the simulation are given in the file `params.input`. └── spatialparams.hh -> spatial parameter fields ``` +## Part 1: Shallow water flow simulation setup -## The file `properties.hh` - -The header includes will be mentioned in the text below. -<details><summary>Click to show the header includes</summary> - -```cpp -#include <dune/grid/yaspgrid.hh> - -#include <dumux/common/properties.hh> -#include <dumux/discretization/cctpfa.hh> -#include <dumux/freeflow/shallowwater/model.hh> - -#include "spatialparams.hh" -#include "problem.hh" -``` - -</details> - -Let's define the properties for our simulation - -```cpp -namespace Dumux::Properties { -``` - -First, a so-called TypeTag is created. Properties are traits specialized for this TypeTag (a simple `struct`). -The properties of two other TypeTags are inherited by adding the alias `InheritsFrom`. -Here, properties from the shallow water model (`TTag::ShallowWater`) and the -cell-centered finite volume scheme with two-point-flux approximation (`TTag::CCTpfaModel`) -are inherited. These other TypeTag definitions can be found in the included -headers `dumux/freeflow/shallowwater/model.hh` and `dumux/discretization/cctpfa.hh`. - -```cpp -namespace TTag { -struct RoughChannel { using InheritsFrom = std::tuple<ShallowWater, CCTpfaModel>; }; -} -``` - -We use a structured Cartesian grid with tensor product structure. -`Dune::YaspGrid` (Yet Another Structure Parallel Grid) is defined in `dune/grid/yaspgrid.hh` -in the Dune module `dune-grid`. - -```cpp -template<class TypeTag> -struct Grid<TypeTag, TTag::RoughChannel> -{ using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; -``` - -Next, we specialize the properties `Problem` and `SpatialParams` for our new TypeTag and -set the type to our problem and spatial parameter classes implemented -in `problem.hh` and `spatialparams.hh`. - -```cpp -template<class TypeTag> -struct Problem<TypeTag, TTag::RoughChannel> -{ using type = Dumux::RoughChannelProblem<TypeTag>; }; - -template<class TypeTag> -struct SpatialParams<TypeTag, TTag::RoughChannel> -{ - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; - using VolumeVariables = typename ElementVolumeVariables::VolumeVariables; - - using type = RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>; -}; -``` - -Finally, we enable caching for the grid geometry. The cache -stores values that were already calculated for later usage. -This makes the simulation run faster but it uses more memory. - -```cpp -template<class TypeTag> -struct EnableGridGeometryCache<TypeTag, TTag::RoughChannel> -{ static constexpr bool value = true; }; - -} // end namespace Dumux::Properties -``` - - - - -## The file `spatialparams.hh` - - -We include the basic spatial parameters for finite volumes file from which we will inherit - -```cpp -#include <dumux/material/spatialparams/fv.hh> -``` - -The parameters header is needed to retrieve run-time parameters. - -```cpp -#include <dumux/common/parameters.hh> -``` - -We include all friction laws, between we can choose for the calculation of the bottom friction source. - -```cpp -#include <dumux/material/fluidmatrixinteractions/frictionlaws/frictionlaw.hh> -#include <dumux/material/fluidmatrixinteractions/frictionlaws/manning.hh> -#include <dumux/material/fluidmatrixinteractions/frictionlaws/nikuradse.hh> -``` - -We enter the namespace Dumux. All Dumux functions and classes are in a namespace Dumux, to make sure they don`t clash with symbols from other libraries you may want to use in conjunction with Dumux. - -```cpp -namespace Dumux { -``` - -In the RoughChannelSpatialParams class we define all functions needed to describe the spatial distributed parameters. - -```cpp -template<class GridGeometry, class Scalar, class VolumeVariables> -class RoughChannelSpatialParams -: public FVSpatialParams<GridGeometry, Scalar, - RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>> -{ -``` - -We introduce using declarations that are derived from the property system which we need in this class - -```cpp - using ThisType = RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>; - using ParentType = FVSpatialParams<GridGeometry, Scalar, ThisType>; - using GridView = typename GridGeometry::GridView; - using FVElementGeometry = typename GridGeometry::LocalView; - using SubControlVolume = typename FVElementGeometry::SubControlVolume; - using Element = typename GridView::template Codim<0>::Entity; - using GlobalPosition = typename Element::Geometry::GlobalCoordinate; - -public: -``` - -In the constructor be read some values from the `params.input` and initialize the friciton law. - -```cpp - RoughChannelSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry) - : ParentType(gridGeometry) - { - gravity_ = getParam<Scalar>("Problem.Gravity"); - bedSlope_ = getParam<Scalar>("Problem.BedSlope"); - frictionLawType_ = getParam<std::string>("Problem.FrictionLaw"); - initFrictionLaw(); - } -``` - -We initialize the friction law based on the law specified in `params.input`. - -```cpp - void initFrictionLaw() - { - if (frictionLawType_ == "Manning") - { - Scalar manningN = getParam<Scalar>("Problem.ManningN"); - frictionLaw_ = std::make_unique<FrictionLawManning<VolumeVariables>>(gravity_, manningN); - } - else if (frictionLawType_ == "Nikuradse") - { - Scalar ks = getParam<Scalar>("Problem.Ks"); - frictionLaw_ = std::make_unique<FrictionLawNikuradse<VolumeVariables>>(ks); - } - else - { - std::cout<<"The FrictionLaw in params.input is unknown. Valid entries are `Manning` and `Nikuradse`!"<<std::endl; - } - } -``` - -Use this function, if you want to vary the value for the gravity. - -```cpp - Scalar gravity(const GlobalPosition& globalPos) const - { - return gravity_; - } -``` - -Use this function for a constant gravity. - -```cpp - Scalar gravity() const - { - return gravity_; - } -``` - -This function returns an object of the friction law class, which is initialized with the appropriate friction values. If you want to use different friciton values or laws, you have to use a vector of unique_ptr for `frictionLaw_` and pick the right friction law instances via the `element` argument. - -```cpp - const FrictionLaw<VolumeVariables>& frictionLaw(const Element& element, - const SubControlVolume& scv) const - { - return *frictionLaw_; - } -``` - -Define the bed surface based on the `bedSlope_`. - -```cpp - Scalar bedSurface(const Element& element, - const SubControlVolume& scv) const - { - return 10.0 - element.geometry().center()[0] * bedSlope_; - } - -private: - Scalar gravity_; - Scalar bedSlope_; - std::string frictionLawType_; - std::unique_ptr<FrictionLaw<VolumeVariables>> frictionLaw_; -}; -``` - -end of namespace Dumux. - -```cpp -} -``` - - - - -## The file `problem.hh` -We start with includes - -```cpp -#include <dumux/common/parameters.hh> -#include <dumux/common/properties.hh> -#include <dumux/freeflow/shallowwater/problem.hh> -#include <dumux/freeflow/shallowwater/boundaryfluxes.hh> -``` - -We enter the problem class where all necessary boundary conditions and initial conditions are set for our simulation. -As this is a shallow water problem, we inherit from the basic ShallowWaterProblem. - -```cpp -namespace Dumux { - -template <class TypeTag> -class RoughChannelProblem : public ShallowWaterProblem<TypeTag> -{ -``` - -We use convenient declarations that we derive from the property system. - -```cpp - using ParentType = ShallowWaterProblem<TypeTag>; - using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; - using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>; - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices; - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - using NeumannFluxes = GetPropType<TypeTag, Properties::NumEqVector>; - using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; - using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; - using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView; - using VolumeVariables = typename ElementVolumeVariables::VolumeVariables; - using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView; - using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; - using GridView = typename GetPropType<TypeTag, Properties::GridGeometry>::GridView; - using Element = typename GridView::template Codim<0>::Entity; - using GlobalPosition = typename Element::Geometry::GlobalCoordinate; - using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; - using SubControlVolume = typename FVElementGeometry::SubControlVolume; - -public: -``` - -This is the constructor of our problem class. - -```cpp - RoughChannelProblem(std::shared_ptr<const GridGeometry> gridGeometry) - : ParentType(gridGeometry) - { -``` - -We read the parameters from the params.input file. - -```cpp - name_ = getParam<std::string>("Problem.Name"); - constManningN_ = getParam<Scalar>("Problem.ManningN"); - bedSlope_ = getParam<Scalar>("Problem.BedSlope"); - discharge_ = getParam<Scalar>("Problem.Discharge"); -``` - -We calculate the outflow boundary condition using the Gauckler-Manning-Strickler formula. - -```cpp - hBoundary_ = this->gauklerManningStrickler(discharge_,constManningN_,bedSlope_); -``` - -We initialize the analytic solution to a verctor of the appropriate size filled with zeros. - -```cpp - exactWaterDepth_.resize(gridGeometry->numDofs(), 0.0); - exactVelocityX_.resize(gridGeometry->numDofs(), 0.0); - } -``` - -Get the analytical water depth - -```cpp - const std::vector<Scalar>& getExactWaterDepth() - { - return exactWaterDepth_; - } -``` - -Get the analytical velocity - -```cpp - const std::vector<Scalar>& getExactVelocityX() - { - return exactVelocityX_; - } -``` - -Get the water depth with Gauckler-Manning-Strickler - -```cpp - Scalar gauklerManningStrickler(Scalar discharge, Scalar manningN, Scalar bedSlope) - { - using std::pow; - using std::abs; - using std::sqrt; - - return pow(abs(discharge)*manningN/sqrt(bedSlope), 0.6); - } -``` - -Get the analytical solution - -```cpp - void analyticalSolution() - { - using std::abs; - - for (const auto& element : elements(this->gridGeometry().gridView())) - { - const Scalar h = this->gauklerManningStrickler(discharge_,constManningN_,bedSlope_); - const Scalar u = abs(discharge_)/h; - - const auto eIdx = this->gridGeometry().elementMapper().index(element); - exactWaterDepth_[eIdx] = h; - exactVelocityX_[eIdx] = u; - } - } -``` - -Get the problem name. It is used as a prefix for files generated by the simulation. - -```cpp - const std::string& name() const - { - return name_; - } -``` - -Get the source term. - -```cpp - NumEqVector source(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const SubControlVolume &scv) const - { - - NumEqVector source (0.0); -``` - -In this model the bottom friction is the only source. - -```cpp - source += bottomFrictionSource(element, fvGeometry, elemVolVars, scv); - - return source; - } -``` - -Get the source term due to bottom friction. - -```cpp - NumEqVector bottomFrictionSource(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const SubControlVolume &scv) const - { - NumEqVector bottomFrictionSource(0.0); - const auto& volVars = elemVolVars[scv]; -``` - -For the calculation of the source term due to bottom friction the two-dimensional bottom shear stess vector is needed. This is the force per area, which works between the flow and the bed. It is calculated within the `FrictionLaw`, which is a spatialParameter. In this model the `FrictionLawManning` is used (see `params.input`). - -```cpp - Dune::FieldVector<Scalar, 2> bottomShearStress = this->spatialParams().frictionLaw(element, scv).shearStress(volVars); -``` - -The bottom shear stress causes a pure loss of momentum. Thus the first entry of the `bottomFrictionSource`, which is related to the mass balance equation is zero. The second entry of the `bottomFricitonSource` corresponds to the momentum equation in x-direction and is therefore equal to the first, the x-component, of the `bottomShearStress`. Accordingly the third entry of the `bottomFrictionSource` is equal to the second component of the `bottomShearStress`. - -```cpp - bottomFrictionSource[0] = 0.0; - bottomFrictionSource[1] = bottomShearStress[0]; - bottomFrictionSource[2] = bottomShearStress[1]; - - return bottomFrictionSource; - } -``` - -We specify the boundary condition type. - -```cpp - BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const - { - BoundaryTypes bcTypes; -``` - -Since we use a weak imposition all boundary conditions are of Neumann type. - -```cpp - bcTypes.setAllNeumann(); - return bcTypes; - } -``` - -We specify the neumann boundary. Due to the weak imposition we calculate the flux at the -boundary, with a Rieman solver. For this the state of a virtual cell outside of the boundary -is needed (`boundaryStateVariables`), wich is calculated with the Riemann invariants -(see Yoon and Kang, Finite Volume Model for Two-Dimensional Shallow Water Flows on Unstructured Grids). -The calculation of the Riemann invariants differ depending on the type of the boundary (h, q or no-flow boundary). - -```cpp - NeumannFluxes neumann(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const ElementFluxVariablesCache& elemFluxVarsCache, - const SubControlVolumeFace& scvf) const - { - NeumannFluxes values(0.0); - - const auto& insideScv = fvGeometry.scv(scvf.insideScvIdx()); - const auto& insideVolVars = elemVolVars[insideScv]; - const auto& nxy = scvf.unitOuterNormal(); - const auto gravity = this->spatialParams().gravity(scvf.center()); - std::array<Scalar, 3> boundaryStateVariables; -``` - -Calculate the rieman invariants for imposed discharge at the left side. - -```cpp - if (scvf.center()[0] < 0.0 + eps_) - { - boundaryStateVariables = ShallowWater::fixedDischargeBoundary(discharge_, - insideVolVars.waterDepth(), - insideVolVars.velocity(0), - insideVolVars.velocity(1), - gravity, - nxy); - } -``` - -Calculate the rieman invariants for impose water depth at the right side. - -```cpp - else if (scvf.center()[0] > 100.0 - eps_) - { - boundaryStateVariables = ShallowWater::fixedWaterDepthBoundary(hBoundary_, - insideVolVars.waterDepth(), - insideVolVars.velocity(0), - insideVolVars.velocity(1), - gravity, - nxy); - } -``` - -Calculate the rieman invarianty for the no-flow boundary. - -```cpp - else - { - boundaryStateVariables[0] = insideVolVars.waterDepth(); - boundaryStateVariables[1] = -insideVolVars.velocity(0); - boundaryStateVariables[2] = -insideVolVars.velocity(1); - } -``` - -We calculate the boundary fluxes based on a Riemann problem. - -```cpp - auto riemannFlux = ShallowWater::riemannProblem(insideVolVars.waterDepth(), - boundaryStateVariables[0], - insideVolVars.velocity(0), - boundaryStateVariables[1], - insideVolVars.velocity(1), - boundaryStateVariables[2], - insideVolVars.bedSurface(), - insideVolVars.bedSurface(), - gravity, - nxy); - - values[Indices::massBalanceIdx] = riemannFlux[0]; - values[Indices::velocityXIdx] = riemannFlux[1]; - values[Indices::velocityYIdx] = riemannFlux[2]; - - return values; - } -``` - -We set the initial conditions. In this example constant initial conditions are used. Therefore the argument `globalPos` is not needed. If you want to impose spatial variable initial conditions, you have to use the `globalPos`. - -```cpp - PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const - { - PrimaryVariables values(0.0); -``` - -We set the initial water depth to one meter. +| [:arrow_right: Click to continue with part 1 of the documentation](doc/swe.md) | +|---:| -```cpp - values[0] = 1.0; -``` - -We set the x-component of the initial velocity to zero. - -```cpp - values[1] = 0.0; -``` - -We set the y-component of the initial velocity to zero. - -```cpp - values[2] = 0.0; - - return values; - }; -``` - -\} - -```cpp - -private: -``` - -We declare the private variables of the problem. They are initialized in the problems constructor. -We declare the variable for the analytic solution. - -```cpp - std::vector<Scalar> exactWaterDepth_; - std::vector<Scalar> exactVelocityX_; -``` - -constant friction value. An analytic solution is only available for const friction. If you want to run the simulation with a non constant friciton value (specified in the spatialParams) you have to remove the analytic solution. - -```cpp - Scalar constManningN_; -``` - -The constant bed slope. - -```cpp - Scalar bedSlope_; -``` - -The water depth at the outflow boundary. - -```cpp - Scalar hBoundary_; -``` - -The discharge at the inflow boundary. - -```cpp - Scalar discharge_; -``` - -eps is used as a small value for the definition of the boundry conditions - -```cpp - static constexpr Scalar eps_ = 1.0e-6; - std::string name_; -}; - -} // end namespace Dumux -``` - - - - -## The file `main.cc` - - -This is the main file for the shallow water example. Here we can see the programme sequence and how the system is solved using newton's method. -### Includes - -```cpp -#include <config.h> -``` - -Standard header file for C++, to get time and date information. - -```cpp -#include <ctime> -``` - -Standard header file for C++, for in- and output. - -```cpp -#include <iostream> -``` - -Dumux is based on DUNE, the Distributed and Unified Numerics Environment, which provides several grid managers and linear solvers. So we need some includes from that. - -```cpp -#include <dune/common/parallel/mpihelper.hh> -#include <dune/common/timer.hh> -#include <dune/grid/io/file/dgfparser/dgfexception.hh> -#include <dune/grid/io/file/vtk.hh> -``` - -We need the following class to simplify the writing of dumux simulation data to VTK format. - -```cpp -#include <dumux/io/vtkoutputmodule.hh> -``` - -In Dumux a property system is used to specify the model. For this, different properties are defined containing type definitions, values and methods. All properties are declared in the file properties.hh. - -```cpp -#include <dumux/common/properties.hh> -``` - -The following file contains the parameter class, which manages the definition of input parameters by a default value, the inputfile or the command line. - -```cpp -#include <dumux/common/parameters.hh> -``` - -The file dumuxmessage.hh contains the class defining the start and end message of the simulation. - -```cpp -#include <dumux/common/dumuxmessage.hh> -#include <dumux/common/defaultusagemessage.hh> -``` - -The gridmanager constructs a grid from the information in the input or grid file. There is a specification for the different supported grid managers. - -```cpp -#include <dumux/io/grid/gridmanager.hh> -``` - -We include the linear solver to be used to solve the linear system - -```cpp -#include <dumux/linear/amgbackend.hh> -#include <dumux/linear/linearsolvertraits.hh> -``` - -We include the nonlinear newtons method - -```cpp -#include <dumux/nonlinear/newtonsolver.hh> -``` - -Further we include assembler, which assembles the linear systems for finite volume schemes (box-scheme, tpfa-approximation, mpfa-approximation) - -```cpp -#include <dumux/assembly/fvassembler.hh> -``` - -We include the properties - -```cpp -#include "properties.hh" -``` - -### Beginning of the main function - -```cpp -int main(int argc, char** argv) try -{ - using namespace Dumux; -``` - -We define the type tag for this problem - -```cpp - using TypeTag = Properties::TTag::RoughChannel; -``` - -We initialize MPI, finalize is done automatically on exit - -```cpp - const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); -``` - -We print dumux start message - -```cpp - if (mpiHelper.rank() == 0) - DumuxMessage::print(/*firstCall=*/true); -``` - -We parse command line arguments and input file - -```cpp - Parameters::init(argc, argv); -``` - -### Create the grid -A gridmanager tries to create the grid either from a grid file or the input file. - -```cpp - GridManager<GetPropType<TypeTag, Properties::Grid>> gridManager; - gridManager.init(); -``` - -We compute on the leaf grid view - -```cpp - const auto& leafGridView = gridManager.grid().leafGridView(); -``` - -### Setup and solving of the problem -#### Setup -We create and initialize the finite volume grid geometry, the problem, the linear system, including the jacobian matrix, the residual and the solution vector and the gridvariables. -We need the finite volume geometry to build up the subcontrolvolumes (scv) and subcontrolvolume faces (scvf) for each element of the grid partition. - -```cpp - using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; - auto gridGeometry = std::make_shared<GridGeometry>(leafGridView); - gridGeometry->update(); -``` - -In the problem, we define the boundary and initial conditions. - -```cpp - using Problem = GetPropType<TypeTag, Properties::Problem>; - auto problem = std::make_shared<Problem>(gridGeometry); -``` - -We initialize the solution vector - -```cpp - using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; - SolutionVector x(gridGeometry->numDofs()); - problem->applyInitialSolution(x); - auto xOld = x; -``` - -And then use the solutionvector to intialize the gridVariables. - -```cpp - using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; - auto gridVariables = std::make_shared<GridVariables>(problem, gridGeometry); - gridVariables->init(x); -``` - -We get some time loop parameters from the input file. - -```cpp - using Scalar = GetPropType<TypeTag, Properties::Scalar>; - const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); - const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); - auto dt = getParam<Scalar>("TimeLoop.DtInitial"); -``` - -We intialize the vtk output module. Each model has a predefined model specific output with relevant parameters for that model. - -```cpp - using IOFields = GetPropType<TypeTag, Properties::IOFields>; - VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables,x, problem->name()); -``` - -We add the analytical solution ("exactWaterDepth" and "exactVelocityX") to the predefined specific output. - -```cpp - vtkWriter.addField(problem->getExactWaterDepth(), "exactWaterDepth"); - vtkWriter.addField(problem->getExactVelocityX(), "exactVelocityX"); -``` - -We calculate the analytic solution. - -```cpp - problem->analyticalSolution(); - IOFields::initOutputModule(vtkWriter); - vtkWriter.write(0.0); -``` - -We instantiate time loop. - -```cpp - auto timeLoop = std::make_shared<CheckPointTimeLoop<Scalar>>(0, dt, tEnd); - timeLoop->setMaxTimeStepSize(maxDt); -``` - -we set the assembler with the time loop because we have an instationary problem. - -```cpp - using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; - auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop); -``` - -We set the linear solver. - -```cpp - using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<GridGeometry>>; - auto linearSolver = std::make_shared<LinearSolver>(leafGridView, gridGeometry->dofMapper()); -``` - -Additionaly, we set the non-linear solver. - -```cpp - using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; - NewtonSolver nonLinearSolver(assembler, linearSolver); -``` - -We set some check point at the end of the time loop. The check point is used to trigger the vtk output. - -```cpp - timeLoop->setCheckPoint(tEnd); -``` - -We start the time loop. - -```cpp - timeLoop->start(); do - { -``` - -We start to calculate the new solution of that time step. First we define the old solution as the solution of the previous time step for storage evaluations. - -```cpp - assembler->setPreviousSolution(xOld); -``` - -We solve the non-linear system with time step control. - -```cpp - nonLinearSolver.solve(x,*timeLoop); -``` - -We make the new solution the old solution. - -```cpp - xOld = x; - gridVariables->advanceTimeStep(); -``` - -We advance to the time loop to the next step. - -```cpp - timeLoop->advanceTimeStep(); -``` - -We write vtk output, if we reached the check point (end of time loop) - -```cpp - if (timeLoop->isCheckPoint()) - vtkWriter.write(timeLoop->time()); -``` - -We report statistics of this time step. - -```cpp - timeLoop->reportTimeStep(); -``` - -We set new dt as suggested by newton controller for the next time step. - -```cpp - timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); - - - } while (!timeLoop->finished()); - - timeLoop->finalize(leafGridView.comm()); -``` - -### Final Output -We print dumux end message. - -```cpp - if (mpiHelper.rank() == 0) - { - Parameters::print(); - DumuxMessage::print(/*firstCall=*/false); - } - - return 0; -} // end main - -catch (const Dumux::ParameterException &e) -{ - std::cerr << std::endl << e << " ---> Abort!" << std::endl; - return 1; -} -catch (const Dune::DGFException & e) -{ - std::cerr << "DGF exception thrown (" << e << - "). Most likely, the DGF file name is wrong " - "or the DGF file is corrupted, " - "e.g. missing hash at end of file or wrong number (dimensions) of entries." - << " ---> Abort!" << std::endl; - return 2; -} -catch (const Dune::Exception &e) -{ - std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; - return 3; -} -catch (...) -{ - std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; - return 4; -} -``` +## Part 2: Main program flow +| [:arrow_right: Click to continue with part 2 of the documentation](doc/main.md) | +|---:| \ No newline at end of file diff --git a/examples/shallowwaterfriction/doc/_intro.md b/examples/shallowwaterfriction/doc/_intro.md new file mode 100644 index 0000000000..172ca8fb06 --- /dev/null +++ b/examples/shallowwaterfriction/doc/_intro.md @@ -0,0 +1,139 @@ +# Shallow water flow with bottom friction +In this example, the shallow water flow model is applied to simulate +a steady subcritical flow including bottom friction (bed shear stress). + +__You will learn how to__ + +* solve a shallow water flow problem including bottom friction +* compute and output (VTK) an analytical reference solution + +__Result__. The numerical and analytical solutions for the free surface will look like this: + +<figure> + <center> + <img src="img/swe_result.png" alt="Shallow water result" width="60%"/> + <figcaption> <b> Fig.1 </b> - Setup and result for the shallow water problem with bottom friction.</figcaption> + </center> +</figure> + +__Table of contents__. This description is structured as follows: + +[[_TOC_]] + +## Problem set-up +### Model domain +The model domain is given by a rough channel with a slope of 0.001. +The domain is 500 meters long and 5 meters wide. +The bottom altitude is 10 m at the inflow and hence 9.5 m at the outflow. +Bottom friction is considered by applying +Manning's law ($`n`$ = 0.025). + +### Boundary conditions +At the lateral sides a no-flow boundary condition is applied. Also no friction is +considered there and therefore a no slip boundary +condition is applied. These are the default boundary condition for the shallow +water model. At the left border a discharge boundary condition +is applied as inflow boundary condition with $`q = -1.0 m^2 s^{-1}`$. +At the right border a fixed water depth boundary condition +is applied for the outflow. Normal flow is assumed, therefore the water +depth at the right border is calculated using the equation +of Gauckler, Manning and Strickler. + +### Initial conditons +The initial water depth is set to 1 m, which is slightly higher than the normal flow +water depth (0.87 m). Therefore, we expect a decreasing +water level during the simulation until the normal flow condition is reached in +the entire model domain. The inital velocity is set to zero. + +## Model description +As mentioned above, this examples uses the shallow water equations (SWEs) to solve the problem. +These are a depth averaged simplification of the Navier-Stokes equations. To calculate the +bottom friction Manning's law is used. An alternative is Nikuradse's law, which is also implemented +in DuMu<sup>x</sup>. + +### Shallow water model +The shallow water equations are given as: + +```math +\frac{\partial \mathbf{U}}{\partial t} + +\frac{\partial \mathbf{F}}{\partial x} + +\frac{\partial \mathbf{G}}{\partial y} - \mathbf{S_b} - \mathbf{S_f} = 0 +``` + +where $`\mathbf{U}`$, $`\mathbf{F}`$ and $`\mathbf{G}`$ defined as + +```math +\mathbf{U} = \begin{bmatrix} h \\ uh \\ vh \end{bmatrix}, +\mathbf{F} = \begin{bmatrix} hu \\ hu^2 + \frac{1}{2} gh^2 \\ huv \end{bmatrix}, +\mathbf{G} = \begin{bmatrix} hv \\ huv \\ hv^2 + \frac{1}{2} gh^2 \end{bmatrix} +``` + +$`h`$ the water depth, $`u`$ the velocity in x-direction and $`v`$ the velocity in y-direction, +$`g`$ is the constant of gravity. + +The source terms for the bed slope $`\mathbf{S_b}`$ and friction +$`\mathbf{S_f}`$ are given as + +```math +\mathbf{S_b} = \begin{bmatrix} 0 \\ -gh \frac{\partial z}{\partial x} + \\ -gh \frac{\partial z}{\partial y}\end{bmatrix}, +\mathbf{S_f} = \begin{bmatrix} 0 \\ghS_{fx} \\ghS_{fy}\end{bmatrix}. +``` + +with the bedSurface $`z`$. $`S_{fx}`$ and $`S_{fy}`$ are the bed shear stess +components in x- and y-direction, which are calculated by Manning's law. + +### Mannings law +The empirical Manning model specifies the bed shear stress by the following equations: + +```math +S_{fx} = \frac{n^2u}{R_{hy}^{4/3}} \sqrt(u^2 + v^2), + +S_{fy} = \frac{n^2v}{R_{hy}^{4/3}} \sqrt(u^2 + v^2) +``` + +$`n`$ is Manning's friction value and $`R_{hy}`$ is the hydraulic radius, +which is assumed to be equal to the water depth $`h`$. + +### Analytical solution +Since normal flow conditions are assumed, the analytic solution is calculated using the equation +of Gauckler, Manning and Strickler: + +```math +v_m = n^{-1} R_{hy}^{2/3} I_s^{1/2} +``` + +Where the mean velocity $`v_m`$ is given as + +```math +v_m = \frac{q}{h} +``` + +$`I_s`$ is the bed slope and $`q`$ the unity inflow discharge. + +Hence, the water depth $`h`$ can be calculated by + +```math +h = \left(\frac{n q}{\sqrt{I_s}} \right)^{3/5} +``` + +### Discretisation +For this example, a cell-centered finite volume method (cctpfa) is applied to solve the SWEs +in combination with a fully-implicit time discretization. For cases where no sharp fronts or +traveling waves occur it is possible to apply time steps larger than CFL number = 1 to reduce +the computation time. Even if a steady state solution is considered, an implicit time stepping method +is applied. + +# Implementation + +## Folder layout and files + +``` +└── shallowwaterfriction/ + ├── CMakeLists.txt -> build system file + ├── main.cc -> main program flow + ├── params.input -> runtime parameters + ├── properties.hh -> compile time configuration + ├── problem.hh -> boundary & initial conditions + └── spatialparams.hh -> spatial parameter fields +``` diff --git a/examples/shallowwaterfriction/doc/intro.md b/examples/shallowwaterfriction/doc/intro.md deleted file mode 100644 index f0f5e0a155..0000000000 --- a/examples/shallowwaterfriction/doc/intro.md +++ /dev/null @@ -1,97 +0,0 @@ -# Shallow water flow with bottom friction -This example shows how the shallow water flow model can be -applied to simulate steady subcritical flow including -bottom friction (bed shear stress). - -__You will learn how to__ - -* solve a shallow water flow problem including bottom friction -* compute and output (VTK) an analytical reference solution - -__Result__. The numerical and analytical solutions for the problem will look like this: - - - -__Table of contents__. This description is structured as follows: - -[[_TOC_]] - -## Mathematical model -The 2D shallow water equations (SWEs) are given by - -```math -\frac{\partial \mathbf{U}}{\partial t} + -\frac{\partial \mathbf{F}}{\partial x} + -\frac{\partial \mathbf{G}}{\partial y} - \mathbf{S_b} - \mathbf{S_f} = 0 -``` - -where $`\mathbf{U}`$, $`\mathbf{F}`$ and $`\mathbf{G}`$ defined as - -```math -\mathbf{U} = \begin{bmatrix} h \\ uh \\ vh \end{bmatrix}, -\mathbf{F} = \begin{bmatrix} hu \\ hu^2 + \frac{1}{2} gh^2 \\ huv \end{bmatrix}, -\mathbf{G} = \begin{bmatrix} hv \\ huv \\ hv^2 + \frac{1}{2} gh^2 \end{bmatrix} -``` - -$`Z`$ is the bedSurface, $`h`$ the water depth, $`u`$ the velocity in -x-direction and $`v`$ the velocity in y-direction, $`g`$ is the constant of gravity. - -The source terms for the bed friction $`\mathbf{S_b}`$ and bed slope -$`\mathbf{S_f}`$ are given as - -```math -\mathbf{S_b} = \begin{bmatrix} 0 \\ -gh \frac{\partial z}{\partial x} - \\ -gh \frac{\partial z}{\partial y}\end{bmatrix}, -\mathbf{S_f} = \begin{bmatrix} 0 \\ -ghS_{fx} \\ -ghS_{fy}\end{bmatrix}. -``` - -For this example, a cell-centered finite volume method (`cctpfa`) is applied to solve the SWEs -in combination with a fully-implicit time discretization. For cases where no sharp fronts or -traveling waves occur it is possible to apply time steps larger than CFL number = 1 to reduce -the computation time. Even if a steady state solution is considered, an implicit time stepping method -is applied. - -## Problem set-up - -The model domain is given by a rough channel with a slope of 0.001. -The domain is 500 meters long and 10 meters wide. -. - -Bottom friction is considered by applying -the friction law of Manning (Manning n = 0.025). At the lateral sides no friction is considered and a -no-flow no slip boundary condition is applied. This is the default boundary condition for the shallow water model. - -At the left border a discharge boundary condition -is applied as inflow boundary condition with q = -1.0 ($`m^2 s^{-1}`$). At the right border a water fixed depth boundary condition -is applied for the outflow. Normal flow is assumed, therefore the water depth at the right border is calculated after -the of Gaukler-Manning-Strickler equation: - -```math -v_m = n^{-1} R_{hy}^{2/3} I_s^{1/2} -``` - -Where the mean velocity $`v_m`$ is given as $`v_m = \frac{q}{h}`$, -$`n`$ is the friction value after Manning. $`R_{hy}`$ the hydraulic radius, which is assumed to be equal to -the water depth. $`I_s`$ is the bed slope and $`q`$ the unity inflow discharge - -The water depth h can be calculated as -```math -h = \left(\frac{n q}{\sqrt{I_s}} \right)^{3/5} -``` - -The formula of Gaukler Manning and Strickler is also used to calculate the analytic solution. All parameters -for the simulation are given in the file `params.input`. - -# Implementation - -## Folder layout and files - -``` -└── shallowwaterfriction/ - ├── CMakeLists.txt -> build system file - ├── main.cc -> main program flow - ├── params.input -> runtime parameters - ├── properties.hh -> compile time configuration - ├── problem.hh -> boundary & initial conditions - └── spatialparams.hh -> spatial parameter fields -``` diff --git a/examples/shallowwaterfriction/doc/main.md b/examples/shallowwaterfriction/doc/main.md new file mode 100644 index 0000000000..01bb7c10ac --- /dev/null +++ b/examples/shallowwaterfriction/doc/main.md @@ -0,0 +1,301 @@ +<!-- Important: This file has been automatically generated by generate_example_docs.py. Do not edit this file directly! --> + + +| [:arrow_left: Back to the main documentation](../README.md) | [:arrow_left: Go back to part 1](swe.md) | +|---|---:| + +# Part 2: Main program flow + +We want to solve a shallow water flow problem in a rough +channel to obtain the water table and +compare it to the analytic solution. This is done with the +`main()` function +of the program which is defined in the file `main.cc` described below. + +The code documentation is structured as follows: + +[[_TOC_]] + + + +## The main file `main.cc` + +<details open> +<summary><b>Click to hide/show the file documentation</b> (or inspect the [source code](../main.cc))</summary> + + +### Included header files +<details><summary> Click to show includes</summary> + +These are DUNE helper classes related to parallel computations, time measurements and file I/O + +```cpp +#include <dune/common/parallel/mpihelper.hh> +#include <dune/common/timer.hh> +#include <dune/grid/io/file/dgfparser/dgfexception.hh> +#include <dune/grid/io/file/vtk.hh> +``` + +The following headers include functionality related to property definition or retrieval, as well as +the retrieval of input parameters specified in the input file or via the command line. + +```cpp +#include <dumux/common/properties.hh> +#include <dumux/common/parameters.hh> +``` + +The following files contains the available linear solver backends, the non linear Newton Solver +and the assembler for the linear systems arising from finite volume discretizations +(box-scheme, tpfa-approximation, mpfa-approximation). + +```cpp +#include <dumux/linear/amgbackend.hh> +#include <dumux/nonlinear/newtonsolver.hh> +#include <dumux/assembly/fvassembler.hh> +``` + +The following class provides a convenient way of writing of dumux simulation results to VTK format. + +```cpp +#include <dumux/io/vtkoutputmodule.hh> +``` + +The gridmanager constructs a grid from the information in the input or grid file. +Many different Dune grid implementations are supported, of which a list can be found +in `gridmanager.hh`. + +```cpp +#include <dumux/io/grid/gridmanager.hh> +``` + +We include the header file specifing the properties of this example + +```cpp +#include "properties.hh" +``` + +</details> + +### The main function +We will now discuss the main program flow implemented within the `main` function. +At the beginning of each program using Dune, an instance of `Dune::MPIHelper` has to +be created. Moreover, we parse the run-time arguments from the command line and the +input file: + +```cpp +int main(int argc, char** argv) try +{ + using namespace Dumux; + + // The Dune MPIHelper must be instantiated for each program using Dune + Dune::MPIHelper::instance(argc, argv); + + // We parse command line arguments and input file + Parameters::init(argc, argv); +``` + +We define a convenience alias for the type tag of the problem. The type +tag contains all the properties that are needed to define the model and the problem +setup. Throughout the main file, we will obtain types defined for these type tag +using the property system, i.e. with `GetPropType`. + +```cpp + using TypeTag = Properties::TTag::RoughChannel; +``` + +#### Step 1: Create the grid +The `GridManager` class creates the grid from information given in the input file. +This can either be a grid file or, in the case of structured grids, one can specify the coordinates +of the corners of the grid and the number of cells to be used to discretize each spatial direction. + +```cpp + GridManager<GetPropType<TypeTag, Properties::Grid>> gridManager; + gridManager.init(); + + // We compute on the leaf grid view + const auto& leafGridView = gridManager.grid().leafGridView(); +``` + +#### Step 2: Solving the shallow water problem +First, a finite volume grid geometry is constructed from the grid that was created above. +This builds the sub-control volumes (scv) and sub-control volume faces (scvf) for each element +of the grid partition. + +```cpp + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + auto gridGeometry = std::make_shared<GridGeometry>(leafGridView); + gridGeometry->update(); +``` + +We now instantiate the problem, in which we define the boundary and initial conditions. + +```cpp + using Problem = GetPropType<TypeTag, Properties::Problem>; + auto problem = std::make_shared<Problem>(gridGeometry); +``` + +We initialize the solution vector. The shallow water problem is transient, +therefore the initial solution defined in the problem is applied to the +solution vector. On the basis of this solution, we initialize then the grid variables. + +```cpp + using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; + SolutionVector x(gridGeometry->numDofs()); + problem->applyInitialSolution(x); + auto xOld = x; + + using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; + auto gridVariables = std::make_shared<GridVariables>(problem, gridGeometry); + gridVariables->init(x); +``` + +Let us now instantiate the time loop. Therefore, we read in some time loop parameters from the input file. +The parameter `tEnd` defines the duration of the simulation, `dt` the initial time step size and `maxDt` the maximal time step size. +Moreover, we define the end of the simulation `tEnd` as check point in the time loop at which we will write the solution to vtk files. + +```cpp + using Scalar = GetPropType<TypeTag, Properties::Scalar>; // type for scalar values + const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); + const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); + auto dt = getParam<Scalar>("TimeLoop.DtInitial"); + + // We instantiate time loop. + auto timeLoop = std::make_shared<CheckPointTimeLoop<Scalar>>(0.0, dt, tEnd); + timeLoop->setMaxTimeStepSize(maxDt); + timeLoop->setCheckPoint(tEnd); +``` + +We initialize the assembler with a time loop for the transient problem. +Within the time loop, we will use this assembler in each time step to assemble the linear system. + +```cpp + using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; + auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop); +``` + +We initialize the linear solver. + +```cpp + using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<GridGeometry>>; + auto linearSolver = std::make_shared<LinearSolver>(leafGridView, gridGeometry->dofMapper()); +``` + +We initialize the non-linear solver. + +```cpp + using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; + NewtonSolver nonLinearSolver(assembler, linearSolver); +``` + +The following lines of code initialize the vtk output module, add the velocity output facility +and write out the initial solution. At each checkpoint, we will use the output module to write +the solution of a time step into a corresponding vtk file. + +```cpp + VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables,x, problem->name()); + + // add model-specific output fields to the writer + using IOFields = GetPropType<TypeTag, Properties::IOFields>; + IOFields::initOutputModule(vtkWriter); + + // We add the analytical solution ("exactWaterDepth" and "exactVelocityX") to the predefined specific output. + vtkWriter.addField(problem->getExactWaterDepth(), "exactWaterDepth"); + vtkWriter.addField(problem->getExactVelocityX(), "exactVelocityX"); + + // We calculate the analytic solution. + problem->analyticalSolution(); + + // write initial solution (including the above calculated analytical solution. + vtkWriter.write(0.0); +``` + +##### The time loop +We start the time loop and solve a new time step as long as `tEnd` is not reached. In every time step, +the problem is assembled and solved, the solution is updated, and when a checkpoint is reached the solution +is written to a new vtk file. In addition, statistics related to CPU time, the current simulation time +and the time step sizes used is printed to the terminal. + +```cpp + timeLoop->start(); do + { + // First we define the old solution as the solution of the previous time step for storage evaluations. + assembler->setPreviousSolution(xOld); + + // We solve the non-linear system with time step control, using Newthon's method. + nonLinearSolver.solve(x,*timeLoop); + + // We make the new solution the old solution. + xOld = x; + gridVariables->advanceTimeStep(); + + // We advance to the time loop to the next step. + timeLoop->advanceTimeStep(); + + // We write vtk output, if we reached the check point (end of time loop) + if (timeLoop->isCheckPoint()) + vtkWriter.write(timeLoop->time()); + + // We report statistics of this time step. + timeLoop->reportTimeStep(); + + // We set new dt as suggested by newton controller for the next time step. + timeLoop->setTimeStepSize(nonLinearSolver.suggestTimeStepSize(timeLoop->timeStepSize())); + + + } while (!timeLoop->finished()); +``` + +The following piece of code prints a final status report of the time loop +before the program is terminated. + +```cpp + timeLoop->finalize(leafGridView.comm()); + + return 0; +} +``` + +#### Exception handling +In this part of the main file we catch and print possible exceptions that could +occur during the simulation. +<details><summary> Click to show exception handler</summary> + +```cpp +// errors related to run-time parameters +catch (const Dumux::ParameterException &e) +{ + std::cerr << std::endl << e << " ---> Abort!" << std::endl; + return 1; +} +// errors related to the parsing of Dune grid files +catch (const Dune::DGFException & e) +{ + std::cerr << "DGF exception thrown (" << e << + "). Most likely, the DGF file name is wrong " + "or the DGF file is corrupted, " + "e.g. missing hash at end of file or wrong number (dimensions) of entries." + << " ---> Abort!" << std::endl; + return 2; +} +// generic error handling with Dune::Exception +catch (const Dune::Exception &e) +{ + std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; + return 3; +} +// other exceptions +catch (...) +{ + std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; + return 4; +} +``` + +</details> + +</details> + + +| [:arrow_left: Back to the main documentation](../README.md) | [:arrow_left: Go back to part 1](swe.md) | +|---|---:| + diff --git a/examples/shallowwaterfriction/doc/main_intro.md b/examples/shallowwaterfriction/doc/main_intro.md new file mode 100644 index 0000000000..15c6b8515d --- /dev/null +++ b/examples/shallowwaterfriction/doc/main_intro.md @@ -0,0 +1,12 @@ +# Part 2: Main program flow + +We want to solve a shallow water flow problem in a rough +channel to obtain the water table and +compare it to the analytic solution. This is done with the +`main()` function +of the program which is defined in the file `main.cc` described below. + +The code documentation is structured as follows: + +[[_TOC_]] + diff --git a/examples/shallowwaterfriction/doc/swe.md b/examples/shallowwaterfriction/doc/swe.md new file mode 100644 index 0000000000..8a94e8440b --- /dev/null +++ b/examples/shallowwaterfriction/doc/swe.md @@ -0,0 +1,570 @@ +<!-- Important: This file has been automatically generated by generate_example_docs.py. Do not edit this file directly! --> + + +| [:arrow_left: Back to the main documentation](../README.md) | [:arrow_right: Continue with part 2](main.md) | +|---|---:| + +# Part 1: Implementation of the shallow water flow simulation setup + +The shallow water flow setup, including the bottom friction, +is implemented in the files `properties.hh`, +`problem.hh` and `spatialparams.hh`. In the first of these files, a new +type tag is declared for this problem. This allows the specialization +of DuMu<sup>x</sup> `properties` for this type tag, which can be used to customize compile-time +settings for the simulation. Two exemplary `properties`, that are mandatory to be +specialized, are `Problem` and `SpatialParams`. With the first, one sets the +`Problem` class to be used, in which users can define initial and boundary conditions. +Similarly, in the `SpatialParams` class one implements the parameter distributions +(e.g. friction value) that should be used by the model. + +The documentation provided in the sequel is structured as follows: + +[[_TOC_]] + + + +## Compile-time settings (`properties.hh`) + +In this file, the type tag used for the shallow water flow simulation is defined, +for which we then specialize `properties` to the needs of the desired setup. + + +<details open> +<summary><b>Click to hide/show the file documentation</b> (or inspect the [source code](../properties.hh))</summary> + + +### Includes +<details><summary> Click to show include files</summary> + +The `ShallowWater` type tag specializes most of the `properties` required for a +shallow water flow simulation in DuMu<sup>x</sup>. We will use this in the following to inherit the +respective properties and subsequently specialize those `properties` for our +type tag, which we want to modify or for which no meaningful default can be set. + +```cpp +#include <dumux/freeflow/shallowwater/model.hh> +``` + +We want to use `YaspGrid`, an implementation of the dune grid interface for structured grids: + +```cpp +#include <dune/grid/yaspgrid.hh> +``` + +In this example, we want to discretize the equations with the cell centered finite volume +scheme using two-point-flux approximation: + +```cpp +#include <dumux/discretization/cctpfa.hh> +``` + +We include the problem and spatial parameters headers used for this simulation. + +```cpp +#include "problem.hh" +#include "spatialparams.hh" +``` + +</details> + +### Type tag definition + +First, a so-called type tag is created. Properties are traits specialized for this type tag (a simple `struct`). +The properties of two other type tags are inherited by adding the alias `InheritsFrom`. +Here, properties from the shallow water model (`TTag::ShallowWater`) and the +cell-centered finite volume scheme with two-point-flux approximation (`TTag::CCTpfaModel`) +are inherited. These other type tag definitions can be found in the included +headers `dumux/freeflow/shallowwater/model.hh` and `dumux/discretization/cctpfa.hh`. + +```cpp +// We enter the namespace Dumux::Properties in order to import the entire Dumux namespace for general use: +namespace Dumux::Properties { + +namespace TTag { +struct RoughChannel { using InheritsFrom = std::tuple<ShallowWater, CCTpfaModel>; }; +} +``` + +### Property specializations + +We use a structured Cartesian grid with tensor product structure. +`Dune::YaspGrid` (Yet Another Structure Parallel Grid) is defined in `dune/grid/yaspgrid.hh` +in the Dune module `dune-grid`. + +```cpp +template<class TypeTag> +struct Grid<TypeTag, TTag::RoughChannel> +{ using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; +``` + +Next, we specialize the properties `Problem` and `SpatialParams` for our new type tag and +set the type to our problem and spatial parameter classes implemented +in `problem.hh` and `spatialparams.hh`. + +```cpp +template<class TypeTag> +struct Problem<TypeTag, TTag::RoughChannel> +{ using type = Dumux::RoughChannelProblem<TypeTag>; }; + +template<class TypeTag> +struct SpatialParams<TypeTag, TTag::RoughChannel> +{ + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using VolumeVariables = typename ElementVolumeVariables::VolumeVariables; + + using type = RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>; +}; +``` + +Finally, we enable caching for the grid geometry. The cache +stores values that were already calculated for later usage. +This makes the simulation run faster but it uses more memory. + +```cpp +template<class TypeTag> +struct EnableGridGeometryCache<TypeTag, TTag::RoughChannel> +{ static constexpr bool value = true; }; + +} // end namespace Dumux::Properties +``` + + +</details> + + + +## The problem file (`problem.hh`) + +This file contains the __problem class__ which defines the initial and boundary +conditions for the shallow water flow simulation with bottom friction. +In addition, the analytical solution is defined here. + + +<details open> +<summary><b>Click to hide/show the file documentation</b> (or inspect the [source code](../problem.hh))</summary> + + +### Include files + +The first include we need here is the `ShallowWaterProblem` class, the base +class from which we will derive. + +```cpp +#include <dumux/freeflow/shallowwater/problem.hh> +``` + +In addition, we need the boundaryflux header, which handels the flux over +the model boundaries. + +```cpp +#include <dumux/freeflow/shallowwater/boundaryfluxes.hh> +``` + +### The problem class +We enter the problem class where all necessary boundary conditions and initial conditions are set for our simulation. +In addition the analytical solution of the problem is calculated. +As this is a shallow water problem, we inherit from the basic ShallowWaterProblem. + +```cpp +namespace Dumux { + +template <class TypeTag> +class RoughChannelProblem : public ShallowWaterProblem<TypeTag> +{ + // A few convenience aliases used throughout this class. + using ParentType = ShallowWaterProblem<TypeTag>; + using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; + using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>; + using Scalar = GetPropType<TypeTag, Properties::Scalar>; + using Indices = typename GetPropType<TypeTag, Properties::ModelTraits>::Indices; + using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; + using NeumannFluxes = GetPropType<TypeTag, Properties::NumEqVector>; + using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; + using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; + using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView; + using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView; + using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; + using GridView = typename GetPropType<TypeTag, Properties::GridGeometry>::GridView; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + using NumEqVector = GetPropType<TypeTag, Properties::NumEqVector>; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + +public: + // This is the constructor of our problem class. + RoughChannelProblem(std::shared_ptr<const GridGeometry> gridGeometry) + : ParentType(gridGeometry) + { + // We read the parameters from the params.input file. + constManningN_ = getParam<Scalar>("Problem.ManningN"); + bedSlope_ = getParam<Scalar>("Problem.BedSlope"); + discharge_ = getParam<Scalar>("Problem.Discharge"); + // We calculate the outflow boundary condition using the Gauckler-Manning-Strickler formula. + hBoundary_ = this->gaucklerManningStrickler(discharge_,constManningN_,bedSlope_); + // We initialize the analytic solution to a verctor of the appropriate size filled with zeros. + exactWaterDepth_.resize(gridGeometry->numDofs(), 0.0); + exactVelocityX_.resize(gridGeometry->numDofs(), 0.0); + } +``` + +#### Analytical Solution + +The analytical solution is calculated using the equation of Gauckler, Manning and Strickler. + +```cpp + + // Equation of Gauckler, Manning and Strickler + Scalar gaucklerManningStrickler(Scalar discharge, Scalar manningN, Scalar bedSlope) + { + using std::pow; + using std::abs; + using std::sqrt; + + return pow(abs(discharge)*manningN/sqrt(bedSlope), 0.6); + } + + // Calculate the analytical solution + void analyticalSolution() + { + using std::abs; + + for (const auto& element : elements(this->gridGeometry().gridView())) + { + const Scalar h = this->gaucklerManningStrickler(discharge_,constManningN_,bedSlope_); + const Scalar u = abs(discharge_)/h; + + const auto eIdx = this->gridGeometry().elementMapper().index(element); + exactWaterDepth_[eIdx] = h; + exactVelocityX_[eIdx] = u; + } + } + + // Getter function for the analytical solution of the water depth + const std::vector<Scalar>& getExactWaterDepth() + { + return exactWaterDepth_; + } + + // Getter function for the analytical solution of the velocity in x-direction + const std::vector<Scalar>& getExactVelocityX() + { + return exactVelocityX_; + } +``` + +#### Bottom friction + +The bottom friction is a source term and therefore handled by the `source` function. + +```cpp + NumEqVector source(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolume &scv) const + { + + NumEqVector source (0.0); + + // Since the bed slope source term is handels within the flux computation, + // in this model the bottom friction is the only source term. + source += bottomFrictionSource(element, fvGeometry, elemVolVars, scv); + + return source; + } +``` + +The calculation of the source term due to bottom friction needs the bottom shear stess. +This is the force per area, which works between the flow and the channel bed +(1D vector with two entries) and is calculated within the `FrictionLaw` class. +The bottom friction causes a loss of momentum. Thus the first entry of the `bottomFrictionSource`, +which is related to the mass balance equation is zero. +The second entry of the `bottomFricitonSource` corresponds to the momentum equation in x-direction +and is therefore equal to the first, the x-component, of the `bottomShearStress`. +Accordingly, the third entry of the `bottomFrictionSource` is equal to the second component of the `bottomShearStress`. + +```cpp + NumEqVector bottomFrictionSource(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolume &scv) const + { + NumEqVector bottomFrictionSource(0.0); + const auto& volVars = elemVolVars[scv]; + + // bottom shear stress vector + Dune::FieldVector<Scalar, 2> bottomShearStress = this->spatialParams().frictionLaw(element, scv).shearStress(volVars); + + // source term due to bottom friction + bottomFrictionSource[0] = 0.0; + bottomFrictionSource[1] = bottomShearStress[0]; + bottomFrictionSource[2] = bottomShearStress[1]; + + return bottomFrictionSource; + } +``` + +#### Boundary conditions + +We define the __type of all boundary conditions__ as neumann-type, +because we use a weak imposition. + +```cpp + BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const + { + BoundaryTypes bcTypes; + bcTypes.setAllNeumann(); + return bcTypes; + } +``` + +In the following function we implement the __Neumann boundary conditions__. +Due to the weak imposition we calculate the flux at the boundary with a Riemann solver. +This needs the state of a virtual cell outside of the boundary (`boundaryStateVariables`), +wich is calculated with the Riemann invariants +(see: Yoon and Kang, "Finite Volume Model for Two-Dimensional Shallow Water Flows on Unstructured Grids"). + +```cpp + NeumannFluxes neumann(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const ElementFluxVariablesCache& elemFluxVarsCache, + const SubControlVolumeFace& scvf) const + { + NeumannFluxes values(0.0); + + const auto& insideScv = fvGeometry.scv(scvf.insideScvIdx()); + const auto& insideVolVars = elemVolVars[insideScv]; + const auto& nxy = scvf.unitOuterNormal(); + const auto gravity = this->spatialParams().gravity(scvf.center()); + std::array<Scalar, 3> boundaryStateVariables; + + // Calculate the Riemann invariants for imposed discharge at the left side. + if (scvf.center()[0] < 0.0 + eps_) + { + boundaryStateVariables = ShallowWater::fixedDischargeBoundary(discharge_, + insideVolVars.waterDepth(), + insideVolVars.velocity(0), + insideVolVars.velocity(1), + gravity, + nxy); + } + // Calculate the Riemann invariants for imposed water depth at the right side. + else if (scvf.center()[0] > 500.0 - eps_) + { + boundaryStateVariables = ShallowWater::fixedWaterDepthBoundary(hBoundary_, + insideVolVars.waterDepth(), + insideVolVars.velocity(0), + insideVolVars.velocity(1), + gravity, + nxy); + } + // Calculate the Riemann invariants for the no-flow boundary. + else + { + boundaryStateVariables[0] = insideVolVars.waterDepth(); + boundaryStateVariables[1] = -insideVolVars.velocity(0); + boundaryStateVariables[2] = -insideVolVars.velocity(1); + } + // Calculate the boundary fluxes based on a Riemann problem. + auto riemannFlux = ShallowWater::riemannProblem(insideVolVars.waterDepth(), + boundaryStateVariables[0], + insideVolVars.velocity(0), + boundaryStateVariables[1], + insideVolVars.velocity(1), + boundaryStateVariables[2], + insideVolVars.bedSurface(), + insideVolVars.bedSurface(), + gravity, + nxy); + + values[Indices::massBalanceIdx] = riemannFlux[0]; + values[Indices::velocityXIdx] = riemannFlux[1]; + values[Indices::velocityYIdx] = riemannFlux[2]; + + return values; + } +``` + +#### Initial conditions + +We specify the initial conditions for the primary variables (water depth, velocity in y-direction +and velocity in x-direction). In this example constant initial conditions are used. Therefore the +argument `globalPos` is not needed. If you want to impose spatial variable initial conditions, +you have to use the `globalPos` argument. + +```cpp + PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const + { + PrimaryVariables initialValues(0.0); + // We set the initial water depth to one meter. + initialValues[0] = 1.0; + // We set the x-component of the initial velocity to zero. + initialValues[1] = 0.0; + // We set the y-component of the initial velocity to zero. + initialValues[2] = 0.0; + + return initialValues; + } +``` + +We declare the private variables of the problem. + +```cpp +private: + // variables for the analytic solution. + std::vector<Scalar> exactWaterDepth_; + std::vector<Scalar> exactVelocityX_; + // constant friction value (an analytic solution is only available for const friction). + Scalar constManningN_; + // The constant channel bed slope. + Scalar bedSlope_; + // The water depth at the outflow boundary. + Scalar hBoundary_; + // The discharge at the inflow boundary. + Scalar discharge_; + // We assign a private global variable for the epsilon: + static constexpr Scalar eps_ = 1.0e-6; + +}; // end class definition RoughChannelProblem +} // end namespace Dumux +``` + + +</details> + + + +## Parameter distributions (`spatialparams.hh`) + +This file contains the __spatial parameters class__ which defines the +the friction law, including it's friction parameter, the acceleration +due to gravity and the altitude of the channel bed surface. In this example only the bed +surface has a non constant distribution. + + +<details open> +<summary><b>Click to hide/show the file documentation</b> (or inspect the [source code](../spatialparams.hh))</summary> + + +### Include files +We include the basic spatial parameters file for finite volumes, from which we will inherit. + +```cpp +#include <dumux/material/spatialparams/fv.hh> +``` + +We include all friction laws. + +```cpp +#include <dumux/material/fluidmatrixinteractions/frictionlaws/frictionlaw.hh> +#include <dumux/material/fluidmatrixinteractions/frictionlaws/manning.hh> +#include <dumux/material/fluidmatrixinteractions/frictionlaws/nikuradse.hh> +#include <dumux/material/fluidmatrixinteractions/frictionlaws/nofriction.hh> +``` + +### The spatial parameters class + +In the `RoughChannelSpatialParams` class, we define all functions needed to describe +the rough channel for the shallow water problem. +We inherit from the `FVSpatialParams` class, which is the base class +for spatial parameters in the context of +applications using finite volume discretization schemes. + +```cpp +namespace Dumux { + +template<class GridGeometry, class Scalar, class VolumeVariables> +class RoughChannelSpatialParams +: public FVSpatialParams<GridGeometry, Scalar, + RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>> +{ + // This convenience aliases will be used throughout this class + using ThisType = RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>; + using ParentType = FVSpatialParams<GridGeometry, Scalar, ThisType>; + using GridView = typename GridGeometry::GridView; + using FVElementGeometry = typename GridGeometry::LocalView; + using SubControlVolume = typename FVElementGeometry::SubControlVolume; + using Element = typename GridView::template Codim<0>::Entity; + using GlobalPosition = typename Element::Geometry::GlobalCoordinate; +``` + +In the following, the properties of the the rough channel are set. Namely, these are +the friction law, including it's friction parameter, the acceleration +due to gravity and the altitude of the channel bed surface. + +```cpp +public: + // In the constructor we read some values from the `params.input` and initialize the friciton law. + RoughChannelSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry) + : ParentType(gridGeometry) + { + gravity_ = getParam<Scalar>("Problem.Gravity"); + bedSlope_ = getParam<Scalar>("Problem.BedSlope"); + frictionLawType_ = getParam<std::string>("Problem.FrictionLaw"); + initFrictionLaw(); + } + + // This function handles the initialization of the friction law based on the settings + // specified in `params.input`. + void initFrictionLaw() + { + if (frictionLawType_ == "Manning") + { + Scalar manningN = getParam<Scalar>("Problem.ManningN"); + frictionLaw_ = std::make_unique<FrictionLawManning<VolumeVariables>>(gravity_, manningN); + } + else if (frictionLawType_ == "Nikuradse") + { + Scalar ks = getParam<Scalar>("Problem.Ks"); + frictionLaw_ = std::make_unique<FrictionLawNikuradse<VolumeVariables>>(ks); + } + else if (frictionLawType_ == "None") + { + frictionLaw_ = std::make_unique<FrictionLawNoFriction<VolumeVariables>>(); + } + else + { + std::cout<<"The FrictionLaw in params.input is unknown. Valid entries are `Manning`," + " `Nikuradse` and `None`!"<<std::endl; + } + } + + // This function returns an object of the friction law class, already initialized with a friction value. + const FrictionLaw<VolumeVariables>& frictionLaw(const Element& element, + const SubControlVolume& scv) const + { + return *frictionLaw_; + } + + // This function returns the acceleration due to gravity. + Scalar gravity(const GlobalPosition& globalPos) const + { + return gravity_; + } + + // Define the bed surface based on the bed slope and the bed level at the inflow (10 m). + Scalar bedSurface(const Element& element, + const SubControlVolume& scv) const + { + return 10.0 - element.geometry().center()[0] * bedSlope_; + } + +// We declare the private variables of the problem. +private: + Scalar gravity_; + Scalar bedSlope_; + std::string frictionLawType_; + std::unique_ptr<FrictionLaw<VolumeVariables>> frictionLaw_; +}; // end class definition of RoughChannelSpatialParams +} // end of namespace Dumux. +``` + + +</details> + + +| [:arrow_left: Back to the main documentation](../README.md) | [:arrow_right: Continue with part 2](main.md) | +|---|---:| + diff --git a/examples/shallowwaterfriction/doc/swe_intro.md b/examples/shallowwaterfriction/doc/swe_intro.md new file mode 100644 index 0000000000..c0e5511287 --- /dev/null +++ b/examples/shallowwaterfriction/doc/swe_intro.md @@ -0,0 +1,17 @@ +# Part 1: Implementation of the shallow water flow simulation setup + +The shallow water flow setup, including the bottom friction, +is implemented in the files `properties.hh`, +`problem.hh` and `spatialparams.hh`. In the first of these files, a new +type tag is declared for this problem. This allows the specialization +of DuMu<sup>x</sup> `properties` for this type tag, which can be used to customize compile-time +settings for the simulation. Two exemplary `properties`, that are mandatory to be +specialized, are `Problem` and `SpatialParams`. With the first, one sets the +`Problem` class to be used, in which users can define initial and boundary conditions. +Similarly, in the `SpatialParams` class one implements the parameter distributions +(e.g. friction value) that should be used by the model. + +The documentation provided in the sequel is structured as follows: + +[[_TOC_]] + diff --git a/examples/shallowwaterfriction/img/domain.png b/examples/shallowwaterfriction/img/domain.png deleted file mode 100644 index 27029ab28e1de01c7736fb54be698db508f5777f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18385 zcmeIaby$`C)-AjM2@wHNN+}Uhkp=;2l?DN6mF|#Ul$3~+)I*nacL_+Nl$3OrNVjyu znagMI{q65N`})p#&%fvOx)Eiqb;mEp9COSu@spPozlwVk7lA-rm6Q-sKp@cHArNRk zaj@Vgk9sHO;M*nJr;<uI@W%y5-xvOW*-GN2EdoKHgZe_t63R4zA3jEksv#9E4UrBy zHU<cD9i-J8OXM39T^f4>8(R}g3mOh)R%Q-H8e=5VikF4u|9JzmrHv6w{FU5P1cC-3 zDe^?g@zdI*lU3ZF$Hi7K-FVfTjtc#wkIyhZq~2D)Esq<{#hLz~2#MRlS;QL8q-Y%1 zRW2-ba_7xU^fml+jRKu=Ca>~_jSuqnQRvGzh{%FMbG<G-CHlk@HOo^j``Rac@xaHt z`6D%-u#3><aDb15)^hI-O@n1!w*d!UBOyEpW20d2L-_t~OB8{QK&auN;UEy&Y?o-@ zN6m!q;1!Z*|NX-M#*oPPA=Inw^GTRqrD?O?kL$`<OmJrAj+D)`Tg|Un8Bmmq7+zIo zB^xLk*35N1*{8ItBoI0+ij9k#x2Z(7kQ*(*3%5GDV8EkqWQZVIX05woIK&AA4}bnu zys=?nK2r2V=%`KZvrZ$Hz{y(a@$W{0y|O}A^CknqolcHdCHj6A^=J0x6JK5|Cc4*= zFso+`4Gk5K;lVsgel;ZXX6t>pB{}kjEB{rQRFsz6QBk4OV!Q)#f7HlqxIn}7%^ObF zt{SHu<neOmYKS;hn*g`-{u>Rqqxo0Gy3JXI+z3R2KHFVGgiy8>4<kHYNeO%ZmJ&ny z-s-T~*Y}uC-7IQF!j?5#EslA#@ZJv(qL+xt%>6{3R!rK*6;v+VjEIbkt;<MFeHJ4l z=2kDX=~O>mSYBSP6BRE*A0b0;8(cb?$IHj3{PN|4xGpZ<TQCwW;W}g=#ZqyxJWIwi z=ha7EJkLeQWcF7bujEE_8ScRlQ19)Di^b`X-SM9INc<29Peirz79H`<ufqAjVsLm^ zZr4=C*W~)UW#p^r!xrv=zP=Qpi=*zwALo(^%E}QG_^p49*6r`_-!6Uc$@IEhMmmbQ zO90=e5yoR+W3pQOlpld$brPYy_K1@+D=kewMb+S&j6Z_Hx88ibd^ti@^M!%Iyl){3 z14AFV(Wm6WT-DW&4-38v)W6*`)vzBmXsqjAMz${_@tx{Ee-1}nLTG<1-ky1_NQ=-b zjxM*HPH>)pTY4VHm7S9E^sBbK*2VE~8BFon=EZp-dyI^QVIjOADk>V9=Fd{6rmAl3 zWl?uzDB0JSE?wrhr5o?G5ECopUPtA;##UBdzS45blH%g(B?N*@9Ii2(|2os3x$6Fb zqc-=N-LOXHd`Hyk(PCm0UA+C6iPNU@e1s};#*0)c)P8LwIVdP-VnkV0BmJ2V{<7Bj zyw+#;3%7Wi_6Kj_Edv7soGq_0U^I#|ChQRR!X)Tu6T365csiN25r_;NH+Q-IRTNNY zJN`Fz{GXvF$6a)*^|7*7pN&J_e@%MB6_?<=QCYKPl<2AwrEcSwlar%gI{Mk9KO>cS zXRDPus>|@!HcUf{DF<AS-s{1&cUz9?whNuTo&<tCYlpDCGvNe_*O@9le^xp<*z7*B zu2fGgZijb=seBbFY-laEnt95k{>5r!tJ$AaI@Eq+;>a)3taS7S&ZQuOL3m%rrw42p zJSw`y(Xp|yN?KZlg>HMfV_&RieGBF2!#;}8ItjtM6ax(~em7m08<-6iDggA+loQws zS7(m;!MDi|+r)h2AWyCMsbC_@L4QvVYmgaW5-Ts`t#^x`Y=i2Kx-3n9e0t1#ak{go zb+M<#dww{(M}4tH-B@QdT4I3f(^#1}S?v%!dlMF4K+pqgyq}Im<LkVud8J~X(2%_G zHoWn(UsT{WQoBny-ifp0J&WTqS1>nU7b%1|-w+*3#PP0JO=i5pvRlBy#H2Uld7RRV z7s)LxVs`fSIb~(aC;RJRbmo&)%AxSwHbzI9&g*44xw-uSD0GqzQ%;#b9xqaK#Xgb_ zkr1grY-WKepcmNfc{W>P2Undnle+Y?%5D|eD@r;~#iCKA6pEa*8=jY)`*MD~YCEf{ z<yuC!9K^TLvpwH&S2908zhs<1&e8kn?Xy{-^VG4ivALZiPKOQke2r=qnCpF>H`m~{ zn~KT3b!2v>WR&5mf{Ai7R%+?#>DOy{5s069KM%ND{{&_H|BlxGRi1)^#R837QGb#L zWO(g{rOTCz2_3iGAr9KL-Hpo1$&uoU13WfAR_oBHv`LrcU8Z{+FB^~SlYCWXI;fT> z2$Pe>eixmUD%cFx?c3j9v3)3oHfwf}-2w+LYX)^k3vpE|Ik}$!ozM0P-3Na)`|kx> zx;(S2KifCX=R$p4AIMkqQp6!0Y;u+SSLq!r^)BB>e#G+)PE6zl-r`>Q+%J2}`mw5p zT?B22@A+Y?&_cq=c2s@d_O^|{-hd*tnFjpaMKJN(Op%ndw9u$GjKbxwo0|{VF?dL( zTy~x_sTI*|R!TEhil9RBrF_(qI=l}dIr_f2x%u|VnN#=CnOj*|+0~N-efDg9_84ah zKarL<XRxAMJ{lMy((5MMJjuP;<|@Cc<f+|G?2bAyF*YV!RYt`YyU42z!ZfV<<%PAi zuHW;1YIj63De_SKI9r>lb<R`04pCs>B^P3`JFyTV;-bL8b_dJqgl#wFzJP3|BCO-T zVWTUY2aA=&-vl;bWh)aC)7WQ|Fa`#Ofsv7{A3tOvoS9D7xrV0Yzpjv4iJQN22|YB; ztgu$a&dv@vi5K1S$@E2?AVl-kDd){WgD8y*q0<?H<Nn0+v|%lG*H0Dra33zu{m2{a zR)<VBCMsk3917@6miy9C|2Ut%IB^e6L&25p;*Y`fC`|@Q6tQ>&TT$S6DYeqzGu*(% z`B`NvFu8&Rw_}sD<Kg-tBcYR*0)SC(7h;S!EvIU%C)i=|x47pEFnD6DC~pI3Qb8~b zAs2?B44^^>lHH(-gZhvEZ3G$+Zf{@#h$6E8^a2HD+$;QSfr(Vc;Q`1<6dS_7kp9+p zSai=<^ys)FnRDO1ebY9#Wl<%mGc}gI!n8vmC--+w%VOlDVcgF$Oawwj91&FVLro#R zIBjbB7CR-&4oTbQ&UdYa$mzw%`p#70nAdv|&A8!}26qV25DjE^5aM6+$mgZ>uMh`j z-tf;9b1}c4pm0B-Z^(7QV`=BcUaO849oF%My6UoW(Zn+vU{-o!h@kgZ7P#9L6=)>^ zYz6!@y=WyxQzS)oB}Hc+i0YjQiC=EAa*&$Y2p60n<)UP<BW>4O2$_bvp6IX79nG)8 zEi~<@wHdiA0&##H-70+a4VTk|*Y=ky#Ji*f<lK1A{PeYGyi?oGS!EddsC{}zzI%`@ zOFrzoK2(0T;Gwq0u$K5}ZM>GBHBL=+=7qVJsu%u`6L_2zoCa&d($P74;`Vh0CG$Wh z8u~DDuawJPcaC(())SvoEbGsz(dMt4o0wbrM+cEs<DSg+#K%eQo=oKA?&g$Fq^6*^ z8k;i!1y93ikZdt5ZJTG1Z&1z?-edKMZofYv<Vogt*S0zm`#iP_U(2^x<P{uz_|e!Y z!!MI!pWMsD>!ic#5WrP&oM)ti0gi?{dhq8ojDO`;37?y8{$<_B8ZK)zNW2{PWbI00 zokW03fN;P)=fOTIWohRD<b<LUjeAVB5D`IQ9uea~PC?&8QV$$}3~_`k2LO|(DE?7y z&9>^*t0Iz8nH(#)_iS2e#DYeeKegde`%Y$uVDu_4eV?x7Um|PL_EO!TJrBV^Xs2wA zkG#jdLYb4jonx3L96(1LMCbkKD@EYlLB6Ln^nK*(ykz|ao^1WrM#*~eWL3)jLY^?R z%C2`&*LM6_!Q_3P5t)_Iml`V-yzIyu|AJ@C9Z&Z&3m!JL|Hyb8rTu6dQY@d6t;{|e zTla-WExZt)WWz(~KX1Jq%!oj=ew@xYY(m{Z&hM<8UrQc5j{8<WV||x*e|to)beSF` zf3c_j7#Bo3VvdWaK9wOvWaeUl`LM<`Yr9=hsiC<94Z(wpPMErp<uMYcOc$$U9Ierr zeGR>s+ss(bNZpyY3!_)3Vm|&8JFEW)sc-W(FKTh&2nSSuL$7A&n9N~xhzmL}#6o9_ zA@#;^m(5^rWabNd^trI~^$BnF^Hxgx*Bf{X@4CZIY>U3-9^)2DO?X|RMQD%RL9i{~ z;91MLZ=0La$xp};lSf;uG>xZwv8F@k=IF4~i*D_%TCwk7C(X;LKVhM`!RzZ2{ABmO z+RO_LFI7RgYcPP(+c?59kMVsp<^`kLU77p0-VDjpMRraGJN*_dNi9wzYMa4eGm|h+ zrYiG#E7NM;_m>$BK82^6){JsYl<*~ljN2ue49e=sj1q;Yb}4vL)_@7-g*tyd>I8v+ zCIu-vXCIC7+sndV#Ie5#gz`SuQk=D2l$E_4?xZwpn_XVB$<9sOEQ@{(!8(H@tQOQ| z7*;rNcUr=OO!@(Z<eb(*hC6-nJvJ8_DFx>*;_Es)<RX$e40dga{?97V4P4y|U~A+w ziNfA*p+Li-_zJs1^;dXdlL@Z{nRm*T(uE|$S*dR&M@-nt2Ki$`KHAH6B1B^~)g8#1 zoTf*{+&c}fF#<V-yE#?i@Gum7=!AzKAnr-|$1^Zd2@>jUeg4+_;al&yMrW^*1s2;> z7?t%AW$y>xl*{I$dQ`r|%|C8ORgp(Ofn5qy@-quZSQ~{H5jRM))4oXTl|5^{+9+Sc z7w-_-{*y1esahPr>7NLA9T4z<*Y;i}MZyzgZgPp*BLj<3SQ$n9=!9fOu$`KxXo;Qu z)5bz?&wA@*RcERuOZ@shsboXiDa&9VF1+^f-XO8uif1jL&H~d)aAO@Sg>SQWyYArO z1cTLxxB(v;B8(IbM}{5Fr74$Olkjv9(;G{d%j|v#1y0kczdpgK9bK}c6dcqWSK@+B z_(dy68-*+H9V~i~H$8<p$$(pl)?KrY<KK7+Ac%YH6LiZvS%f{cz)H8rju4yKsh`yE z&Si(p8ym7F<8C{`jMk(J_Ds}ulbX|#4Cm|>A8{#Ci(?S)*hCQM{Q)q!<H|G@xoS_` zxBg&_%sjR(9q-ax->q;wy~BBN=f02oX=Sxcy1bfeH{llfa&|FO#DAb}h5jZQjvDF= z9WRr{Vs!_H@K7L=@ph10ibC-5-AH%th&3EoHEG1sX=StToM_(0V^)r@V`6EnWE6bM z9kYRRv|ym&XyX|5!oFByUhoix_1PXI@4Ka6_-ZWG)Fe1I$oV7gc7X?v)$=CUX77nL z;X`6*XgEKw+mbxKk+shtzy63)E`uFc^cbV~g2dVL85_q_8v9H!d=b^;)J<lFN{KZ- ztYWxcl~kcREC>o>xZ=QLe~N8Yr};v5f+i*2RQWF#?A%+))zQuzjo7-h@x4DhU##;R zQ~CaQDt^&iJXxvHh0#hgq)gKBQhQN%6u}sbxWu~g5%+I^j24#3<iHgT^(^olaUikH zb0@X6w6q^FxYti!X5Tb0c8!D5fn<chXC{d+XF%CeS#>6&`uh_a^yvK-Iz)xVWKL$n zTdBg@{aDDSvO&60R#i0v_E9w#DvgAMyM39nK9B@)gM?Q}WBG+$dMlDY{>Oca^(#%^ zlTKI(I%zZd?_AQgRH-ItE<2H*I4z~zzuiiM)jk1XMOkYmqV=UPTx<J{H(MVjwO|a2 zE=In#=mln!VcRXB3MoYS%F4=|ef8kzX!gOBvmEMHfG%28&XX{`EYX+p(WWB`>0a#L zoStNmYwNkPj~-1{8<Y1fB<*QP(_jAj;(C(lVmM8y4~oW*gM~WlNdXg6t3K)ySL29i zm)tr$qr~@7e)WpCH<#nK*ds(-Z0v3$^|}18x@{n^H*eR;ILo^1#IrRc-u2J@yQ$P? z#-9b<Ca%3}7zl6ECk~<~{z$j;%}SfwmObKVpu>K|ypkgd`&UuRF!!IJlU@Cn@FjXO zG@f>}XsL81B_&S7!o)YQ>)*B;2A&Jc%*o38H4$iC-%>;GwNRY0BQ$eyy_Y=@c`*4r zy_3)G;3Gm26F%IEaO;bXYv01wJ}wzIXE>--+OUlYGAi|^Ev_SPl9-C=baj`d^C4); zyA7~AK(f-S<>S=#^Yz-^<csF~G4|k<hyKc%GBoHs_Ihtgerug?lhy(~G_|x;<%)Cf z>^eJ`7K)_4iqLDZsL0M6NH6IF6u&9WaO3$xfftWe$eJ-@x=4vb(>yiK-jZ;ZxI*T# zV<5}LP2cm9I*qQq2u<b4=)&s=JT5~t$Ad|S)mEYNVp*P<OGjttHF}yn=a>yh!;0~_ zhjwk;3N$T>xZ*?~MRpum#AhGu(TU+V?OO$pH440~7<8%08HnIJxBBfGb1U~FfLmw_ zE5iMJCvjD^{y5@%hWcD5PY@lEL03IVujQv$N3=6pIhvR3=pdyLa!TIhq0u=ha0gpg zoGv*?;%S_NLrjor#FuSZCGs!yzl3SVjuMgDW4B5XpCRRjB&Wr63&CnWx(@Kmr_A2D z<%T+y+^b}(6!!|73#NnPV9~V=$>1-iLB>x3#LL&%2%0|X8cl7?dyF=Dp9>>_^=aq8 z`A#$4kME(f=(j&Tuv=E{AR0me1f^<38Ma~*C8D}+uE_3U>mq+1Ha2qjZEb{L6mvu> z88K!b9DI;zefTlnGw2yVg&zioFDCv8o8_H%#gB5LJjg+qT<Mc$8T6rc%L<d_mGtuR za+>WHJXuq7S^M&fofVOh0>PJdH1~%*EpQY=B0b=$sSkEY=DVnlPc}Oyl$2B26{2u2 zi^#AtV{mwLyqiATaM){qSh$qp&#YizaQB`YqJd5aCdQhyeU>?#bJtxH!jD{vs)qQQ zE|rUTM97C<54?UoFrPFM^aKVCoaEQR9;U9Ia&eBU1^P8IY(0{9a{OB#R0`CyrCDls zqoc~~*I%8D*Pq1=6>1fpogA1A<|tR4Zg<#1Oj-gBWk4@jAfupwxhsxajzD1dFImB( zIi09Vmm`}=(0Klt$WiVbqc<oSmQvz3Rq1H<llls{8nLy8iceTr&I#lFi66_2XFB~` zL=HL|_zX_1G%6&yV~YweJZ8x%2pgg?wM9j}K&JTe;-v~d)$pgsw#c)+;Z=Ba3U;?? z*MsHrlg(k2zyn{J4wH6Kb-U>-CaXjF4CFe)Yi;)u^MuZp<tkh8u`gbry$fz!XZUMe zIVEY@rRH95t~^h&6=Sv<|DZeLubG&p5PU(1Ld5Hr&Bj?#e4c{cbBV<^x2{CZgPq$0 z#|00@s3VGHn9^Y)8KsDBJMy=F&hxrLYC7}HD?<;4#RHqFXT4&&p#G$~K8)^cfxA9r zdUJTw{leMxWPF;+z7i7?6ZaB&>t_qZyX0f^Vzsh!-To~R8*S2^Bw$y(By2!@TZl}W ziA>gc2-zqPc&}`K>(N?x(XgnZk*@j`m!&!yEl>w>{)@D}Cy0`7?%?E+UQ593dme8_ zigc6&Gt<*WA(4Jnr2S;$ab|z^73MF0#BX1;FXrQ1n4V8SGeFIk!?bIKA;<)4t6^<v zp>6sb)^xh()YOQE@9IC$2ZwItmKz=lQ+yfJY?>o$TEp=oliOcO#kl6mDMR!2Bd)hP zM(^fo+>^XqIzpYRFeskEy|<(>TGx)wj!tf$y4BmSk3CvDS?G$(yqDnkw3XVu2A_f_ zsd}SI8kMthSx)7(w@dY-<Tu^#)}DxWy^A&^_vJN`gv*AJ{4qBve6w#Gu^R!{Zz%mM zKvzR3J>k!JVEeGg9m^InP3=lmfUCz>Mw<h&Ej!VF!y+Ne6^-NFX4GqB731G={LMVC zC?}x2v)Das-Ab7`eY(K?stTFC>>SDTI+B~jPh_B{$11=KA90xWNfdKimH4}s0hMpI zl323D)0w5D>q@#lg?`bf1V$h`z@93=bn(fKFp`A#SWf0Kh0i0wiWP=q^j>97!}?bq zFF2Af!l{`01cN;E4naIqdi^@ix$bWnLZU{qP*z}1>5t|(%o8vBIDSEO0UIGh1!>cu zl9Mur3{6Hqxfg9)o$#8Fzte9S-Tx5SPr9}DDe6+CHpoPRYkoZKKR}x`QNpm=UmHDc zlXFWcbU#~VU|_F*T07vdHVILnFe8J0(tg~$bvLG~s|yz0tJ=3^3qRr?N=l_Gyec&e z+^9X63a<SGGRwiVyA}uz=WO`|2<`2MkWy9krLIWrgxzp<F2xnSjw^m_SxVX=<o`IH z>NcTs>6q*Nf=QoW3yJGRi-}(++)Jd)D^;&XXgX<JqHUSV!ut7)Kp^e4Wvw#zBr=SI zQ7wt1n_m&C2+UE^8X6j7B?kVQ?q_!9qa~u;(=MfTJMo(?dGjs0Z06H-0ta7U38R!! z*!DMX-73>>BbszQn2dd77HQZOn_j(H_nInL9D@4u4FOUum*Rpizi=mAcDh2-s84@l zqeN=>)Zo-q0cy2@MmenEFll_wgocoLf{AIb9O0~_Y(eE4BcqZmp^z*=Ye~A(@aUR2 zZWEF|SHS1j7?3*rIxO7{vL@W%6^4(>zvv0A*MLpb|Mp^8ig%dmy=7UGY?R<6R)2A} zSqAyc-tI0+oI`0fs1ll`+fE$A!-pp$9U2uD@yu0ADHF3Ev%lePcv0$1)qLdZf&Tu~ zO_xQ!$}3Om0ZyHU5fjCFKD@lVHo*sLqp9^5C-ti0;yxht+JVBmlwUEWps3h?|1=(f zkTHUEEn?n6ITDgXNcz6@0ynDD=sdcYlNK&z<gH=P8#Xxg<IBE%EOttx#VzDovb4u} zOp~zFbaRQcK;xzd23Ejm?YsPU&S)42!9W@MTnWZ>KtTx$tgYXdAGQtr_Hg91kJ~Qr zRGZzo-&5aFnf*~1)Se>FulGDawi5lfbP+ymTq8sn{H62x+<lMeM`>polVj6^0&8Yi zKeVYRK9(6!JyIgh?d)g^QV|AOn6-_E!agFRN=b#+g{GydA4CEf2ex~mwRf27nFdnJ z<%2)x_9JTydkid2>&{DKIwoRYXwW8RE=3pq^zai$ouL`da3u9<J0iM!=;|fi`=6Hh z9^XxX1R$a5yT=IC#tY{!Mk8A*3d4VuMxVjul}S4mt=o0(5#EFJ4)M-pAq(zvU^0HC zo_gn+gMwe?z$Awa4OIXgk~Or)xiJ7mF@ES$0mTSdA&PLi+|>3CRIvtK3ZMWV;~5@s z5i~)ZuDO?AAWyqV;v8}=M9oCVmjapP^}jRAlBQ9I>e}<sMh}jdTR9(<U;YYj{BaiD zIu?!jleF$PriRs5%x4ythX)7K9~Raqp!iVhN-AhXY(+o@w@9*^%-mXvpt^WK?HTP5 zvUZ;6DEAh)+DCf3`>_L&0+8^%SX&c1FS@YdJ_{L<Usg8olg7kH-%<-4HPBwOuZFc} zH|4ar>`;FaUo%xVzD2=fB@A0HrZZEh*|p>+a1BH>ABAt*sYYjUxbEZ~>|ed%PX73b zpZe<kAImSOJToZHkqV~ry}f(s-aown>R5&W4rmw4a_)T<^=Ibswm%*pCte&;cSW=5 zF$#g4DMR#kmMOV#oo-UV(~uBbRF^JNfidBx_2}Pe=IaA5nO4_?l*R)cW<LHfH4yHS zI!}L1s&HhWsl9%k`^ao)$@`W?&r75D^o#S&i=nmA($?)eFfuoO{-HEVldQAP(Ag5) zv*SWOR4d{-WbV$?6)k@m=h{BW*X~5O`g!vSh`9A9lbcA`^UEDt=Oq@kdqc&?5+LV2 zcljiYCmxF1ibd(pvt+}4hw>+hK)WQP3M<guxnwV)^R3`VsKPQZ2)(@!&_-#o(2Iw( z-tbO^Eh*n;2ifXtRCODDi<9}iM7Appk&z^jJ}nA3K;pE5DltK&rDa7AbW~9JzOOT= zn0NIEuLX(i{o3Br%52l`L@&zDZreQylM{S-FVSUN%@x!qlwi3G-~O*LH~i-s2MDV` zs#ICY!pGN#yht^(fS^$SM;k)!a~Q2?&i|JUA!+##!b9fCX1x}e5|Uu;Q(~f{xh_j< zDRADTw2$fL-wB9he3>$CS+8-6+hPF9%!R<%pulFA#|5Q3ZH1!0D_Sl@AeQ8+<oC@- zX)$M8?z52LnYM-At=b!UeOIzgU%{<j3$oV2y0dl5IA)`%8YkYf-TuArcY@~<;sl(_ znd?t&^3{re>E%oRTN*3b#%4hdl?j5$-mHShdzZW#b--^RySpOe``%B}LvIkO?B(TL zsIthxr~c&uOj7kE?kUGcPK081IEr_VTU0Y`9${V~SqkKyBHJ$w{U==`3Za`kJhGj$ ze4}9J>S?;NqNF&T6nl(?c{5IlFZE^6`v(^laAlc0ighx;N9ZK~>21)cwvVaH{Ns0M z*%iR(;3(B?#zisqX9>Yby9a%P>E`Z}`p0#l+uQ0lh6aWSE;qgZ_U&2)lxnm&pC2J8 zv`a^~scxZ4FnX@tB?cXzk;{D(vl4VE-riUmc7w_*8yhP3Zz#aQLjnJ2?;;eduDY?l z(ih}#VOTX0T4JL-Je-?RASgt1>n8E1-aOhUv!->J*+aSv7X%hMnxrd-2b6#+7stoP zeL8<%h4>oUI77xh&fVvnR;SS+n`!%f2g8Vn8Vnf>M1EPNr5vO_p6)gtWGf1s1L?t2 z&cnO5{;mc&RG-Z%s|qw9?d@%Ib25xfFlLT(tntF6Q<$`4YunnEqI<kkDb&obv|W^1 z;cKykVrmu4@$+d#C8acuA3V=;RSSoRRn<eB-S$=ntJX?7#LOoFWZT=@l~hy=c@w$} zi37!at~P=7MDnB8GdN5~b=^#E$w``k5_^`U(dEkF_cf-qZT>c@uA%dv{S|?MfheEM zM%{@8s+?PD*wr`bFwGR)nrc>1Nq>;=zwNN7ST7l0-#&7IBV%^-jY_fFn<imSyl0cW zzV>cKqI^Olx>Xbo*47uDI`OAh1J5{oT|?A{`4u;Q{VJZ20hnw<xrP2$yaiO8K5*ph zLh&qDzbF0WKRp_=xdl~HKKPV<^`{;6#!#W+oex*s{dR>VD?8idlxyuij2u)2eFQ`W z;<|FGt6#%=QL98%RdwUA(L=b?uyn<*`SYshK^c5KkDA?fl#x@&&bE|a4={9MdixPP zFa3kz)%ZX4*{vuWU}tpgk~R26b{P%=qXKhCc5d!NQZLVoPhEz=RTP=y@!V!SJVc&d z9LoHic=X^dxHgRTiI(HtArkHcI5`}^6@3DXN?+b3@~aW%w;{Eq4|`FPDehcu*`KgJ zE+drreOckT>sgWn#b^JcFSAN(970$`u&eOUd%nR*_^E>7xOwxYcK~dNH#GR2bcXEY z>7kd`M~gL_?cZ=8-N;VL%3{G?y{V+3#p3RonzOn(S7@npW+aHJTCx7X5ytBP<$B#d zx2{feZ*MQ7P?C;lWoe03K=SSl-0X@9)!OXveb?O()YmdQF76fEd)at`=RMOsNk2R5 z$VIAMr6$U6BHlglKs2#|kwW}xlSi0Rr(56h=ePYP>t;t1C$Bm&dSA%@RlPs+Q}5c@ z)vLH%)S02%HjgQS{>*v?F*>1M`@BtdL4hpPFf(Ss92FlQ?{qH%55EbVR5F%@WA^Jx z;|1{<9acAPWaV&0JDlp+O*VLy80CB}2?h0Bn-HDwI-CMZ*9>HMu|fC3+F&@@i6FUT zudU@Rs#eCfuZU%Cw5Z5sP&0ZPDpgeZ(qQlr$fOMlP=qjrzzrMTsp9AsV}#Vz%S~T} z0B~UeuRGi4x^`QbyPb61?kF04lY@(;tT^nRTYFqpvr40Kh=D4Gyt<8GOD85Ken5yb zw{h7u4aqC8#^wvg1OWj7C<J03Yz%&_buK$%v5aBPEGaK%!3~ZU#p8UGTU8JgrUd0o zTr^*k{GuYOCgHX9bxLcj;>=9(P^9sN8|7HN)@J<<Y5%;^A;z<f6a@{{%rWw=oNP-P z*v?_NXgJaj@86ey{yfms)Kmrtd8e<($mArG<O+XJ#t#hhW9>8E{`v6X!;?a<XllRn z7BS3NLqcD~J8LjC-m&7L$SEj*vT@n6BUfA(=C6<gU3{;nA6sWb(+c)6R!oJG@^1~r zF=yuG@N%0iSsHi7w^10IDkPa;wZhsF1A&<Wqk6I+Cx<~<SsA4vzJ%$^1~lBn1D+Vr ztQ(pp-}=Oh7k{Pk`7N2K+1#8JA<1;jL5%9y)fHmnwJRuKXB!toH0*+xQtvy=PDzPE zL_|c!EO_B&tawO$#Wh#xZw5+*exszsbwC=AYjMXiXMRr6?J1aVB<<Yi=FBNK@y3n+ z@#ic9aF*-eXRNZo8V2+6=PV%-`Vutwr+Ali(@GUXe#n|%jB7oQQdCeWi1qev9Dcf1 zzn)NEEa{O!|5#(=&spZ+EMd`&GxAPOmF*oJs5~birFW^wgUnBaPO?`%DkYhD-SNOO zqvOGT#MR0{O*;(@3)0e#S@KfzONam=s9Sua!1wtVMz`tT2yXSMCDDbj48-~mN*^2V zIA?Thg@^AaepN4w^=@f2;^5}IKf)g-eCgc-sDx**`7|c?^(mmtfiSS6>NK&F!H+5M zJ6Q4T#P5t9eI;2x)%IVunP_f)w$ZE(p;!1>s;LoYhlV<TWZY%M;RhVy1{6X_Nl7Uw zD5Q{c7~+w41HeISgxqeqHu_oeUw9zUF=l8`*A&8+<?&<Y!V1fwqU76~uY6HU#i$c% zwc4Mqy+e2#RE#UDtLOdFLGNM>xb5LMH`)oi!_QGYpV~rs)#o*UC9>M*Q}ddoad>_5 z3p<WrsH1C#!$$=l#dXma4nHh}h?_y*KOBI>(*?}sic<!dtFCa(nj9D8)DR2luxrv# zI=)j}EctaIW;-$x94LYF8R!k4pCZu76frzTMn;TzrzR%_bZJlsNAxd*gU|M-ubfMd zQwWAtT9UBw*k;tE3tCiQBRs*TOCR1k8`3)a;@LCLWk&}GhYfpYaVmE*T(5!g@mwYL z<XY<Wo~dB_Xy(+UEQv>UdzBItJf5Rk(@A6G9LfrsvNY&LH_!<i(zpnHQQ$ZWTlx-` zE^oYwB}2L^6Sav}hj>QE{rikc%0<i$Bs&c<DfP)u%AR*^D=S~~MWB$aA$-BU8n}99 zRTVENZM1Cqq&q+5WzrQ^o@Wl0n`HvDacX!^&Mb|W@mn!9O%(fH%`vx7ak9G#n=Bg8 z3DF<hF@KYdFsx1A0?XP8F#bM$n4|#*Ii>MrI!1oAOq5RPsFH?iV%#GN&{^TemB_R1 z5~9g4fZ<TumNz~pKVRA0Jb&4dA>t;HuctduIGFj9gh|us(${g*ZvDu|gLZZ~*|(4+ zwyw3Odx5x|kFpum#A(pURN)i>5I`h6goQnX8;~^>72KP$4C3c>M3*J|0M+cQHZ{%9 zJ6>mWWas5a)F-oTGA{fffks&wbqT_kSaaY3c(6cq1aA!-8MC#uwRe8d?C<VMgyOGH z7d|^VkbXOkd>rBNN_lv2UR2jkBmO-^OvP!a<{XN^r^%kdr*pEiUjWQ4J6c*6R#jCE zjE<VT&8>wZl4M_U`5Es(xfXSvmQmFwTz48MaqYQQOkRP9$f$b~gnn*I@RRl2AAz`@ zm6RkrI5-HP$3?lhzOD@15J1m}qjlC=Qen}9%Z|#pf9UEez=Mi%e1)0Q&wD)sX)9H4 ziAjh9N4e0WUEpq_n{aV)m6Vm!0rmQ~rlvH#8fSDc*hu^(L!VM&6R+@O5pbKcY6KPL z<ZSAWVmQ3Wwp6lntu?)MVn}%9Z=9Nis@l5;d2llTbvb!?oPTZxl7)SHXABRrjV1Xn zsn5pGtJ;u{A*}pkdyi$11MJI(bUZQ~$I;$}oy8hR48gFbMty#MK4TWc!<fqx*7c1* zvAdFhbE3R_WoMS|k2GW@UsmSq*s~m9{|Yc192o9cwh4xZIh=!sDJn|E)TIw=>jHE! zWg+sD2nB2teWr1|RO<kvu=enlO>S-M@mq)*_j^X}1A9eX{60t-tc-w9V0DHkKmq?~ zjYg-qm@W@RBwh2j+i<vkJ`(7kca(N@0#}IPHH_yRO5+0}H0Y@Tpl7(4+E;6UcTX^} z8#%!mpcDLr!dF!Cqxd(|Q6iO&$gV%gn3YlRWN_~&s_HT)*MpG>C^#h&f~$`V<@Nxl z6ay0z<^H2P@oDUYzL4Aei(cYI4Lcu>G(IW)17UH&VI8wGx}yy=u#mN%Mudl>%*rEM zA+idWy`DmFMnTwXA^FuI0-30pZAb43!$Mdz=iXwNaYpSL>M}InP&@F?{(t`bdB*G? zMhiqy3h7{WP)<<hJnjSg-==cg5Fa~8eD`2ecR%tNM?~f!>UvTSnVD6rt&4%=J#U@e za@=t1Gz3}se}b=w>cOcH6i)}pQIVz5l|mV!`eTPzQP%i>AlCsz_Wud8ii%k9gTIiZ z)Ym=n$S^!&cnI|w)UI#n`<oc9tgiY5kVDy=Hsngvoo;Q2?oyfk06b-d^LK!nec$Dv zz{CV%!T$S8dG^csN00PsV}w!OtamzKiLacrfb9ab%;NhO9WqdDd67%<nl$+M&4079 z{mnPM=kZJ#iFyt^+YU?wADhM&43!5CTi+_`{OOcP427zB|FRM*85|Vs;EU*6-i1Jl z>lH4Q9^R#oOtOo@|GaT?zZ9~8O1><m;lYmSo)P!zTJjvcfuMOq-J7&96l8Z`&cW;b z2gvfB(kPh#4AbbA8#YuZM<#jKjFgA3COqy;e3FMZV1q}yjcU)3N&5EfDJ0@>^lyP1 z)&cKV$i3Wu!WPnMlj<L^g^T5*zK{Wv{uPK7&OrN&Rlq2h?lx))V6R`fGJkL~e-KBF z9W9#)gAw7t)Z`(&wzATWsoPrTx-wEB_xgOheA$KpqpUKf5u{K^YB&sY*a`nieWxES zd&mW+`39#^R#Z%l)%iguo7s=+^|VowvHB0m%QCOWFIyizS)F3jko6MMeoJCo<dng1 ziuO0==%O|{LPihjb^oGj5PWzjxKKG?o+Cf=|A*?S4$n=CreCB*pk@NoRCx&*G|KfW z><&ClQ4x#?5Vh=_oOTqDJB$e9c|ENZUgI4pDDYe#tFo?LwrS7Fu{B~NQ0E-in$FU; zEzL3Yy!4AFjth+}P;4(O@l*r^3I%89YS8g>6E98|QFdb)t&5f1!WAe4-rPO~9i;HO z9KUs*Dk<ay$^Qm&-TLg6vsb&&{~aqK(>Jc7&@z}$dcA&?*T2%l+jQj?PSXo6bM)V@ zr;j7Sz$hSaG#3V)4#(@3?zt>(TmC5dez}<s`wcjg0SGEv8=r%h>s>PREWE(5*2d~x zQ*rJ!Rtmi#h?JOl=JR>IFir*tpJsx?+Ke#c&<|skq~s9c(+?S<2#7+)^X(DGP^M4n z1}!u+4b=z$#@GHk!Tc#8;G2yc3=Irq<>kGpQ6WYkq^*H6XJyGlX#ho;A5Av%6Z(V3 z9}4P%!slFRzNxdgWgDsXc4ZA!ZaSi~z~{I>jOhu3S((s_Ad>=8%N+G^)2U)SA7#XB zIsj*@DkMAi;*p_lr?b>?8zkUv)I(({f5UoX-NN_MXzXq}??xR-l(b-+B~5Ma){P{e zQqbDC6k%hL&n<vnl$IufsxisAA1ihx2)qWN2xT;%ayv1HbiQL(08*Q`YsIaoZkqcs zGAmG%9B3xh$^!@XBW{1kG%&eV(^jWVTtpxc?}`;wRJhircpF)7_=$K6NE*-(&W04d zD*rH8VzA>_aGZu}kOGe`*;PLKwVtco6G>%e!?0<VcKhXq!F^wN^%j>g*j}m4$o)x} zVE^~;bPHMX*8QU@`z)b;y?ore6DsfT{EWaS)oZLtBSw1-)y4yaf0G~auvl&vHz0C0 zh)>pRDDMR$Nk8<P>_yd|ibAgn6q2Z&$x;6JawsRR9fJCE1K-D1sM=wZDo`042CvDm zG#hOF9EP1eCYkXWS6FJ~uaGcCFAc_8_3M)U*48Xkg#)TUZ<o`fkWjyMT|2Ot_+mX0 zXD1!nzZ@RsDS^^_xnTi<^)*z7jCbb4_0O&+_GiC+ga$6(`;@d=Sg)xty*3G!-aSxW zB|@njf1-gB{S0)~5{2w=Hz>54!m4^zX)`Zk0TbE~joLr>K4ou4+1E!)#UVAR+HQZi zS9oz;$iT=LPPaZ?uLb`1%Hd3f2WLOAg?ixB^Y+zt+imw&QCjqFM4^j83LptWTU{nD zOql-ZABAt04m`9Oe~Hj0Lpy^{m@oofrv&u>?*_I1gVsC_b9C05fhfThQt40-f&m3` zp~=Ch=^*cAshH6xYj5b>fRc5#IJGPC(+~*^_Ai+@#OY8)T{^103AL-BIGBr)O8vD? zQ}#C|&5n;jr+1xysMU*7eNm1iaiQaox`WzH6IdX#H489hvu3X@Y0Jq4qkIo18`W|s zRNaf|b`e8q(jXC1In7<`Ki~)FHLCXtgMdG2wA5%71&$V9X0Xmqpj^jOC;+SMkO9?M zb`|(_yFR;3rMgph^`u2D^jc(WI_-3EmuY`}U$e+uIY)E`j(H`BB04%Ve;v?;N!|@> zo0zrY`Q%Imq2?+^eZ|$r=%0^bc=~A((o#~K?&mINyO~0RP!NGw2rhfMWpEe_!Klbg z_YV!x*H0%Ne45@=1!fL4M5sIS%?UhI$?Jh)<>R>{l;0_}^frvv1O+crLNL)XMOE)9 zw2FnN!G2NTp0M&nxw5Qy{xsOdniceVU%ln+8r)^r;mrTr9bH^dNE_N+pl)umVGW6+ zqGH&q*RPpQ2zvCd{VAX)K@&{w=g-I#)z-d4W_r@P;5N@q-EEvdy=qFLqRk?O?H^*e z&>SbMTTK8DLEeD=9H0_|sFtpU1;hSfY;-h$$a#TbsM@}NkFKnu5?j~$kM^{w#hopd z9l95<UbQ>0N&eQ5VRoSo!=7%Q)2Wd2SG+A4VNx*<fC8UK$&z4PN$X&)?%cIQ0rJXV z?oNX9(R`F0c;aKJE&!icHDJxS0QBts@@L6`N;68~6(!Y3yDrP~1cE|sTHR#Du%@&5 z#vaJ<so-NsPnV8bfpYpVv=}`^P2B*2+iy?5F)+)&vu1-;OM$<d5ogiocP}9e)di4v zGO>t~Mi&it_BW>sq1ka_H7+i04|LF_K~=3m6e=d3?`9r1v$!Qg4RBk}Jp+V)u$1Uj zy(XLWhq3!v9j$&SNKa7b4@3F1gj_`s`z9=~_ZeMyfG!BZ|7hMn4X1KD)Op0s-7#;o z9Ki9T2X2O|H<yzM)xQIwKmqD25DmbJ7sU-kFp@>90Qx~86rvzHj@$Bw^K(_zC=wP; z#>DP>&_M^CR}XLC1}+-PIH6V(sxB8AN;Ehyumle`Je2=>M>9-@es6NqO%+JZ_S@Ry zvEjN50q6a>+6-u3LIodS&(O<=+HMabqyiT+WUd7BZ~F?KjCL<D-{(iI>#bn-&cGcF znE>L4D&GxDO<?<1E*>(sbVE;)0hAfs&^?4LK24Jz;WWt2#26*?hTfG%o~&1x&9(%h zI<v~GX1>*QbZR4;{?(TH|6330s$D=WacH$d&HoBS;Q{zJw8Z?{8v9_PgVO((GvaoK zUR#=g;J>oIKKLH<3dl#cg<w$hL$$<YCc3>UtUs@U*0Z|f!9s?xHi=O7m;mP5U4`aZ zYt(js3!SQEHuF+vJ3<#bBIZNk%Fv$%5kee1N&QeJ-1TB{c@m{z|8gUWe7gD28G1u^ zNA!Z1OB2uDOzpUk&aTdd$qk*Ko!AO(LPfwLV475%^|xQV>;7m9)PSN7CSa)<Pk^)I z`e(5rnl`mEQ{@e7U_(&Mu!dfrxdbRcd3P^zP`U2DXk^9H12*7IHw!j`_S%Im?rBas za%z{~Uk~$7Is2!kEF{<gO7zIQbv``3omy1X;|RBJTR2+nPzY|aKyX;}vf?#5LZ>Aj zz}eblHTOX*_(<EWc;m%*D5$2dMtg%u7kF{neKA)Zjp#KVhz6%dF|?V^zQ4lES_dwP zTi##mNoUu=p2ND(8KcMBvgw~3jduD0Vl}G51%N##P_O+Jy>_eR*7eUSL#Sq0Xuz%6 z{I-l-fs=f9CAF+O%7C^aFcd{OcRgPGbSJU9^}r4f+KlMtEz;`T&fcc?FV}3+lHsj{ zE6TQ=Fv~ukzk%ubb;1k<xOc-O^R?>TD2CnMw&}B@=7%`A^%1PUI{(X7{m;3VQPw<C zXrZfFJYsH{25NHy4-3`ulv`N$iW+oxIybFoRNrv4DIhGEMZtBolW=fyW@=^@msD1g z;ZZ+rINe;JQEgM0ot;g-Jrx^!v#wCCjTMgx`tDGOfNXz|DY0^Lq7H?n?d|QFVf^!h zl>B`2?+(hEnguB-v~~V+Gf?yyJU!Zpkf2inu}?WyWjQTOwhtC4?1<ieIiY;ub|?=D zIeQBXs2P+X-~RHuhdkYCU2X8ds9G(kMnYeu>CQseX&vhmgd22>F>My>kUdLiJmeX3 z(Als3?dtj#Ww|-uuc%+%8`ct9F@q=mfudE=TlU}vE-EfoZB(s(2Ct2dR<{G&vHj*$ z{`n1T9|QuM1oe9Xz{_^>7BCgs!v*(G;LcjUd0nw}7lgos8dAV9>*Fp<w^Z;5h!fSb zVCj+mz6W~EU7tp_xeKf@sOX(0Vzvx5jB4C*B?Vav8=rz~d&(1=VB6Id_m8Xbbf<e2 z)xqrQ>bh|xOp^r3Zb3mo%`o+m2E~yENZb$NWp^}Oa3Lc-?lcliMVX6G5Czu2b9d(h z(mthIt!SsY<{Z5S3?1aDMY-qsMKSX7q*ob?MMU(=X{6sPR}-c-RDGwRyPx)9No@V; zhim%C{$>i^Ozm9cV5G*SNYNk?gVLVx`OR8KEivcPBzv1LJ7*1O2Ww7Li9XbhbyN;P zU+mX!nz8v{VPO&aiD(zACG{G^(bM1W2|BAW=gk|$#Kj~J!o$KaN=E}oSu}sUuwB7w zm`>|ohBx<&j>hy%jgI<3sXNnHc?Be5^wi#HdH>~Qlil6jCbMGb<rGPM!SDE+W~z1b z;Lgp!63zN2B0rJ5y}i92V7d$s52vfKgv$<^UN^ml?{f{;i^vrIBE<KZb)B%_E-5L2 z>ns@FF_95ree|gLRp;&8!H?RkzOBL3t-+uijjZn<4(Exk$UJ{ObF{N~pP6~#NS7=7 z%Z`4XZKZn3pef{bqTb%#X&D(}Ha0eMz_GG5UyU7|9+h4~N4tCp9bFi7mAiyE-@kwN z_4QS+LQ2BIPJ_BKGzmj>R0@QbfZ*WP#gR(e%)HkXvd1SU>GkzmAl{6;DOWN#(d2bI z{W3Q{?*}>yltP5)>FIyDf^Z)#L%-$7&(6bhA6j(7pp9Rek>vWd5H&`6_=Nz(xq}Rz zo}Rz99Gmpn{rZ<>2Fn-nLD}7cqUZL!wA1l!_9p>n6?P7e=5>329J3Iq>1j;HZ?8Jj z6*FZ~SDKm8sdT@n19hc$b#Kd-qnp%^3~|u|moYfno=@pt)^GH_y49-lS4mZMHD&`r z>rA7M=-l+{lkP+z7O~V9Fs}Ll<V1K_*B1_d&v=fk+rx=chF6;{Dmq3+)Nt)N+`CjT z5H_$29TVHyB&~Vl73Ae<Mn^|=p#==Cb9pBqAmBTI1sxyXYY;P=faweuYArf)?@afm ziq8tU<6(KK<qtU?Ue{q#SiV5}t1Oxiaux-3b;eiuDv`_@49*7|5k}n!&C`oVv@g7U zB}@whh^}3`_JZLz$2$@D!_bJ3fNyE+c>mS^PMesReBECk4~xA+<kz6h`g47}0yqDo zuf)q!IT{g>i<sEhZ_t1I)26b>pd&JE0eD>V;UN$Fx(MP|l-ELR95Mg$T@tFWoEEdN zu;`m1Km<`de!stO9}pP$popE8)_@H`^kU5E;#?p=><-jTf0?`0Q}f2-TU4B6&Z;w$ z0@}p)s3<FY0g*^bPDX=0u2$p7#;pG3of@Nef2Le&QWAnb>@uWlmuEW-Ip8eN!jQVQ z;Ol#%0Up|<Rhu=btc)0n1&+H**C6eE4~5~GCco?Tr!HESmMl;fax>msS^2iKbl*jg z8kX=2EiHn$F7MM*m%}qR9twOopt?=3qweJN_^q=u@ig_d7bS<}!n9Ja@5v>6Xr2Aq z5_oHCuI)O%%OT+vQsz%(o0)Qne<daoKr`y^dp|*#cC6LJBOtiLu`@j#qgtTucUL;H zVQ~iyQRjN%T~ou)$;~|rfW1`=tQF@H`qIY6xqmes?XhbOIy}K@d&EQEX5BA#t0aJy z?l;d7+BP;s2*Y*o1;jcYV!VTB5#6<LxC((Ysi=rBM1oF7-QJ!H_D|>}*0qpdWC*|e z=2r;_^pMCK92^{E<m5*N)1W=+>+5&E?e|v6eeM_^62fLS-q|VhbR6(Nhn4KyYEMMO zodAR8T6#KQ5UgrwaQF!=!dV3cEs)*2jcH}}>i{PryLnUL&DCUi9Ds+9UE(5XH?Ux2 zq!)k0KjXY9s;GD!OvRoMx{|A^j-&Lz8sJe^Cn#EX(bRMapfc1gi}PCV^xreJy7vnh zy0MvAV~VK%UokO$V1(J-+na&m6{2)l8)2KMb|C0A=3IU>QR_^KYUQ1ac`qU&HLKAe zA~HQ%?=A#xf)_wq2lzpP2b00qub$Y%ugL$o4Eds1v{1`X!4`f`#@cuV0f^;)uVvIY mqqfICzyFuF$-ix}3&izjJZNvyxm<yoBP2y-MGBs3zyBY?wH>_x diff --git a/examples/shallowwaterfriction/img/result.png b/examples/shallowwaterfriction/img/result.png deleted file mode 100644 index 1ef7c2c9798930cfd4d6b1b8a98b78e0cb718406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35503 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 diff --git a/examples/shallowwaterfriction/img/swe_result.png b/examples/shallowwaterfriction/img/swe_result.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5c8025ffbf8d476d146920508c563e1cb4a951 GIT binary patch literal 117570 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 OKZ`ade53zrm+D_$nTC}B literal 0 HcmV?d00001 diff --git a/examples/shallowwaterfriction/main.cc b/examples/shallowwaterfriction/main.cc index de91945bb9..21b48ed300 100644 --- a/examples/shallowwaterfriction/main.cc +++ b/examples/shallowwaterfriction/main.cc @@ -17,138 +17,168 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. * *****************************************************************************/ -// ## The file `main.cc` +// ## The main file `main.cc` +// [[content]] // -// -// This is the main file for the shallow water example. Here we can see the programme sequence and how the system is solved using newton's method. -// ### Includes +// ### Included header files +// [[details]] includes +// [[exclude]] +// Some generic includes. #include <config.h> - -// Standard header file for C++, to get time and date information. #include <ctime> - -// Standard header file for C++, for in- and output. #include <iostream> - -// Dumux is based on DUNE, the Distributed and Unified Numerics Environment, which provides several grid managers and linear solvers. So we need some includes from that. +// [[/exclude]] +// +// These are DUNE helper classes related to parallel computations, time measurements and file I/O #include <dune/common/parallel/mpihelper.hh> #include <dune/common/timer.hh> #include <dune/grid/io/file/dgfparser/dgfexception.hh> #include <dune/grid/io/file/vtk.hh> -// We need the following class to simplify the writing of dumux simulation data to VTK format. -#include <dumux/io/vtkoutputmodule.hh> -// In Dumux a property system is used to specify the model. For this, different properties are defined containing type definitions, values and methods. All properties are declared in the file properties.hh. +// The following headers include functionality related to property definition or retrieval, as well as +// the retrieval of input parameters specified in the input file or via the command line. #include <dumux/common/properties.hh> -// The following file contains the parameter class, which manages the definition of input parameters by a default value, the inputfile or the command line. #include <dumux/common/parameters.hh> -// The file dumuxmessage.hh contains the class defining the start and end message of the simulation. -#include <dumux/common/dumuxmessage.hh> -#include <dumux/common/defaultusagemessage.hh> -// The gridmanager constructs a grid from the information in the input or grid file. There is a specification for the different supported grid managers. -#include <dumux/io/grid/gridmanager.hh> -// We include the linear solver to be used to solve the linear system + +// The following files contains the available linear solver backends, the non linear Newton Solver +// and the assembler for the linear systems arising from finite volume discretizations +// (box-scheme, tpfa-approximation, mpfa-approximation). #include <dumux/linear/amgbackend.hh> -#include <dumux/linear/linearsolvertraits.hh> -// We include the nonlinear newtons method #include <dumux/nonlinear/newtonsolver.hh> -// Further we include assembler, which assembles the linear systems for finite volume schemes (box-scheme, tpfa-approximation, mpfa-approximation) #include <dumux/assembly/fvassembler.hh> -// We include the properties + +// The following class provides a convenient way of writing of dumux simulation results to VTK format. +#include <dumux/io/vtkoutputmodule.hh> +// The gridmanager constructs a grid from the information in the input or grid file. +// Many different Dune grid implementations are supported, of which a list can be found +// in `gridmanager.hh`. +#include <dumux/io/grid/gridmanager.hh> + +// We include the header file specifing the properties of this example #include "properties.hh" +// [[/details]] +// -// ### Beginning of the main function +// ### The main function +// We will now discuss the main program flow implemented within the `main` function. +// At the beginning of each program using Dune, an instance of `Dune::MPIHelper` has to +// be created. Moreover, we parse the run-time arguments from the command line and the +// input file: +// [[codeblock]] int main(int argc, char** argv) try { using namespace Dumux; - // We define the type tag for this problem - using TypeTag = Properties::TTag::RoughChannel; - - // We initialize MPI, finalize is done automatically on exit - const auto& mpiHelper = Dune::MPIHelper::instance(argc, argv); - - // We print dumux start message - if (mpiHelper.rank() == 0) - DumuxMessage::print(/*firstCall=*/true); + // The Dune MPIHelper must be instantiated for each program using Dune + Dune::MPIHelper::instance(argc, argv); // We parse command line arguments and input file Parameters::init(argc, argv); + // [[/codeblock]] + + // We define a convenience alias for the type tag of the problem. The type + // tag contains all the properties that are needed to define the model and the problem + // setup. Throughout the main file, we will obtain types defined for these type tag + // using the property system, i.e. with `GetPropType`. + using TypeTag = Properties::TTag::RoughChannel; - // ### Create the grid - // A gridmanager tries to create the grid either from a grid file or the input file. + // #### Step 1: Create the grid + // The `GridManager` class creates the grid from information given in the input file. + // This can either be a grid file or, in the case of structured grids, one can specify the coordinates + // of the corners of the grid and the number of cells to be used to discretize each spatial direction. + //[[codeblock]] GridManager<GetPropType<TypeTag, Properties::Grid>> gridManager; gridManager.init(); // We compute on the leaf grid view const auto& leafGridView = gridManager.grid().leafGridView(); + //[[/codeblock]] - // ### Setup and solving of the problem - // #### Setup - // We create and initialize the finite volume grid geometry, the problem, the linear system, including the jacobian matrix, the residual and the solution vector and the gridvariables. - // We need the finite volume geometry to build up the subcontrolvolumes (scv) and subcontrolvolume faces (scvf) for each element of the grid partition. + // #### Step 2: Solving the shallow water problem + // First, a finite volume grid geometry is constructed from the grid that was created above. + // This builds the sub-control volumes (scv) and sub-control volume faces (scvf) for each element + // of the grid partition. using GridGeometry = GetPropType<TypeTag, Properties::GridGeometry>; auto gridGeometry = std::make_shared<GridGeometry>(leafGridView); gridGeometry->update(); - // In the problem, we define the boundary and initial conditions. + // We now instantiate the problem, in which we define the boundary and initial conditions. using Problem = GetPropType<TypeTag, Properties::Problem>; auto problem = std::make_shared<Problem>(gridGeometry); - // We initialize the solution vector + // We initialize the solution vector. The shallow water problem is transient, + // therefore the initial solution defined in the problem is applied to the + // solution vector. On the basis of this solution, we initialize then the grid variables. using SolutionVector = GetPropType<TypeTag, Properties::SolutionVector>; SolutionVector x(gridGeometry->numDofs()); problem->applyInitialSolution(x); auto xOld = x; - // And then use the solutionvector to intialize the gridVariables. using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; auto gridVariables = std::make_shared<GridVariables>(problem, gridGeometry); gridVariables->init(x); - // We get some time loop parameters from the input file. - using Scalar = GetPropType<TypeTag, Properties::Scalar>; + // Let us now instantiate the time loop. Therefore, we read in some time loop parameters from the input file. + // The parameter `tEnd` defines the duration of the simulation, `dt` the initial time step size and `maxDt` the maximal time step size. + // Moreover, we define the end of the simulation `tEnd` as check point in the time loop at which we will write the solution to vtk files. + // [[codeblock]] + using Scalar = GetPropType<TypeTag, Properties::Scalar>; // type for scalar values const auto tEnd = getParam<Scalar>("TimeLoop.TEnd"); const auto maxDt = getParam<Scalar>("TimeLoop.MaxTimeStepSize"); auto dt = getParam<Scalar>("TimeLoop.DtInitial"); - // We intialize the vtk output module. Each model has a predefined model specific output with relevant parameters for that model. - using IOFields = GetPropType<TypeTag, Properties::IOFields>; - VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables,x, problem->name()); - // We add the analytical solution ("exactWaterDepth" and "exactVelocityX") to the predefined specific output. - vtkWriter.addField(problem->getExactWaterDepth(), "exactWaterDepth"); - vtkWriter.addField(problem->getExactVelocityX(), "exactVelocityX"); - // We calculate the analytic solution. - problem->analyticalSolution(); - IOFields::initOutputModule(vtkWriter); - vtkWriter.write(0.0); - // We instantiate time loop. - auto timeLoop = std::make_shared<CheckPointTimeLoop<Scalar>>(0, dt, tEnd); + auto timeLoop = std::make_shared<CheckPointTimeLoop<Scalar>>(0.0, dt, tEnd); timeLoop->setMaxTimeStepSize(maxDt); + timeLoop->setCheckPoint(tEnd); + // [[/codeblock]] - //we set the assembler with the time loop because we have an instationary problem. + // We initialize the assembler with a time loop for the transient problem. + // Within the time loop, we will use this assembler in each time step to assemble the linear system. using Assembler = FVAssembler<TypeTag, DiffMethod::numeric>; auto assembler = std::make_shared<Assembler>(problem, gridGeometry, gridVariables, timeLoop); - // We set the linear solver. + // We initialize the linear solver. using LinearSolver = AMGBiCGSTABBackend<LinearSolverTraits<GridGeometry>>; auto linearSolver = std::make_shared<LinearSolver>(leafGridView, gridGeometry->dofMapper()); - // Additionaly, we set the non-linear solver. + // We initialize the non-linear solver. using NewtonSolver = Dumux::NewtonSolver<Assembler, LinearSolver>; NewtonSolver nonLinearSolver(assembler, linearSolver); - // We set some check point at the end of the time loop. The check point is used to trigger the vtk output. - timeLoop->setCheckPoint(tEnd); + // The following lines of code initialize the vtk output module, add the velocity output facility + // and write out the initial solution. At each checkpoint, we will use the output module to write + // the solution of a time step into a corresponding vtk file. + // [[codeblock]] + VtkOutputModule<GridVariables, SolutionVector> vtkWriter(*gridVariables,x, problem->name()); + + // add model-specific output fields to the writer + using IOFields = GetPropType<TypeTag, Properties::IOFields>; + IOFields::initOutputModule(vtkWriter); - // We start the time loop. + // We add the analytical solution ("exactWaterDepth" and "exactVelocityX") to the predefined specific output. + vtkWriter.addField(problem->getExactWaterDepth(), "exactWaterDepth"); + vtkWriter.addField(problem->getExactVelocityX(), "exactVelocityX"); + + // We calculate the analytic solution. + problem->analyticalSolution(); + + // write initial solution (including the above calculated analytical solution. + vtkWriter.write(0.0); + // [[/codeblock]] + + // ##### The time loop + // We start the time loop and solve a new time step as long as `tEnd` is not reached. In every time step, + // the problem is assembled and solved, the solution is updated, and when a checkpoint is reached the solution + // is written to a new vtk file. In addition, statistics related to CPU time, the current simulation time + // and the time step sizes used is printed to the terminal. + // [[codeblock]] timeLoop->start(); do { - // We start to calculate the new solution of that time step. First we define the old solution as the solution of the previous time step for storage evaluations. + // First we define the old solution as the solution of the previous time step for storage evaluations. assembler->setPreviousSolution(xOld); - // We solve the non-linear system with time step control. + // We solve the non-linear system with time step control, using Newthon's method. nonLinearSolver.solve(x,*timeLoop); // We make the new solution the old solution. @@ -170,25 +200,26 @@ int main(int argc, char** argv) try } while (!timeLoop->finished()); + // [[/codeblock]] + // The following piece of code prints a final status report of the time loop + // before the program is terminated. timeLoop->finalize(leafGridView.comm()); - // ### Final Output - // We print dumux end message. - if (mpiHelper.rank() == 0) - { - Parameters::print(); - DumuxMessage::print(/*firstCall=*/false); - } - return 0; -} // end main - +} +// #### Exception handling +// In this part of the main file we catch and print possible exceptions that could +// occur during the simulation. +// [[details]] exception handler +// [[codeblock]] +// errors related to run-time parameters catch (const Dumux::ParameterException &e) { std::cerr << std::endl << e << " ---> Abort!" << std::endl; return 1; } +// errors related to the parsing of Dune grid files catch (const Dune::DGFException & e) { std::cerr << "DGF exception thrown (" << e << @@ -198,13 +229,18 @@ catch (const Dune::DGFException & e) << " ---> Abort!" << std::endl; return 2; } +// generic error handling with Dune::Exception catch (const Dune::Exception &e) { std::cerr << "Dune reported error: " << e << " ---> Abort!" << std::endl; return 3; } +// other exceptions catch (...) { std::cerr << "Unknown exception thrown! ---> Abort!" << std::endl; return 4; } +// [[/codeblock]] +// [[/details]] +// [[/content]] diff --git a/examples/shallowwaterfriction/problem.hh b/examples/shallowwaterfriction/problem.hh index 12bfbe3261..caa370dee7 100644 --- a/examples/shallowwaterfriction/problem.hh +++ b/examples/shallowwaterfriction/problem.hh @@ -20,21 +20,34 @@ #ifndef DUMUX_EXAMPLE_SHALLOWWATER_FRICTION_PROBLEM_HH #define DUMUX_EXAMPLE_SHALLOWWATER_FRICTION_PROBLEM_HH -// ## The file `problem.hh` -// We start with includes -#include <dumux/common/parameters.hh> -#include <dumux/common/properties.hh> +// ## The problem file (`problem.hh`) +// +// This file contains the __problem class__ which defines the initial and boundary +// conditions for the shallow water flow simulation with bottom friction. +// In addition, the analytical solution is defined here. +// +// [[content]] +// +// ### Include files +// +// The first include we need here is the `ShallowWaterProblem` class, the base +// class from which we will derive. #include <dumux/freeflow/shallowwater/problem.hh> +// In addition, we need the boundaryflux header, which handels the flux over +// the model boundaries. #include <dumux/freeflow/shallowwater/boundaryfluxes.hh> +// ### The problem class // We enter the problem class where all necessary boundary conditions and initial conditions are set for our simulation. +// In addition the analytical solution of the problem is calculated. // As this is a shallow water problem, we inherit from the basic ShallowWaterProblem. +// [[codeblock]] namespace Dumux { template <class TypeTag> class RoughChannelProblem : public ShallowWaterProblem<TypeTag> { - // We use convenient declarations that we derive from the property system. + // A few convenience aliases used throughout this class. using ParentType = ShallowWaterProblem<TypeTag>; using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>; using BoundaryTypes = GetPropType<TypeTag, Properties::BoundaryTypes>; @@ -45,7 +58,6 @@ class RoughChannelProblem : public ShallowWaterProblem<TypeTag> using ElementVolumeVariables = typename GetPropType<TypeTag, Properties::GridVolumeVariables>::LocalView; using GridVariables = GetPropType<TypeTag, Properties::GridVariables>; using ElementFluxVariablesCache = typename GridVariables::GridFluxVariablesCache::LocalView; - using VolumeVariables = typename ElementVolumeVariables::VolumeVariables; using FVElementGeometry = typename GetPropType<TypeTag, Properties::GridGeometry>::LocalView; using SubControlVolumeFace = typename FVElementGeometry::SubControlVolumeFace; using GridView = typename GetPropType<TypeTag, Properties::GridGeometry>::GridView; @@ -60,31 +72,24 @@ public: : ParentType(gridGeometry) { // We read the parameters from the params.input file. - name_ = getParam<std::string>("Problem.Name"); constManningN_ = getParam<Scalar>("Problem.ManningN"); bedSlope_ = getParam<Scalar>("Problem.BedSlope"); discharge_ = getParam<Scalar>("Problem.Discharge"); // We calculate the outflow boundary condition using the Gauckler-Manning-Strickler formula. - hBoundary_ = this->gauklerManningStrickler(discharge_,constManningN_,bedSlope_); + hBoundary_ = this->gaucklerManningStrickler(discharge_,constManningN_,bedSlope_); // We initialize the analytic solution to a verctor of the appropriate size filled with zeros. exactWaterDepth_.resize(gridGeometry->numDofs(), 0.0); exactVelocityX_.resize(gridGeometry->numDofs(), 0.0); } + // [[/codeblock]] - // Get the analytical water depth - const std::vector<Scalar>& getExactWaterDepth() - { - return exactWaterDepth_; - } - - // Get the analytical velocity - const std::vector<Scalar>& getExactVelocityX() - { - return exactVelocityX_; - } + // #### Analytical Solution + // + // The analytical solution is calculated using the equation of Gauckler, Manning and Strickler. + // [[codeblock]] - // Get the water depth with Gauckler-Manning-Strickler - Scalar gauklerManningStrickler(Scalar discharge, Scalar manningN, Scalar bedSlope) + // Equation of Gauckler, Manning and Strickler + Scalar gaucklerManningStrickler(Scalar discharge, Scalar manningN, Scalar bedSlope) { using std::pow; using std::abs; @@ -93,14 +98,14 @@ public: return pow(abs(discharge)*manningN/sqrt(bedSlope), 0.6); } - // Get the analytical solution + // Calculate the analytical solution void analyticalSolution() { using std::abs; for (const auto& element : elements(this->gridGeometry().gridView())) { - const Scalar h = this->gauklerManningStrickler(discharge_,constManningN_,bedSlope_); + const Scalar h = this->gaucklerManningStrickler(discharge_,constManningN_,bedSlope_); const Scalar u = abs(discharge_)/h; const auto eIdx = this->gridGeometry().elementMapper().index(element); @@ -109,61 +114,87 @@ public: } } - // Get the problem name. It is used as a prefix for files generated by the simulation. - const std::string& name() const + // Getter function for the analytical solution of the water depth + const std::vector<Scalar>& getExactWaterDepth() { - return name_; + return exactWaterDepth_; } - // Get the source term. - NumEqVector source(const Element& element, - const FVElementGeometry& fvGeometry, - const ElementVolumeVariables& elemVolVars, - const SubControlVolume &scv) const + // Getter function for the analytical solution of the velocity in x-direction + const std::vector<Scalar>& getExactVelocityX() + { + return exactVelocityX_; + } + // [[/codeblock]] + + // #### Bottom friction + // + // The bottom friction is a source term and therefore handled by the `source` function. + // [[codeblock]] + NumEqVector source(const Element& element, + const FVElementGeometry& fvGeometry, + const ElementVolumeVariables& elemVolVars, + const SubControlVolume &scv) const { NumEqVector source (0.0); - // In this model the bottom friction is the only source. + // Since the bed slope source term is handels within the flux computation, + // in this model the bottom friction is the only source term. source += bottomFrictionSource(element, fvGeometry, elemVolVars, scv); return source; } - - // Get the source term due to bottom friction. - NumEqVector bottomFrictionSource(const Element& element, + // [[/codeblock]] + + // The calculation of the source term due to bottom friction needs the bottom shear stess. + // This is the force per area, which works between the flow and the channel bed + // (1D vector with two entries) and is calculated within the `FrictionLaw` class. + // The bottom friction causes a loss of momentum. Thus the first entry of the `bottomFrictionSource`, + // which is related to the mass balance equation is zero. + // The second entry of the `bottomFricitonSource` corresponds to the momentum equation in x-direction + // and is therefore equal to the first, the x-component, of the `bottomShearStress`. + // Accordingly, the third entry of the `bottomFrictionSource` is equal to the second component of the `bottomShearStress`. + // [[codeblock]] + NumEqVector bottomFrictionSource(const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, const SubControlVolume &scv) const - { + { NumEqVector bottomFrictionSource(0.0); const auto& volVars = elemVolVars[scv]; - // For the calculation of the source term due to bottom friction the two-dimensional bottom shear stess vector is needed. This is the force per area, which works between the flow and the bed. It is calculated within the `FrictionLaw`, which is a spatialParameter. In this model the `FrictionLawManning` is used (see `params.input`). + // bottom shear stress vector Dune::FieldVector<Scalar, 2> bottomShearStress = this->spatialParams().frictionLaw(element, scv).shearStress(volVars); - // The bottom shear stress causes a pure loss of momentum. Thus the first entry of the `bottomFrictionSource`, which is related to the mass balance equation is zero. The second entry of the `bottomFricitonSource` corresponds to the momentum equation in x-direction and is therefore equal to the first, the x-component, of the `bottomShearStress`. Accordingly the third entry of the `bottomFrictionSource` is equal to the second component of the `bottomShearStress`. + // source term due to bottom friction bottomFrictionSource[0] = 0.0; bottomFrictionSource[1] = bottomShearStress[0]; bottomFrictionSource[2] = bottomShearStress[1]; return bottomFrictionSource; - } + } + // [[/codeblock]] - // We specify the boundary condition type. + // #### Boundary conditions + // + // We define the __type of all boundary conditions__ as neumann-type, + // because we use a weak imposition. + // [[codeblock]] BoundaryTypes boundaryTypesAtPos(const GlobalPosition &globalPos) const { BoundaryTypes bcTypes; - // Since we use a weak imposition all boundary conditions are of Neumann type. bcTypes.setAllNeumann(); return bcTypes; } - - // We specify the neumann boundary. Due to the weak imposition we calculate the flux at the - // boundary, with a Rieman solver. For this the state of a virtual cell outside of the boundary - // is needed (`boundaryStateVariables`), wich is calculated with the Riemann invariants - // (see Yoon and Kang, Finite Volume Model for Two-Dimensional Shallow Water Flows on Unstructured Grids). - // The calculation of the Riemann invariants differ depending on the type of the boundary (h, q or no-flow boundary). + // [[/codeblock]] + + // In the following function we implement the __Neumann boundary conditions__. + // Due to the weak imposition we calculate the flux at the boundary with a Riemann solver. + // This needs the state of a virtual cell outside of the boundary (`boundaryStateVariables`), + // wich is calculated with the Riemann invariants + // (see: Yoon and Kang, "Finite Volume Model for Two-Dimensional Shallow Water Flows on Unstructured Grids"). + // [[codeblock]] NeumannFluxes neumann(const Element& element, const FVElementGeometry& fvGeometry, const ElementVolumeVariables& elemVolVars, @@ -178,7 +209,7 @@ public: const auto gravity = this->spatialParams().gravity(scvf.center()); std::array<Scalar, 3> boundaryStateVariables; - // Calculate the rieman invariants for imposed discharge at the left side. + // Calculate the Riemann invariants for imposed discharge at the left side. if (scvf.center()[0] < 0.0 + eps_) { boundaryStateVariables = ShallowWater::fixedDischargeBoundary(discharge_, @@ -188,8 +219,8 @@ public: gravity, nxy); } - // Calculate the rieman invariants for impose water depth at the right side. - else if (scvf.center()[0] > 100.0 - eps_) + // Calculate the Riemann invariants for imposed water depth at the right side. + else if (scvf.center()[0] > 500.0 - eps_) { boundaryStateVariables = ShallowWater::fixedWaterDepthBoundary(hBoundary_, insideVolVars.waterDepth(), @@ -198,14 +229,14 @@ public: gravity, nxy); } - // Calculate the rieman invarianty for the no-flow boundary. + // Calculate the Riemann invariants for the no-flow boundary. else { boundaryStateVariables[0] = insideVolVars.waterDepth(); boundaryStateVariables[1] = -insideVolVars.velocity(0); boundaryStateVariables[2] = -insideVolVars.velocity(1); } - // We calculate the boundary fluxes based on a Riemann problem. + // Calculate the boundary fluxes based on a Riemann problem. auto riemannFlux = ShallowWater::riemannProblem(insideVolVars.waterDepth(), boundaryStateVariables[0], insideVolVars.velocity(0), @@ -223,41 +254,48 @@ public: return values; } - - // We set the initial conditions. In this example constant initial conditions are used. Therefore the argument `globalPos` is not needed. If you want to impose spatial variable initial conditions, you have to use the `globalPos`. + // [[/codeblock]] + + // #### Initial conditions + // + // We specify the initial conditions for the primary variables (water depth, velocity in y-direction + // and velocity in x-direction). In this example constant initial conditions are used. Therefore the + //argument `globalPos` is not needed. If you want to impose spatial variable initial conditions, + // you have to use the `globalPos` argument. + // [[codeblock]] PrimaryVariables initialAtPos(const GlobalPosition &globalPos) const { - PrimaryVariables values(0.0); + PrimaryVariables initialValues(0.0); // We set the initial water depth to one meter. - values[0] = 1.0; + initialValues[0] = 1.0; // We set the x-component of the initial velocity to zero. - values[1] = 0.0; + initialValues[1] = 0.0; // We set the y-component of the initial velocity to zero. - values[2] = 0.0; - - return values; - }; + initialValues[2] = 0.0; - // \} + return initialValues; + } + // [[/codeblock]] +// We declare the private variables of the problem. +// [[codeblock]] private: - // We declare the private variables of the problem. They are initialized in the problems constructor. - // We declare the variable for the analytic solution. + // variables for the analytic solution. std::vector<Scalar> exactWaterDepth_; std::vector<Scalar> exactVelocityX_; - // constant friction value. An analytic solution is only available for const friction. If you want to run the simulation with a non constant friciton value (specified in the spatialParams) you have to remove the analytic solution. + // constant friction value (an analytic solution is only available for const friction). Scalar constManningN_; - // The constant bed slope. + // The constant channel bed slope. Scalar bedSlope_; // The water depth at the outflow boundary. Scalar hBoundary_; // The discharge at the inflow boundary. Scalar discharge_; - // eps is used as a small value for the definition of the boundry conditions + // We assign a private global variable for the epsilon: static constexpr Scalar eps_ = 1.0e-6; - std::string name_; -}; +}; // end class definition RoughChannelProblem } // end namespace Dumux - +// [[/codeblock]] +// [[/content]] #endif diff --git a/examples/shallowwaterfriction/properties.hh b/examples/shallowwaterfriction/properties.hh index d1e87e9aa4..86e03e69c1 100644 --- a/examples/shallowwaterfriction/properties.hh +++ b/examples/shallowwaterfriction/properties.hh @@ -20,34 +20,53 @@ #ifndef DUMUX_EXAMPLE_SHALLOWWATER_FRICTION_PROPERTIES_HH #define DUMUX_EXAMPLE_SHALLOWWATER_FRICTION_PROPERTIES_HH -// ## The file `properties.hh` +// ## Compile-time settings (`properties.hh`) // -// The header includes will be mentioned in the text below. -// <details><summary>Click to show the header includes</summary> +// In this file, the type tag used for the shallow water flow simulation is defined, +// for which we then specialize `properties` to the needs of the desired setup. +// +// [[content]] +// +// ### Includes +// [[details]] include files +// +// The `ShallowWater` type tag specializes most of the `properties` required for a +// shallow water flow simulation in DuMu<sup>x</sup>. We will use this in the following to inherit the +// respective properties and subsequently specialize those `properties` for our +// type tag, which we want to modify or for which no meaningful default can be set. +#include <dumux/freeflow/shallowwater/model.hh> + +// We want to use `YaspGrid`, an implementation of the dune grid interface for structured grids: #include <dune/grid/yaspgrid.hh> -#include <dumux/common/properties.hh> +// In this example, we want to discretize the equations with the cell centered finite volume +// scheme using two-point-flux approximation: #include <dumux/discretization/cctpfa.hh> -#include <dumux/freeflow/shallowwater/model.hh> -#include "spatialparams.hh" +// We include the problem and spatial parameters headers used for this simulation. #include "problem.hh" -// </details> +#include "spatialparams.hh" +// [[/details]] // - -// Let's define the properties for our simulation -namespace Dumux::Properties { - -// First, a so-called TypeTag is created. Properties are traits specialized for this TypeTag (a simple `struct`). -// The properties of two other TypeTags are inherited by adding the alias `InheritsFrom`. +// ### Type tag definition +// +// First, a so-called type tag is created. Properties are traits specialized for this type tag (a simple `struct`). +// The properties of two other type tags are inherited by adding the alias `InheritsFrom`. // Here, properties from the shallow water model (`TTag::ShallowWater`) and the // cell-centered finite volume scheme with two-point-flux approximation (`TTag::CCTpfaModel`) -// are inherited. These other TypeTag definitions can be found in the included +// are inherited. These other type tag definitions can be found in the included // headers `dumux/freeflow/shallowwater/model.hh` and `dumux/discretization/cctpfa.hh`. +// [[codeblock]] +// We enter the namespace Dumux::Properties in order to import the entire Dumux namespace for general use: +namespace Dumux::Properties { + namespace TTag { struct RoughChannel { using InheritsFrom = std::tuple<ShallowWater, CCTpfaModel>; }; } +// [[/codeblock]] +// ### Property specializations +// // We use a structured Cartesian grid with tensor product structure. // `Dune::YaspGrid` (Yet Another Structure Parallel Grid) is defined in `dune/grid/yaspgrid.hh` // in the Dune module `dune-grid`. @@ -55,7 +74,7 @@ template<class TypeTag> struct Grid<TypeTag, TTag::RoughChannel> { using type = Dune::YaspGrid<2, Dune::TensorProductCoordinates<GetPropType<TypeTag, Properties::Scalar>, 2> >; }; -// Next, we specialize the properties `Problem` and `SpatialParams` for our new TypeTag and +// Next, we specialize the properties `Problem` and `SpatialParams` for our new type tag and // set the type to our problem and spatial parameter classes implemented // in `problem.hh` and `spatialparams.hh`. // [[codeblock]] @@ -83,5 +102,5 @@ struct EnableGridGeometryCache<TypeTag, TTag::RoughChannel> { static constexpr bool value = true; }; } // end namespace Dumux::Properties - +// [[/content]] #endif diff --git a/examples/shallowwaterfriction/spatialparams.hh b/examples/shallowwaterfriction/spatialparams.hh index 1638ce5c31..68f188781d 100644 --- a/examples/shallowwaterfriction/spatialparams.hh +++ b/examples/shallowwaterfriction/spatialparams.hh @@ -20,28 +20,40 @@ #ifndef DUMUX_ROUGH_CHANNEL_SPATIAL_PARAMETERS_HH #define DUMUX_ROUGH_CHANNEL_SPATIAL_PARAMETERS_HH -// ## The file `spatialparams.hh` +// ## Parameter distributions (`spatialparams.hh`) // +// This file contains the __spatial parameters class__ which defines the +// the friction law, including it's friction parameter, the acceleration +// due to gravity and the altitude of the channel bed surface. In this example only the bed +// surface has a non constant distribution. // -// We include the basic spatial parameters for finite volumes file from which we will inherit +// [[content]] +// +// ### Include files +// We include the basic spatial parameters file for finite volumes, from which we will inherit. #include <dumux/material/spatialparams/fv.hh> -// The parameters header is needed to retrieve run-time parameters. -#include <dumux/common/parameters.hh> -// We include all friction laws, between we can choose for the calculation of the bottom friction source. +// We include all friction laws. #include <dumux/material/fluidmatrixinteractions/frictionlaws/frictionlaw.hh> #include <dumux/material/fluidmatrixinteractions/frictionlaws/manning.hh> #include <dumux/material/fluidmatrixinteractions/frictionlaws/nikuradse.hh> +#include <dumux/material/fluidmatrixinteractions/frictionlaws/nofriction.hh> -// We enter the namespace Dumux. All Dumux functions and classes are in a namespace Dumux, to make sure they don`t clash with symbols from other libraries you may want to use in conjunction with Dumux. +// ### The spatial parameters class +// +// In the `RoughChannelSpatialParams` class, we define all functions needed to describe +// the rough channel for the shallow water problem. +// We inherit from the `FVSpatialParams` class, which is the base class +// for spatial parameters in the context of +// applications using finite volume discretization schemes. +// [[codeblock]] namespace Dumux { -//In the RoughChannelSpatialParams class we define all functions needed to describe the spatial distributed parameters. template<class GridGeometry, class Scalar, class VolumeVariables> class RoughChannelSpatialParams : public FVSpatialParams<GridGeometry, Scalar, RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>> { - // We introduce using declarations that are derived from the property system which we need in this class + // This convenience aliases will be used throughout this class using ThisType = RoughChannelSpatialParams<GridGeometry, Scalar, VolumeVariables>; using ParentType = FVSpatialParams<GridGeometry, Scalar, ThisType>; using GridView = typename GridGeometry::GridView; @@ -49,9 +61,14 @@ class RoughChannelSpatialParams using SubControlVolume = typename FVElementGeometry::SubControlVolume; using Element = typename GridView::template Codim<0>::Entity; using GlobalPosition = typename Element::Geometry::GlobalCoordinate; + // [[/codeblock]] + // In the following, the properties of the the rough channel are set. Namely, these are + // the friction law, including it's friction parameter, the acceleration + // due to gravity and the altitude of the channel bed surface. + // [[codeblock]] public: - // In the constructor be read some values from the `params.input` and initialize the friciton law. + // In the constructor we read some values from the `params.input` and initialize the friciton law. RoughChannelSpatialParams(std::shared_ptr<const GridGeometry> gridGeometry) : ParentType(gridGeometry) { @@ -61,7 +78,8 @@ public: initFrictionLaw(); } - // We initialize the friction law based on the law specified in `params.input`. + // This function handles the initialization of the friction law based on the settings + // specified in `params.input`. void initFrictionLaw() { if (frictionLawType_ == "Manning") @@ -74,45 +92,45 @@ public: Scalar ks = getParam<Scalar>("Problem.Ks"); frictionLaw_ = std::make_unique<FrictionLawNikuradse<VolumeVariables>>(ks); } + else if (frictionLawType_ == "None") + { + frictionLaw_ = std::make_unique<FrictionLawNoFriction<VolumeVariables>>(); + } else { - std::cout<<"The FrictionLaw in params.input is unknown. Valid entries are `Manning` and `Nikuradse`!"<<std::endl; + std::cout<<"The FrictionLaw in params.input is unknown. Valid entries are `Manning`," + " `Nikuradse` and `None`!"<<std::endl; } } - // Use this function, if you want to vary the value for the gravity. - Scalar gravity(const GlobalPosition& globalPos) const + // This function returns an object of the friction law class, already initialized with a friction value. + const FrictionLaw<VolumeVariables>& frictionLaw(const Element& element, + const SubControlVolume& scv) const { - return gravity_; + return *frictionLaw_; } - // Use this function for a constant gravity. - Scalar gravity() const + // This function returns the acceleration due to gravity. + Scalar gravity(const GlobalPosition& globalPos) const { return gravity_; } - // This function returns an object of the friction law class, which is initialized with the appropriate friction values. If you want to use different friciton values or laws, you have to use a vector of unique_ptr for `frictionLaw_` and pick the right friction law instances via the `element` argument. - const FrictionLaw<VolumeVariables>& frictionLaw(const Element& element, - const SubControlVolume& scv) const - { - return *frictionLaw_; - } - - // Define the bed surface based on the `bedSlope_`. + // Define the bed surface based on the bed slope and the bed level at the inflow (10 m). Scalar bedSurface(const Element& element, const SubControlVolume& scv) const { return 10.0 - element.geometry().center()[0] * bedSlope_; } +// We declare the private variables of the problem. private: Scalar gravity_; Scalar bedSlope_; std::string frictionLawType_; std::unique_ptr<FrictionLaw<VolumeVariables>> frictionLaw_; -}; -// end of namespace Dumux. -} - +}; // end class definition of RoughChannelSpatialParams +} // end of namespace Dumux. +// [[/codeblock]] +// [[/content]] #endif -- GitLab