From 9a28187bec02ee3c6b9bc3cbb0edc4277a1e2506 Mon Sep 17 00:00:00 2001 From: Martin Schneider Date: Wed, 31 Oct 2018 14:06:09 +0100 Subject: [PATCH 01/57] [handbook] rename domain G to Omega --- doc/handbook/5_spatialdiscretizations.tex | 43 +++++++++++------------ 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index 516d1bfe84..d9e50e96d3 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -1,10 +1,9 @@ \section{Spatial Discretization Schemes} \label{spatialdiscretization} -We discretize space with the cell-centered finite volume method (\ref{box} ), the box method (\ref{cc}) +We discretize space with the cell-centered finite volume method (\ref{cc} ), the box method (\ref{box}) or a staggered grid scheme. Grid adaption is available for both box and cell-centered finite volume method. -Note that the current implementation only ensures mass conservation for incompressible fluids. In general, the spatial parameters, especially the porosity, have to be assigned on the coarsest level of discretization. @@ -13,7 +12,7 @@ the coarsest level of discretization. The so called box method unites the advantages of the finite-volume (FV) and finite-element (FE) methods. -First, the model domain $G$ is discretized with a FE mesh consisting of nodes +First, the model domain $\Omega$ is discretized with a FE mesh consisting of nodes $i$ and corresponding elements $E_k$. Then, a secondary FV mesh is constructed by connecting the midpoints and barycenters of the elements surrounding node $i$ creating a box $B_i$ around node $i$ (see Figure \ref{pc:box}a). @@ -46,17 +45,17 @@ In the following, the discretization of the balance equation is going to be deri From the \textsc{Reynolds} transport theorem follows the general balance equation: \begin{equation} - \underbrace{\int_G \frac{\partial}{\partial t} \: u \: dG}_{1} - + \underbrace{\int_{\partial G} (\mathbf{v} u + \mathbf w) \cdot \textbf n \: d\varGamma}_{2} = \underbrace{\int_G q \: dG}_{3} + \underbrace{\int_\Omega \frac{\partial}{\partial t} \: u \: dx}_{1} + + \underbrace{\int_{\partial\Omega} (\mathbf{v} u + \mathbf w) \cdot \textbf n \: d\varGamma}_{2} = \underbrace{\int_\Omega q \: dx}_{3} \end{equation} \begin{equation} - f(u) = \int_G \frac{\partial u}{\partial t} \: dG + \int_{G} \nabla \cdot - \underbrace{\left[ \mathbf{v} u + \mathbf w(u)\right] }_{F(u)} \: dG - \int_G q \: dG = 0 + f(u) = \int_\Omega \frac{\partial u}{\partial t} \: dx + \int_{\Omega} \nabla \cdot + \underbrace{\left[ \mathbf{v} u + \mathbf w(u)\right] }_{F(u)} \: dx - \int_\Omega q \: dx = 0 \end{equation} where term 1 describes the changes of entity $u$ within a control volume over time, term 2 the advective, diffusive and dispersive fluxes over the interfaces -of the control volume and term 3 is the source and sink term. $G$ denotes the +of the control volume and term 3 is the source and sink term. $\Omega$ denotes the model domain and $F(u) = F(\mathbf v, p) = F(\mathbf v(x,t), p(x,t))$. Like the FE method, the box method follows the principle of weighted residuals. @@ -107,43 +106,43 @@ of the residual $\varepsilon$ with a weighting function $W_j$ and claiming that this product has to vanish within the whole domain, \begin{equation} - \int_G W_j \cdot \varepsilon \: \overset {!}{=} \: 0 \qquad \textrm{with} \qquad \sum_j W_j =1 + \int_\Omega W_j \cdot \varepsilon \: \overset {!}{=} \: 0 \qquad \textrm{with} \qquad \sum_j W_j =1 \end{equation} yields the following equation: \begin{equation} - \int_G W_j \frac{\partial \tilde u}{\partial t} \: dG + \int_G W_j - \cdot \left[ \nabla \cdot F(\tilde u) \right] \: dG - \int_G W_j - \cdot q \: dG = \int_G W_j \cdot \varepsilon \: dG \: \overset {!}{=} \: 0 . + \int_\Omega W_j \frac{\partial \tilde u}{\partial t} \: dx + \int_\Omega W_j + \cdot \left[ \nabla \cdot F(\tilde u) \right] \: dx - \int_\Omega W_j + \cdot q \: dx = \int_\Omega W_j \cdot \varepsilon \: dx \: \overset {!}{=} \: 0 . \end{equation} Then, the chain rule and the \textsc{Green-Gaussian} integral theorem are applied. \begin{equation} - \int_G W_j \frac{\partial \sum_i N_i \hat u_i}{\partial t} \: dG - + \int_{\partial G} \left[ W_j \cdot F(\tilde u)\right] - \cdot \mathbf n \: d\varGamma_G + \int_G \nabla W_j \cdot F(\tilde u) - \: dG - \int_G W_j \cdot q \: dG = 0 + \int_\Omega W_j \frac{\partial \sum_i N_i \hat u_i}{\partial t} \: dx + + \int_{\partial\Omega} \left[ W_j \cdot F(\tilde u)\right] + \cdot \mathbf n \: d\varGamma_\Omega + \int_\Omega \nabla W_j \cdot F(\tilde u) + \: dx - \int_\Omega W_j \cdot q \: dx = 0 \end{equation} A mass lumping technique is applied by assuming that the storage capacity is -reduced to the nodes. This means that the integrals $M_{i,j} = \int_G W_j \: N_i \: dG$ +reduced to the nodes. This means that the integrals $M_{i,j} = \int_\Omega W_j \: N_i \: dx$ are replaced by the mass lumping term $M^{lump}_{i,j}$ which is defined as: \begin{equation} - M^{lump}_{i,j} =\begin{cases} \int_G W_j \: dG = \int_G N_i \: dG = V_i &i = j\\ + M^{lump}_{i,j} =\begin{cases} \int_\Omega W_j \: dx = \int_\Omega N_i \: dx = V_i &i = j\\ 0 &i \neq j\\ \end{cases} \end{equation} where $V_i$ is the volume of the FV box $B_i$ associated with node $i$. The application of this assumption in combination with -$\int_G W_j \:q \: dG = V_i \: q$ yields +$\int_\Omega W_j \:q \: dx = V_i \: q$ yields \begin{equation} V_i \frac{\partial \hat u_i}{\partial t} - + \int_{\partial G} \left[ W_j \cdot F(\tilde u)\right] - \cdot \mathbf n \: d\varGamma_G + \int_G \nabla W_j \cdot F(\tilde u) - \: dG- V_i \cdot q = 0 \, . + + \int_{\partial\Omega} \left[ W_j \cdot F(\tilde u)\right] + \cdot \mathbf n \: d\varGamma_\Omega + \int_\Omega \nabla W_j \cdot F(\tilde u) + \: dx- V_i \cdot q = 0 \, . \end{equation} Defining the weighting function $W_j$ to be piecewisely constant over a -- GitLab From 30ead6980e98f3229a2a6892f5ecd0a046a1d69c Mon Sep 17 00:00:00 2001 From: Holger Class Date: Mon, 26 Nov 2018 16:24:54 +0100 Subject: [PATCH 02/57] time discretization --- doc/handbook/5_models.tex | 47 +++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/doc/handbook/5_models.tex b/doc/handbook/5_models.tex index 17d6deb998..8f4809ce6a 100644 --- a/doc/handbook/5_models.tex +++ b/doc/handbook/5_models.tex @@ -201,10 +201,49 @@ in the Doxygen documentation at \url{http://www.dumux.org/doxygen-stable/html-\DumuxVersion/modules.php}. The documentation includes a detailed description for every model. -\subsubsection{Temporal discretization} -We discretize time with an explicit or implicit Euler -method. -% TODO: make section with more details on temporal discretization +\subsubsection{Time discretization} + +Our systems of partial differential equations are discretized in space and in time. + +Let us consider the general case of a balance equation of the following form +\begin{equation}\label{eq:generalbalance} +\frac{\partial m(u)}{\partial t} + \nabla\cdot\mathbf{f}(u, \nabla u) + q(u) = 0, +\end{equation} +seeking an unknown quantity $u$ in terms of storage $m$, flux $\mathbf{f}$ and source $q$. +All available Dumux models can be written mathematically in form of \eqref{eq:generalbalance} +with possibly vector-valued quantities $u$, $m$, $q$ and a tensor-valued flux $\mathbf{f}$. +For the sake of simplicity, we assume scalar quantities $u$, $m$, $q$ and a vector-valued +flux $\mathbf{f}$ in the notation below. + +For discretizing \eqref{eq:generalbalance} we need to choose an +approximation for the temporal derivative $\partial m(u)/\partial t$. +While many elaborate methods for this approximation exist, +we focus on the simplest one of a first order difference quotient +\begin{equation}\label{eq:euler} +\frac{\partial m(u_{k/k+1})}{\partial t} +\approx \frac{m(u_{k+1}) - m(u_k)}{\Delta t_{k+1}} +\end{equation} +for approximating the solution $u$ at time $t_k$ (forward) or $t_{k+1}$ (backward). +The question of whether to choose the forward or the backward quotient leads to the +explicit and implicit Euler method, respectively. +In case of the former, inserting \eqref{eq:euler} in \eqref{eq:generalbalance} +at time $t_k$ leads to +\begin{equation}\label{eq:expliciteuler} +\frac{m(u_{k+1}) - m(u_k)}{\Delta t_{k+1}} + \nabla\cdot\mathbf{f}(u_k, \nabla u_k) + q(u_k) = 0, +\end{equation} +whereas the implicit Euler method is described as +\begin{equation}\label{eq:impliciteuler} +\frac{m(u_{k+1}) - m(u_k)}{\Delta t_{k+1}} ++ \nabla\cdot\mathbf{f}(u_{k+1}, \nabla u_{k+1}) + q(u_{k+1}) = 0. +\end{equation} +Once the solution $u_k$ at time $t_k$ is known, it is straightforward +to determine $m(u_{k+1})$ from \eqref{eq:expliciteuler}, +while attempting to do the same based on \eqref{eq:impliciteuler} +involves the solution of a nonlinear system. +On the other hand, the explicit method \eqref{eq:expliciteuler} is stable only +if the time step size $\Delta t_{k+1}$ is below a certain limit that depends +on the specific balance equation, whereas the implicit method \eqref{eq:impliciteuler} +is unconditionally stable. \subsubsection{Algorithms to solve equations} The governing equations of each model can be solved monolithically or sequentially. -- GitLab From f19d0dc0e85ab28ebf6bc06a00fe3d77514a32f1 Mon Sep 17 00:00:00 2001 From: melaniel Date: Tue, 27 Nov 2018 13:30:38 +0100 Subject: [PATCH 03/57] [handbook] Add link to DUNE cheatsheet. --- doc/handbook/1_introduction.tex | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/handbook/1_introduction.tex b/doc/handbook/1_introduction.tex index 526f021c8a..ef9bbbeda9 100644 --- a/doc/handbook/1_introduction.tex +++ b/doc/handbook/1_introduction.tex @@ -49,7 +49,10 @@ entity can be thought of as a prototype for the actual grid entity. For example, if we used a grid which applied hexahedrons as cells, the reference element for each cell would be the unit cube $[0, 1]^3$ and the geometry function would scale and translate the cube so that -it matches the grid's cell. For a more thorough description of \Dune's +it matches the grid's cell. A quick overview of reference elements and the +related numbering can be gotten from the DUNE cheat sheet +(\url{https://www.dune-project.org/pdf/dune-cheat-sheet.pdf}). +For a more thorough description of \Dune's grid definition, see~\cite{BASTIAN2008}. In addition to the grid interface, \Dune also provides quite a few -- GitLab From a81c7e719f39c0fcf6b74f4504558577dbce3efc Mon Sep 17 00:00:00 2001 From: Kilian Weishaupt Date: Mon, 26 Nov 2018 17:16:53 +0100 Subject: [PATCH 04/57] [handbook] Update structure and folder setup --- doc/handbook/4_newfoldersetup.tex | 21 ++++++++------ doc/handbook/4_structure.tex | 47 ++++++++++++++++++------------- 2 files changed, 39 insertions(+), 29 deletions(-) diff --git a/doc/handbook/4_newfoldersetup.tex b/doc/handbook/4_newfoldersetup.tex index c1700cd9a0..eff2a3c3c0 100644 --- a/doc/handbook/4_newfoldersetup.tex +++ b/doc/handbook/4_newfoldersetup.tex @@ -13,12 +13,15 @@ the build system there is a new one. \end{enumerate} \paragraph{Adding new Test Programs} -\noindent To add a test use the \texttt{add\_dumux\_test} macro. -The command has four arguments: -\begin{enumerate}[1)] - \item name of test (has to be unique) - \item name of executable - \item source file (*.cc) - \item command to be executed as test - either the executable or a - some helper script with arguments -\end{enumerate} +\noindent To add a test use the \texttt{add\_dune\_test} macro within the \texttt{CMakeList.txt} file. +The macro can be used with a variable amount of arguments. A simple call could look like this: + +\begin{lstlisting}[style=DumuxCode] +dune_add_test(NAME my_test + SOURCES mainfile.cc + CMD_ARGS my_test params.input) +\end{lstlisting} + +Here, we create an exectuable called \texttt{my\_test} from a source file \texttt{mainfile.cc}. +The name of the test will also be \texttt{my\_test} (has to be unique). The last argument specifies a command - here, we just run the executbable \texttt{my\_test} with an input file \texttt{params.input}. For more advanced uses of +the \texttt{add\_dune\_test} macro, have a look at the \texttt{test} directory. A complete documentation is given \href{https://www.dune-project.org/sphinx/core-2.5/}{here} diff --git a/doc/handbook/4_structure.tex b/doc/handbook/4_structure.tex index 649eb2f79a..0c1dfbf496 100644 --- a/doc/handbook/4_structure.tex +++ b/doc/handbook/4_structure.tex @@ -15,7 +15,6 @@ \texttt{*.cc}, the problem definition \texttt{*problem.hh}, and an input file \texttt{*.input}. If necessary, spatially dependent parameters are defined in \texttt{*spatialparameters.hh}. For more detailed descriptions of the tests, please have a look at the Doxygen documentation. -\item \texttt{tutorial}: contains the tutorials. \end{itemize} \begin{figure} @@ -71,20 +70,16 @@ [.\node[SecondLevel] {properties}; \node[ThirdLevel] {Base properties for all models.}; ] + [.\node[SecondLevel] {typetraits}; + \node[ThirdLevel] {Helper classes to query type information on compile-time. }; + ] ] [.\node[FirstLevel] {discretization}; -% [.\node[SecondLevel] {\emph{models}}; - \node[ThirdLevel] {Common methods for all discretizations: variable caching, advective and diffusive fluxes, upwinding...}; -% ] - [.\node[SecondLevel] {box}; - \node[ThirdLevel] {Specific files for the box finite volume method: - specifications for advective and diffusive fluxes...}; - ] - [.\node[SecondLevel] {cellcentered}; - \node[ThirdLevel] {Specific files for cell centered finite volume methods.}; - ] - [.\node[SecondLevel] {staggered}; - \node[ThirdLevel] {Specific files for staggered finite volume method.}; + \node[ThirdLevel] {Common methods for all discretizations (box, cell-centered TPFA/MPFA, staggered grid): variable caching, advective and diffusive fluxes, ...}; + ] + [.\node[FirstLevel] {flux}; + [\node[ThirdLevel] { + Collection of classes used to calculate advective and diffusive fluxes.}; ] ] [.\node[FirstLevel] {freeflow}; @@ -93,6 +88,11 @@ and eddy-viscosity based Reynolds-averaged Navier-Stokes turbulence models.}; ] ] + [.\node[FirstLevel] {geomechanics}; + [.\node[SecondLevel] {\emph{models}}; + \node[ThirdLevel] {Elastic and poro-elastic geomechanics models.}; + ] + ] [.\node[FirstLevel] {io}; \node[ThirdLevel] {Additional in-/output possibilities like restart files, gnuplot-interface, VTKWriter extensions and files for grid generation.}; @@ -126,28 +126,35 @@ ] [.\node[SecondLevel] {fluidstates}; \node[ThirdLevel] {Fluid states are responsible for caching the thermodynamic - configuration of a system at a given spatial and temporal position.}; + configuration of a fluid system at a given spatial and temporal position.}; ] [.\node[SecondLevel] {fluidsystems}; \node[ThirdLevel] {Fluid systems express the thermodynamic relations between quantities.}; ] + [.\node[SecondLevel] {solidstates}; + \node[ThirdLevel] {Solid states are responsible for caching the thermodynamic + configuration of a solid system at a given spatial and temporal position.}; + ] + [.\node[SecondLevel] {solidsystems}; + \node[ThirdLevel] {Solid systems express the thermodynamic properties of a solid.}; + ] [.\node[SecondLevel] {spatialparams}; \node[ThirdLevel] {Base class for all spatially dependent variables, like permeability and porosity. Includes spatial averaging routines. All other properties are specified in the specific files of the respective models.}; ] ] - [.\node[FirstLevel] {mixeddimension}; + [.\node[FirstLevel] {multidomain}; \node[ThirdLevel] { - Coupled model with different dimensions.}; + Common infrastructure to couple multiple domains, models or physics.}; [.\node[SecondLevel] {embedded}; - \node[ThirdLevel] {Embedded mixed dimension method.}; + \node[ThirdLevel] {Embedding of a lower-dimensional model into a higher-dimensional one}; ] [.\node[SecondLevel] {facet}; - \node[ThirdLevel] {Facet mixed dimension method.}; + \node[ThirdLevel] {Mixed-dimensional coupling at facets.}; ] - [.\node[SecondLevel] {glue}; - \node[ThirdLevel] {Grid glue backend.}; + [.\node[SecondLevel] {boundary}; + \node[ThirdLevel] {Coupling at the domain boundaries.}; ] ] [.\node[FirstLevel] {nonlinear}; -- GitLab From 46a6e2e608328e4f654afb345a824d9fcd775e2b Mon Sep 17 00:00:00 2001 From: Kilian Weishaupt Date: Wed, 28 Nov 2018 14:58:15 +0100 Subject: [PATCH 05/57] [handbook] Update parameter section --- doc/handbook/4_parameterfiles.tex | 40 +++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/doc/handbook/4_parameterfiles.tex b/doc/handbook/4_parameterfiles.tex index df325e477a..fd7e828904 100644 --- a/doc/handbook/4_parameterfiles.tex +++ b/doc/handbook/4_parameterfiles.tex @@ -5,9 +5,7 @@ A list of all available parameters is provided in the Doxygen documentation: \te After having run the example application from section \ref{quick-start-guide} you will get the following output at the end of the simulation run -\footnote{If you did not get the output, restart the application the following way: -\texttt{./test{\_}2p{\_}incompressible{\_}tpfa test{\_}2p.input -PrintParameters true}, -this will print the parameters once your simulation is finished}: +\footnote{If you did not get the output, add \texttt{Parameters::print();} to your main file.}: \begin{lstlisting}[style=Bash] # Runtime-specified parameters used: [ Grid ] @@ -24,8 +22,9 @@ DtInitial = "250" TEnd = "3000" # Default parameters used: -[ Implicit ] +[ Assembly ] NumericDifferenceMethod = "1" +[ Flux ] UpwindWeight = "1.0" [ LinearSolver ] MaxIterations = "250" @@ -64,20 +63,37 @@ A number of things can be learned: \subsection{Parameter Values} -If you want to get the value of a parameter please use: +To get the value of an input parameter please use: \begin{lstlisting}[name=propsyscars,style=DumuxCode] -paramname_ = getParam("GROUPNAME.PARAMNAME"); +static const TYPE paramname = getParam("GROUPNAME.PARAMNAME"); \end{lstlisting} If you also want to set a default value for a parameter, just add it like this: \begin{lstlisting}[name=propsyscars,style=DumuxCode] -paramname_ = getParam("GROUPNAME.PARAMNAME", default); +static const TYPE paramname = getParam("GROUPNAME.PARAMNAME", default); \end{lstlisting} -For further information you can also look at the \Dumux tutorial, especially exercise 1. +As this function call is relatively expensive, the respective variables should always be \texttt{static} (e.g., if used in a loop). When dealing with multiple group names, e.g., in the context of coupled models, the fowolling methods might be more convenient: + +\begin{lstlisting}[name=propsyscars,style=DumuxCode] +auto modelParamGroup0 = "Model0"; +static const TYPE paramname0 = getParamFromGroup(modelParamGroup0, "GROUPNAME.PARAMNAME"); +auto modelParamGroup1 = "Model1"; +static const TYPE paramname1 = getParamFromGroup(modelParamGroup1, "GROUPNAME.PARAMNAME"); +\end{lstlisting} + +The \texttt{FVProblem} class provides a convenience function \texttt{paramGroup()}.\\ + +The parameters can then be specified in the input file: + +\begin{lstlisting}[style=Bash] +[ Model0.Grid ] +File = file0.dgf +[ Model1.Grid ] +File = file1.dgf +\end{lstlisting} + + +For further details, please have a look at the \Dumux tutorial, especially exercise 1. -All applications have a help message which you can read by giving -\texttt{--help} as a command line argument to the application. -For further details, please have a look at \texttt{Dune::ParameterTree} -in the \Dune documentation. -- GitLab From f8021fa7eba615be54c4ab7ee4de60a747176993 Mon Sep 17 00:00:00 2001 From: Kilian Weishaupt Date: Wed, 28 Nov 2018 15:09:24 +0100 Subject: [PATCH 06/57] [handbook] Move passage about guidelines and delete .tex file --- doc/handbook/0_dumux-handbook.tex | 3 +-- doc/handbook/4_developingdumux.tex | 13 +++++++------ doc/handbook/4_guidelines.tex | 6 ------ doc/handbook/CMakeLists.txt | 1 - 4 files changed, 8 insertions(+), 15 deletions(-) delete mode 100644 doc/handbook/4_guidelines.tex diff --git a/doc/handbook/0_dumux-handbook.tex b/doc/handbook/0_dumux-handbook.tex index 0a2416b866..e2ad596224 100644 --- a/doc/handbook/0_dumux-handbook.tex +++ b/doc/handbook/0_dumux-handbook.tex @@ -126,14 +126,13 @@ how to build the documentation and about external libraries and modules. \chapter{Overview and Infrastructure} This chapter provides an overview of the general structure in \Dumux \ref{sc_structure} and gives help for basic work with \Dumux -(\ref{sc_newfoldersetup},\ref{sc_parameterfiles},\ref{sc_restartsimulations},\ref{sc_guidelines},\ref{sc_developingdumux}). +(\ref{sc_newfoldersetup},\ref{sc_parameterfiles},\ref{sc_restartsimulations}, \ref{sc_developingdumux}). Further it presents useful external tools \ref{sc_externaltools} and basic concepts \ref{sc_linearsystem}. \input{4_structure} \input{4_newfoldersetup} \input{4_parameterfiles} \input{4_restartsimulations} -\input{4_guidelines} \input{4_developingdumux} \input{4_externaltools} \input{4_assemblinglinearsystem} diff --git a/doc/handbook/4_developingdumux.tex b/doc/handbook/4_developingdumux.tex index e5c02ee1cb..8b97737db1 100644 --- a/doc/handbook/4_developingdumux.tex +++ b/doc/handbook/4_developingdumux.tex @@ -25,6 +25,13 @@ You can subscribe to the mailing list via \url{https://listserv.uni-stuttgart.de/mailman/listinfo/dumux}, then you will be informed about upcoming releases or events. +\subsection{Coding Guidelines} +Writing code in a readable manner is very important, especially +for future code developers (e.g. for adding features, debugging, etc.). +For the style guide and instructions how to contribute to \Dumux visit +\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/blob/master/CONTRIBUTING.md}. + + \subsection{Tips and Tricks} \Dumux users and developers at the LH2 are also referred to the internal Wiki for more information. @@ -98,9 +105,3 @@ To check one header file for all necessary includes to compile the contained cod Include the option \texttt{-DENABLE\_HEADERCHECK=1} in your opts file and run \texttt{dunecontrol}. Then go to the top level in your build-directory and type \texttt{make headercheck} to check all headers or press 'tab' to use the auto-completion to search for a specific header. - -\paragraph{Naming conventions} -General guidelines for naming conventions are specified in Section \ref{sc_guidelines}. -However, in order to avoid ambiguity a list of proposed names for variables, types, -functions etc is provided where users and mainly \Dumux developers can refer for -standards (check \texttt{dumux-devel/\allowbreak doc/\allowbreak naminglist/\allowbreak naming-conventions.odt}). diff --git a/doc/handbook/4_guidelines.tex b/doc/handbook/4_guidelines.tex deleted file mode 100644 index a815a27197..0000000000 --- a/doc/handbook/4_guidelines.tex +++ /dev/null @@ -1,6 +0,0 @@ -\section{Coding Guidelines} -\label{sc_guidelines} -Writing code in a readable manner is very important, especially -for future code developers (e.g. for adding features, debugging, etc.). -For the style guide and instructions how to contribute to \Dumux visit -\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/blob/master/CONTRIBUTING.md}. diff --git a/doc/handbook/CMakeLists.txt b/doc/handbook/CMakeLists.txt index ea2f0e6c6c..3df4361fd0 100644 --- a/doc/handbook/CMakeLists.txt +++ b/doc/handbook/CMakeLists.txt @@ -7,7 +7,6 @@ set(TEX_INPUTS 3_tutorial.tex 3_furtherpractice.tex 4_assemblinglinearsystem.tex - 4_guidelines.tex 4_developingdumux.tex 4_externaltools.tex 4_newfoldersetup.tex -- GitLab From aeacd3d6f6bc5824ad0f2b4ea7e53ce722792503 Mon Sep 17 00:00:00 2001 From: melaniel Date: Tue, 27 Nov 2018 15:11:38 +0100 Subject: [PATCH 07/57] Mention where 'actual equations' can be found. --- doc/handbook/5_models.tex | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/doc/handbook/5_models.tex b/doc/handbook/5_models.tex index 8f4809ce6a..6a0422c519 100644 --- a/doc/handbook/5_models.tex +++ b/doc/handbook/5_models.tex @@ -1,6 +1,8 @@ \section{Models} Here the basic definitions, the general models concept, and a list of -models available in \Dumux are given. +models available in \Dumux are given. The actual differential equations +can be found in the localresiduals (see doxygen documentation of the +model's \texttt{LocalResidual} class). \subsection{Basic Definitions and Assumptions} The basic definitions and assumptions are made, using the example @@ -134,7 +136,7 @@ Dalton's law assumes that the gases in the mixture are non-interacting (with eac p = \sum_{i}^{}p_i. \end{equation} Here $p_i$ refers to the partial pressure of component i. -As an example, if two equal volumes of gas A and gas B are mixed, the volume of the mixture stays the same but the pressures add up (see Figure \ref{fig:dalton1}). +As an example, if two equal volumes of gas A and gas B are mixed, the volume of the mixture stays the same but the pressures add up (see Figure \ref{fig:dalton1}). % \begin{figure}[ht] \centering @@ -154,7 +156,7 @@ or for an arbitrary number of gases: \end{equation} % \subsubsection{Amagat's law} -Amagat's law assumes that the volumes of the component gases are additive; the interactions of the different gases are the same as the average interactions of the components. This is known as Amagat's law: +Amagat's law assumes that the volumes of the component gases are additive; the interactions of the different gases are the same as the average interactions of the components. This is known as Amagat's law: % \begin{equation} V = \sum_{i}^{}V_i. @@ -171,7 +173,7 @@ As an example, if two volumes of gas A and B at equal pressure are mixed, the pr % The density of the mixture, $\varrho$, can be calculated as follows: \begin{equation} -\varrho = \frac{m}{V} = \frac{m}{V_\mathrm{A} + V_\mathrm{B}} = \frac{m}{\frac{m_\mathrm{A}}{\varrho_\mathrm{A}} \frac{m_\mathrm{B}}{\varrho_\mathrm{B}}} = +\varrho = \frac{m}{V} = \frac{m}{V_\mathrm{A} + V_\mathrm{B}} = \frac{m}{\frac{m_\mathrm{A}}{\varrho_\mathrm{A}} \frac{m_\mathrm{B}}{\varrho_\mathrm{B}}} = \frac{m}{\frac{X_\mathrm{A} m}{\varrho_\mathrm{A}} \frac{X_\mathrm{B} m}{\varrho_\mathrm{B}}} = \frac{1}{\frac{X_\mathrm{A}}{\varrho_\mathrm{A}} \frac{X_\mathrm{B}}{\varrho_\mathrm{B}}}, \end{equation} % @@ -182,7 +184,7 @@ or for an arbitrary number of gases: \end{equation} % \subsubsection{Ideal gases} -An ideal gas is defined as a gas whose molecules are spaced so far apart that the behavior of a molecule is not influenced by the presence of other molecules. +An ideal gas is defined as a gas whose molecules are spaced so far apart that the behavior of a molecule is not influenced by the presence of other molecules. This assumption is usually valid at low pressures and high temperatures. The ideal gas law states that, for one gas: % \begin{equation} @@ -193,7 +195,7 @@ Using the assumption of ideal gases and either Dalton's law or Amagat's law lead % \begin{equation} \varrho = \frac{p}{RT} \sum_{i}^{}M_i x_i ; \quad \varrho_m = \frac{p}{RT}. -\end{equation} +\end{equation} % \subsection{Available Models} A list of all available models can be found @@ -203,7 +205,7 @@ The documentation includes a detailed description for every model. \subsubsection{Time discretization} -Our systems of partial differential equations are discretized in space and in time. +Our systems of partial differential equations are discretized in space and in time. Let us consider the general case of a balance equation of the following form \begin{equation}\label{eq:generalbalance} -- GitLab From a65a0bb47a53eee8418553c5b94df3b30d1fd256 Mon Sep 17 00:00:00 2001 From: melaniel Date: Tue, 27 Nov 2018 17:26:51 +0100 Subject: [PATCH 08/57] [handbook] Modify section on staggered grid discretization. --- doc/handbook/5_spatialdiscretizations.tex | 62 +- doc/handbook/SVG/staggered_grid.svg | 4525 +++++++++++++++++++++ doc/handbook/pdf/staggered_grid.pdf | Bin 0 -> 69322 bytes 3 files changed, 4530 insertions(+), 57 deletions(-) create mode 100644 doc/handbook/SVG/staggered_grid.svg create mode 100644 doc/handbook/pdf/staggered_grid.pdf diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index d9e50e96d3..4e653fecd8 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -210,64 +210,12 @@ volume centers). \begin{figure}[ht] \centering -\begin{tikzpicture}[scale=3.0,font=\normalsize] -\begin{scope}[shift={(0,2.5)}] -% control volume pressure -\fill[gray!40] (1,1) rectangle (2,2); -% control volume for vertical velocity -\fill[dumuxBlue!30] (0.0,0.5) rectangle (1.0,1.5); -% control volume for horizontal velocity -\fill[dumuxYellow!30] (0.5,0) rectangle (1.5,1); - -% grid cells -\draw [thick] (0,0) grid (2,2); - -% cell centers -\foreach \x in {0.5,...,1.5} - \foreach \y in {0.5,...,1.5} - \fill[gray](\x,\y) circle(0.06); -% velocity x -\foreach \x in {0,1,2} - \foreach \y in {0.5,...,1.5} - \draw[dumuxYellow,->,ultra thick](\x-0.15,\y) -- (\x+0.15,\y); -% velocity y -\foreach \x in {0.5,...,1.5} - \foreach \y in {0,...,2.0} - \draw[dumuxBlue,->,ultra thick](\x,\y-0.15) -- (\x,\y+0.15); -\end{scope} - -% annotations -\begin{scope}[shift={(1.0,2.7)}] -\fill[gray](2.3,1.8) circle(0.06); -\draw(2.5,1.8) node[right, align=left] {cell-centered primary variables\\\color{gray}($p_\alpha$, $x^\kappa_\alpha$, $T$, $k$, $\varepsilon$, ...)}; -\draw[dumuxYellow,->,ultra thick](2.2,1.4) -- (2.4,1.4); -\draw[dumuxYellow](2.5,1.4) node[right, align=left] {$v_{\alpha\textrm{,x}}$}; -\draw[dumuxBlue,->,ultra thick](2.3,0.9) -- (2.3,1.1); -\draw[dumuxBlue](2.5,1.0) node[right, align=left] {$v_{\alpha\textrm{,y}}$}; - -\draw[thick](2.2,0.5) rectangle (2.4,0.7); -\draw(2.5,0.6) node[right, align=left] {finite volume mesh}; -\draw[draw=none,fill=gray!40](2.2,0.1) rectangle (2.4,0.3); -\draw(2.5,0.2) node[right, align=left] {control volumes\\(cell-centered primary variables)}; -\draw[draw=none,fill=dumuxYellow!30](1.9,-0.1) rectangle (2.1,-0.3); -\draw[draw=none,fill=dumuxBlue!30](2.2,-0.1) rectangle (2.4,-0.3); -\draw(2.5,-0.2) node[right, align=left] {staggered control volumes\\(velocity components)}; -\end{scope} -\end{tikzpicture} -\caption{\label{pc:staggered} Discretization of the staggered-grid method} +\includegraphics[width=.8\linewidth]{./pdf/staggered_grid.pdf} +\caption{\label{pc:staggered} Discretization of the staggered-grid method. The figure shows the different control volume arrangements, which are staggered with respect to each other. There are the control volumes centered around the scalar primary variables in black, the control volumes located around the $x$-component of the velocity in blue and the control volumes located around the $y$-components of the velocity in red. The control volume boundaries are given by lines. Additionally, there is one shaded example control volume each.\\ +In the two-dimensional free-flow models, the continuity equation is discretized using the black control volumes, the $x$-component of the momentum equation is discretized using the blue control volumes and the $y$-component is discretized using the red control volumes. In three dimensions this works analogously.} \end{figure} -The staggered-grid or marker-and-cell method uses a cell-centered finite volume method -for the scalar primary variables. -The control volumes for the velocity components are shifted half-a-cell in each direction, -such that the velocity components are located on the edges of the -cell-centered finite volume mesh (see Figure~\ref{pc:staggered}). -As for the cell-centered method, the fluxes are evaluated at the edges -of each control volume with a two-point flux approximation, cf. \ref{cc}.\\ -For cell-centered variables, the boundary handling is as for the cell-centered method. -For the velocity components, Dirichlet values for the component normal to the boundary -face can directly be applied. -For the tangential components the boundary values are treated with contribution of the boundary flux. \\ +The staggered-grid or marker-and-cell method uses a finite volume method with different control volumes for different equations. There are control volumes centered around the scalar primary variables. They correspond to the finite volume mesh. Additionally, there are control volumes located around the $x,y$ and (in 3D) $z$ velocity components which are shifted in the $x,y$ and $z$ direction, such that the velocity components are located on the edges of the cell-centered finite volume mesh (see Figure~\ref{pc:staggered}). As for the cell-centered method, the fluxes are evaluated at the edges of each control volume with a two-point flux approximation, cf. \ref{cc}.\\ The staggered-grid method is robust, mass conservative, and free of pressure oscillations but should, as the cell-centered TPFA method, only be applied for structured grids. -At the moment the staggered-grid is the base discretization for all free-flow models. +Currently, all free-flow models in \Dumux use the staggered-grid discretization. diff --git a/doc/handbook/SVG/staggered_grid.svg b/doc/handbook/SVG/staggered_grid.svg new file mode 100644 index 0000000000..fce64bce78 --- /dev/null +++ b/doc/handbook/SVG/staggered_grid.svg @@ -0,0 +1,4525 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/doc/handbook/pdf/staggered_grid.pdf b/doc/handbook/pdf/staggered_grid.pdf new file mode 100644 index 0000000000000000000000000000000000000000..35fd6e39ef023091f7745dc16e306560fc4dce10 GIT binary patch literal 69322 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 literal 0 HcmV?d00001 -- GitLab From 602eb23098a1cd6c63bd9d6455b2781ce480f728 Mon Sep 17 00:00:00 2001 From: Ned Coltman Date: Mon, 3 Dec 2018 17:02:55 +0100 Subject: [PATCH 09/57] [Handbook] replace tutorial section with dumux course reference --- doc/handbook/0_dumux-handbook.tex | 5 ++-- doc/handbook/3_course.tex | 46 +++++++++++++++++++++++++++++++ doc/handbook/3_tutorial.tex | 2 -- doc/handbook/CMakeLists.txt | 2 +- 4 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 doc/handbook/3_course.tex delete mode 100644 doc/handbook/3_tutorial.tex diff --git a/doc/handbook/0_dumux-handbook.tex b/doc/handbook/0_dumux-handbook.tex index e2ad596224..26a1cec4f1 100644 --- a/doc/handbook/0_dumux-handbook.tex +++ b/doc/handbook/0_dumux-handbook.tex @@ -11,6 +11,7 @@ \usepackage{enumerate} \usepackage{hyperref} \usepackage{graphicx} + \usepackage{listings} \usepackage{makeidx} \usepackage[square,numbers]{natbib} @@ -119,8 +120,8 @@ how to build the documentation and about external libraries and modules. \input{2_quickinstall} \input{2_detailedinstall} -\chapter{Tutorial}\label{chp:tutorial} -\input{3_tutorial} +\chapter{Learning to use \Dumux}\label{chp:tutorial} +\input{3_course} \input{3_furtherpractice} \chapter{Overview and Infrastructure} diff --git a/doc/handbook/3_course.tex b/doc/handbook/3_course.tex new file mode 100644 index 0000000000..ff988d283c --- /dev/null +++ b/doc/handbook/3_course.tex @@ -0,0 +1,46 @@ +So, you've downloaded your very own copy of \Dumux and its dependencies. +You've run dunecontrol, and your example ``test$\_$dumux" not only complies, +but it even shows a nice simulation in paraview. +Maybe you've read through parts of the handbook, and even started looking +though the doxygen documentation. +Well done. What now? \\ \linebreak + +\textit{``How on earth is this going to help me solve my multi-(phase, component, +scale, physics) flow and transport problems in porous media systems?''} you begin to wonder. +Don't panic! In order to best ease our prospective users and developers into the +wonderful \Dumux simulation environment, we've prepared a \Dumux-course. +This course is offered once a year over a period of 3 days at the University of Stuttgart. +If you're looking for information on attending, subscribe to the \Dumux mailing list +and stay tuned for updates. \\ +\url{https://listserv.uni-stuttgart.de/mailman/listinfo/dumux} \\ \linebreak + +\textit{``But the course won't take place for another 6 months!"} and, +\textit{``I want to start developing a numerical model of my challenging and + interesting process now!"}, you think. +Not a problem. The course materials are all shared online in their own +\Dumux project repository. A series of beginner-level exercises are explained +such that you can see how a model is developed in \Dumux. As a teaser, we've + also included a suite of examples from hot topics we're working on. Models + exploring ``Coupling free flow and porous-media flow", ``Flow in fractured + porous media" and ``Fluid-solid phase change" are all introduced. \\ \linebreak + +\textit{``Sounds great, but where is this material? I can't find it within +what I've downloaded."}, you question. +The dumux course material is found online here: \\ +\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course} \\ +In order to download this repository, which acts as an additional module to +the \Dumux base, you can download an installation script with the following command: +\begin{lstlisting}[style=Bash] +$ wget https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/scripts/install.sh +\end{lstlisting} +This script will install \Dumux, it's Dune dependencies, and the \Dumux-course +repository. Within the directory \Dumux-course there are a series of exercises +and slides describing the previously described examples. \\ \linebreak + +%TODO: Is this true? Did we update the dumux course to compatibility with 3.0? +At the moment, the \Dumux course is dependent on a certain version of +\Dumux. To make sure that this version of \Dumux is collected to your installation, +check to see if the branch \textbf{dumux-course-2018} +is checked out within your dumux folder. +In the future, the \Dumux course will be updated to depend on +the specific release (3.0, 3.1) that was closest to the date of the course. \ No newline at end of file diff --git a/doc/handbook/3_tutorial.tex b/doc/handbook/3_tutorial.tex deleted file mode 100644 index b31d3a39f3..0000000000 --- a/doc/handbook/3_tutorial.tex +++ /dev/null @@ -1,2 +0,0 @@ -The tutorial provides instructions ranging from how to set boundary conditions in \Dumux to how to set up your own \Dumux module. -Go to the directory \texttt{tutorial} in the \texttt{dumux} module and read the \texttt{README.md} (best to be opened in a web browser) for instructions on the tutorial. diff --git a/doc/handbook/CMakeLists.txt b/doc/handbook/CMakeLists.txt index 3df4361fd0..0b8e5ba329 100644 --- a/doc/handbook/CMakeLists.txt +++ b/doc/handbook/CMakeLists.txt @@ -4,7 +4,7 @@ set(TEX_INPUTS 1_introduction.tex 2_detailedinstall.tex 2_quickinstall.tex - 3_tutorial.tex + 3_course.tex 3_furtherpractice.tex 4_assemblinglinearsystem.tex 4_developingdumux.tex -- GitLab From e818ce99e6f219f5c415cc4ac94c6bc9b569a24e Mon Sep 17 00:00:00 2001 From: hommel Date: Wed, 28 Nov 2018 12:04:01 +0100 Subject: [PATCH 10/57] [handbook] updated 'getting started' chapter, split in 'quick start' and 'detailed installation, documentation and externals' --- doc/handbook/0_dumux-handbook.tex | 14 ++- doc/handbook/2_detailedinstall.tex | 187 +++++++++++++++-------------- doc/handbook/2_quickinstall.tex | 20 +-- doc/handbook/4_developingdumux.tex | 5 +- doc/handbook/installDumux.sh | 10 +- 5 files changed, 120 insertions(+), 116 deletions(-) diff --git a/doc/handbook/0_dumux-handbook.tex b/doc/handbook/0_dumux-handbook.tex index 26a1cec4f1..e0b7626449 100644 --- a/doc/handbook/0_dumux-handbook.tex +++ b/doc/handbook/0_dumux-handbook.tex @@ -110,14 +110,16 @@ Universit\"at Stuttgart, Paffenwaldring 61, D-70569 Stuttgart, Germany}\\ \chapter{Introduction} \input{1_introduction} -\chapter{Getting started} +\chapter{Quick Start}\label{quick-install} In this chapter we provide a quick start guide to -your first \Dumux experience. -The first section contains instructions on how to very quickly install \Dumux. -More detailed information on how to obtain source code, build and test \Dune and \Dumux -follows in the second section of this chapter. The second section also contains information on -how to build the documentation and about external libraries and modules. +your first \Dumux experience, including an install script with all necessary instructions +on how to very quickly install the latest release version of \Dumux. \input{2_quickinstall} + +\chapter{Detailed Installation, Documentation, and Externals}\label{detailed-install} +In this chapter, we provide more detailed information on how to obtain source code, build and test \Dune and \Dumux. +It further contains information on +how to build the documentation and about external libraries and modules. \input{2_detailedinstall} \chapter{Learning to use \Dumux}\label{chp:tutorial} diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index 504d33049e..521d6cd8a7 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -1,5 +1,5 @@ -\section{Detailed Installation Instructions} -\label{install} +% \section{Detailed Installation Instructions} +% \label{install} Installing \Dumux means that you first unpack \Dune and \Dumux in a root directory, (section \ref{sc:ObtainingSourceCode}). @@ -15,10 +15,10 @@ Thus, the installation procedure of \Dumux is the same as that of \Dune. Details regarding the installation of \Dune are provided on the \Dune website \cite{DUNE-HP}. -\subsection{Obtaining Source Code for \Dune and \Dumux} +\section{Obtaining Source Code for \Dune and \Dumux} \label{sc:ObtainingSourceCode} The \Dumux release and trunk (developer tree) are based on the most recent -\Dune release 2.5, comprising the core modules dune-common, dune-geometry, dune-grid, +\Dune release 2.6, comprising the core modules dune-common, dune-geometry, dune-grid, dune-istl and dune-localfunctions. For working with \Dumux, these modules are required. All \Dune modules, including the \Dumux module, get extracted into a common root directory, as it is done in an ordinary \Dune installation. @@ -32,45 +32,45 @@ in the root directory of the respective module. This should not be changed by th Two possibilities exist to get the source code of \Dune and \Dumux. Firstly, \Dune and \Dumux can be downloaded as tar files from the respective \Dune and \Dumux website. They have to be extracted as described in the next paragraph. -% TODO: alpha version was not released with a tarball. For the next releases the following lines need to be deleted again -There is no tar file for the current \DumuxVersion~release. -Secondly, a method to obtain the most recent source code (or, more generally, any of its previous revisions) by direct access -to the software repositories of the revision control system is described in the subsequent part. -Be aware that you cannot get \texttt{dumux-devel} or the external libraries from \texttt{dumux-external} unless -you have an GitLab account with the right privileges. +% % TODO: alpha version was not released with a tarball. For the next releases the following lines need to be deleted again +% There is no tar file for the current \DumuxVersion~release. +% Secondly, a method to obtain the most recent source code (or, more generally, any of its previous revisions) by direct access +% to the software repositories of the revision control system is described in the subsequent part. +% Be aware that you cannot get \texttt{dumux-devel} or the external libraries from \texttt{dumux-external} unless +% you have an GitLab account with the right privileges. In section \ref{sec:prerequisites} we list some prerequisites for running \Dune and \Dumux. Please check in said paragraph whether you can fulfill them before continuing. % TODO: alpha version was not released with a tarball. For the next releases the following lines need to be uncommented again -% \paragraph{Obtaining the software by installing tar files} -% The slightly old-fashionedly named tape-archive-file, shortly named tar file or -% tarball, is a common file format for distributing collections of files contained -% within these archives. -% The extraction from the tar files is done as follows: -% Download the tarballs from the respective \Dune (version 2.5) and \Dumux websites -% to a certain folder in your file system. -% Create the common root directory, named \texttt{DUMUX} in the example below. -% Then extract the content of the tar files, e.\,g. with the command-line program -% \texttt{tar}. -% This can be achieved by the following shell commands. Replace \texttt{path\_to\_tarball} -% with the directory name where the downloaded files are actually located. -% After extraction, the actual name of the dumux subdirectory is \texttt{dumux-\DumuxVersion} -% (or whatever version you downloaded). -% -% \begin{lstlisting}[style=Bash] -% $ mkdir DUMUX -% $ cd DUMUX -% $ tar xzvf path_to_tarball_of/dune-common-2.5.0.tar.gz -% $ tar xzvf path_to_tarball_of/dune-geometry-2.5.0.tar.gz -% $ tar xzvf path_to_tarball_of/dune-grid-2.5.0.tar.gz -% $ tar xzvf path_to_tarball_of/dune-istl-2.5.0.tar.gz -% $ tar xzvf path_to_tarball_of/dune-localfunctions-2.5.0.tar.gz -% $ tar xzvf path_to_tarball_of/dumux-3.0-alpha.tar.gz -% \end{lstlisting} -% -% Furthermore, if you wish to install the optional \Dune Grid-Howto which provides a tutorial -% on the Dune grid interface, act similar. +\paragraph{Obtaining the software by installing tar files} +The slightly old-fashionedly named tape-archive-file, shortly named tar file or +tarball, is a common file format for distributing collections of files contained +within these archives. +The extraction from the tar files is done as follows: +Download the tarballs from the respective \Dune (version 2.6) and \Dumux websites +to a certain folder in your file system. +Create the common root directory, named \texttt{DUMUX} in the example below. +Then extract the content of the tar files, e.\,g. with the command-line program +\texttt{tar}. +This can be achieved by the following shell commands. Replace \texttt{path\_to\_tarball} +with the directory name where the downloaded files are actually located. +After extraction, the actual name of the dumux subdirectory is \texttt{dumux-\DumuxVersion} +(or whatever version you downloaded). + +\begin{lstlisting}[style=Bash] +$ mkdir DUMUX +$ cd DUMUX +$ tar xzvf path_to_tarball_of/dune-common-2.6.0.tar.gz +$ tar xzvf path_to_tarball_of/dune-geometry-2.6.0.tar.gz +$ tar xzvf path_to_tarball_of/dune-grid-2.6.0.tar.gz +$ tar xzvf path_to_tarball_of/dune-istl-2.6.0.tar.gz +$ tar xzvf path_to_tarball_of/dune-localfunctions-2.6.0.tar.gz +$ tar xzvf path_to_tarball_of/dumux-3.0.tar.gz +\end{lstlisting} + +Furthermore, if you wish to install the optional \Dune Grid-Howto which provides a tutorial +on the Dune grid interface, act similar. \paragraph{Obtaining \Dune and \Dumux from software repositories} Direct access to a software revision control system for downloading code can be of advantage later on. @@ -93,48 +93,50 @@ one for \Dune and one for \Dumux. \begin{lstlisting}[style=Bash] $ mkdir DUMUX $ cd DUMUX -$ git clone -b releases/2.5 https://gitlab.dune-project.org/core/dune-common.git -$ git clone -b releases/2.5 https://gitlab.dune-project.org/core/dune-geometry.git -$ git clone -b releases/2.5 https://gitlab.dune-project.org/core/dune-grid.git -$ git clone -b releases/2.5 https://gitlab.dune-project.org/core/dune-istl.git -$ git clone -b releases/2.5 https://gitlab.dune-project.org/core/dune-localfunctions.git -$ git clone -b 3.0.0-alpha https://git.iws.uni-stuttgart.de/dumux-repositories/dumux.git +$ git clone -b releases/2.6 https://gitlab.dune-project.org/core/dune-common.git +$ git clone -b releases/2.6 https://gitlab.dune-project.org/core/dune-geometry.git +$ git clone -b releases/2.6 https://gitlab.dune-project.org/core/dune-grid.git +$ git clone -b releases/2.6 https://gitlab.dune-project.org/core/dune-istl.git +$ git clone -b releases/2.6 https://gitlab.dune-project.org/core/dune-localfunctions.git +$ git clone -b releases/3.0 https://git.iws.uni-stuttgart.de/dumux-repositories/dumux.git \end{lstlisting} The newest and maybe unstable developments of \Dune and \Dumux are also provided in these repositories and can be found in the \emph{master} branch. Please check the \Dune website \cite{DUNE-HP} for further information on the \Dune development. We always try to keep up with the latest developments of \Dune. -However, the current \Dumux release is based on the stable 2.5 release and it might not compile without further adaptations using the newest versions of \Dune. +However, the current \Dumux release is based on the stable 2.6 release and it might not compile without further adaptations using the newest versions of \Dune. Furthermore, if you wish to install the optional \Dune Grid-Howto which provides a tutorial on the Dune grid interface, act similar. -\paragraph{Patching \Dune or external libraries} -\label{sc:patchingDUNE} -Patching of \Dune modules in order to work together with \Dumux can be necessary for several reasons. -Software like a compiler or even a standard library -changes at times. But, for example, a certain release of a software component that we depend on, -may not reflect that change and thus it has to be modified. -In the dynamic developing process of software which depends on other modules it is not always feasible -to adapt everything to the most recent version of each module. They may fix problems with a certain module -of a certain release without introducing too much structural change. - -\Dumux contains patches and documentation about their usage and application within the -directory \texttt{dumux/patches}. -Please check the README file in that directory for recent information. -In general, a patch can be applied as follows -(the exact command or the used parameters may be slightly different). -We include here an example of a patching dune-grid. - -\begin{lstlisting}[style=Bash] -$ # make sure you are in the common root directory -$ cd dune-grid -$ patch -p0 < ../dumux/patches/grid-2.3.1.patch -\end{lstlisting} - -It can be removed by -\begin{lstlisting}[style=Bash] -$ path -p0 -R < ../dumux/patches/grid-2.3.1.patch -\end{lstlisting} +%TODO:currently, no DUNE patches necessary! Uncomment this section in case this changes again in the future. +% +% \paragraph{Patching \Dune or external libraries} +% \label{sc:patchingDUNE} +% Patching of \Dune modules in order to work together with \Dumux can be necessary for several reasons. +% Software like a compiler or even a standard library +% changes at times. But, for example, a certain release of a software component that we depend on, +% may not reflect that change and thus it has to be modified. +% In the dynamic developing process of software which depends on other modules it is not always feasible +% to adapt everything to the most recent version of each module. They may fix problems with a certain module +% of a certain release without introducing too much structural change. +% +% \Dumux contains patches and documentation about their usage and application within the +% directory \texttt{dumux/patches}. +% Please check the README file in that directory for recent information. +% In general, a patch can be applied as follows +% (the exact command or the used parameters may be slightly different). +% We include here an example of a patching dune-grid. +% +% \begin{lstlisting}[style=Bash] +% $ # make sure you are in the common root directory +% $ cd dune-grid +% $ patch -p0 < ../dumux/patches/grid-2.3.1.patch +% \end{lstlisting} +% +% It can be removed by +% \begin{lstlisting}[style=Bash] +% $ path -p0 -R < ../dumux/patches/grid-2.3.1.patch +% \end{lstlisting} \paragraph{Hints for \Dumux-Developers} If you also want to actively participate in the development of \Dumux, you can allways send patches @@ -144,14 +146,14 @@ access or for developer access on certain parts of \Dumux. Granted developer acc you are allowed to commit own code and that you can access the \texttt{dumux-devel} module. This enhances \texttt{dumux} by providing maybe unstable code from the developer group. -\subsection{Build of \Dune and \Dumux} +\section{Build of \Dune and \Dumux} \label{buildIt} Configuring \Dune and \Dumux is done by the shell-command \texttt{dunecontrol} which is part of the \Dune build system. If you are interested in more details about the build system that is used, they can be found in the \Dune buildsystem documentation\footnote{\url{https://www.dune-project.org/buildsystem/}} and CMake's documentation\footnote{\url{https://cmake.org/documentation/}}. If something fails during the execution of \texttt{dunecontrol} feel free to report it to the \Dune or \Dumux developer mailing list, -but also try to include error details. +but please include error details. It is possible to compile \Dumux with nearly no explicit options to the build system. However, for the successful compilation of \Dune and \Dumux, it is currently necessary to pass @@ -178,7 +180,7 @@ $ cp dumux/optim.opts my-optim.opts $ ./dune-common/bin/dunecontrol --opts=my-optim.opts --use-cmake all \end{lstlisting} -Sometimes it is necessary to have additional options which +Sometimes, it is necessary to have additional options which are specific to a package set of an operating system or sometimes you have your own preferences. Feel free to work with your own set of options, which may evolve over time. @@ -188,9 +190,9 @@ The use of external libraries can make it necessary to add quite many options in It can be helpful to give your customized option file its own name, as done above, to avoid confusing it with the option files which came out of the distribution. -\subsection{The First Run of a Test Application} +\section{The First Run of a Test Application} \label{quick-start-guide} -The previous section showed how to install and compile \Dumux. This chapter +The previous section showed how to install and compile \Dumux. This section shall give a very brief introduction how to run a first test application and how to visualize the first output files. A more detailed explanations can be found in the tutorials in the following chapter.\\ @@ -201,15 +203,14 @@ If not given differently in the input files, this is \texttt{build-cmake} as def \item Go to the directory \texttt{build-cmake/test}. There, various test application folders can be found. Let us consider as example\\ \texttt{porousmediumflow/2p/implicit/incompressible/test{\_}2p{\_}incompressible{\_}tpfa}. -\item Enter the folder \texttt{porousmediumflow/2p/implicit/incompressible}.\\ Type \texttt{make test{\_}2p{\_}incompressible{\_}tpfa} - in order to compile the application\\ \texttt{test{\_}2p{\_}incompressible{\_}tpfa}. To run the simulation, - type \texttt{./test{\_}2p{\_}incompressible{\_}tpfa} - into the console. If you explicitly want to state a parameter file, type\\ - \texttt{./test{\_}2p{\_}incompressible{\_}tpfa test\_2p.input}. - Adding \texttt{test\_2p.input} specifies that all - important parameters (like first timestep size, end of simulation and location +\item Enter the folder \texttt{porousmediumflow/2p/implicit/incompressible}.\\ Type \texttt{make test{\_}2p{\_}incompressible{\_}tpfa} + in order to compile the application\\ \texttt{test{\_}2p{\_}incompressible{\_}tpfa}. To run the simulation, + type \texttt{./test{\_}2p{\_}incompressible{\_}tpfa params.input} + into the console. + The added \texttt{params.input} specifies that all + important run-time parameters (like first timestep size, end of simulation and location of the grid file) can be found in a text file in the same directory with the - name \texttt{test\_2p.input}. + name \texttt{params.input}. \item The simulation starts and produces some .vtu output files and also a .pvd file. The .pvd file can be used to examine time series and summarizes the .vtu files. It is possible to stop a running application by pressing $<$Ctrl$><$c$>$. @@ -218,8 +219,14 @@ If not given differently in the input files, this is \texttt{build-cmake} as def .pvd file. On the left hand side, you can choose the desired parameter to be displayed. \end{enumerate} -\subsection{Building Documentation} -\subsubsection{Doxygen} +\section{Building Documentation} + +The building of included documentation like this handbook requires \LaTeX{} and auxiliary tools +\texttt{bibtex}. One usually chooses a \LaTeX{} distribution like \texttt{texlive} for this purpose. +It is possible to switch off the building of the documentation by setting the switch \texttt{--disable-documentation} +in the \texttt{CONFIGURE\_FLAGS} of the building options, see section \ref{buildIt}. + +\subsection{Doxygen} \label{sec:build-doxy-doc} Doxygen documentation is done by especially formatted comments integrated in the source code, which can get extracted by the program \texttt{doxygen}. Beside extracting these comments, @@ -232,12 +239,12 @@ by running \texttt{dunecontrol}, entering the \texttt{build-*}directory, and exe \texttt{MODULE\_BUILD\_DIRECTORY/doc/doxygen/html/index.html} to read the generated documentation. This should also work for other \Dune modules. -\subsubsection{Handbook} +\subsection{Handbook} To build the \Dumux handbook go into the \texttt{build-}directory and run \texttt{make doc} or \texttt{make 0\_dumux-handbook\_pdf}. The pdf can then be found in \texttt{MODULE\_BUILD\_DIRECTORY/doc/handbook/0\_dumux-handbook.pdf}. -\subsection{External Libraries and Modules} \label{sec:external-modules-libraries} +\section{External Libraries and Modules} \label{sec:external-modules-libraries} The libraries described below provide additional functionality but are not generally required to run \Dumux. If you are going to use an external library check the information provided on the \Dune website% \footnote{DUNE: External libraries, \url{https://www.dune-project.org/doc/external-libraries/}}. @@ -259,7 +266,7 @@ An easy way to install some of the libraries and modules given below is the has to be called from your common root directory. -\subsubsection{List of External Libraries and Modules} +\subsection{List of External Libraries and Modules} In the following list, you can find some external modules and external libraries, and some more libraries and tools which are prerequisites for their use. diff --git a/doc/handbook/2_quickinstall.tex b/doc/handbook/2_quickinstall.tex index 91a4139a88..9235e5c59d 100644 --- a/doc/handbook/2_quickinstall.tex +++ b/doc/handbook/2_quickinstall.tex @@ -1,13 +1,10 @@ -\section{Quick Installation of \Dumux} -\label{quick-install} - -This section only provides one quick way of installing \Dumux. +This chapter provides one quick way of installing \Dumux. You should have a recent working Linux environment and no \Dune core modules should be installed. If you need more information or have \Dune already installed, please have a look at the detailed installation -instructions in Section \ref{install}. +instructions in the more detailed intructions in the next chapter \ref{detailed-install}. -\subsection{Prerequisites} \label{sec:prerequisites} +\section{Prerequisites} \label{sec:prerequisites} For this quick start guide the following software packages are required: \begin{itemize} \item GitLab client @@ -17,12 +14,7 @@ For this quick start guide the following software packages are required: \item paraview (to visualize the results) \end{itemize} -The building of included documentation like this handbook requires \LaTeX{} and auxiliary tools -\texttt{bibtex}. One usually chooses a \LaTeX{} distribution like \texttt{texlive} for this purpose. -It is possible to switch off the building of the documentation by setting the switch \texttt{--disable-documentation} -in the \texttt{CONFIGURE\_FLAGS} of the building options, see Chapter \ref{buildIt}. - -\subsection{Obtaining code and configuring all modules with a script} +\section{Obtaining code and configuring all modules with a script} We provide you with a shell-script \texttt{installDumux.sh} that facilitates setting up a {\Dune}/{\Dumux} directory tree and configures all modules with CMake. % TODO: uncomment/delete the following lines when next is the only release @@ -36,7 +28,7 @@ root folder \texttt{DUMUX} will be produced, so you do not need to provide one). Run the script by typing into the terminal: \texttt{./installDumux.sh} Configuring \Dune and \Dumux is done by the command-line script \texttt{dunecontrol} -using optimized configure options, see the line entitled \texttt{\# run build} in the \texttt{installDumux.sh} script. +using optimized configure options, see the line entitled \texttt{\# run build} in the \texttt{installDumux.sh} script. More details about the build-system can be found in section \ref{buildIt}. \subsection{A first test run of \Dumux} @@ -51,4 +43,4 @@ make -B test_1pcctpfa paraview *pvd \end{lstlisting} The script \texttt{test\_dumux.sh} can be executed by typing into the terminal: \texttt{./test\_dumux.sh}. -If everything works fine, a paraview-window with the result should open automatically. +If everything works fine, a paraview window with the result should open automatically. diff --git a/doc/handbook/4_developingdumux.tex b/doc/handbook/4_developingdumux.tex index 8b97737db1..8739427711 100644 --- a/doc/handbook/4_developingdumux.tex +++ b/doc/handbook/4_developingdumux.tex @@ -71,7 +71,10 @@ To apply a patch in the same directory type: \begin{lstlisting}[style=Bash] $ patch -p1 < PATCHFILE \end{lstlisting} -See \ref{sc:patchingDUNE} if you need to apply patches to \Dumux or \Dune. + +%TODO: currently, no DUNE patches necessary! Thus, this section is commented and the missing refrence would be bad. +% Uncomment the following statement again when patches might be necessary. +% See \ref{sc:patchingDUNE} if you need to apply patches to \Dumux or \Dune. \paragraph{File Name and Line Number by Predefined Macro} If you want to know where some output or debug information came from, use the predefined diff --git a/doc/handbook/installDumux.sh b/doc/handbook/installDumux.sh index bca2ab4612..74b14f05cb 100644 --- a/doc/handbook/installDumux.sh +++ b/doc/handbook/installDumux.sh @@ -11,22 +11,22 @@ echo "*************************************************" # the core modules for MOD in common geometry grid localfunctions istl; do if [ ! -d "dune-$MOD" ]; then - git clone -b releases/2.5 https://gitlab.dune-project.org/core/dune-$MOD.git + git clone -b releases/2.6 https://gitlab.dune-project.org/core/dune-$MOD.git else echo "Skip cloning dune-$MOD because the folder already exists." cd dune-$MOD - git checkout releases/2.5 + git checkout releases/2.6 cd .. fi done # dumux if [ ! -d "dumux" ]; then - git clone -b 3.0.0-alpha https://git.iws.uni-stuttgart.de/dumux-repositories/dumux.git + git clone -b releases/3.0 https://git.iws.uni-stuttgart.de/dumux-repositories/dumux.git else echo "Skip cloning dumux because the folder already exists." cd dumux - git checkout 3.0.0-alpha + git checkout releases/3.0 cd .. fi @@ -42,7 +42,7 @@ echo "(2/2) Configure dune modules and dumux. Build the dune libaries. This may take several minutes." echo "*************************************************" # run build -./dune-common/bin/dunecontrol --opts=dumux/myoptim.opts all +./dune-common/bin/dunecontrol --opts=dumux/optim.opts all # if [ $? -ne 0 ]; then echo "*************************************************" -- GitLab From ed726526429f55ab3450121e8ea457945727c309 Mon Sep 17 00:00:00 2001 From: Johannes Hommel Date: Thu, 29 Nov 2018 09:39:08 +0100 Subject: [PATCH 11/57] [handbook] Update external modules list --- doc/handbook/2_detailedinstall.tex | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index 521d6cd8a7..4fd3bbff62 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -281,6 +281,17 @@ and some more libraries and tools which are prerequisites for their use. of choice for simulating structures such as foams, discrete fracture networks, or network flow problems. Download: \url{https://gitlab.dune-project.org/extensions/dune-foamgrid} + +\item \textbf{opm-grid}: opm-grid is a DUNE module supporting grids in a corner-point format. + Download: \url{https://github.com/OPM/opm-grid.git} + +\item \textbf{dune-subgrid}: The dune-subgrid module allows to mark elements of another hierarchical dune grid. +The set of marked elements can then be accessed as a hierarchical dune grid in its own right. +Dune-Subgrid provides the full grid interface including adaptive mesh refinement. + Download: \url{https://git.imp.fu-berlin.de/agnumpde/dune-subgrid.git} + +\item \textbf{dune-spgrid}: The DUNE module dune-spgrid provides a structured, parallel grid. + Download: \url{https://gitlab.dune-project.org/extensions/dune-spgrid.git} \item \textbf{SuperLU}: External library for solving linear equations. SuperLU is a general purpose library for the direct solution of large, sparse, non-symmetric systems of linear equations. -- GitLab From 6ea7a2d73f66ac4f389ca8915ec11e5da585d9c5 Mon Sep 17 00:00:00 2001 From: Johannes Hommel Date: Thu, 29 Nov 2018 09:43:14 +0100 Subject: [PATCH 12/57] [handbook] Update dune-subgrid description in 2_detailedinstall.tex --- doc/handbook/2_detailedinstall.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index 4fd3bbff62..21ac5c6453 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -287,7 +287,8 @@ and some more libraries and tools which are prerequisites for their use. \item \textbf{dune-subgrid}: The dune-subgrid module allows to mark elements of another hierarchical dune grid. The set of marked elements can then be accessed as a hierarchical dune grid in its own right. -Dune-Subgrid provides the full grid interface including adaptive mesh refinement. +Dune-Subgrid provides the full grid interface including adaptive mesh refinement +and supports periodic boundary conditions. Download: \url{https://git.imp.fu-berlin.de/agnumpde/dune-subgrid.git} \item \textbf{dune-spgrid}: The DUNE module dune-spgrid provides a structured, parallel grid. -- GitLab From a4ff23e9864e643c0cf140b42d25cfda0fd20cfe Mon Sep 17 00:00:00 2001 From: Johannes Hommel Date: Thu, 29 Nov 2018 09:44:46 +0100 Subject: [PATCH 13/57] [handbook] Update dune-sub and spgrid in 2_detailedinstall.tex corrected error in last commit --- doc/handbook/2_detailedinstall.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index 21ac5c6453..ae38ab4019 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -287,11 +287,11 @@ and some more libraries and tools which are prerequisites for their use. \item \textbf{dune-subgrid}: The dune-subgrid module allows to mark elements of another hierarchical dune grid. The set of marked elements can then be accessed as a hierarchical dune grid in its own right. -Dune-Subgrid provides the full grid interface including adaptive mesh refinement -and supports periodic boundary conditions. +Dune-Subgrid provides the full grid interface including adaptive mesh refinement. Download: \url{https://git.imp.fu-berlin.de/agnumpde/dune-subgrid.git} -\item \textbf{dune-spgrid}: The DUNE module dune-spgrid provides a structured, parallel grid. +\item \textbf{dune-spgrid}: The DUNE module dune-spgrid provides a structured, parallel grid +and supports periodic boundary conditions. Download: \url{https://gitlab.dune-project.org/extensions/dune-spgrid.git} \item \textbf{SuperLU}: External library for solving linear equations. SuperLU is a general purpose -- GitLab From ae990d7c89a6598bf7a65d56bd4e27ab23248a20 Mon Sep 17 00:00:00 2001 From: Johannes Hommel Date: Thu, 29 Nov 2018 13:00:29 +0100 Subject: [PATCH 14/57] [handbook] Updated dune-subgrid description in 2_detailedinstall.tex --- doc/handbook/2_detailedinstall.tex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index ae38ab4019..e9cc4a1937 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -285,7 +285,8 @@ and some more libraries and tools which are prerequisites for their use. \item \textbf{opm-grid}: opm-grid is a DUNE module supporting grids in a corner-point format. Download: \url{https://github.com/OPM/opm-grid.git} -\item \textbf{dune-subgrid}: The dune-subgrid module allows to mark elements of another hierarchical dune grid. +\item \textbf{dune-subgrid}: The dune-subgrid module is a meta-grid implementation that allows +to mark elements of another hierarchical dune grid and use this sub-grid just like a regular grid. The set of marked elements can then be accessed as a hierarchical dune grid in its own right. Dune-Subgrid provides the full grid interface including adaptive mesh refinement. Download: \url{https://git.imp.fu-berlin.de/agnumpde/dune-subgrid.git} -- GitLab From 43e9ae6d8cd5ed319844b9b61a0603dcd963bc68 Mon Sep 17 00:00:00 2001 From: Timo Koch Date: Tue, 4 Dec 2018 20:59:01 +0100 Subject: [PATCH 15/57] [bugfix] Make handbook compile again --- doc/handbook/1_introduction.tex | 2 +- doc/handbook/5_models.tex | 4 ++-- doc/handbook/5_spatialdiscretizations.tex | 4 ++-- doc/handbook/CMakeLists.txt | 12 ++++++------ doc/handbook/{PNG => png}/box_disc.png | Bin doc/handbook/{PNG => png}/cc_disc.png | Bin doc/handbook/{PNG => png}/dalton1.png | Bin doc/handbook/{PNG => png}/dalton2.png | Bin ...mux_strucutre_flowchart_horizontal_explained.png | Bin doc/handbook/{PNG => png}/dunedesign.png | Bin doc/handbook/{SVG => svg}/box_disc.svg | 0 doc/handbook/{SVG => svg}/cc_disc.svg | 0 doc/handbook/{SVG => svg}/dalton1.svg | 0 doc/handbook/{SVG => svg}/dalton2.svg | 0 doc/handbook/{SVG => svg}/staggered_grid.svg | 0 15 files changed, 11 insertions(+), 11 deletions(-) rename doc/handbook/{PNG => png}/box_disc.png (100%) rename doc/handbook/{PNG => png}/cc_disc.png (100%) rename doc/handbook/{PNG => png}/dalton1.png (100%) rename doc/handbook/{PNG => png}/dalton2.png (100%) rename doc/handbook/{PNG => png}/dumux_strucutre_flowchart_horizontal_explained.png (100%) rename doc/handbook/{PNG => png}/dunedesign.png (100%) rename doc/handbook/{SVG => svg}/box_disc.svg (100%) rename doc/handbook/{SVG => svg}/cc_disc.svg (100%) rename doc/handbook/{SVG => svg}/dalton1.svg (100%) rename doc/handbook/{SVG => svg}/dalton2.svg (100%) rename doc/handbook/{SVG => svg}/staggered_grid.svg (100%) diff --git a/doc/handbook/1_introduction.tex b/doc/handbook/1_introduction.tex index ef9bbbeda9..c07a5787d6 100644 --- a/doc/handbook/1_introduction.tex +++ b/doc/handbook/1_introduction.tex @@ -25,7 +25,7 @@ libraries\footnote{In fact, the performance penalty resulting from the use of \Dune's grid interface is usually negligible~\cite{BURRI2006}.}. \begin{figure}[hbt] \centering - \includegraphics[width=.5\linewidth, keepaspectratio]{PNG/dunedesign.png} + \includegraphics[width=.5\linewidth, keepaspectratio]{png/dunedesign.png} \caption{ \label{fig:dune-design} A high-level overview of \Dune's design is available on the project's diff --git a/doc/handbook/5_models.tex b/doc/handbook/5_models.tex index 6a0422c519..5d93ea80e9 100644 --- a/doc/handbook/5_models.tex +++ b/doc/handbook/5_models.tex @@ -140,7 +140,7 @@ As an example, if two equal volumes of gas A and gas B are mixed, the volume of % \begin{figure}[ht] \centering - \includegraphics[width=0.7\textwidth]{PNG/dalton1.png} + \includegraphics[width=0.7\textwidth]{png/dalton1.png} \caption{Dalton's law visualized} \label{fig:dalton1} \end{figure} @@ -166,7 +166,7 @@ As an example, if two volumes of gas A and B at equal pressure are mixed, the pr % \begin{figure}[ht] \centering - \includegraphics[width=0.7\textwidth]{PNG/dalton2.png} + \includegraphics[width=0.7\textwidth]{png/dalton2.png} \caption{Amagat's law visualized} \label{fig:dalton2} \end{figure} diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index 4e653fecd8..2e39887f34 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -18,7 +18,7 @@ by connecting the midpoints and barycenters of the elements surrounding node $i$ creating a box $B_i$ around node $i$ (see Figure \ref{pc:box}a). \begin{figure} [ht] -\includegraphics[width=0.8\linewidth,keepaspectratio]{PNG/box_disc.png} +\includegraphics[width=0.8\linewidth,keepaspectratio]{png/box_disc.png} \caption{\label{pc:box} Discretization of the box method} \end{figure} @@ -179,7 +179,7 @@ flow and transport equations: \begin{figure} [ht] \centering -\includegraphics[width=0.4\linewidth,keepaspectratio]{PNG/cc_disc.png} +\includegraphics[width=0.4\linewidth,keepaspectratio]{png/cc_disc.png} \caption{\label{pc:cc} Discretization of the cell centered finite volume method} \end{figure} diff --git a/doc/handbook/CMakeLists.txt b/doc/handbook/CMakeLists.txt index 0b8e5ba329..53472d7826 100644 --- a/doc/handbook/CMakeLists.txt +++ b/doc/handbook/CMakeLists.txt @@ -21,13 +21,13 @@ set(TEX_INPUTS installDumux.sh) set(TEX_IMAGES - PNG/box_disc.png - PNG/cc_disc.png - PNG/dumux_strucutre_flowchart_horizontal_explained.png - PNG/dunedesign.png + png/box_disc.png + png/cc_disc.png + png/dumux_strucutre_flowchart_horizontal_explained.png + png/dunedesign.png ../logo/dumux_logo_hires_whitebg.png - PNG/dalton1.png - PNG/dalton2.png) + png/dalton1.png + png/dalton2.png) dune_add_latex_document(0_dumux-handbook.tex BIBFILES dumux-handbook.bib diff --git a/doc/handbook/PNG/box_disc.png b/doc/handbook/png/box_disc.png similarity index 100% rename from doc/handbook/PNG/box_disc.png rename to doc/handbook/png/box_disc.png diff --git a/doc/handbook/PNG/cc_disc.png b/doc/handbook/png/cc_disc.png similarity index 100% rename from doc/handbook/PNG/cc_disc.png rename to doc/handbook/png/cc_disc.png diff --git a/doc/handbook/PNG/dalton1.png b/doc/handbook/png/dalton1.png similarity index 100% rename from doc/handbook/PNG/dalton1.png rename to doc/handbook/png/dalton1.png diff --git a/doc/handbook/PNG/dalton2.png b/doc/handbook/png/dalton2.png similarity index 100% rename from doc/handbook/PNG/dalton2.png rename to doc/handbook/png/dalton2.png diff --git a/doc/handbook/PNG/dumux_strucutre_flowchart_horizontal_explained.png b/doc/handbook/png/dumux_strucutre_flowchart_horizontal_explained.png similarity index 100% rename from doc/handbook/PNG/dumux_strucutre_flowchart_horizontal_explained.png rename to doc/handbook/png/dumux_strucutre_flowchart_horizontal_explained.png diff --git a/doc/handbook/PNG/dunedesign.png b/doc/handbook/png/dunedesign.png similarity index 100% rename from doc/handbook/PNG/dunedesign.png rename to doc/handbook/png/dunedesign.png diff --git a/doc/handbook/SVG/box_disc.svg b/doc/handbook/svg/box_disc.svg similarity index 100% rename from doc/handbook/SVG/box_disc.svg rename to doc/handbook/svg/box_disc.svg diff --git a/doc/handbook/SVG/cc_disc.svg b/doc/handbook/svg/cc_disc.svg similarity index 100% rename from doc/handbook/SVG/cc_disc.svg rename to doc/handbook/svg/cc_disc.svg diff --git a/doc/handbook/SVG/dalton1.svg b/doc/handbook/svg/dalton1.svg similarity index 100% rename from doc/handbook/SVG/dalton1.svg rename to doc/handbook/svg/dalton1.svg diff --git a/doc/handbook/SVG/dalton2.svg b/doc/handbook/svg/dalton2.svg similarity index 100% rename from doc/handbook/SVG/dalton2.svg rename to doc/handbook/svg/dalton2.svg diff --git a/doc/handbook/SVG/staggered_grid.svg b/doc/handbook/svg/staggered_grid.svg similarity index 100% rename from doc/handbook/SVG/staggered_grid.svg rename to doc/handbook/svg/staggered_grid.svg -- GitLab From 2ad6ee7d3e4eeaffff10f5c7ab0e9a19c9253eb6 Mon Sep 17 00:00:00 2001 From: Gabi Seitz Date: Thu, 29 Nov 2018 10:21:30 +0100 Subject: [PATCH 16/57] [handbook] update section on propertysystem to new syntax --- doc/handbook/5_propertysystem.tex | 270 ++++++++++++++---------------- 1 file changed, 128 insertions(+), 142 deletions(-) diff --git a/doc/handbook/5_propertysystem.tex b/doc/handbook/5_propertysystem.tex index e66b20aae0..a77759dcc7 100644 --- a/doc/handbook/5_propertysystem.tex +++ b/doc/handbook/5_propertysystem.tex @@ -37,9 +37,12 @@ namespace \texttt{Dumux::Properties}. \subsubsection{Defining Type Tags} New nodes in the type tag hierarchy can be defined using \begin{lstlisting}[style=DumuxCode] -NEW_TYPE_TAG(NewTypeTagName, INHERITS_FROM(BaseTagName1, BaseTagName2, ...)); +// Create new type tags +namespace TTag { +struct NewTypeTagName { using InheritsFrom = std::tuple<..., BaseTagName2, BaseTagName1>; }; +} // end namespace TTag \end{lstlisting} -where the \texttt{INHERITS\_FROM} part is optional. To avoid +where the \texttt{InheritsFrom} part is optional. To avoid inconsistencies in the hierarchy, each type tag may be defined only once for a program. @@ -48,29 +51,30 @@ Example: \begin{lstlisting}[style=DumuxCode] namespace Dumux { namespace Properties { -NEW_TYPE_TAG(MyBaseTypeTag1); -NEW_TYPE_TAG(MyBaseTypeTag2); +namespace TTag { +struct MyBaseTypeTag1 {}; +struct MyBaseTypeTag2 {}; -NEW_TYPE_TAG(MyDerivedTypeTag, INHERITS_FROM(MyBaseTypeTag1, MyBaseTypeTag2)); +struct MyDerivedTypeTag { using InheritsFrom = std::tuple; }; +} // end namespace TTag }} \end{lstlisting} \subsubsection{Declaring Property Tags} -New property tags, i.e. labels for properties, are declared +New property tags are defined using: using \begin{lstlisting}[style=DumuxCode] -NEW_PROP_TAG(NewPropTagName); +template +struct NewPropTagName { using type = UndefinedProperty; }; \end{lstlisting} -A property tag can be declared arbitrarily often, in fact it is -recommended that all properties are declared in each file where they -are used. \vskip1ex\noindent Example: \begin{lstlisting}[style=DumuxCode] namespace Dumux { namespace Properties { -NEW_PROP_TAG(MyPropertyTag); +template +struct MyPropertyTag { using type = UndefinedProperty; }; }} \end{lstlisting} @@ -78,7 +82,8 @@ NEW_PROP_TAG(MyPropertyTag); The value of a property on a given node of the type tag hierarchy is defined using \begin{lstlisting}[style=DumuxCode] -SET_PROP(TypeTagName, PropertyTagName) +template +struct PropertyTagName { // arbitrary body of a struct }; @@ -86,13 +91,15 @@ SET_PROP(TypeTagName, PropertyTagName) For each program, a property itself can be declared at most once, although properties may be overwritten for derived type tags. -Also, the following convenience macros are available to define simple -properties: \begin{lstlisting}[style=DumuxCode] -SET_TYPE_PROP(TypeTagName, PropertyTagName, type); -SET_BOOL_PROP(TypeTagName, PropertyTagName, booleanValue); -SET_INT_PROP(TypeTagName, PropertyTagName, integerValue); -SET_SCALAR_PROP(TypeTagName, PropertyTagName, floatingPointValue); +template +struct PropertyTagName { using type = type; }; + +template +struct PropertyTagName { static constexpr bool value = booleanValue; }; + +template +struct PropertyTagName { static constexpr int value = integerValue; }; \end{lstlisting} \vskip1ex\noindent @@ -100,100 +107,63 @@ Example: \begin{lstlisting}[style=DumuxCode] namespace Dumux { namespace Properties { -NEW_TYPE_TAG(MyTypeTag); -NEW_PROP_TAG(MyCustomProperty); -NEW_PROP_TAG(MyType); +// Create new type tag +namespace TTag { +struct MyTypeTag {}; +} -NEW_PROP_TAG(MyBoolValue); -NEW_PROP_TAG(MyIntValue); -NEW_PROP_TAG(MyScalarValue); +// Declare the properties +template struct MyCustomProperty; -SET_PROP(MyTypeTag, MyCustomProperty) -{ - static void print() { std::cout << "Hello, World!\n"; } -}; -SET_TYPE_PROP(MyTypeTag, MyType, unsigned int); +template struct MyType; -SET_BOOL_PROP(MyTypeTag, MyBoolValue, true); -SET_INT_PROP(MyTypeTag, MyIntValue, 12345); -SET_SCALAR_PROP(MyTypeTag, MyScalarValue, 12345.67890); -}} -\end{lstlisting} +template struct MyBoolValue; -\subsubsection{Un-setting Properties} -Sometimes an inherited properties do not make sense for a certain -node in the type tag hierarchy. These properties can be explicitly -un-set using -\begin{lstlisting}[style=DumuxCode] -UNSET_PROP(TypeTagName, PropertyTagName); -\end{lstlisting} -The un-set property can not be set for the same type tag, but of -course derived type tags may set it again. +template struct MyIntValue; -\vskip1ex\noindent -Example: -\begin{lstlisting}[style=DumuxCode] -namespace Dumux { -namespace Properties { -NEW_TYPE_TAG(BaseTypeTag); -NEW_TYPE_TAG(DerivedTypeTag, INHERITS_FROM(BaseTypeTag)); +template struct MyScalarValue; + +// Set the properties +template +struct MyCustomProperty +{static void print() { std::cout << "Hello, World!\n"; }}; -NEW_PROP_TAG(TestProp); +template +struct MyType { using type = unsigned int; }; -SET_TYPE_PROP(BaseTypeTag, TestProp, int); -UNSET_PROP(DerivedTypeTag, TestProp); -// trying to access the 'TestProp' property for 'DerivedTypeTag' -// will trigger a compiler error! +template +struct MyBoolValue { static constexpr bool value = true; }; + +template +struct MyIntValue { static constexpr int value = 12345; }; + +template +struct MyScalarValue { static constexpr double value = 12345.67890; }; }} \end{lstlisting} -\subsubsection{Converting Tag Names to Tag Types} -For the \Cplusplus compiler, property and type tags are like ordinary -types. Both can thus be used as template arguments. To convert a -property tag name or a type tag name into the corresponding type, the -macros \texttt{TTAG(TypeTagName)} and \texttt{PTAG(PropertyTagName)} -ought to be used. - \subsubsection{Retrieving Property Values} -The value of a property can be retrieved using -\begin{lstlisting}[style=DumuxCode] -GET_PROP(TypeTag, PropertyTag) -\end{lstlisting} -or using the convenience macros +The type or the value of a property can be retrieved using \begin{lstlisting}[style=DumuxCode] -GET_PROP_TYPE(TypeTag, PropertyTag) -GET_PROP_VALUE(TypeTag, PropertyTag) +using MyType = GetPropType +auto myValue = getPropValue() \end{lstlisting} -\vskip1ex -\noindent -The first convenience macro retrieves the type defined using -\texttt{SET\_TYPE\_PROP} and is equivalent to -\begin{lstlisting}[style=DumuxCode] -GET_PROP(TypeTag, PropertyTag)::type -\end{lstlisting} -while the second convenience macro retrieves the value of any property -defined using one of the macros \texttt{SET\_}$\{$\texttt{INT,BOOL,SCALAR}$\}$\texttt{\_PROP} and is -equivalent to -\begin{lstlisting}[style=DumuxCode] -GET_PROP(TypeTag, PropertyTag)::value -\end{lstlisting} \vskip1ex\noindent Example:\nolinebreak \begin{lstlisting}[style=DumuxCode] template class MyClass { - // retrieve the ::value attribute of the 'NumEq' property - enum { numEq = GET_PROP(TypeTag, NumEq)::value }; - // retrieve the ::value attribute of the 'NumPhases' property using the convenience macro - enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) }; + // retrieve the ::type attribute of the 'NumEq' property + enum { numEq = GetPropType::numEq() }; + + // retrieve the ::value attribute of the 'UseMoles' property + static constexpr bool useMoles = getPropValue(); // retrieve the ::type attribute of the 'Scalar' property - typedef typename GET_PROP(TypeTag, Scalar)::type Scalar; - // retrieve the ::type attribute of the 'Vector' property using the convenience macro - typedef typename GET_PROP_TYPE(TypeTag, Vector) Vector; + using Scalar = GetPropType; }; \end{lstlisting} @@ -201,16 +171,17 @@ class MyClass { Inside property definitions there is access to all other properties which are defined somewhere on the type tag hierarchy. The node for which the current property is requested is available via the keyword -\texttt{TypeTag}. Inside property class bodies this can be used to -retrieve other properties using the \texttt{GET\_PROP} macros. +\texttt{TypeTag}. Inside property class bodies \texttt{GetPropType} can be used to +retrieve other properties and create aliases. \vskip1ex\noindent Example: \begin{lstlisting}[style=DumuxCode] -SET_PROP(MyModelTypeTag, Vector) +template +struct Vector { -private: typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; -public: typedef std::vector type; +using Scalar = GetPropType; +using type = std::vector; }; \end{lstlisting} @@ -272,12 +243,15 @@ defined by: namespace Dumux { namespace Properties { -NEW_TYPE_TAG(CompactCar); -NEW_TYPE_TAG(Truck); -NEW_TYPE_TAG(Tank); -NEW_TYPE_TAG(Sedan, INHERITS_FROM(CompactCar)); -NEW_TYPE_TAG(Pickup, INHERITS_FROM(Sedan, Truck)); -NEW_TYPE_TAG(HummerH1, INHERITS_FROM(Pickup, Tank)); +namespace TTag{ +struct CompactCar {}; +struct Truck {}; +struct Tank {}; + +struct Sedan { using InheritsFrom = std::tuple; }; +struct Pickup { using InheritsFrom = std::tuple; }; +struct HummerH1 { using InheritsFrom = std::tuple; }; +}}} // end namespace TTag \end{lstlisting} Figure \ref{fig:car-propertynames} lists a few property names which @@ -285,12 +259,18 @@ make sense for at least one of the nodes of Figure \ref{fig:car-hierarchy}. These property names can be declared as follows: \begin{lstlisting}[name=propsyscars,style=DumuxCode] -NEW_PROP_TAG(TopSpeed); // [km/h] -NEW_PROP_TAG(NumSeats); // [] -NEW_PROP_TAG(CanonCaliber); // [mm] -NEW_PROP_TAG(GasUsage); // [l/100km] -NEW_PROP_TAG(AutomaticTransmission); // true/false -NEW_PROP_TAG(Payload); // [t] +template +struct TopSpeed { using type = UndefinedProperty; }; // [km/h] +template +struct NumSeats { using type = UndefinedProperty; }; // [] +template +struct CanonCaliber { using type = UndefinedProperty; }; // [mm] +template +struct GasUsage { using type = UndefinedProperty; }; // [l/100km] +template +struct AutomaticTransmission { using type = UndefinedProperty; }; // true/false +template +struct Payload { using type = UndefinedProperty; }; // [t] \end{lstlisting} \noindent @@ -321,35 +301,52 @@ the following: Using the \Dumux property system, these assumptions are formulated using \begin{lstlisting}[name=propsyscars,style=DumuxCode] -SET_INT_PROP(CompactCar, TopSpeed, GET_PROP_VALUE(TypeTag, GasUsage) * 30); -SET_INT_PROP(CompactCar, NumSeats, 5); -SET_INT_PROP(CompactCar, GasUsage, 4); +template +struct TopSpeed +{static constexpr int value = getPropValue() * 30}; -SET_INT_PROP(Truck, TopSpeed, 100); -SET_INT_PROP(Truck, NumSeats, 2); -SET_INT_PROP(Truck, GasUsage, 18); -SET_INT_PROP(Truck, Payload, 35); +template +struct NumSeats { static constexpr int value = 5; }; -SET_INT_PROP(Tank, TopSpeed, 60); -SET_INT_PROP(Tank, GasUsage, 65); -SET_INT_PROP(Tank, CanonCaliber, 120); +template +struct GasUsage { static constexpr int value = 4; }; -SET_INT_PROP(Sedan, GasUsage, 7); -SET_BOOL_PROP(Sedan, AutomaticTransmission, true); +template +struct TopSpeed { static constexpr int value = 100; }; -SET_INT_PROP(Pickup, TopSpeed, 120); -SET_INT_PROP(Pickup, Payload, 5); +template +struct NumSeats { static constexpr int value = 2; }; -SET_INT_PROP(HummerH1, TopSpeed, GET_PROP_VALUE(TTAG(Pickup), TopSpeed)); -\end{lstlisting} +template +struct GasUsage { static constexpr int value = 18; }; -\noindent -At this point, the Hummer-H1 has a $\unit[120]{mm}$ canon which it inherited -from its military ancestor. It can be removed by -\begin{lstlisting}[name=propsyscars,style=DumuxCode] -UNSET_PROP(HummerH1, CanonCaliber); +template +struct Payload { static constexpr int value = 35; }; -}} // close namespaces +template +struct TopSpeed { static constexpr int value = 60; }; + +template +struct GasUsage { static constexpr int value = 65; }; + +template +struct CanonCaliber { static constexpr int value = 120; }; + +template +struct GasUsage { static constexpr int value = 7; }; + +template +struct AutomaticTransmission { static constexpr bool value = true; }; + +template +struct TopSpeed { static constexpr int value = 120; }; + +template +struct Payload { static constexpr int value = 5; }; + +template +struct TopSpeed +{static constexpr int value = getPropValue>();}; \end{lstlisting} \noindent @@ -358,30 +355,19 @@ be generated. For example \begin{lstlisting}[name=propsyscars,style=DumuxCode] int main() { - std::cout << "top speed of sedan: " << GET_PROP_VALUE(TTAG(Sedan), TopSpeed) << "\n"; - std::cout << "top speed of truck: " << GET_PROP_VALUE(TTAG(Truck), TopSpeed) << "\n"; - - std::cout << PROP_DIAGNOSTIC(TTAG(Sedan), TopSpeed); - std::cout << PROP_DIAGNOSTIC(TTAG(HummerH1), CanonCaliber); - - Dumux::Properties::print(); + std::cout << "top speed of sedan: " << getPropValue() << "\n"; + std::cout << "top speed of truck: " << getPropValue() << "\n"; } \end{lstlisting} will yield the following output: \begin{lstlisting}[style=Bash, basicstyle=\ttfamily\scriptsize\let\textcolor\textcolordummy] $ top speed of sedan: 210 $ top speed of truck: 100 -$ Properties for Sedan: -$ bool AutomaticTransmission = 'true' defined at test_propertysystem.cc:68 -$ int GasUsage = '7' defined at test_propertysystem.cc:67 -$ Inherited from CompactCar: -$ int NumSeats = '5' defined at test_propertysystem.cc:55 -$ int TopSpeed = '::Dumux::Properties::GetProperty::p::value * 30' defined at test_propertysystem.cc:54 \end{lstlisting} \subsection{Property Values} To get the value of a property use: \begin{description} -\item[\texttt{{\small GET\_PROP\_VALUE:}}] +\item[\texttt{{\small getPropValue:}}] Always returns the \emph{compile-time} specified value of the property. \end{description} -- GitLab From 4a4e3eafd2e8685f702c4024379af3ea44ab1bd6 Mon Sep 17 00:00:00 2001 From: Timo Koch Date: Tue, 4 Dec 2018 21:24:28 +0100 Subject: [PATCH 17/57] [doc][handbook] Improve text on property system --- doc/handbook/5_propertysystem.tex | 119 +++++++++++++++--------------- 1 file changed, 59 insertions(+), 60 deletions(-) diff --git a/doc/handbook/5_propertysystem.tex b/doc/handbook/5_propertysystem.tex index a77759dcc7..ed69caaad5 100644 --- a/doc/handbook/5_propertysystem.tex +++ b/doc/handbook/5_propertysystem.tex @@ -4,28 +4,19 @@ A high level overview over the property system's design and principle ideas are given, then follows a reference and a self-contained example. \subsection{Motivation and features} -The \Dumux property system was designed as an attempt to mitigate the -problems of traits classes. It can be seen as a traits system -which allows easy inheritance and any acyclic dependency of parameter -definitions. Just like traits, the \Dumux property system is a compile -time mechanism, thus there is no run-time performance penalty associated -with it. +The \Dumux property system is a traits system +which allows easy inheritance. In the context of the \Dumux property system, a property is an arbitrary -class body which may contain type definitions, values and methods. Each -property has a so-called \emph{property tag} which labels its name. +class body which may contain type definitions, values and methods. Just like normal classes, properties can be arranged in hierarchies. In the context of the \Dumux property system, nodes of the inheritance hierarchy are called \emph{type tags}. -It also supports \emph{property nesting} and -\emph{introspection}. Property nesting means that the definition of +It also supports \emph{property nesting}. Property nesting means that the definition of a property can depend on the value of other properties which may be -defined for arbitrary levels of the inheritance hierarchy. The term -introspection denotes the ability to generate diagnostic messages -which can be used to find out where a certain property was defined and -how it was inherited. +defined for arbitrary levels of the inheritance hierarchy. \subsection{How-to} All source files which use the property system should include @@ -35,14 +26,14 @@ property tags as well as defining properties must be done inside the namespace \texttt{Dumux::Properties}. \subsubsection{Defining Type Tags} -New nodes in the type tag hierarchy can be defined using +New nodes in the type tag hierarchy can be defined in the \texttt{TTag} namespace using \begin{lstlisting}[style=DumuxCode] // Create new type tags namespace TTag { -struct NewTypeTagName { using InheritsFrom = std::tuple<..., BaseTagName2, BaseTagName1>; }; +struct NewTypeTagName { using InheritsFrom = std::tuple; }; } // end namespace TTag \end{lstlisting} -where the \texttt{InheritsFrom} part is optional. To avoid +where the \texttt{InheritsFrom} alias is optional. To avoid inconsistencies in the hierarchy, each type tag may be defined only once for a program. @@ -55,17 +46,17 @@ namespace TTag { struct MyBaseTypeTag1 {}; struct MyBaseTypeTag2 {}; -struct MyDerivedTypeTag { using InheritsFrom = std::tuple; }; +struct MyDerivedTypeTag { using InheritsFrom = std::tuple; }; } // end namespace TTag }} \end{lstlisting} -\subsubsection{Declaring Property Tags} -New property tags are defined using: -using +\subsubsection{Defining new Property Tags} +New property tags are defined using + \begin{lstlisting}[style=DumuxCode] -template -struct NewPropTagName { using type = UndefinedProperty; }; +template +struct NewPropTagName { using type = UndefinedProperty; }; \end{lstlisting} \vskip1ex\noindent @@ -73,11 +64,19 @@ Example: \begin{lstlisting}[style=DumuxCode] namespace Dumux { namespace Properties { -template -struct MyPropertyTag { using type = UndefinedProperty; }; +template +struct MyPropertyTag { using type = UndefinedProperty; }; }} \end{lstlisting} +If you need to forward declare a property use + +\begin{lstlisting}[style=DumuxCode] +// forward declaration +template +struct NewPropTagName; +\end{lstlisting} + \subsubsection{Defining Properties} The value of a property on a given node of the type tag hierarchy is defined using @@ -88,8 +87,11 @@ struct PropertyTagName // arbitrary body of a struct }; \end{lstlisting} -For each program, a property itself can be declared at most once, -although properties may be overwritten for derived type tags. + +This means a property is defined for a specific type tag node \texttt{TTag::TypeTagName} +by providing a partial template specialization of \texttt{PropertyTagName}. +The body typically contains either the alias \texttt{type}, or a data member \texttt{value}. +However, you can of course write in the body whatever you like. \begin{lstlisting}[style=DumuxCode] template @@ -113,21 +115,20 @@ namespace TTag { struct MyTypeTag {}; } -// Declare the properties -template struct MyCustomProperty; +// Define some properties +template struct MyCustomProperty { using type = UndefinedProperty; }; +template struct MyType { using type = UndefinedProperty; }; +template struct MyBoolValue { using type = UndefinedProperty; }; +template struct MyIntValue { using type = UndefinedProperty; }; +template struct MyScalarValue { using type = UndefinedProperty; }; -template struct MyType; - -template struct MyBoolValue; - -template struct MyIntValue; - -template struct MyScalarValue; - -// Set the properties +// Set the properties for the new type tag template struct MyCustomProperty -{static void print() { std::cout << "Hello, World!\n"; }}; +{ + static void print() + { std::cout << "Hello, World!\n"; } +}; template struct MyType { using type = unsigned int; }; @@ -144,33 +145,38 @@ struct MyScalarValue { static constexpr double value = \end{lstlisting} \subsubsection{Retrieving Property Values} -The type or the value of a property can be retrieved using +The type of a property can be retrieved using \begin{lstlisting}[style=DumuxCode] -using MyType = GetPropType -auto myValue = getPropValue() +using Prop = GetProp; \end{lstlisting} +There is a helper struct and a helper function to retrieve the \texttt{type} and \texttt{value} +members of a property + +\begin{lstlisting}[style=DumuxCode] +using PropType = GetPropType; +constexpr auto propValue = getPropValue(); +\end{lstlisting} \vskip1ex\noindent Example:\nolinebreak \begin{lstlisting}[style=DumuxCode] template class MyClass { - // retrieve the ::type attribute of the 'NumEq' property - enum { numEq = GetPropType::numEq() }; + // retrieve the ::value attribute of the 'UseMoles' property + static constexpr bool useMoles = getPropValue(); + static constexpr bool useMoles2 = GetProp::value; // equivalent - // retrieve the ::value attribute of the 'UseMoles' property - static constexpr bool useMoles = getPropValue(); - - // retrieve the ::type attribute of the 'Scalar' property - using Scalar = GetPropType; + // retrieve the ::type attribute of the 'Scalar' property + using Scalar = GetPropType; + using Scalar2 = GetProp::type; // equivalent }; \end{lstlisting} \subsubsection{Nesting Property Definitions} Inside property definitions there is access to all other properties which are defined somewhere on the type tag hierarchy. The node for -which the current property is requested is available via the keyword +which the current property is requested is available via the template argument \texttt{TypeTag}. Inside property class bodies \texttt{GetPropType} can be used to retrieve other properties and create aliases. @@ -180,8 +186,8 @@ Example: template struct Vector { -using Scalar = GetPropType; -using type = std::vector; + using Scalar = GetPropType; + using type = std::vector; }; \end{lstlisting} @@ -256,7 +262,7 @@ struct HummerH1 { using InheritsFrom = std::tuple; }; Figure \ref{fig:car-propertynames} lists a few property names which make sense for at least one of the nodes of Figure -\ref{fig:car-hierarchy}. These property names can be declared as +\ref{fig:car-hierarchy}. These property names can be defined as follows: \begin{lstlisting}[name=propsyscars,style=DumuxCode] template @@ -364,10 +370,3 @@ will yield the following output: $ top speed of sedan: 210 $ top speed of truck: 100 \end{lstlisting} - -\subsection{Property Values} -To get the value of a property use: -\begin{description} -\item[\texttt{{\small getPropValue:}}] -Always returns the \emph{compile-time} specified value of the property. -\end{description} -- GitLab From b5e780f33d415dac93eef127cb5b2d3ecdfe4581 Mon Sep 17 00:00:00 2001 From: Kilian Weishaupt Date: Wed, 5 Dec 2018 19:59:59 +0100 Subject: [PATCH 18/57] [handbook] Add passage about TTag inheritance order --- doc/handbook/5_propertysystem.tex | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/doc/handbook/5_propertysystem.tex b/doc/handbook/5_propertysystem.tex index ed69caaad5..bfe58b3fa3 100644 --- a/doc/handbook/5_propertysystem.tex +++ b/doc/handbook/5_propertysystem.tex @@ -35,7 +35,10 @@ struct NewTypeTagName { using InheritsFrom = std::tuple { static constexpr int value = 5; }; template struct TopSpeed -{static constexpr int value = getPropValue>();}; +{ static constexpr int value = getPropValue>(); }; \end{lstlisting} \noindent -- GitLab From 5cfd24af775270bc97533ba7a6201b248e528bb2 Mon Sep 17 00:00:00 2001 From: Utz Date: Wed, 28 Nov 2018 12:05:56 +0100 Subject: [PATCH 19/57] Add the first draft of parrallel section The new content is included, but the formulation has to be improved. --- doc/handbook/0_dumux-handbook.tex | 1 + doc/handbook/5_parallel.tex | 59 +++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 doc/handbook/5_parallel.tex diff --git a/doc/handbook/0_dumux-handbook.tex b/doc/handbook/0_dumux-handbook.tex index e0b7626449..73b349e6f0 100644 --- a/doc/handbook/0_dumux-handbook.tex +++ b/doc/handbook/0_dumux-handbook.tex @@ -148,6 +148,7 @@ in deeper modifications of underlying \Dumux models, classes, functions, etc. \input{5_stepsofasimulation} \input{5_propertysystem} \input{5_grids} +\input{5_parallel} \bibliographystyle{plainnat} \bibliography{dumux-handbook} diff --git a/doc/handbook/5_parallel.tex b/doc/handbook/5_parallel.tex new file mode 100644 index 0000000000..6583774e38 --- /dev/null +++ b/doc/handbook/5_parallel.tex @@ -0,0 +1,59 @@ +\section{Parallel Computation} +\label{sec:parallelcomputation} + +\Dumux also support parallel computation. The parallel version needs an external MPI libary. + +Posibilities are OpenMPI MPICH and IntelMPI. + +Depending on the grid manager METIS or ParMETIS can also be used for paritioning. + + +In the following show how to prepare a model an run it in parallel whith +the imcompressible 2p model. + +dumux/test/porousmediumflow/2p/implicit/incompressible + + +\subsection{prepareing the model} + +If the parallel AMGBackend is not allready set in your application +you should from the sequential solver backend to the parallel amg backend +in your application. + +First include the header files for the parallel AMGBackend +#include + +and remove the header files of the sequential backend + +#include + + +Second, hange the linear solver to the AMG solver +from the AMGBackend + +using LinearSolver = Dumux::AMGBackend; + +and recompile your application. + +\subsection{Start parallel computation} +The parallel simulation is starte with mpirun followed by -np and +the number of cores that should be used and the executable. + +mpirun -np n_cores executable + +On HPC cluster you usually have to use qeuing system like (e.g. slurm). + + + +\subsection{Handling Parallel Results} +The results sould not differ between parallel an serial execution. As in +the serial case you get vtu-files as output. However you have an additional +variable "process rank" that shows the processor rank of each MPI partition. + + + + + + + + -- GitLab From b16bd7ab1030b76d82b8416fc309281c3bf85347 Mon Sep 17 00:00:00 2001 From: Utz Date: Wed, 28 Nov 2018 15:29:32 +0100 Subject: [PATCH 20/57] Add the section input and outout --- .../{5_grids.tex => 5_inputoutput.tex} | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) rename doc/handbook/{5_grids.tex => 5_inputoutput.tex} (88%) diff --git a/doc/handbook/5_grids.tex b/doc/handbook/5_inputoutput.tex similarity index 88% rename from doc/handbook/5_grids.tex rename to doc/handbook/5_inputoutput.tex index aaad10db86..098464deb2 100644 --- a/doc/handbook/5_grids.tex +++ b/doc/handbook/5_inputoutput.tex @@ -1,13 +1,15 @@ -\section{Grid Handling} -\label{sec:gridhandling} +\section{Input and Output} +\label{sec:inputandoutput} -This section summarizes some ideas about grid generation and grid formats that can be used by \Dumux. In general, +This section summarizes some ideas about grid generation and grid formats that can be used by \Dumux +for input and output formats. +In general, \Dumux can read grids from file, or, construct grids inside the code. All grids are constructed inside a so called \texttt{GridCreator} which is a \Dumux property. Note that some \texttt{GridCreator}s are already available in \Dumux, so e.g. construction of a structured grid is fairly easy. We will subsequently introduce the supported file formats, the standard grid creator and its capabilities, and briefly mention how to customize and deal with common other grid formats. -\subsection{Supported file formats} +\subsection{Supported grid file formats} \Dumux can read grids from file using the Dune Grid Format (DGF) or the Gmsh mesh format. \subsubsection{Dune Grid Format} @@ -135,3 +137,21 @@ in dumux-devel at dumux-devel/util/gridconverters/Documentation\_ICEM\_CFD\_crea % \subsubsection{Cornerpoint grids} % TODO + +\subsection{Output formats} +The default output format for \Dumux is the vtk-file format. Additionally it is possible +to generate plots with the gnuplotinterface. + +\subsubsection{VTK file format} +Dumux allows to write out simulation results via the vtkwirter. +For every print out step, a single *.vtu file is created. For parallel simulations one file +per printoutstep is generated for each processor. +Time step information and files are stored in a *.pvd file. +The *.pvd file groups the singel *.vtu file and contains additionaly the timestep information. +Also it is the main file for the visualiazion with paraview. +The vtk-file format is also supported by other common visualisation programms like Visit and Tecplot. + +\subsubsection{Gnuplotinterface} +\Dumux provides some Gnuplot interface, which can be used to plot results and generate directly an +image file (e.g. png), if gnuplot is installed. An example can be found in test/io/gnuplotinterface. + -- GitLab From b411ac0a939a7fa32ade54d3f6a00e4074ec9323 Mon Sep 17 00:00:00 2001 From: Utz Date: Tue, 4 Dec 2018 08:41:34 +0100 Subject: [PATCH 21/57] Add the section parralel Modify the section "input ant output" and "external tools". --- doc/handbook/0_dumux-handbook.tex | 2 +- doc/handbook/4_externaltools.tex | 34 +++++++- doc/handbook/5_inputoutput.tex | 12 +-- doc/handbook/5_parallel.tex | 126 +++++++++++++++++++----------- 4 files changed, 122 insertions(+), 52 deletions(-) diff --git a/doc/handbook/0_dumux-handbook.tex b/doc/handbook/0_dumux-handbook.tex index 73b349e6f0..99e3a3faed 100644 --- a/doc/handbook/0_dumux-handbook.tex +++ b/doc/handbook/0_dumux-handbook.tex @@ -147,7 +147,7 @@ in deeper modifications of underlying \Dumux models, classes, functions, etc. \input{5_spatialdiscretizations} \input{5_stepsofasimulation} \input{5_propertysystem} -\input{5_grids} +\input{5_inputoutput} \input{5_parallel} \bibliographystyle{plainnat} diff --git a/doc/handbook/4_externaltools.tex b/doc/handbook/4_externaltools.tex index 875b70559b..17df2758fc 100644 --- a/doc/handbook/4_externaltools.tex +++ b/doc/handbook/4_externaltools.tex @@ -30,9 +30,41 @@ The basic Git commands are: \subsection{Gnuplot} +\label{gnuplot} A gnuplot interface is available to plot or visualize results during a simulation run. This is achieved with the help of the class provided in \texttt{io/gnuplotinterface.hh}. -Have a look at tests including this header for examples how to use this interface. + +To use the gnuplot interface you have to make some modifications in your problem file. + +First you have to include the corresponding header file for the gnuplot interface. +\begin{lstlisting}[style=DumuxCode] +#include gnuplot_; +\end{lstlisting} + +Usually with the ploting is dealt within a function \texttt{postTimeStep}, which firstly extracts the variables (in the exapmle below \texttt{x\_} and \texttt{y\_}) which shall be plotted. The actual plotting is done using the method of the gnuplot interface.\\ + +Example: +\begin{lstlisting}[style=DumuxCode] +gnuplot_.resetPlot(); // reset the plot +gnuplot_.setXRange(0.0, 72000.0); // specify xmin and xmax +gnuplot_.setYRange(0.0, 1.0); // specify ymin and ymax +gnuplot_.setXlabel("time [s]"); // set xlabel +gnuplot_.setYlabel("mole fraction mol/mol"); // set ylabel + +// set x-values, y-values, the name of the data file and the Gnupot options +gnuplot_.addDataSetToPlot(x_, y_, "N2_left.dat", options); + +gnuplot_.plot("mole_fraction_N2"); // set the name of the output file +\end{lstlisting} + +Its also possible to add several data sets to one plot by calling \texttt{addDataSetToPlot()} more than once. +For more information have a look into a test including the gluplot interface header file or +the header file itself (\texttt{dumux/io/gnuplotinterface.hh}). \subsection{Gstat} diff --git a/doc/handbook/5_inputoutput.tex b/doc/handbook/5_inputoutput.tex index 098464deb2..c9e74ca191 100644 --- a/doc/handbook/5_inputoutput.tex +++ b/doc/handbook/5_inputoutput.tex @@ -4,9 +4,9 @@ This section summarizes some ideas about grid generation and grid formats that can be used by \Dumux for input and output formats. In general, -\Dumux can read grids from file, or, construct grids inside the code. All grids are constructed inside a so called \texttt{GridCreator} which is a \Dumux property. +\Dumux can read grids from file, or construct grids inside the code. All grids are constructed inside a so called \texttt{GridCreator} which is a \Dumux property. Note that some \texttt{GridCreator}s are already available in \Dumux, so e.g. -construction of a structured grid is fairly easy. We will subsequently introduce the supported file formats, the standard grid creator and its capabilities, +construction of a structured grid is fairly easy. We will subsequently introduce the supported file formats, the standard \texttt{Gridcreator} and its capabilities and briefly mention how to customize and deal with common other grid formats. \subsection{Supported grid file formats} @@ -140,7 +140,7 @@ in dumux-devel at dumux-devel/util/gridconverters/Documentation\_ICEM\_CFD\_crea \subsection{Output formats} The default output format for \Dumux is the vtk-file format. Additionally it is possible -to generate plots with the gnuplotinterface. +to generate plots with the gnuplot interface. \subsubsection{VTK file format} Dumux allows to write out simulation results via the vtkwirter. @@ -151,7 +151,7 @@ The *.pvd file groups the singel *.vtu file and contains additionaly the timeste Also it is the main file for the visualiazion with paraview. The vtk-file format is also supported by other common visualisation programms like Visit and Tecplot. -\subsubsection{Gnuplotinterface} -\Dumux provides some Gnuplot interface, which can be used to plot results and generate directly an -image file (e.g. png), if gnuplot is installed. An example can be found in test/io/gnuplotinterface. +\subsubsection{Gnuplot interface} +\Dumux provides some gnuplot interface, which can be used to plot results and generate directly an +image file (e.g. png). To use the gnuplot interface gnuplot has to be installed. For more information see \ref{gnuplot}. diff --git a/doc/handbook/5_parallel.tex b/doc/handbook/5_parallel.tex index 6583774e38..84d13a52f8 100644 --- a/doc/handbook/5_parallel.tex +++ b/doc/handbook/5_parallel.tex @@ -1,59 +1,97 @@ \section{Parallel Computation} \label{sec:parallelcomputation} - -\Dumux also support parallel computation. The parallel version needs an external MPI libary. - -Posibilities are OpenMPI MPICH and IntelMPI. - -Depending on the grid manager METIS or ParMETIS can also be used for paritioning. - - -In the following show how to prepare a model an run it in parallel whith -the imcompressible 2p model. - -dumux/test/porousmediumflow/2p/implicit/incompressible - - -\subsection{prepareing the model} - -If the parallel AMGBackend is not allready set in your application -you should from the sequential solver backend to the parallel amg backend -in your application. - -First include the header files for the parallel AMGBackend +Multicore processors are standard nowadays and parallel programming is the key to gain +performance from modern computers. This section explains how \Dumux can be used +on multicore systems, ranging from the users desktop computer to high performance +computing clusters. + +There are different concepts and methods for parallel programming, they are +often grouped in \textit{shared-memory} and \textit{distributed-memory} +apporaches. The parallelization in \Dumux is based on the +\textit{Message Passing Interface} (MPI), which is usually called MPI parallelization. +It is the MPI parallelization that allows the user to run +\Dumux applications in parallel on a desktop computer, the users laptop or +large high performance clusters. However, the chosen \Dumux +model must support parallel computations, which is the case for the most \Dumux applications. + +The main idea behind the MPI parallelization is the concept of \textit{domain +decomposition}. For parallel simulations, the computational domain is splitted into +subdomains and one process (\textit{rank}) is used to solves the local problem of each +subdomain. During the global solution process, some data exchange between the +ranks/subdomains is needed. MPI is used to send data to other ranks and to receive +data from other ranks. +Most grid managers contain own domain decomposition methods to split the +computational domain into subdomains. Some grid managers also support external +tools like METIS or ParMETIS for partitioning. + +Before \Dumux can be started in parallel, a +MPI library (e.g. OpenMPI, MPICH or IntelMPI) +must be installed on the system and all \Dune modules and \Dumux must be recompiled. + + +\subsection{Prepare an Parallel Application} +Not all parts of \Dumux can be used in parallel. One example are the linear solvers +of the sequential backend. However, with the AMG backend \Dumux provides +a parallel solver backend based on Algebraic MultiGrid (AMG) that can be used in +parallel. +If an application uses not allready the AMG backend, the +backend must be switched by the user to run the application also in parallel. + +First, the header files for the parallel AMGBackend must be included + +\begin{lstlisting}[style=DumuxCode] #include +\end{lstlisting} -and remove the header files of the sequential backend +so that the backend can be used. The header files of the sequential backend +\begin{lstlisting}[style=DumuxCode] #include +\end{lstlisting} +can be removed. +Second, the linear solver must be switched to the AMG backend -Second, hange the linear solver to the AMG solver -from the AMGBackend - +\begin{lstlisting}[style=DumuxCode] using LinearSolver = Dumux::AMGBackend; +\end{lstlisting} -and recompile your application. +and the application must be compiled. -\subsection{Start parallel computation} -The parallel simulation is starte with mpirun followed by -np and -the number of cores that should be used and the executable. - -mpirun -np n_cores executable - -On HPC cluster you usually have to use qeuing system like (e.g. slurm). +\subsection{Run an Parallel Application} +The parallel simulation is started with the \textbf{mpirun} command. +\begin{lstlisting}[style=Bash] +mpirun -np +\end{lstlisting} +\textit{np} sets the number of cores {n\_cores} that should be used for the +computation. On a cluster you usually have to use a queuing system (e.g. slurm) to +submit a job. \subsection{Handling Parallel Results} -The results sould not differ between parallel an serial execution. As in -the serial case you get vtu-files as output. However you have an additional -variable "process rank" that shows the processor rank of each MPI partition. - - - - - - - - +For most models, the results should not differ between parallel and serial +runs. However, parallel computations are not naturally deterministic. +A typical case where one can not assume a deterministic behavior are models where +small differences in the solution can cause large differences in the results +(e.g. for some turbulent flow problems). Nevertheless, it is useful to expect that +the simulation results do not depend on the number of cores. Therefore one should question +when a model is not deterministic. Typical reasons for a wrong non deterministic +behaviour are errors in the parallel computation of boundary conditions or missing/reduced +data exchange in higher order gradient approximations. + + +For serial computations \Dumux produces single vtu-files as default output format. +During a simulation, one vtu-file is written for every output step. +In the parallel case, one vtu-file for each step and processor is created. +For parallel computations an additional variable "process rank" is written +into the file. The process rank allows the user to inspect the subdomains +after the computation. + +\subsection{MPI scaling} +For parallel computations the number of cores must be choosen +carefully. Using too many cores will not always lead to more performance, but +can produce a bad efficiency. One reason is that for small subdomains, the +communication between the subdomains gets the limiting factor for parallel computations. +The user should test the MPI scaling (realtion between the number of cores and the computation time) +for each specific application to ensure a fast and efficient use of the given resources. -- GitLab From b0137f18589ac3ab5e392d1890d792a285a1842a Mon Sep 17 00:00:00 2001 From: Utz Date: Tue, 4 Dec 2018 11:11:18 +0100 Subject: [PATCH 22/57] Finish the parallel and the input/output section. --- doc/handbook/5_inputoutput.tex | 4 ++-- doc/handbook/5_parallel.tex | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/doc/handbook/5_inputoutput.tex b/doc/handbook/5_inputoutput.tex index c9e74ca191..aee931d35d 100644 --- a/doc/handbook/5_inputoutput.tex +++ b/doc/handbook/5_inputoutput.tex @@ -147,8 +147,8 @@ Dumux allows to write out simulation results via the vtkwirter. For every print out step, a single *.vtu file is created. For parallel simulations one file per printoutstep is generated for each processor. Time step information and files are stored in a *.pvd file. -The *.pvd file groups the singel *.vtu file and contains additionaly the timestep information. -Also it is the main file for the visualiazion with paraview. +The *.pvd file groups the singel *.vtu files and contains additionaly the timestep information. +Also it is the main file for the visualisation with paraview. The vtk-file format is also supported by other common visualisation programms like Visit and Tecplot. \subsubsection{Gnuplot interface} diff --git a/doc/handbook/5_parallel.tex b/doc/handbook/5_parallel.tex index 84d13a52f8..645309fbd6 100644 --- a/doc/handbook/5_parallel.tex +++ b/doc/handbook/5_parallel.tex @@ -8,7 +8,7 @@ computing clusters. There are different concepts and methods for parallel programming, they are often grouped in \textit{shared-memory} and \textit{distributed-memory} apporaches. The parallelization in \Dumux is based on the -\textit{Message Passing Interface} (MPI), which is usually called MPI parallelization. +\textit{Message Passing Interface} (MPI), which is usually called MPI parallelization (distributed-memory approach). It is the MPI parallelization that allows the user to run \Dumux applications in parallel on a desktop computer, the users laptop or large high performance clusters. However, the chosen \Dumux @@ -32,12 +32,12 @@ must be installed on the system and all \Dune modules and \Dumux must be recompi \subsection{Prepare an Parallel Application} Not all parts of \Dumux can be used in parallel. One example are the linear solvers of the sequential backend. However, with the AMG backend \Dumux provides -a parallel solver backend based on Algebraic MultiGrid (AMG) that can be used in +a parallel solver backend based on Algebraic Multi Grid (AMG) that can be used in parallel. If an application uses not allready the AMG backend, the backend must be switched by the user to run the application also in parallel. -First, the header files for the parallel AMGBackend must be included +First, the header files for the parallel AMG backend must be included. \begin{lstlisting}[style=DumuxCode] #include @@ -65,7 +65,7 @@ The parallel simulation is started with the \textbf{mpirun} command. mpirun -np \end{lstlisting} -\textit{np} sets the number of cores {n\_cores} that should be used for the +\textit{np} sets the number of cores (\texttt{n\_cores}) that should be used for the computation. On a cluster you usually have to use a queuing system (e.g. slurm) to submit a job. -- GitLab From 747fa6375681ab9ce6778aa83a4ae52ca962a39a Mon Sep 17 00:00:00 2001 From: Utz Date: Tue, 4 Dec 2018 14:02:02 +0100 Subject: [PATCH 23/57] Add "Costumize the VTK output" --- doc/handbook/5_inputoutput.tex | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/doc/handbook/5_inputoutput.tex b/doc/handbook/5_inputoutput.tex index aee931d35d..579ef0163d 100644 --- a/doc/handbook/5_inputoutput.tex +++ b/doc/handbook/5_inputoutput.tex @@ -151,6 +151,26 @@ The *.pvd file groups the singel *.vtu files and contains additionaly the timest Also it is the main file for the visualisation with paraview. The vtk-file format is also supported by other common visualisation programms like Visit and Tecplot. +\subsubsection{Customize the VTK output} +Dependent on the used \texttt{TYPETAG} a default set of variables is stored in the VTK files, but it's also possible +to add further variables. For that you can use the method \texttt{addField} of the \texttt{vtkWriter}. +\begin{lstlisting}[style=DumuxCode] +vtkWriter.addField(problem->getExactTemperature(), "temperatureExact"); +\end{lstlisting} + +The first input argument of this method is the value of the additional variable, provided by a method of the corresponding problem. +If it doesn't already exists, the user has to provide this method (see example below for analytic temperatur). +\begin{lstlisting}[style=DumuxCode] +//! get the analytical temperature +const std::vector& getExactTemperature() +{ + return temperatureExact_; +} +\end{lstlisting} + +The second input argument is the name of the additional variable (as it should be written in the VTK files). +The example above is taken from:\\ \texttt{test/porousmediumflow/1pnc/implicit/test\_1p2cni\_convection\_fv.cc} + \subsubsection{Gnuplot interface} \Dumux provides some gnuplot interface, which can be used to plot results and generate directly an image file (e.g. png). To use the gnuplot interface gnuplot has to be installed. For more information see \ref{gnuplot}. -- GitLab From cb612777f83704abe00e798abbdf83c4cbf1ff97 Mon Sep 17 00:00:00 2001 From: Ned Coltman Date: Mon, 10 Dec 2018 14:54:53 +0100 Subject: [PATCH 24/57] [Handbook][Grids] remove external grid section, replace with paragraph in grid format subsection --- doc/handbook/5_inputoutput.tex | 48 ++++------------------------------ 1 file changed, 5 insertions(+), 43 deletions(-) diff --git a/doc/handbook/5_inputoutput.tex b/doc/handbook/5_inputoutput.tex index 579ef0163d..15f0f06362 100644 --- a/doc/handbook/5_inputoutput.tex +++ b/doc/handbook/5_inputoutput.tex @@ -32,7 +32,11 @@ using Gmsh. Further, the format supports higher order elements. They can be used manager \texttt{UGGrid}. An example can be found in \texttt{dumux/test\allowbreak/io/gridcreator}. - +\subsubsection{Other Grid Formats} +Grid formats other than .DGF and .MSH grids will have to be converted to the .DGF or .MSH format before they can be used in \Dumux. +If conversion is not an option, another possibility would be to write your own \texttt{GridCreator}. Examples of other grid formats, +which have previously been either converted or custom-created in \Dumux, are Petrel grids (cornerpoint grids), +ArtMesh grids (fractured network grids), and ICEM grids (CAD developed grids). \subsection{The default \texttt{GridCreator}} The default \texttt{GridCreator} is called \texttt{GridCreator} and is automatically avaible in all problems. @@ -93,48 +97,6 @@ CellType = Cube # or Simplex \end{lstlisting} For all available parameters see the Doxygen documentation. -\subsection{Other grid formats and customized grid creators} -Other grid formats than DGF and MSH have to be converted to DGF or MSH to be read into \Dumux. A second possiblity (advanced \Cplusplus) is to write your own -\texttt{GridCreator}. -A (non-comprehensive) list of hints for some other common grid formats follows. - -\subsubsection{Petrel} -Grids from Petrel (in ASCII format with the extension *.GRDECL) can be imported into \Dumux in two ways: - \begin{enumerate} - \item Using the GRDECL format directly with the help of the grid-manager \texttt{dune-cornerpoint}. - \item Converting the GRDECL file into the DGF format. - \end{enumerate} -The fist options requires the installation of \texttt{dune-cornerpoint} along with its dependencies. Set the property \texttt{Grid} to \texttt{Dune::CpGrid} in your problem file. - -The second option has the advantage that you end up with a DGF which can then be used with any grid-manager (\texttt{dune-alugrid}, \texttt{UG} etc.) You also have to install \texttt{dune-cornerpoint}. Additionally you have to modify the converter \texttt{grdecl2vtu} found in \texttt{dune-cornerpoint/examples} to also write a DGF. To do so you have to: -\begin{itemize} - \item Include the \texttt{dgfwriter.hh} found in \texttt{dune-grid/dune/grid/io/file/dgfparser} - \item Create an object of the \texttt{Dune::DGFWriter} and call the its function \texttt{write()} within the \texttt{main} function for example after the \texttt{vtkwriter()} is called: -\begin{lstlisting}[style=DumuxCode] -Dune::DGFWriterParam dgfWriter(grid.leafView())) -dgfWriter.write(fnamebase + ".dgf") -\end{lstlisting} -\end{itemize} -Material parameters for elements with Petrel specific keywords like \texttt{PORO} are parsed by the converter \texttt{grdecl2vtu} (see the \texttt{main} function). They are available as vectors within the \texttt{main} function. The main GRDECL file with the coordinates must include the GRDECL files of the parameters, if for example the parameters are not already included, include the file bearing your parameter in your main GRDECL file: -\begin{lstlisting} -INCLUDE -'PARAMETER_X.GRDECL' -/ -\end{lstlisting} -To add the parameters to your DGF you have to make changes to the header \texttt{dgfwriter.hh} such that they are passed as arguments of the \texttt{write()} function and written after each element (modify \texttt{writeElement()} and internal \texttt{write()} functions accordingly). Take caution that you stick to the correct DGF syntax (see \textbf{Modules $\rightarrow$ I/O $\rightarrow$ Dune Grid Format (DGF)} for reference). - -\subsubsection{ArtMesh} -\href{http://www.topologica.org/toplog/wp/}{ArtMesh} is a 3D mesh generation software. It has its own mesh file format -which can be read by \Dumux via the \texttt{ArtGridCreator}. Traditionally it was used within \Dumux for fracture simulations with -the discrete fracture matrix model (\texttt{2pdfm}). A detailed description of the fracture network creation and gridding -can be found for example in \cite{Tatomir2012a}, pp. 68. - -\subsubsection{ICEM} -For complex geometries a graphical tool to create grids might be appropriate. One possibility to mesh for example CAD -geometry data is the commercial software \href{http://www.ansys.com/Products/Other+Products/ANSYS+ICEM+CFD/}{ANSYS ICEM -CFD}. A very detailed, but outdated description can be found at the LH2 internal wiki. A more recent best practice guide is available -in dumux-devel at dumux-devel/util/gridconverters/Documentation\_ICEM\_CFD\_create\_mesh.odt. At LH2 exists a script which converts the ICEM mesh into the DGF. - % \subsubsection{Cornerpoint grids} % TODO -- GitLab From 88eb807acf270af678ee73335f7d20885270755a Mon Sep 17 00:00:00 2001 From: melaniel Date: Mon, 10 Dec 2018 16:06:58 +0100 Subject: [PATCH 25/57] [handbook] Revise stepsofasimulation. --- doc/handbook/5_stepsofasimulation.tex | 364 +------------------------- 1 file changed, 8 insertions(+), 356 deletions(-) diff --git a/doc/handbook/5_stepsofasimulation.tex b/doc/handbook/5_stepsofasimulation.tex index d95e350aa9..96e521aa9d 100644 --- a/doc/handbook/5_stepsofasimulation.tex +++ b/doc/handbook/5_stepsofasimulation.tex @@ -2,17 +2,12 @@ \label{flow} -This chapter is supposed to show how things are ``handed around'' in \Dumux. It +This chapter is supposed to give a short overview over how things are ``handed around'' in \Dumux. It is not a comprehenisve guide through the modeling framework of \Dumux, but hopefully it will help getting to grips with it. In Section \ref{content} the structure of \Dumux is shown from a \emph{content} point of view. -% TODO: revise section about implementation structure -% Section \ref{implementation} however is written from the point of view of the \emph{implementation}. -% The same coloration in the flowcharts of both sections refers to the same level of calculation. For keeping things -% simple, the program flow of a \verb+2p+ model is shown in section \ref{implementation}. There are extensive comments -% regarding the formating in the tex file: so feel free, to enhance this description. \subsection{Structure -- by Content} @@ -21,12 +16,11 @@ In Figure \ref{fig:algorithm}, the algorithmic representations of a monolithical solution solution scheme is illustrated down to the element level. \begin{figure}[hbt] -% \begin{tabular}{ l | l } -% \begin{minipage}[t]{0.48\textwidth} \setcounter{thingCounter}{0} \scriptsize \sffamily +\begin{center}\parbox{0cm}{ \begin{tabbing} \textbf{{\begin{turn}{45}\color{black}\numberThis{main}{init}\end{turn}}} \= \textbf{{\begin{turn}{45}\color{dumuxBlue}\numberThis{time step}{prep}\end{turn}}} \= @@ -36,7 +30,6 @@ solution solution scheme is illustrated down to the element level. \color{black}initialize \\ \color{black}\textbf{foreach} time step\\ - \> \color{dumuxBlue}prepare update\\ \> \color{dumuxBlue}\textbf{foreach} \textsc{Newton} iteration \\ \> \> \color{Mulberry}\textbf{foreach} element \\ @@ -59,354 +52,13 @@ solution solution scheme is illustrated down to the element level. \> \color{dumuxBlue}- write result\\ \color{black}\textbf{endfor}\\ \color{black}finalize -\end{tabbing} - -% \end{minipage} -% -% & - -% TODO: revise second figure -% \begin{minipage}[t]{0.48\textwidth} -% \setcounter{thingCounter}{0} -% -% \scriptsize -% \sffamily -% \begin{tabbing} -% \textbf{{\begin{turn}{45}\color{black}1. main\end{turn}}} \= -% \textbf{{\begin{turn}{45}\color{dumuxBlue}2. time step\end{turn}}} \= -% \textbf{{\begin{turn}{45}\color{Mulberry}3. \textsc{IMPES/C}\end{turn}}} \= -% \textbf{{\begin{turn}{45}\color{dumuxYellow}4. element\end{turn}}} \= \\ -% \\ -% \color{black}initialize \\ -% \color{black}\textbf{foreach} time step\\ -% -% \> \color{dumuxBlue}prepare update\\ -% \> \color{dumuxBlue}\textbf{foreach} \textsc{IMPES/C} step \\ -% \> \> \color{Mulberry}\textbf{if} grid is adaptive\\ -% \> \> \> \color{dumuxYellow}- calculate refinement indicator\\ -% \> \> \> \color{dumuxYellow}- mark elements, adapt the grid\\ -% \> \> \> \color{dumuxYellow}- map old solution to new grid\\ -% \> \> \color{Mulberry}- calculate {flow field}\\ -% \> \> \color{Mulberry}\textbf{foreach} element \\ -% -% \> \> \> \color{dumuxYellow}- calculate element stiffness matrix \\ -% \> \> \> \color{dumuxYellow}- assemble into global matrix \\ -% -% \> \> \color{Mulberry} \textbf{endfor} \\ -% \> \> \color{Mulberry} solve linear system\\ -% -% \> \> \color{Mulberry}- calculate {transport} \\ -% \> \> \color{Mulberry}\; (saturations, concentrations,...) \\ -% \> \> \color{Mulberry}\textbf{foreach} element \\ -% \> \> \> \color{dumuxYellow}-calculate update (explicitly) \\ -% \> \> \> \color{dumuxYellow}- adapt time step ({CFL}-like criterion) \\ -% \> \> \color{Mulberry}\textbf{endfor} \\ -% \> \> \color{Mulberry}- update old solution \\ -% \> \> \color{Mulberry}- postprocess (flash calculation, etc.)\\ -% \> \color{dumuxBlue}\textbf{endfor}\\ -% \> \color{dumuxBlue}- write result\\ -% \color{black}\textbf{endfor}\\ -% finalize -% \end{tabbing} -% -% \end{minipage} -% \end{tabular} - -% \caption{Structure of a fully implicit (\textbf{left}) and a sequential -% (\textbf{right}) scheme in \Dumux.} +\end{tabbing}} +\end{center} \caption{Structure of a monolithical solution scheme in \Dumux.} \label{fig:algorithm} \end{figure} -% \subsection{Structure -- by Implementation} -% \label{implementation} -% This section is supposed to help you in getting an idea how things are handled in -% \Dumux and in which files things are written down. -% This is not intuitivly clear, therefore it is mentioned for each \fbox{step-stone}. -% \textbf{called by} tells you from which file a function is -% accessed. \textbf{implemented in} tells you in which file the function is written -% down. The name of the function is set in \verb+typewriter+. -% Being a function is indicated by round brackets \verb+()+ but only the function -% name is given and not the full signature (arguments...) . -% Comments regarding the events within one step-stone are set \scriptsize{smaller}. -% -% \begin{landscape} -% \pagestyle{empty} % switch off headings and footer in order to get more space for the flowchart -% \setlength{\voffset}{4.2cm} -% -% % command for blocks -% \newcommand{\step}[6]{ -% \begin{minipage}{7.5cm} -% {\tiny \color{#1}\texttt{#2} $\Rightarrow$ \texttt{#3}}\\ -% \fcolorbox{#1}{white}{ -% \begin{minipage}{7.0cm} -% \begin{scriptsize} -% \texttt{#4} \hfill \color{gray}in: #5\color{black}\\ -% \hphantom{m}\begin{minipage}[t]{6.8cm}#6\end{minipage} -% \end{scriptsize} -% \end{minipage}} -% \end{minipage} -% } -% -% % command for the arrow with text -% \newcommand{\longArrow}[1]{ -% \begin{minipage}[b]{7.5cm} -% \fcolorbox{white}{white}{ -% \begin{minipage}[b]{7.0cm} -% \begin{center} -% \begin{scriptsize} -% $\overrightarrow{ %an arrow under which things may be written -% \begin{array}{c} % in order to be able to write multiple lines under the arrow -% #1\\ -% \hphantom{\hspace{6.5cm}} -% \end{array} -% }$ -% \end{scriptsize} -% \end{center} -% \end{minipage}% -% } -% \end{minipage}% -% \hphantom{ $\overrightarrow{}$}% -% } -% -% % command for the arrow between steps -% \newcommand{\shortArrow}{$\overrightarrow{}$} -% -% % command for marking things as model specific -% \newcommand{\modelSpecific}{\emph{model specific}\xspace} -% -% % the distance between two lines -% \newcommand{\dummyDistance}{\\[4\baselineskip]} -% -% % THE FLOW CHART STARTS HERE -% \noindent -% \step{black}{main()}{Dumux::start() $\Rightarrow$ start\_()}{start\_()}{start.hh}% -% {start the simulation} -% \shortArrow -% \step{black}{start\_()}{timeManager.init()}{init()}{timemanager.hh}% -% {initialization} -% \shortArrow -% \step{black}{start\_()}{timeManager.run()}{run()}{timemanager.hh}% -% {time step management} -% \dummyDistance -% % -% \longArrow{ -% \textnormal{\texttt{while(!finished)}}\\ -% \textnormal{\color{black}main} -% \rightarrow \textnormal{\color{dumuxBlue}time step} -% } -% \step{dumuxBlue}{run()}{problem->timeIntegration()}{timeIntegration()}{implicitproblem.hh}% -% {execute time integration scheme}% -% \longArrow{ -% \textnormal{define number of allowed \textsc{Newton} fails}\\ -% \textnormal{(each halving dt)} -% } -% \dummyDistance -% % -% \step{dumuxBlue}{timeIntegration()}{model->update()}{update()}{implicitmodel.hh}% -% {sth like numerical model} -% \shortArrow -% \step{dumuxBlue}{update()}{solver.execute()}{execute()}{newtonmethod.hh}% -% {applying \textsc{Newton} method\\ -% keeps track of things, catching errors} -% \longArrow{ -% \textnormal{\color{dumuxBlue}time step} -% \rightarrow \textnormal{\color{Mulberry}Newton step}\\ -% \texttt{while(ctl.newtonProceed()}\\ -% \textnormal{uLastIter = uCurrentIter(model.uCur())} -% } -% \dummyDistance -% % -% \noindent -% \step{Mulberry}{execute() $\Rightarrow$ execute\_()}{jacobianAsm.assemble()}{assemble()}{implicitassembler.hh}% -% {linearize the problem:\\ -% add all element contributions to global \textsc{Jacobian} -% and global residual}% -% \shortArrow -% \step{Mulberry}{assemble() $\Rightarrow$ asImp\_().assemble\_()}{resetSystem\_()}{resetSystem\_()}{implicitassembler.hh}% -% {set r.h.s. (i.e. residual)\\ -% set \textsc{Jacobian} to zero } -% \longArrow{ -% \textnormal{\color{Mulberry}Newton step} -% \rightarrow \textnormal{\color{dumuxYellow}element}\\ -% \texttt{loop all elements}\\ -% } -% \dummyDistance -% % -% \noindent -% \step{dumuxYellow}{assemble() $\Rightarrow$ asImp\_().assemble\_()}{asImp\_().assembleElement\_()}{assembleElement\_()}{e.g. boxassembler.hh}% -% {call local \textsc{Jacobian} and residual assembly}% -% \shortArrow -% \step{dumuxYellow}{assembleElement\_()}{model\_().localJacobian().assemble()}{assemble()}{implicitlocaljacobian.hh}% -% {set curr. element, update element's fin.vol.geom.\\ -% reset local \textsc{Jacobian} to 0\\ -% update types of boundaries on this element}% -% \shortArrow -% \step{dumuxYellow}{assemble()}{prevVolVars\_.update(),curVolVars\_.update()}{update()}{e.g. 2pvolumevariables.hh}% -% {call model (e.g. \texttt{2p})specific update of quantities defined for the volume:\\ -% variables for the \emph{current} and \emph{previous} timestep}% -% \dummyDistance -% % -% \noindent -% \step{dumuxYellow}{update()}{completeFluidState()}{completeFluidState()}{e.g. 2pvolumevariables.hh}% -% {calculate all required fluid properties from the primary variables, -% here the fluid system does the real work:\\ -% calculates, saves, and provides: densities, etc.} -% \shortArrow -% \step{dumuxYellow}{assemble()}{localResidual().eval()$\Rightarrow$asImp\_().eval()}{eval()}{e.g. implicitlocalresidual.hh}% -% {the element's local residual is calculated:\\ -% see the next two stepstones}% -% \shortArrow -% \step{dumuxYellow}{eval()}{asImp\_().evalFluxes\_()}{evalFluxes\_()}{e.g. boxlocalresidual.hh}% -% {evaluate the fluxes going into each finite volume, -% this is \modelSpecific} -% \dummyDistance -% % -% \step{dumuxYellow}{evalFluxes\_()}{this$\rightarrow$asImp\_().computeFlux()}{computeFlux()}{e.g. 2plocalresidual.hh}% -% {this calculate the \modelSpecific fluxes (e.g. advective and diffusive) -% using the \texttt{FluxVariables}} -% \shortArrow -% \step{dumuxYellow}{eval()}{asImp\_().evalVolumeTerms\_()}{evalVolumeTerms\_()}{implicitlocalresidual.hh}% -% {evaluate the \modelSpecific storage and source terms for each finite volume}% -% \shortArrow -% \step{dumuxYellow}{eval()}{asImp\_().evalBoundary\_()}{evalBoundary\_()}{implicitlocalresidual.hh}% -% {evaluate the \modelSpecific boundary conditions}% -% \dummyDistance -% % -% \step{dumuxYellow}{assemble()}{asImp\_().evalPartialDerivative\_()}{evalPartialDerivative\_()}{e.g. implicitlocaljacobian.hh}% -% {actually calculate the element's (local) \textsc{Jacobian}\\ -% matrix a property chooses backward/central/foward\\ -% differences. here: central differences} -% \shortArrow -% \begin{minipage}{0.50\textwidth} -% \begin{scriptsize}\textnormal{approximation of partial derivatives: numerical differentiation}\end{scriptsize}\\ -% \begin{scriptsize}\textnormal{add $\pm \epsilon$ solution, divide difference of residual by $2\epsilon$}\end{scriptsize}\\ -% \begin{scriptsize}\textnormal{all partial derivatives for the element from the local \textsc{Jacobian} matrix}\end{scriptsize}\\ -% $\left \lbrace -% \begin{tabular}{l}%these question marks are for the \verb, not meant as ``unclear'' -% \verb?priVars[pvIdx]+=eps?\\ -% \begin{scriptsize}\textnormal{this is adding eps to the current solution}\end{scriptsize}\\ -% \verb?curVolVars_[scvIdx].update(+eps)?\\ -% \begin{scriptsize}\textnormal{recalculate volume variables, having $\epsilon$ added}\end{scriptsize}\\ -% \verb?localResidual().eval(+eps)?\\ -% \begin{scriptsize}\textnormal{calculate local residual for modified solution as before: involves}\end{scriptsize}\\ -% {\scriptsize $\begin{array}{l} -% \textnormal{- \textbf{computeFlux}}\\ -% \textnormal{- \textbf{computeStorage}}\\ -% \textnormal{- \textbf{computeSource}} \\ -% \end{array}$} \\ -% \verb?store the residual()?\\ -% \verb?repeat for priVars[pvIdx]-=eps?\\ -% \verb?derivative is (residual(+eps) - residual(-eps))/2eps?\\ -% \end{tabular} -% \right . -% $ -% \end{minipage} -% \dummyDistance -% % -% \step{dumuxYellow}{assemble\_()}{asImp\_().assembleElement\_()}{assembleElement\_()}{implicitassembler.hh}% -% {Residual of the current solution is now\\ -% ``numerically differentiated'', for the element i.e.\\ -% the local \textsc{Jacobian} matrix is calculated. }% -% \longArrow{ -% \textnormal{The contribution of a single element is done.}\\ -% \textnormal{Now, it needs to be added to the global quantities:}\\ -% \textnormal{Add to global residual and global \textsc{Jacobian}}.} -% \step{dumuxYellow}{assemble\_()}{asImp\_().assembleElement\_()}{assembleElement\_()}{e.g. boxassembler.hh} -% {Add to global residual.:\\ -% \texttt{resdidual\_[globI+=\\model\_().globalJacobian().resdidual(i)]}} -% \dummyDistance -% % -% \longArrow{ -% \textnormal{loop vertices}\\ -% \textnormal{of an element} -% } -% \step{dumuxYellow}{assemble\_()}{asImp\_().assembleElement\_()}{assembleElement\_()}{e.g. boxassembler.hh} -% {Add to global residual:\\ -% \texttt{(*matrix\_)[globI][globJ] +=\\model\_().localJacobian().mat(i,j)}} -% \longArrow{ -% \textbf{\textbf{\color{dumuxYellow}element}} -% \rightarrow \textbf{\color{Mulberry}Newton step}\\ -% \textnormal{Assembling of elements to global quantities is done.} -% } -% \dummyDistance -% % -% \step{Mulberry}{execute\_()}{while(ctl.newtonProceed())}{newtonProceed()}{newtoncontroller.hh}% -% {Print information.\\ -% Start/ stop timer.}% -% -% \longArrow{ -% \textnormal{set delta Vector to zero} \\ -% \textnormal{(this is what is}\\ -% \textnormal{solved for later)}\\ -% } -% \step{Mulberry}{execute\_()}{ctl.newtonSolveLinear()}{newtonSolveLinear()}{newtoncontroller.hh}% -% {Catching errors.\\ -% Ask the linear solver to solve the system.\\ -% i.e.: give \textsc{Jacobian}(matrix), delta(x), r.h.s.(residual) to linear solver\\ -% $\nabla r(x^k) \cdot \Delta x^k = r(x^k)$\\ -% tricky: each \textsc{Newton} step solves a linear system of equations.}% -% \shortArrow -% \step{Mulberry}{newtonSolveLinear()}{int converged = linearSolver\_.solve()}{solve()}{boxlinearsolver.hh}% -% {Solve the linear system with the chosen backend.}% -% \dummyDistance -% % -% \step{Mulberry}{execute\_()}{ctl.newtonUpdate()}{newtonUpdate()}{newtoncontroller.hh}% -% {We solved for the change in solution, but need the solution:\\ -% Calculate current (this iteration) solution\\ -% \quad from last (iteration) solution and current (iteration) change in solution:\\ -% $x^{k+1} = x^k - \Delta x^k$ where $\Delta x^k = (\nabla r(x^k))^{-1} \cdot r(x^k)$} -% \shortArrow -% \step{Mulberry}{execute\_()}{ctl.newtonEndStep()}{newtonEndStep()}{newtoncontroller.hh}% -% {Increase counter for number of \textsc{Newton} steps.\\ -% Print info.}% -% \longArrow{ -% \textnormal{check whether to do another \textsc{Newton} iteration:} \\ -% \textnormal{that is: check if the error is below tolerance or}\\ -% \textnormal{maximum number of iterations was reached.} -% } -% \dummyDistance -% % -% \longArrow{ -% \textbf{\textbf{\color{Mulberry}Newton step}} -% \rightarrow \textbf{\color{dumuxBlue}Time step}\\ -% \textnormal{\textsc{Newton} done}\\ -% \textnormal{if failed $\rightsquigarrow$ halve timestep size, restart loop}\\ -% } -% \step{dumuxBlue}{execute\_()}{ctl.newtonEnd()}{newtonEnd()}{newtoncontroller.hh}% -% {Tell the controller we are done}% -% \shortArrow -% \step{dumuxBlue}{update()}{asImp\_().updateSuccessful()}{updateSuccessful()}{e.g. implicitmodel.hh}% -% {can be filled \modelSpecific}% -% \dummyDistance -% % -% \longArrow{ -% \textnormal{in while(!finished)} -% } -% \step{dumuxBlue}{run()}{problem\_->postTimeStep()}{postTimeStep(),writeOutput()}{implicitproblem.hh}% -% {Give the problem the chance to post-process the solution.}% -% \longArrow{ -% \textnormal{write output}\\ -% \textnormal{uPrev $\leftarrow$ uCur}\\ -% \textnormal{time += dt, timestepIdx++}\\ -% \textnormal{deal with restart and episodes } -% } -% \dummyDistance -% % -% \step{dumuxBlue}{run()$\Rightarrow$setTimeStepSize(problem\_->nextTimeStepSize(dt))\\ -% $\Rightarrow$nextTimeStepSize()} -% {newtonCtl\_.suggestTimestepSize()}{suggestTimestepSize()}{newtoncontroller.hh}% -% {Determine new time step size from number of \textsc{Newton} steps.}% -% \longArrow{ -% \textbf{\color{dumuxBlue}Time step} -% \rightarrow \textbf{\color{black}main}\\ -% \textnormal{loop until simulation is finished} -% } -% -% \end{landscape} -% -% \newpage -% % Original pagestyle (headings and footer) were switched off, -% % in order to get more space for the flowchart. -% \pagestyle{scrheadings} -% \normalsize +\subsection{Structure -- by Implementation} +A possible starting point to understand how the abovementioned algorithm is implemented within \Dumux, +is the example main file +\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/releases/3.0/exercises/exercise-mainfile/exercise_1p_a.cc} -- GitLab From 93ef16b613040b98a99b63267cae5404127ddd5d Mon Sep 17 00:00:00 2001 From: Ned Coltman Date: Mon, 10 Dec 2018 16:04:48 +0100 Subject: [PATCH 26/57] [handbook][course] cleanup course text to match correct tag reference --- doc/handbook/3_course.tex | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/doc/handbook/3_course.tex b/doc/handbook/3_course.tex index ff988d283c..c203d45c89 100644 --- a/doc/handbook/3_course.tex +++ b/doc/handbook/3_course.tex @@ -6,7 +6,7 @@ though the doxygen documentation. Well done. What now? \\ \linebreak \textit{``How on earth is this going to help me solve my multi-(phase, component, -scale, physics) flow and transport problems in porous media systems?''} you begin to wonder. +scale, physics) flow and transport problems in porous media systems?''}, you begin to wonder. Don't panic! In order to best ease our prospective users and developers into the wonderful \Dumux simulation environment, we've prepared a \Dumux-course. This course is offered once a year over a period of 3 days at the University of Stuttgart. @@ -26,7 +26,7 @@ such that you can see how a model is developed in \Dumux. As a teaser, we've \textit{``Sounds great, but where is this material? I can't find it within what I've downloaded."}, you question. -The dumux course material is found online here: \\ +The dumux course material is available online: \\ \url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course} \\ In order to download this repository, which acts as an additional module to the \Dumux base, you can download an installation script with the following command: @@ -37,10 +37,8 @@ This script will install \Dumux, it's Dune dependencies, and the \Dumux-course repository. Within the directory \Dumux-course there are a series of exercises and slides describing the previously described examples. \\ \linebreak -%TODO: Is this true? Did we update the dumux course to compatibility with 3.0? -At the moment, the \Dumux course is dependent on a certain version of -\Dumux. To make sure that this version of \Dumux is collected to your installation, -check to see if the branch \textbf{dumux-course-2018} -is checked out within your dumux folder. -In the future, the \Dumux course will be updated to depend on -the specific release (3.0, 3.1) that was closest to the date of the course. \ No newline at end of file +The \Dumux-course is dependent on a certain \Dumux release. The above script will +download the correct version (\textbf{releases\textbackslash3.0}). You can check which version +of \Dumux you have installed using the git status command. In the future, the \Dumux-course +will be updated to depend on the specific release, (\textbf{releases\textbackslash3.0}, \textbf{releases\textbackslash3.0}), +that was closest to the date of the course. \ No newline at end of file -- GitLab From 02f42fc70e11df0c96b2b26cd834022303fa2644 Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 11 Dec 2018 10:31:45 +0100 Subject: [PATCH 27/57] [handbook][3_course] add release tag for dumux-course and cleanup --- doc/handbook/3_course.tex | 42 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/doc/handbook/3_course.tex b/doc/handbook/3_course.tex index c203d45c89..659571943b 100644 --- a/doc/handbook/3_course.tex +++ b/doc/handbook/3_course.tex @@ -1,44 +1,42 @@ So, you've downloaded your very own copy of \Dumux and its dependencies. -You've run dunecontrol, and your example ``test$\_$dumux" not only complies, +You've run dunecontrol, and your example ``test$\_$dumux" not only compiles, but it even shows a nice simulation in paraview. Maybe you've read through parts of the handbook, and even started looking -though the doxygen documentation. -Well done. What now? \\ \linebreak - +through the doxygen documentation. +Well done. What now? \par +% \textit{``How on earth is this going to help me solve my multi-(phase, component, scale, physics) flow and transport problems in porous media systems?''}, you begin to wonder. Don't panic! In order to best ease our prospective users and developers into the -wonderful \Dumux simulation environment, we've prepared a \Dumux-course. +wonderful \Dumux simulation environment, we've prepared a \Dumux course. This course is offered once a year over a period of 3 days at the University of Stuttgart. If you're looking for information on attending, subscribe to the \Dumux mailing list and stay tuned for updates. \\ -\url{https://listserv.uni-stuttgart.de/mailman/listinfo/dumux} \\ \linebreak - +\url{https://listserv.uni-stuttgart.de/mailman/listinfo/dumux} \par +% \textit{``But the course won't take place for another 6 months!"} and, \textit{``I want to start developing a numerical model of my challenging and interesting process now!"}, you think. Not a problem. The course materials are all shared online in their own -\Dumux project repository. A series of beginner-level exercises are explained +git repository. A series of beginner-level exercises are explained such that you can see how a model is developed in \Dumux. As a teaser, we've also included a suite of examples from hot topics we're working on. Models exploring ``Coupling free flow and porous-media flow", ``Flow in fractured - porous media" and ``Fluid-solid phase change" are all introduced. \\ \linebreak - + porous media" and ``Fluid-solid phase change" are all introduced. \par + % \textit{``Sounds great, but where is this material? I can't find it within what I've downloaded."}, you question. -The dumux course material is available online: \\ -\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course} \\ +The \Dumux course material is available online: \par +\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course} \par In order to download this repository, which acts as an additional module to the \Dumux base, you can download an installation script with the following command: \begin{lstlisting}[style=Bash] -$ wget https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/master/scripts/install.sh +$ wget https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course/raw/releases/3.0/scripts/install.sh \end{lstlisting} -This script will install \Dumux, it's Dune dependencies, and the \Dumux-course -repository. Within the directory \Dumux-course there are a series of exercises -and slides describing the previously described examples. \\ \linebreak - -The \Dumux-course is dependent on a certain \Dumux release. The above script will -download the correct version (\textbf{releases\textbackslash3.0}). You can check which version -of \Dumux you have installed using the git status command. In the future, the \Dumux-course -will be updated to depend on the specific release, (\textbf{releases\textbackslash3.0}, \textbf{releases\textbackslash3.0}), -that was closest to the date of the course. \ No newline at end of file +This script will install \texttt{dumux}, it's Dune dependencies, and the \texttt{dumux-course} +repository. Within the directory \texttt{dumux-course} there are a series of exercises +and slides describing the previously described examples. \par +% +The \Dumux course will be updated with each \Dumux release. +The above script will download the correct version (\textbf{releases/3.0}) of both +the \texttt{dumux} and \texttt{dumux-course} module. -- GitLab From 7677fb70ebd7874a01ae1c56aaefb131fa3f1a7a Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 11 Dec 2018 10:34:19 +0100 Subject: [PATCH 28/57] [handbook][3_course] cleanup --- doc/handbook/3_course.tex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/handbook/3_course.tex b/doc/handbook/3_course.tex index 659571943b..6624f67723 100644 --- a/doc/handbook/3_course.tex +++ b/doc/handbook/3_course.tex @@ -11,8 +11,8 @@ Don't panic! In order to best ease our prospective users and developers into the wonderful \Dumux simulation environment, we've prepared a \Dumux course. This course is offered once a year over a period of 3 days at the University of Stuttgart. If you're looking for information on attending, subscribe to the \Dumux mailing list -and stay tuned for updates. \\ -\url{https://listserv.uni-stuttgart.de/mailman/listinfo/dumux} \par +and stay tuned for updates: +\url{https://listserv.uni-stuttgart.de/mailman/listinfo/dumux}. \par % \textit{``But the course won't take place for another 6 months!"} and, \textit{``I want to start developing a numerical model of my challenging and @@ -26,8 +26,8 @@ such that you can see how a model is developed in \Dumux. As a teaser, we've % \textit{``Sounds great, but where is this material? I can't find it within what I've downloaded."}, you question. -The \Dumux course material is available online: \par -\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course} \par +The \Dumux course material is available online: +\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux-course}. \par In order to download this repository, which acts as an additional module to the \Dumux base, you can download an installation script with the following command: \begin{lstlisting}[style=Bash] -- GitLab From 8d47510a8a96c9da0458ca0dbeb4204eb770f365 Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 11 Dec 2018 10:44:03 +0100 Subject: [PATCH 29/57] [handbook] Update CMakeLists for new tex-files and images --- doc/handbook/CMakeLists.txt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/handbook/CMakeLists.txt b/doc/handbook/CMakeLists.txt index 53472d7826..01cf2ee849 100644 --- a/doc/handbook/CMakeLists.txt +++ b/doc/handbook/CMakeLists.txt @@ -13,11 +13,12 @@ set(TEX_INPUTS 4_parameterfiles.tex 4_restartsimulations.tex 4_structure.tex - 5_stepsofasimulation.tex - 5_grids.tex + 5_inputoutput.tex 5_models.tex + 5_parallel.tex 5_propertysystem.tex 5_spatialdiscretizations.tex + 5_stepsofasimulation.tex installDumux.sh) set(TEX_IMAGES @@ -27,7 +28,8 @@ set(TEX_IMAGES png/dunedesign.png ../logo/dumux_logo_hires_whitebg.png png/dalton1.png - png/dalton2.png) + png/dalton2.png + pdf/staggered_grid.pdf) dune_add_latex_document(0_dumux-handbook.tex BIBFILES dumux-handbook.bib -- GitLab From fc5fb34a3e20b7bb707d546342deac0538bcbe42 Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 11 Dec 2018 12:08:33 +0100 Subject: [PATCH 30/57] [handbook][dalton] better image quality --- doc/handbook/png/dalton1.png | Bin 50443 -> 115385 bytes doc/handbook/png/dalton2.png | Bin 56381 -> 124610 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/handbook/png/dalton1.png b/doc/handbook/png/dalton1.png index f78081daeb94c010ee1986d1ea4523f4800dc530..b681e597953cffe3cae320f8d029188c5e187cab 100644 GIT binary patch literal 115385 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 diff --git a/doc/handbook/png/dalton2.png b/doc/handbook/png/dalton2.png index 6d8a861bedadeb6cba69402e750fed07adafdfe3..be04f04bfad603d43b39830d4174b3cc3749f913 100644 GIT binary patch literal 124610 zcmZ6z2Rzl$|37|hm+T#posn5aR*`YdviA(xWXH9-N_O_vAlWN>+?(PeBeK`MQDk4) zF7E$*>+|`1e~-Th4_x#k$sff5zk_|XEc`(rYYqGt0b_>RJ>W&Q0Cn>KBOjN5V23Bppy1$O zF*k1yeY@Z2MKn99MoHq?OVJH3>XMjad+1WcFL zRDAz&X*1mx)Ld3EVl=5Fy;wHl&zZ^x*%0R<+#y{B8Gv4tQfa2~LH>WAi;t~0KzwfB z811R-A@+0jR!=Z{vj|01sm0HTi)VIbZglo3pCU$UTYVtCp_IPz?@&bB89(YXvZImFWYO5DTqa}-eI0}EqJ8@R?RMBb8Fe$-Ich#ig^)5$1OJD^ z*JdCr2t_bLw8O*qgZlnQWVB9HErAsggHB>Fg|CSo%I9XiIONxz^gg)Jhz?r@{-Gv} zCHgK}5Vn{4B92{?4YWfrLZD3LY5t_M5|l!9gypF-AGr8`&Nx2*yzWE5cGrfTK#~?f z@&=tz)U~Kx0$F;~o|lDMa}`RY=d2+{;5}SjO>Ii{w-+UUZjyH1UqNyENBwk-@s(Rrlp%R16rI5!tfbT@nZCCO zC8}iXX#p}lW2*NSuF%h-q5rRV8lAzid|V~1^%-lVR$CF-gjOH@#Mo)+k2X>|EZC75 zPX};@`p#SW?*367(T!jTcAn^ad}|1>*T2t=$0*mWFs)#RSN9->H2FDqKoBJ-ZggbS zD1pf849)@lMD@w;Fd{PAm3*L0eA=_6AH6qCFh$x-*vzp7U%HBbAT*dzo!~DBj!nMVl|7Y}ATn=@>GmdBvbv`N= zwg`$%bF^eW5s>gtyc8$Ma`Q{<1y^<@22u;GYcH-*G+ZQ~X;y&v0a6cRp;4MI*>z4? zeymQtGPizIRG3_3kwj>%WFG90*rFbx7}&Rr=5@z2+rJJb z+OTyzwBpsv!SDQZ#vP&lWpU_?!J+9#MHP{?gobD~eV^skT-6Uhzin9qkHnP2+~<XzCBGt}~?P=_l?ArvOYhEIR9t0h<^r^TjLj!c1R0w7-YqP)SDiJQ# z8sA2$ud$F8mCkKiKT6vfgzYudpXJe<=SaBRfEc#q6DvZR;Vo7I@%6gLh8Nh+`kvy1 zaK53G)RJy#u|QB-`^YN74WZ4}5=khRhOF~q6;q5meH26ee8i7}TqiSwu{;m=bi@_Ql>G*P9SoN%HLcFf(y z6-|2O;MgO6rmD=M^{u*s1a>K`pVZp5K1JG})!mxBB)^m#{saC?xs7Sm-dp4k;&>=jcTE zZm4RHC~PA_#rs_`cO^k2zvz?c!C#0V#8;975s0C%0^yqL!jXATOjFlS$}48C3h#%& z$$vo6-@-osB2PHd7kv$vM;yY!j@5QOo-@n3A&KoJRqwSpv)Yo&O)2&`_Sg|}dP)Nh zyQD~(S}vzmn;c2MR8lHKBA47(*|cTexM+y@Ox0ZJV~SUU!!Ol819b8v{wi)xY&65b zrNvKv)hBZ>#!pig(W%B(Tq|9Py6s`oKS-@A{TtJ2CW`FnWt;b;egr?zW{7$gRTh_U zA!eUWy!X%2G984_Hi*(&oRpzY6OrsqT*e$>?vc(X3vkE+>-TT0v!moIGe*LRVHCb< zkE&FvC6pm)gTC~$xE-Z?k}oS3AJf@;s1k05FQZUbKqyx^a4UrfEwg}1wx>Ul`#dF# zcy)lOPXv-SF~&?3p}CO17R>+hW7{*ize3JtC?>`EBp8iF*j6}K+%^PzDV(JqmrY+x}6?Sy0d4ptn!5#gwmp|1gx`UsZJhqWmYBfJjQpW!3g@SFa6VqJLbgv zFYRAx0osl7B#^gWwGJ*5!5}%sdUREPqmLovy;S>?ofm8!gWm6&HGe%U^W*!xcJ5`* zu-umwVFm5S*?BT8zBz&m#bol8gF5JN!MkQcgxhz`7=jn64H#B$Y%{+p4ZXRX z9zgR!al?K+j+K45D}%3`{UZ4U9yU65O`gmd%j`G3{T*2EF$G3vdD#vWE~Z`wa8{_A zNKxxZRu9f|B{eX?Ci?UzJFPSjPpE4JafoA(LzErfcpIL|V(4d;eTImrwHaKzQM|Y{ z5rE30-b82H+#7wS0tAuVmo68Vc+TJ*i0~(IR{5hn2i2HC=|}7$xip>ae?C+mdOsgM zZuo?BOb=+OytVAGdH;(!O3Z+^cCL}Q&QC8tONIlY?fCEy%g9rMm=J|w&6gc6xO9P` z_sQ2U+f<|=CBVwyDl$d&BUx>gG6fNRPStK25SUHyhZ#MD&Q8Z|Ues z&uj?V^AEIJ3S#DNH-(ZU3h+)7Lo^_qzFbg;zLXfy!=H?=eEuTt)e0vUXZX3`BQ6p7 zs<~8=VCBziXG{MGt&sVN^XZLa-JG`oFPnrN^@ee$eN;Kc9TgT`U()vn`AvJmZ#gsv zi0+NzveWJhL(+`jWJZ(qUy`n?wpYe@ccs6KGox0k@e z7J|n06tHmusD&PPI`~q^5c`xL!qP(=GlSv{ri&oMGZT1USl;r+|5~ahET!DLuN9_t=8!L>v4! za|E&lH~U0nE!kz}9&4?DDCca#(kLe8tc*4-xP5@IN9md3h?o?uiQ^uS?ixCN{k9aA zR*q1hj8}IX=I7%WOofk4o|67BBLSvh{u!e-z7rjD{4ud2_>u$~~Fqqr1=BcfC{>SjU+sVT$h;$<@^w zzC2Z_Q_Yi@e9wTfjVrkf65@@dS)x+ByMWr7MHrfpE!}gW4emP9VQ_JwB%oo4#O;1g zq85NG_A!z15p1b0WA8Z}x%Zu*Z%(6I2js=1c(ChI_C1-Ok~ zhi>)w3N7;wyM`U?qA4V}{|`)EW!F)zSspg{Y?nwtAVF6>gnl0)XLr7!p1F>XhfzMPNgaX26i{zE$Z{kUx(vSe|gEPV-< zlc0_3d`-?|J=Y&se|PULA}Y8RI;2jP0%R6^5EW2X(#+-bf$8mMPlF}?NN4l)vVv*` z>rn!Tk1|GLvRA_mZKeWVUtz*VByofnaml#DQt*hjy!enECcqpO_N@xTuAr3M@{y zCtkNn|0cQ>FV3@38N?3V{3w6KRw+A_QjiHUxXUGf#75)!09fcRG1r#wtE#t&9=*Y` zNYBH5)ED6hvjr2?2P@1f%ykSo!=&4#&ew0-t>wP!2)^{4h^`rGLv>Ijsiq0L0B#(f zOq>-ra|uW6>cp3(4-x2V0d!b169iR+ZF!mV*;JhhqLUq~-_sZWb+`ZAj_*GqkFA$#uT^_jDYy4D3@nb2Vi#u}m z_W+5hhp})!Y?*SSYPJFuu!U}wBSu1F{?f#tOj5;Ce*y9hfYb-PEiR+JYdHOsXDvd9 z>1ym>9vQmID?82;S^A9EGZP$LJ%7rH$%oZzS?CcrYhQ!$@i%bRc`rJZ$HNo-%qP}1Td;N`FdyWu)6?eKFx9c{xKmg`wlr|3@@zk!t-~Z!G zT50U~Q(#nqEgEKo^V7yH>1UdE>ZPOQojh?g%Vus*73y?>egUvuJ4!RE7a+))Ejpks zJ9;1Q2t{sY_`~b_!vAt7?dd0L^v}3$l$jxib7eIlhmn%Gwp%tnlBtGGT;O~VP^#uI zP^;9R8FoPLMjQr_+tQVtma3NaK!@_s@o$T9&s z61U|vZV$8z0A)rRqtjnuJ3;3)F!MW$v*kpo6PbU+;*S20F-3N1U4)BQdOEYb|5(~L zeyZgn5z}Q&$e4U&zdLbH%aA9Zuo7_KPt&&zhR2Xa@<$I{^RoTn-eCqJ5L_{&-7wOE zeMa(0@r$TRow(BPO83kcH4TGjDtB-x-_Bf5T1XCf@e10~#TBCdQ+bU@Jd;+Ztb;r! z7Z9e6>tq4oAs;jTl@X+HEeO5K)?&js^X7~BAVvk|?gkP}Re7aWF<$f2F62R4yUoS< zZ0Ie!&NJO*T=y5LSJ1>D$_K*InfcQ6*6J6t~ z-zF$kf7m&I2qS}Yg7g8#Fs`KH#l*7`y|~GVmByH-LyK4!1p3?&eXp<|q^k>@id~~E z{wF7{1X|O*_`rK((E)UVS=x&ZH1?{1-a9WGPxNhNOtF1POjg4Fi0eWRp(U@X%_qWnH0Jv;Eh)9HnC?0z)S5% zA{s2M@=Bj0>iq*80(xx&i~SH+<&P3>b^_&3FHm+xZc*qaEVxoT^ccb0nL{LjoW`;O zcQ=B@SFaChAkb~uN(2I^F^rs%MJi8&MwzZ@v9u}Tn*oCwKlA1CoX21MBSt)gK#q5% znIW1Da5g1#6>!PPm{MZ_BF$22)inBwVp#>U6Se0TBc!$fzYT``H-bEfbbik4HpHx? zmS~?MbvC%LKWEmo?M(r$ypo6Aw}BLHnjrEwI2Dq%UbY+);NrIYjqDHqBd2U3gtz=r zN6GKI?L&cxujS8DCvFFg){i#A)TjRvly;`BOTS45&is03RvR%-29L-}?c@z?7bmRM z!}}Vkmk&g%rbrOq*^Z!`tr89J%;;g>3ZeS)7>q1xaxe$?wD0Z`fgp#PntgRw05S9p?ZPJ>dDIUeqCj9}w0?p{Jag}o2 zoIe65Mbby{ae<1ROn0;%rG!ZDeLkLf6{>&rgJQhgS0W$&@NPRAbAL>|A60W9)q*Cg zN-NOzenPTnx9vcWaY0kT>NBPZMF?siH;ftqKhH;fjZTOnvpi@N@|{B0M;e%0Ke%w^ zM%Mx5K+Fk*1J7taNEdn4JMt3LN$Z!GO?Eu1;#lkq_J1lKKciXr-_;KH zL3rIg!Kyu|%tTJ?ORq-qmt|q!LSB8;zfBjy;w!+tSHI|&af+~uhPs8X1lnmNTPfL% zxE)r7K8h5p(PeZpwG+HN475(u!t)=J79R-I9*W8w^}802xO861duQsq%Jn_tIhu#H z)|cFjr?h~&tM$YbO4fD^1Ep`^^IznY%Mlq8wfk7aDA{~)bS(iFk7!0`cph!$ckjeY z=y44Pa<==EpJfxnd}0^-(Dj|Xt!#mzp)CFdqGV`IuolqdU>eqLH{1=o_Jhix$|`}n zL`R8cfwIbQf9A8Bs@r4XA8Om55bDXEePBr94M!^^ zu0k4uX`0u_Mbwowb6_2`Z_Y54;LL{}WS}Y1Wa93-tb8~z2{QBIx;x*c0-?7$YJ``H z0&zG&hufu!5oG5uPmyHmS@sjV9w+!dZlR7As9HX2UCM=Au0;>CA{oUlDna@)qhpL->lQ0sJe=<0m-GfQ?i&BG< zZ%Sqz@C*0kPN(Ze~bD0pOW;^Najd$ikmP3orta+&yHAl;5B4BTIl*utekv&k=~lDFIw|P%rTyX7&f%XEq!We9HtEz z8`{AJ2vR1)BmM08dp4ccK1B-3%8kUs{GJ)mGY8#C{;`*%U#EnT?s0TJyd)~PA2L!y zW;+xz6c`;$h`ka)^+S5U95z`{%e|0#&8`I{*Rwwknb!Penf0JeesyW$CahRq(Ee|Z zTM`jW=c_VH|3-$?)_`?$i&2`@RuOll$GXtFne@liX~E5#daPttL6}W-DNgatASa7F z2{DEI2mLFtpKA9<4)YNh!X!%R^M#v$VKAzWr6?u@)M(^X%H>N?UnqX|TWcbB*ovG( z*V}=-Qx+msdZ4h|Px>&VJx#)c)vz#@P)~ypswqL#RJUn157seHeIzA}sP0a6x)1xX z>ouK=ix-_ikAB{^Ozs1>S)7I4aw=W{_i8H>be8uv+X?W=U*Ijjj{hk3hW;$# zR*_o%q(>Bv&C`I6`Ki+Lk(&Y&wag?-507Vd2eOToQXc58eWt^TYMelW^ph`*yM|we zMR1FPF8BV1F5%t*SOt*2eHDr^5ul_qO)8HZS*25s+q!Fg`vLhgT|1sD5i(&midQ`6 zkJuPjE@1cC&scE~b0s%J0;nhG{LMWsr>1q1gL2Pg$Dd7hcUQoDl1DsPf2E0J??!{a z(qD`ClT_*nbZVU&q#U>#&(^j`dK|5N9zFVn5;Y}`AQ1^Iu$%%bR%>iXeLQa z-U~*!kQ_)RONiYz)|1!q|J1kzbZ*-5El?L`Ze!}W)2=gvWm98(7ZS(|12mP91-j-m)iDa z-tO?rxKLa{eMDogpIz0Er`D`9xeKBX18o z2N51@;pHZaT|Che!<-gY6-1)Z0&cmQCO1f7jwY_EWsa&dMU* z;oGt1m>rlOb_|1DrK&qN@m~lQZSM6uq`_!IZ>ZbWqoAknBTBK z_y=*`8YMTSyAn~5b`v(u508z*wsEEiKNf+ie%AetKimZmL;>a}9&`d_x5B)J_!jK-oP~WOp0#ok1&O?YLtq0j77G1kNDOle$Alt0JArKs*dlDuJrQPG;I!FK?W-9B?#n|%v(0{EjCzM zK-$$mx0W>*j$@hVKee7WBh=LfAmmd(S?R}AxnP40T%de*u* z_7c+05T!yF%t^zLh65aZ`=I|%Y*cGty#3^a6k<3rBE4M?428x|F$m$bayqS>#Baqp z%V3hzuuvt;<7eF-^9N~859;{e)m|Ve?gSNWtXMHk0Fp>6IgsH)$qf?P;~BTW&enBy zaU0=Iax9(eSu630uP-i z;|< z)6e~V1N(Z4Go|>c+ROy7iN#>E97gNe4%?BJe z+>7?}18InChqw0lVovKz(^1e1^hx|bX9oq?p-)o8GvE4^aNJB7d;Rm?x$>Ii9iV6F zrs}w83EQh%hsEBdAsKNEIQ(Q321MK8kr#D$o8~5eWx;-I&Tbr*x@QuuQ9FeL%%!Nk#&@wBu##M`CJ#xvV!@+HmZitI#_qPN_^RPi(g>D3Ct`% zTpHlrWaN=X*bOY@1{AKXI`D;vziH*>Y01^AZ2qY-7Xl zHCa9d@0Y5pR9VZuUiI&Qv|H$sC{qt5##J^$W0qMypFc{L5pr)$N`{G~zL~>vJPg(w539dhEEg+X}r$!@F~+bl3dg9n0|bojWD^41>EuH?P9$>26^Pui2Noy77k#Mw31sRJSg+QULd(pTY21d_U90`m)sEEt&Sr? zIA!GL$Uze$B8?r3hZ9Xo=lB-4?%V_#@7zLAJ9G&8N8E`wkM3`eGJ4owP8!Mz3qyjT z4Jo~fTJ3(VO%(C(*wX{JheE>&JSELul_)&Ajjl=bqiXWkPArpo)nU;=5+crh?}K(% zP6?$$_|e0LLaX>*cY{GzfOq`sgrXGZvTC|bkaiu3KbAOAHI=nTzuz@OOS-;0(pOhn zsc85y1puj_`Qv5_T=9)^pQIzV!3%|^r_WYe+_M>HA_a5rEd*+1mMA#X?J7upk(=-) z3BpgfOAQanm>`pux7H#A)`OB`qr0p;8wq`R9GqLFlwr1D>%04zSCB+VLU#Hka~3Z< zd&_4?oVBW*g|&8$Zmaj(OYEdEdNDBN0vytgj=0p;im;P(EItO25r{K!B;c9q{_C1f zuE}FYcccsA&dugfC13eE8sDd2$@5g-{ikgL^P-v`?Dxj#&&cF_6Ol$qrRN-S85@-+ zN0pQ0)16xBvFrM76#0>*8pGc5z8Q^>(Qyfvv54lEJcl zHA1*PjzH~b_3T#XYscUFjPGGDB2*|9FKr%0a!Eh(=m|f4L7AvFoJ1sZy_0iEr}fgp zTJz*uguun|k^zu-)bYmIxw(Ks_|)s%AGyy== zKh4;~_eulWT@Sl#ICFXyQUwHbUH(OVw-(yIZ?-l)hX9}xpN?v%n~cXkxGlLUH*Dc` zkUstBd1b%Yby3l5vli2Fl9?nxT`hoV*9L5v++rE~@TFgP6$CCz$9zS%+)QL$^+r+J zuLVQn@z_+Y0{(7c;FXXXtKM72fby&MY=b27w_+W-3*V&7HHWgV?T=kSjv8LH*sMf} zSbp)FL+}hz%R(;{m`bDX+7HCc4+0IL_lP2d8TsxtE}w5W z^KD6V8SK~-AY5r(@C!Wp8fXW|ORf&yK}b({-w;aPgH67$JhbbJPe=!+n=Se+HMW z{kvoKXR4{m^REHE&q8#^hid@)eKF_RL$QgZ6@X^GDgfYk00$?i;&sPu3M7IBzMcTB zLng0-Ok~mR3%l{v`gVCpuv$ZJ0S|;lHS?FKQ;Pp%ad2HOFY@=kqWxIfS>o7NNc(2` z_JSe*`lX0dxQXDpST^_jH++lI9-InNZ&Q+_4(xprm5oQg9o|`K) z$2mv+q3F0FmoYYd9>{;tDD`I0eF$|dRoPx91q7aNLS8byx8J;8u)-A8@)1Z#0*z1Y zCasZ+RbY}cN7oU9K7$cVYEmXU5%`K#r#rR~F!NT~n`TT#mpg^mR?u7~S<@)0nX7C4 zvdWME8Eq<}W7Ez$m|N3ZGg(oPz1m3p(I=mXmSTI8OFgZ$8GlIs8vfYrcEO3ZA~|04 zWID=l5{lHH35K`P$Th$17GUU8%i>F1@dAmC+2<#b&TE35lBPkfM1lk<#*BD)4&cMZ zL#a=c>g=9-3DPkeD6~(+Y210ey162<)$)Bv_u5@b7NX*JhaOJ!zE`>ZFncjhGwq+8 z*61o|M}=C&lZ+4iEk5cOzBsn-+nyp0Vmm*xP?fSW#Sus7Y@+sv5M|^mJN54g;co+# z2acl!{W(-pD5K`dO_Y#-0?`4gF=g>BW{WtSTI-s{N3tl9msaL0dI*oGFr7Hf*L z<1TP(!pMaUfP*vsu+rbsKF|erG;v~~#hrJxm6#t5&)~$Iu3ax%*E>6deuDP4!(Q#_ z8eG-$nNJxT#f53_>~B(?c}_MgoZzi)qRm?n2s99Upc!R=5Be-k_FA2~J-=iDePvnj zdB;@qVy=vGN2D(V-P;~wZ6e>1qup*M5bxLj6k!%+_4wMRHJavDQJmmE4fKewDgnw2 zlgXC(C_k^G?8(6^DXvPrGbC3VHdeLUMN)6B8fON)IM4I+vsJBMY4`E|hU`UT5Mm#j ziJOfVYBc-nm_Uw~6ZcGPfPnVnQok`Lg5bPl758H8x2rIwLjc-&CA=hQU+!(M{1sZ^ zX7NQ0uF!BvHR}#D4kNgE%GmUo4*${d57LV!_hNC$B1RY5NUA&aN;K!-6ISk5mT6~( z7U?N`fzLac1gaYr3i(;QcNJ>m~CrP+{D(p-aR8b@4tTu;vX-fb$)B zr1GKPU)-5ka%liu|EkV_l$$dL<}3zlQ!{WJB+^>TN*RR{*s_~ErE%D61X?RZIQNF_ z`}VGAafC^R*`g)hJo(C5E;6_Fvu$-g+%=1(kt*mvwNmA=fNx}Jr;w$2>4veRJxC7a zb5p;VZx+LNxEm=q)P{$7>`106hV-r>SV_q#>2679{%C{wM;HJ4z28oAgVGjmyk&@0W*bI$;Z~ssAlR9*9{Bmq`XzRorim>@$#Y&az1*x(W zwYn9fIo(Xu1H|teJxT}-X8xgdoTM+!k0KNq85htX*Z_xC+@%Jkl#-iLIa`!hG!K(y z2?=Grgwd!~JIa-zBdn_FGhAcq--g$SWmVJnjepJJyV5yjyU8H3fhApzAYFTKG3bXs zdAvW{X`kVUHf`nAj+oZ9o%i%kp*nr6%0|9$xaSyZo^nULuPv~?HT7}OqA{dpi5P9) z1FIF?E2gX};xqiKStU=HYyjUC+flWmfn@q-C$bWabw69Ei*gF`=U@Ca!0f-F-43cH zEP5SSwI6+r^7k$>5DATY5Ze0v;0eDCtCD!_L%eFGusO27KGSZeT?NY|tk>t&MiyW1 zHq{rLZ-RQfJ@Fo-%|E7#4;JLD^_yDO-)@catnHm^)+g~Z0pLk%-2kLe)BG8xC`h1s z1xkIwJj{}tRZ{eWn66A8UaK1?YL_?@+}!RVz5%) zW(Vej`!~BIIWX}t*rAFbKLkm@5yge@NH`jc$Ol)tw*1lW(OxJWN;Sp@&Eiu3h+a3+=ekyB_LiT3jSyz2z25e`UZsYeC`!*yS=)^ zj4Ia6d63WZutnLeP1((?ccxxt+PxTg8geNT!mo;;5Pg@|KnIgo}} zYu!d`aRy<+;4}k*6)DePNe8+S#>*my{NM~u^~mz#<93kTyO@Yk0^9fnSCkat!;fXr zDTG#pG|e+X4(JDH8T2AQ5~${l;}^+^SVQON0cf6+2nbht=zmm7;n*gn#$mv;ux4zp z|2)E#fs~v@xE1FjKvyw(&VIr#(31Tl6E>;rQM_4f%AuAu4fV=5$a^`07w_D$8onCN z!B@i~sy%^?Yo5$+-m2yHF?idzJiRCYY|6^{w|~@w$)Lyvy)QQg2Vny@rs)KtZ*-jP zy>i(GFkCK8ioRsCqig#1+kCJ7afoU2u|{%OcBoV)0w2|H z`nG}noQ|v*Cw%C#1g(aAw3zIPR=_V&7R#5jtVq_c4X{`NkCeSho*1z)+5VuLGCEB5 z`7UE;3pEhNc`oTMGIyK&HC{Z*{eI_eV6Rq#WmYO}F8>jYKs=qQ`n2iZaBplzf>crJ zBa1Mocx4?iO8fN2jJ^ z7sb{4JtyJY-D}@YV{=gC%62K4 zL@Bv=XxPm^6W)rMTFHeH0DWL|c4#o!d^}Nr znaE`(TOtSt%}|=xE?+qO9SpZjOD5^t7Sv-syr zHs+3w|H}=p0omj~JP}7*#v=60ve@EJk!CfmIMHH3aj`cj2I&JUlsCU<)?ps~@?xfm>!@v?#1VkwsQn_^jH;c=v7KM03TSST~I@qZG2AUd22VV?b|4@#o7x! zHAIMulE@@x2fz(44nW#LI<#p%jYXqIjMyUlJqcqP+T&HP4_$)lbsHhs<7Z9MEwG3( z!W5U^VO2*UVEpkSeNrdR;Fo#k7$p@);f<^u_Yt+>={!IUCZML=IM-2U`Y)9u+5C`W zasGo2?JtQ;Y$j5ycie z`sQsUJjs!z`4&XBFy+`*tzG)Qy`Pj=3cO;uWS7BbOlatkr+#0N6dS|ER_J!!U94 zUlg3DBY=X-+@ZEF<-q=$Epx}xRgl27J}jMaIQ(j6@n{ZxKX5rpw4WaydG*IKRE^ z!&}u;GSa~Ej%>@ofR5Z(7<1GQ4I=Bd`8z#M8}#S;A^m%T16y;yHF~zZkDyp!;pfvL zi7Y9Px?#2jmnHNuJKO6+*R?7q0ot0qZzV5d$#56 zD%m&<+M+RyJWZQMFl{`57tZ5L?O?Jkf3x|Ysci@b(=z*fO{;6T1%#{)LaYitB`0?p z+=xKZrWqW2*DvNF_7I$j5j(Pves;o1VD*~-TKD0Gu{4;{ASix&pgXF^%b7H7OpUEM zRB!g)L9`cmm(sm3>w2zqalj zZ{sZ8=LiFDN!C`f|HWSOmD}L>P_AEt-;>Mqgp8+T-trjD4Bmh^mzRWvLZISgifM0f zieA(|1lGl)X$UH_1E{Y~Rb~bdMBG33_!c_`XdaL$$O<>6iNStmRjr7yFwX4WdM@&Q zn8fxWy8e@Pd-+Ymh5OC>a;@H|QgZ)p_ZIo8v=0eR{5B%%GHIo0JCopL_tpCiIL-^x zx2zt}f+@eHLecgmKYHHU^{-dN`>adBhQ)nRr zCmd=UPH!BkXs20raGcyvzL)}_7=a)6V4ud!=!9`q#G;Zj%(bUaSBweh>D`XGjk|2# zpq)~PrdU1IDle6&t+iNxx5Yhh)|w2xhR5iMrv?$Oe*e;SG(|SWT}6R!ftQC_Q+sAO z!KVq=fY!~O=|?@TUoxZ382U^$kPox2FFery<=10AsE#O!Nl^laT-amLXs2M>zK3F< zOYNLQLFYXsH1C&-&hV@U>%ZC!dH&@^8~U#F@lQpw9Ok#l{d;%BU!$Plm+hd)>wL2x zf`#_&yr+H*%=hM%O)ME_m9iZ2e*uYg ziylc(P1qLUxM+d2GjS!k7AfdpZ1#F#X%~9e90A8EzGWO z9R!7pv1s50zrLi`eT+kvk;}wn2JBm~&45pUDijlpcIZj!eLK=srQNP}#DhAqSJ>u8 zd%)bgg*AY}ibO8|WO~*v9S{Bo6ez=P7OznEj`lKZ87J0m-$sUO-a}S7^DmCnvCNMA zy4N#<3Etp@r{9`nn|J=FIL;&6!Sr8lXSsb@oPTPUc0+US<&>Y;b;k9F${o^Yc{{Hp ziiX+0e6J`>fU2b?#6{|>s!T7No~D|OwrlSD(RK{NRF&4j4=(nt zG&(5BqJeXicsDYh(qFCBr}KpE-Qv`2%YQIw|5&uNqW&4lvx|#hiRbKt3Wqmp1&p67 zz1-;I9MlK8NK_%^Z}-c+q`?F2l-ZH-O10DJ0m1wz56>6>E*GWo{W4Zh+j$R6MB83S z1T7>Vx+fol-aK_5(;eUDP~n+BT^Q-dQZ@b_dMjv=^UtTR3a~WMs?y2u?HvEsckAJB zU~lN1TlZg7nBDCU_IaN^=O1wFVGo3^c`r!20xhnfo4ix_@9h?g^PF%WYgq`LCzzSc zRM0r};ud$?vGZJ*kqVg{-OMYDMqT2k-p(umU4bsz9KD55B`RyO0_t$~lN)v7KlJ|O zlfkop$(fi(Ke)-;`=Z@7`WQG9R3ym0>$_FUmACl0;?*OcWfXRlP~bgzv;9i6GdLlo zD_tTQZ8&GJ1icDefh-)UtZBcB3GLxapV<#*ZH=k>FztYd26|o12=;+2a|?CgR!V+U znDiGTjgIuXv!*|rhrn!v9IokPXBDaa-&vf#2_Jw`XO!GL8IOp=ho+B=1hoj9)~_qd?kVT;5dm&HAl=$7FBqMR@}H|vh@oOKr@c! z?LU_H`^@;s^wBl6z#p6Jvgq5DG;QU3h!I5ZBZHwrB5T#0$IZOlxow$kY{^z8058%I zJ|AivpLpeyg;$*$ZCP{`l~B$iIX96>rvJODMQy^r&Z!Gnn9O3DC*jkeblfrt^#y08P_J+SKUKc{0qWLj&7^X^S@* zfyl4lo8yTW#$G1qM-6)6H`{FpMGY^7j*|8e&k{TP%=nWYm%IdS8+B=L@)Y190VO;2 z%BRY_oH;x*6gSB_@16&qM#S4AC0=3_7uA|)>`3*=jzG+#V|Hcy>(sMP>QEKPhot1P zj!d;&X#sFZ_w>Z4|Kk1!-&F7|3KcGJ{}&5T3UpfZjcjY}O3jyowCsCQ z4wW5-c9Dx_-spS#A9G3z2sQw?LCp`ClRr#7M4@f*#WC5OA9wE}R%g+L;CpRTnJU^wZL$`iOgs}38@7EySn=Oo7tNisnMm7;~E z@w&DC$(2hNAX0fF9GMQGU-*4`FETQ~5>>2dSTU&?8! zkWGX`!;>#2yTnMlWoGg$$mIw^Xt;l9YzP8K?+3gx(SAngW}xQOG=DB}+%{EA?(d}V zX$oOWH!psrlR>Vjz<1)k2N+J{~sQ9Tdi(kmHKVj%mRyDEE_%#?}<+B6dWBlS&)c1~WFc{j+BADImL0{*w=#&jg;g2iL{R&QRcG}WE z7siM7wDCKcm{X~~hJ(wbw`KlY>F%OHix7h5g56(qA&s&Fc@U{^Z=V=Yh!aH;Q1cs4 z+gzOi%N0m~-zSc)s_=+52vCK_U>aFH!1llXcPS+ZN4AjdH-8wF#G4Wc`s|--KagePy2Wo-4nB&c$kJ|F&QTee9iH;HFt*j>KB0(E`=E^poOkuz&AlZp~nu z-9|5hUnm~Hy5U%_8-GZggowyza*x8kp2lj9&4r-D5XIz7{CT-#9J=O{zmwBeHkkd% zxvr-W9ub-fhO>q#VARpN@sI^2iVzb5`EcAH z2z$@ovuA#*%$hZ8)}Ad%=d5OegLc(Iow2*BidVQ=KPKLzRTgNM_<;8fEcIMhU#O-lOp$PaB|$|8wBh9s<1E8xxYm$4`RQgh?;`%`S&nrq=@~`DZ*)8r=G$Y;j$??BFm0Nw}v3EEg zq@nS`A&D=yuKhB|vctT&2U-`__i=VqEhrz2+}gLz zQ^hYOz7}!&@#uj_`=PMFZ=x1edYTU$Ce~3}FK?vZm$);1G97s-mQzPa&9f?utwc#< zgn@9`+a43&1_a|1+75>ryUNjDy;$r`v{uEqQb7K97FT%hzx^jl+aLo0LI9Edu=`o3ZS>?sK*pd8 z4*lz#_g!fCA(1K`g@}7E0|WrCSMg`tkjH)GXtMg$)KKTk&^@^TL$g#t+XCYikq2rW zhAJv%7nk);joz-{jF#5QS9AE)~pzhFNQm;c7 zdsq6C-44RLO=TH)owY+6Nky!-?v-C|Wq}?hfi3&Dwv~uSoZY=2B9F+OWNA!CPu%8U z>_CwoGG{gO{d8z+U}J&JTP&@aTIaPJTyWMuRTYVYEtkxaqn9?rZXzWrPu*o5KcTZ) zbOXpI)Yc#&u(^~%O^aPV(|&HW7R7D)cC-cDnzMuZ{-yalG%QJqZKH=X8lkT#@HAL( z)2i7`$5os=A&v}PKkrTT^jJIqBpNF4L1fO7zwo9_d^;7Yqgm3vO>q>c_N#ku(!v{u z%%(~vmITZgqf{VSts_9=?jakwUb@>?U7QSDXtR8Z*>WPy<>Bg6jz2Zx$)xcPEui+g zk43rSs-qNZN}U*zmHFmLY;O#aJ`d)6oN?@RzIE9zubulL2QiGv-=KgI!}mqqg6|=- zkn?d~%RZe6V^vC%``5@ETZ^a(tM-V}ck^izNg1tbsEGtlo4oN>2r6T4!@9WS3sgQg`vU z^B5e>&(^h4k=QB7%>qF1L949Xlk>alDa^TI#6siipk$7s3JZA7n4-A@-7R>w(MQJVIz+Pv+mBl2vZiUHedOEb-X3Ca7V_d2jCdcxv2xPTWZoQ@m|5I z3Pj5(f|`Ut_4C43Hpt8JU_aIM0Wf}MhAsi|p1-3ACNcz1pBIU5Ru!7NAiJg6V;Q)Z zQ1aQMvW8Be-t!k<#({O+FP%)7_#jzX>w~-wl7RvJtRKmo2$tQ#>(E|B*gPl>&Mpu% zZZ?G&LKE^ez>0wltTk6=c^+;K-?@yN>O_UO+{&!gy&TIiwvn+U0j=NnRxb3?8fqfg z_%gto3D4DGUY1ciN9=r>_X&?I%zkDqx0P`kF%wpLKlZ)YwFy5mPYRh(8Q8rhmH0i{)e<=K89T##77&D+mH39`f| z34ifu={d43mle7whjUErW(UF7EiZT4VHAs|8F<0!x~OZ;HFCs67kBR%@N?OdEaS>v zZ3_+R-B&8W?4?kl)T(4-Z<3Z)2C+de72YN;Vut>0H^RAe3E1Yno#$( zG1_7?H`Oar#)BKwC5ZIFqjtwSG?^rVuG6KHAkZ7nR8(5h1c{4Ur&3zn|22CLg3B(e z>FXw>g4bE|vB+F%MJjT8JT?=bY;>_L8`V0r=%IhwcOTI8bBlu~GUvX!xgoJ@Dt(rg zl{$u236)Iv>FT}?gnA;)EZ1yc(HyFi*R>RmRy1jOiN!D0RXPob6Rq5i6z>l$xMR&x zWE?%RiIc~QRux-p-<%y~QF;p~?k~0_KNa6adm}BBzMFu!1RfvlN7KFsn{Y&0d1&Xk zzCS%b;0ID&w9fKKpO}T3q)MHWV~GaXDR7jVR(c_avzbTc+R@;bHQAzK-E zm$V5;`A1Ilw@j7K!Fllq{?%_5Mg^gvT(G!RIEV1Dv^S;Ku%!9T1&VKIug8# z2(c3>oHpkvQ4mRrCss7X@2zEha~e*`8_+Y_kJ<6p;D?D?(Q|FF{;k%HM0#P+G9Lf?yrdyiuQah z$jq@JKs&GtRvW(K2kF$#hzPoRk&?Glo_i>1dr3ID!{vv,dx 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

<S>ZqC)F245fec)4arrZDQK#YdjEi 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:V?g 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 -- GitLab From a8e771ec97a52d0fbe20675e44c2bee7dd68b0ea Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 11 Dec 2018 12:52:12 +0100 Subject: [PATCH 31/57] [handbook][4_newfoldersetup] cleanup --- doc/handbook/4_newfoldersetup.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/handbook/4_newfoldersetup.tex b/doc/handbook/4_newfoldersetup.tex index eff2a3c3c0..9490c9ef2a 100644 --- a/doc/handbook/4_newfoldersetup.tex +++ b/doc/handbook/4_newfoldersetup.tex @@ -22,6 +22,6 @@ dune_add_test(NAME my_test CMD_ARGS my_test params.input) \end{lstlisting} -Here, we create an exectuable called \texttt{my\_test} from a source file \texttt{mainfile.cc}. +Here, we create an executable called \texttt{my\_test} from a source file \texttt{mainfile.cc}. The name of the test will also be \texttt{my\_test} (has to be unique). The last argument specifies a command - here, we just run the executbable \texttt{my\_test} with an input file \texttt{params.input}. For more advanced uses of -the \texttt{add\_dune\_test} macro, have a look at the \texttt{test} directory. A complete documentation is given \href{https://www.dune-project.org/sphinx/core-2.5/}{here} +the \texttt{add\_dune\_test} macro, have a look at the \texttt{test} directory. A complete documentation is given under \url{https://www.dune-project.org/sphinx/core-2.5/}. -- GitLab From 1dabc4088e14740f53c8fea305e59e866b5344c9 Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 11 Dec 2018 13:05:45 +0100 Subject: [PATCH 32/57] [handbook] remove all mentioning of tutorial --- doc/handbook/2_detailedinstall.tex | 3 +-- doc/handbook/4_parameterfiles.tex | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index e9cc4a1937..7846480f0b 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -194,8 +194,7 @@ to avoid confusing it with the option files which came out of the distribution. \label{quick-start-guide} The previous section showed how to install and compile \Dumux. This section shall give a very brief introduction how to run a first test application and how -to visualize the first output files. A more detailed explanations can be found in -the tutorials in the following chapter.\\ +to visualize the first output files.\\ All executables are compiled in the \texttt{build} subdirectories of \Dumux. If not given differently in the input files, this is \texttt{build-cmake} as default. diff --git a/doc/handbook/4_parameterfiles.tex b/doc/handbook/4_parameterfiles.tex index fd7e828904..9ea4c4f271 100644 --- a/doc/handbook/4_parameterfiles.tex +++ b/doc/handbook/4_parameterfiles.tex @@ -93,7 +93,3 @@ File = file0.dgf [ Model1.Grid ] File = file1.dgf \end{lstlisting} - - -For further details, please have a look at the \Dumux tutorial, especially exercise 1. - -- GitLab From 74cc4fa90f5e78a5d9d61d9387f8f0f83dbe7b3e Mon Sep 17 00:00:00 2001 From: melaniel Date: Wed, 12 Dec 2018 17:49:28 +0100 Subject: [PATCH 33/57] [handbook][cleanup] Replace \ by \par. --- doc/handbook/2_detailedinstall.tex | 4 ++-- doc/handbook/4_developingdumux.tex | 2 +- doc/handbook/4_externaltools.tex | 2 +- doc/handbook/4_parameterfiles.tex | 2 +- doc/handbook/5_spatialdiscretizations.tex | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/doc/handbook/2_detailedinstall.tex b/doc/handbook/2_detailedinstall.tex index 7846480f0b..a4b8286eeb 100644 --- a/doc/handbook/2_detailedinstall.tex +++ b/doc/handbook/2_detailedinstall.tex @@ -194,7 +194,7 @@ to avoid confusing it with the option files which came out of the distribution. \label{quick-start-guide} The previous section showed how to install and compile \Dumux. This section shall give a very brief introduction how to run a first test application and how -to visualize the first output files.\\ +to visualize the first output files.\par All executables are compiled in the \texttt{build} subdirectories of \Dumux. If not given differently in the input files, this is \texttt{build-cmake} as default. @@ -203,7 +203,7 @@ If not given differently in the input files, this is \texttt{build-cmake} as def folders can be found. Let us consider as example\\ \texttt{porousmediumflow/2p/implicit/incompressible/test{\_}2p{\_}incompressible{\_}tpfa}. \item Enter the folder \texttt{porousmediumflow/2p/implicit/incompressible}.\\ Type \texttt{make test{\_}2p{\_}incompressible{\_}tpfa} - in order to compile the application\\ \texttt{test{\_}2p{\_}incompressible{\_}tpfa}. To run the simulation, + in order to compile the application\\\texttt{test{\_}2p{\_}incompressible{\_}tpfa}. To run the simulation, type \texttt{./test{\_}2p{\_}incompressible{\_}tpfa params.input} into the console. The added \texttt{params.input} specifies that all diff --git a/doc/handbook/4_developingdumux.tex b/doc/handbook/4_developingdumux.tex index 8739427711..c6ee4c559b 100644 --- a/doc/handbook/4_developingdumux.tex +++ b/doc/handbook/4_developingdumux.tex @@ -41,7 +41,7 @@ more information. The options needed to be specified for that are provided using option files like \texttt{debug.opts} and \texttt{optim.opts}. These two compile \Dune and \Dumux either for debugging or for fast simulation. Programs compiled with optimization options -can lead to a speedup of factor up to ten!\\ +can lead to a speedup of factor up to ten!\par In contrast programs that are compiled with optimization can hardly be debugged. You can modify the files and change the compiler, the name of the build director, add third-party dependencies, add additional compiler flags, ... . diff --git a/doc/handbook/4_externaltools.tex b/doc/handbook/4_externaltools.tex index 17df2758fc..937b084262 100644 --- a/doc/handbook/4_externaltools.tex +++ b/doc/handbook/4_externaltools.tex @@ -46,7 +46,7 @@ Secondly you have to define an instance of the class GnuplotInterface (e.g. call Dumux::GnuplotInterface gnuplot_; \end{lstlisting} -Usually with the ploting is dealt within a function \texttt{postTimeStep}, which firstly extracts the variables (in the exapmle below \texttt{x\_} and \texttt{y\_}) which shall be plotted. The actual plotting is done using the method of the gnuplot interface.\\ +Usually with the ploting is dealt within a function \texttt{postTimeStep}, which firstly extracts the variables (in the exapmle below \texttt{x\_} and \texttt{y\_}) which shall be plotted. The actual plotting is done using the method of the gnuplot interface. Example: \begin{lstlisting}[style=DumuxCode] diff --git a/doc/handbook/4_parameterfiles.tex b/doc/handbook/4_parameterfiles.tex index 9ea4c4f271..7bddd051ed 100644 --- a/doc/handbook/4_parameterfiles.tex +++ b/doc/handbook/4_parameterfiles.tex @@ -83,7 +83,7 @@ auto modelParamGroup1 = "Model1"; static const TYPE paramname1 = getParamFromGroup(modelParamGroup1, "GROUPNAME.PARAMNAME"); \end{lstlisting} -The \texttt{FVProblem} class provides a convenience function \texttt{paramGroup()}.\\ +The \texttt{FVProblem} class provides a convenience function \texttt{paramGroup()}. The parameters can then be specified in the input file: diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index 2e39887f34..77b93ac2ea 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -192,9 +192,9 @@ volume faces. This is a two point flux approximation since the flux between the element/control volume centers $i$ and $j$ is calculated only with information from these two points. In contrast the box method uses a multi-point flux approximation where all nodes of the -element influence the flux between two specific nodes. \\ +element influence the flux between two specific nodes. \par Neumann boundary conditions are applied at the boundary control volume faces -and Dirichlet boundary conditions at the boundary control volumes. \\ +and Dirichlet boundary conditions at the boundary control volumes. \par The cell centered finite volume method is robust and mass conservative but should only be applied for structured grids (the control volume face normal vector ($n_{ij}$) should be parallel to the @@ -215,7 +215,7 @@ volume centers). In the two-dimensional free-flow models, the continuity equation is discretized using the black control volumes, the $x$-component of the momentum equation is discretized using the blue control volumes and the $y$-component is discretized using the red control volumes. In three dimensions this works analogously.} \end{figure} -The staggered-grid or marker-and-cell method uses a finite volume method with different control volumes for different equations. There are control volumes centered around the scalar primary variables. They correspond to the finite volume mesh. Additionally, there are control volumes located around the $x,y$ and (in 3D) $z$ velocity components which are shifted in the $x,y$ and $z$ direction, such that the velocity components are located on the edges of the cell-centered finite volume mesh (see Figure~\ref{pc:staggered}). As for the cell-centered method, the fluxes are evaluated at the edges of each control volume with a two-point flux approximation, cf. \ref{cc}.\\ +The staggered-grid or marker-and-cell method uses a finite volume method with different control volumes for different equations. There are control volumes centered around the scalar primary variables. They correspond to the finite volume mesh. Additionally, there are control volumes located around the $x,y$ and (in 3D) $z$ velocity components which are shifted in the $x,y$ and $z$ direction, such that the velocity components are located on the edges of the cell-centered finite volume mesh (see Figure~\ref{pc:staggered}). As for the cell-centered method, the fluxes are evaluated at the edges of each control volume with a two-point flux approximation, cf. \ref{cc}.\par The staggered-grid method is robust, mass conservative, and free of pressure oscillations but should, as the cell-centered TPFA method, only be applied for structured grids. Currently, all free-flow models in \Dumux use the staggered-grid discretization. -- GitLab From 2887b292b2e0e0778c578d51e0bfebecac21873d Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Thu, 13 Dec 2018 11:32:48 +0100 Subject: [PATCH 34/57] [handbook] Introduce to 3.0 and add link to wiki --- doc/handbook/1_introduction.tex | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/doc/handbook/1_introduction.tex b/doc/handbook/1_introduction.tex index c07a5787d6..370786c3f5 100644 --- a/doc/handbook/1_introduction.tex +++ b/doc/handbook/1_introduction.tex @@ -74,3 +74,17 @@ spatial and temporal discretization schemes as well as nonlinear solvers, to general concepts for model coupling. Moreover, \Dumux includes ready to use numerical models and a few example applications. +This is the handbook to a new major version update of \Dumux: version 3.0. +The release contains considerable improvements and many new features compared to the 2.x versions. +Due to the major update, backwards compatibility with the last release 2.12 cannot be assured. +To facilitate the transition for our users, we have created a +git wiki entry describing how to update programs from version 2.12 to version 3.0. +It is available online: +\url{https://git.iws.uni-stuttgart.de/dumux-repositories/dumux/wikis/Updating-programs-from-version-2.12-to-version-3.0}. +The guide leads in detail through the interface changes from 2.12 to 3.0, +concerning the \texttt{Problem} class, the \texttt{SpatialParams} class, +the \texttt{Parameters} and \texttt{Properties}, i.e. the main user interface. +Starting with version 3.0.0, all minor +version updates will certainly be backward compatible again with at least the last minor version. +We highly recommend all our users to transition with us to \Dumux-3.0 +and wish everyone a brand-new and exciting simulation experience. -- GitLab From 8f4d1922554a0fc9410584b17f3666255bfc544a Mon Sep 17 00:00:00 2001 From: Felix Weinhardt Date: Mon, 17 Dec 2018 14:37:22 +0100 Subject: [PATCH 35/57] [temporal discretization] changed non linear system to system of equations --- doc/handbook/5_models.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/handbook/5_models.tex b/doc/handbook/5_models.tex index 5d93ea80e9..cd165e3bef 100644 --- a/doc/handbook/5_models.tex +++ b/doc/handbook/5_models.tex @@ -241,7 +241,7 @@ whereas the implicit Euler method is described as Once the solution $u_k$ at time $t_k$ is known, it is straightforward to determine $m(u_{k+1})$ from \eqref{eq:expliciteuler}, while attempting to do the same based on \eqref{eq:impliciteuler} -involves the solution of a nonlinear system. +involves the solution of system of equations. On the other hand, the explicit method \eqref{eq:expliciteuler} is stable only if the time step size $\Delta t_{k+1}$ is below a certain limit that depends on the specific balance equation, whereas the implicit method \eqref{eq:impliciteuler} -- GitLab From 68b884dbdca00819eed17c5686de1db5a33fa220 Mon Sep 17 00:00:00 2001 From: Felix Weinhardt Date: Mon, 17 Dec 2018 14:47:22 +0100 Subject: [PATCH 36/57] [temporal discretization] added "a" --- doc/handbook/5_models.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/handbook/5_models.tex b/doc/handbook/5_models.tex index cd165e3bef..6da2bedb66 100644 --- a/doc/handbook/5_models.tex +++ b/doc/handbook/5_models.tex @@ -241,7 +241,7 @@ whereas the implicit Euler method is described as Once the solution $u_k$ at time $t_k$ is known, it is straightforward to determine $m(u_{k+1})$ from \eqref{eq:expliciteuler}, while attempting to do the same based on \eqref{eq:impliciteuler} -involves the solution of system of equations. +involves the solution of a system of equations. On the other hand, the explicit method \eqref{eq:expliciteuler} is stable only if the time step size $\Delta t_{k+1}$ is below a certain limit that depends on the specific balance equation, whereas the implicit method \eqref{eq:impliciteuler} -- GitLab From 8a77e5e4b052692399af9f9ef2dd2e1e3983e6d6 Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Mon, 17 Dec 2018 17:34:08 +0100 Subject: [PATCH 37/57] [handbook][gnuplot] cleanup --- doc/handbook/4_externaltools.tex | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/doc/handbook/4_externaltools.tex b/doc/handbook/4_externaltools.tex index 937b084262..a251138ef7 100644 --- a/doc/handbook/4_externaltools.tex +++ b/doc/handbook/4_externaltools.tex @@ -34,36 +34,37 @@ The basic Git commands are: A gnuplot interface is available to plot or visualize results during a simulation run. This is achieved with the help of the class provided in \texttt{io/gnuplotinterface.hh}. -To use the gnuplot interface you have to make some modifications in your problem file. +To use the gnuplot interface you have to make some modifications in your file, e.g., your main file. -First you have to include the corresponding header file for the gnuplot interface. +First, you have to include the corresponding header file for the gnuplot interface. \begin{lstlisting}[style=DumuxCode] #include gnuplot_; +Dumux::GnuplotInterface gnuplot; \end{lstlisting} -Usually with the ploting is dealt within a function \texttt{postTimeStep}, which firstly extracts the variables (in the exapmle below \texttt{x\_} and \texttt{y\_}) which shall be plotted. The actual plotting is done using the method of the gnuplot interface. +Extract the variables you want to plot (in the example below \texttt{x} and \texttt{y}), e.g., after the time loop. +The actual plotting is done using the method of the gnuplot interface. Example: \begin{lstlisting}[style=DumuxCode] -gnuplot_.resetPlot(); // reset the plot -gnuplot_.setXRange(0.0, 72000.0); // specify xmin and xmax -gnuplot_.setYRange(0.0, 1.0); // specify ymin and ymax -gnuplot_.setXlabel("time [s]"); // set xlabel -gnuplot_.setYlabel("mole fraction mol/mol"); // set ylabel +gnuplot.resetPlot(); // reset the plot +gnuplot.setXRange(0.0, 72000.0); // specify xmin and xmax +gnuplot.setYRange(0.0, 1.0); // specify ymin and ymax +gnuplot.setXlabel("time [s]"); // set xlabel +gnuplot.setYlabel("mole fraction mol/mol"); // set ylabel // set x-values, y-values, the name of the data file and the Gnupot options -gnuplot_.addDataSetToPlot(x_, y_, "N2_left.dat", options); +gnuplot.addDataSetToPlot(x, y, "N2_left.dat", options); -gnuplot_.plot("mole_fraction_N2"); // set the name of the output file +gnuplot.plot("mole_fraction_N2"); // set the name of the output file \end{lstlisting} -Its also possible to add several data sets to one plot by calling \texttt{addDataSetToPlot()} more than once. -For more information have a look into a test including the gluplot interface header file or +It is also possible to add several data sets to one plot by calling \texttt{addDataSetToPlot()} more than once. +For more information have a look into a test including the gnuplot interface header file or the header file itself (\texttt{dumux/io/gnuplotinterface.hh}). -- GitLab From c0f0eec5b8135549a342d03ac6b49409ad47c1b0 Mon Sep 17 00:00:00 2001 From: Beatrix Becker Date: Tue, 18 Dec 2018 09:30:41 +0100 Subject: [PATCH 38/57] [handbook][io] cleanup gnuplot --- doc/handbook/4_externaltools.tex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/handbook/4_externaltools.tex b/doc/handbook/4_externaltools.tex index a251138ef7..8085a37e0d 100644 --- a/doc/handbook/4_externaltools.tex +++ b/doc/handbook/4_externaltools.tex @@ -46,10 +46,10 @@ Second, you have to define an instance of the class GnuplotInterface (e.g. calle Dumux::GnuplotInterface gnuplot; \end{lstlisting} -Extract the variables you want to plot (in the example below \texttt{x} and \texttt{y}), e.g., after the time loop. -The actual plotting is done using the method of the gnuplot interface. +As an example, to plot the mole fraction of nitrogen (\texttt{y}) over time (\texttt{x}), +extract the variables after each time step in the time loop. +The actual plotting is done using the method of the gnuplot interface: -Example: \begin{lstlisting}[style=DumuxCode] gnuplot.resetPlot(); // reset the plot gnuplot.setXRange(0.0, 72000.0); // specify xmin and xmax @@ -57,8 +57,8 @@ gnuplot.setYRange(0.0, 1.0); // specify ymin and ymax gnuplot.setXlabel("time [s]"); // set xlabel gnuplot.setYlabel("mole fraction mol/mol"); // set ylabel -// set x-values, y-values, the name of the data file and the Gnupot options -gnuplot.addDataSetToPlot(x, y, "N2_left.dat", options); +// set x-values, y-values, the name of the data file and the Gnuplot options +gnuplot.addDataSetToPlot(x, y, "N2.dat", options); gnuplot.plot("mole_fraction_N2"); // set the name of the output file \end{lstlisting} -- GitLab From 9541a0b2f93815a7f4dd8833f8363bafb5b5d3fb Mon Sep 17 00:00:00 2001 From: Martin Schneider Date: Wed, 31 Oct 2018 17:36:45 +0100 Subject: [PATCH 39/57] [handbook] Update box description --- doc/handbook/5_spatialdiscretizations.tex | 78 +++++++++++------------ 1 file changed, 37 insertions(+), 41 deletions(-) diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index 77b93ac2ea..82ffd2673e 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -67,30 +67,30 @@ this means: \begin{minipage}[b]{0.47\textwidth} \begin{equation} \label{eq:p} - \tilde p = \sum_i N_i \hat{p_i} + \tilde p = \sum_i N_i \hat{p}_i \end{equation} \begin{equation} \label{eq:v} - \tilde{\mathbf v} = \sum_i N_i \hat{\mathbf v} + \tilde{\mathbf v} = \sum_i N_i \hat{\mathbf v}_i \end{equation} \begin{equation} \label{eq:x} - \tilde x^\kappa = \sum_i N_i \hat x^\kappa + \tilde x^\kappa = \sum_i N_i \hat x_i^\kappa \end{equation} \end{minipage} \hfill \begin{minipage}[b]{0.47\textwidth} \begin{equation} \label{eq:dp} - \nabla \tilde p = \sum_i \nabla N_i \hat{p_i} + \nabla \tilde p = \sum_i \nabla N_i \hat{p}_i \end{equation} \begin{equation} \label{eq:dv} - \nabla \tilde{\mathbf v} = \sum_i \nabla N_i \hat{\mathbf v} + \nabla \tilde{\mathbf v} = \sum_i \nabla N_i \hat{\mathbf v}_i \end{equation} \begin{equation} \label{eq:dx} - \nabla \tilde x^\kappa = \sum_i \nabla N_i \hat x^\kappa . + \nabla \tilde x^\kappa = \sum_i \nabla N_i \hat x_i^\kappa . \end{equation} \end{minipage} @@ -113,58 +113,54 @@ yields the following equation: \begin{equation} \int_\Omega W_j \frac{\partial \tilde u}{\partial t} \: dx + \int_\Omega W_j \cdot \left[ \nabla \cdot F(\tilde u) \right] \: dx - \int_\Omega W_j - \cdot q \: dx = \int_\Omega W_j \cdot \varepsilon \: dx \: \overset {!}{=} \: 0 . + \cdot q \: dx = \int_\Omega W_j \cdot \varepsilon \: dx \: \overset {!}{=} \: 0. +\label{eq:weightedResidual} \end{equation} -Then, the chain rule and the \textsc{Green-Gaussian} integral theorem are applied. +For standard Galerkin schemes, the weighting functions $W_j$ are chosen the same as the ansatz functions $N_j$. However, this does not yield a locally mass-conservative scheme. +Therefore, for the Box method, the weighting functions $W_j$ are chosen as +the piecewise constant functions over a +control volume box $B_j$, i.e. \begin{equation} - \int_\Omega W_j \frac{\partial \sum_i N_i \hat u_i}{\partial t} \: dx - + \int_{\partial\Omega} \left[ W_j \cdot F(\tilde u)\right] - \cdot \mathbf n \: d\varGamma_\Omega + \int_\Omega \nabla W_j \cdot F(\tilde u) - \: dx - \int_\Omega W_j \cdot q \: dx = 0 -\end{equation} - -A mass lumping technique is applied by assuming that the storage capacity is -reduced to the nodes. This means that the integrals $M_{i,j} = \int_\Omega W_j \: N_i \: dx$ -are replaced by the mass lumping term $M^{lump}_{i,j}$ which is defined as: - -\begin{equation} - M^{lump}_{i,j} =\begin{cases} \int_\Omega W_j \: dx = \int_\Omega N_i \: dx = V_i &i = j\\ - 0 &i \neq j\\ + W_j(x) = \begin{cases} + 1 &x \in B_j \\ + 0 &x \notin B_j.\\ \end{cases} +\label{eq:weightingFunctions} \end{equation} -where $V_i$ is the volume of the FV box $B_i$ associated with node $i$. -The application of this assumption in combination with -$\int_\Omega W_j \:q \: dx = V_i \: q$ yields +Thus, the Box method is a Petrov-Galerkin scheme, where the weighting functions do not belong to the same function space than the ansatz functions. +Inserting definition \eqref{eq:weightingFunctions} into equation \eqref{eq:weightedResidual} and using the \textsc{Green-Gaussian} integral theorem results in \begin{equation} - V_i \frac{\partial \hat u_i}{\partial t} - + \int_{\partial\Omega} \left[ W_j \cdot F(\tilde u)\right] - \cdot \mathbf n \: d\varGamma_\Omega + \int_\Omega \nabla W_j \cdot F(\tilde u) - \: dx- V_i \cdot q = 0 \, . + \int_{B_j} \frac{\partial \tilde u}{\partial t} \: dx + \int_{\partial B_j} F(\tilde u) \cdot \mathbf n \: d\varGamma_{B_j} - \int_{B_j} q \: dx \overset {!}{=} \: 0, +\label{eq:BoxMassBlance} \end{equation} +which has to hold for every box $B_j$. -Defining the weighting function $W_j$ to be piecewisely constant over a -control volume box $B_i$ - +The first term in equation \eqref{eq:BoxMassBlance} can be written as \begin{equation} - W_j(x) = \begin{cases} - 1 &x \in B_i \\ - 0 &x \notin B_i\\ +\int_{B_j} \frac{\partial \tilde u}{\partial t} \: dx = \frac{d}{dt} \int_{B_j} \sum_i \hat u_i N_i \: dx = \sum_i \frac{\partial \hat u_i}{\partial t} \int_{B_j} N_i \: dx. +\end{equation} +Here, a mass lumping technique is applied by assuming that the storage capacity is +reduced to the nodes. This means that the integrals $M_{i,j} = \int_{B_j} N_i \: dx$ +are replaced by some mass lumped terms $M^{lump}_{i,j}$ which are defined as +\begin{equation} + M^{lump}_{i,j} =\begin{cases} V_i &i = j\\ + 0 &i \neq j.\\ \end{cases} \end{equation} - -causes $\nabla W_j = 0$: +where $V_i$ is the volume of the FV box $B_i$ associated with node $i$. +The application of this assumption yields \begin{equation} \label{eq:disc1} V_i \frac{\partial \hat u_i}{\partial t} - + \int_{\partial B_i} \left[ W_j \cdot F(\tilde u)\right] - \cdot \mathbf n \; d{\varGamma}_{B_i} - V_i \cdot q = 0 . + + \int_{\partial B_j} F(\tilde u) \cdot \mathbf n \: d\varGamma_{B_j} - Q_i = 0, \end{equation} +where $Q_i$ is an approximation (using some quadrature rule) of the integrated source/sink term $\int_{B_j} q \: dx$. -The consideration of the time discretization and inserting $W_j = 1$ finally +Using an implicit Euler time discretization finally leads to the discretized form which will be applied to the mathematical flow and transport equations: @@ -172,7 +168,7 @@ flow and transport equations: \label{eq:discfin} V_i \frac{\hat u_i^{n+1} - \hat u_i^{n}}{\Delta t} + \int_{\partial B_i} F(\tilde u^{n+1}) \cdot \mathbf n - \; d{\varGamma}_{B_i} - V_i \: q^{n+1} \: = 0 + \; d{\varGamma}_{B_i} - Q_i^{n+1} \: = 0. \end{equation} \subsection{Cell Centered Finite Volume Method -- A Short Introduction}\label{cc} @@ -183,7 +179,7 @@ flow and transport equations: \caption{\label{pc:cc} Discretization of the cell centered finite volume method} \end{figure} -The cell centered finite volume method uses the elements of the grid as control volumes. +The cell-centered finite volume method uses the elements of the grid as control volumes. For each control volume all discrete values are determined at the element/control volume center (see Figure~\ref{pc:cc}). The mass or energy fluxes are evaluated at the integration points ($x_{ij}$), -- GitLab From eb9ea429d041ded0bf14e9b08222381ec31cab86 Mon Sep 17 00:00:00 2001 From: Martin Schneider Date: Tue, 11 Dec 2018 17:39:30 +0100 Subject: [PATCH 40/57] [handbook][disc] Correction of indices used for the box method --- doc/handbook/5_spatialdiscretizations.tex | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index 82ffd2673e..c772f2f1b2 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -146,19 +146,19 @@ Here, a mass lumping technique is applied by assuming that the storage capacity reduced to the nodes. This means that the integrals $M_{i,j} = \int_{B_j} N_i \: dx$ are replaced by some mass lumped terms $M^{lump}_{i,j}$ which are defined as \begin{equation} - M^{lump}_{i,j} =\begin{cases} V_i &i = j\\ - 0 &i \neq j.\\ + M^{lump}_{i,j} =\begin{cases} V_j &j = i\\ + 0 &j \neq i,\\ \end{cases} \end{equation} -where $V_i$ is the volume of the FV box $B_i$ associated with node $i$. +where $V_j$ is the volume of the FV box $B_j$ associated with node $j$. The application of this assumption yields \begin{equation} \label{eq:disc1} - V_i \frac{\partial \hat u_i}{\partial t} - + \int_{\partial B_j} F(\tilde u) \cdot \mathbf n \: d\varGamma_{B_j} - Q_i = 0, + V_j \frac{\partial \hat u_j}{\partial t} + + \int_{\partial B_j} F(\tilde u) \cdot \mathbf n \: d\varGamma_{B_j} - Q_j = 0, \end{equation} -where $Q_i$ is an approximation (using some quadrature rule) of the integrated source/sink term $\int_{B_j} q \: dx$. +where $Q_j$ is an approximation (using some quadrature rule) of the integrated source/sink term $\int_{B_j} q \: dx$. Using an implicit Euler time discretization finally leads to the discretized form which will be applied to the mathematical @@ -166,10 +166,11 @@ flow and transport equations: \begin{equation} \label{eq:discfin} - V_i \frac{\hat u_i^{n+1} - \hat u_i^{n}}{\Delta t} - + \int_{\partial B_i} F(\tilde u^{n+1}) \cdot \mathbf n - \; d{\varGamma}_{B_i} - Q_i^{n+1} \: = 0. + V_j \frac{\hat u_j^{n+1} - \hat u_j^{n}}{\Delta t} + + \int_{\partial B_j} F(\tilde u^{n+1}) \cdot \mathbf n + \; d{\varGamma}_{B_j} - Q_j^{n+1} \: = 0. \end{equation} +Equation \eqref{eq:discfin} has to be fulfilled for each box $B_j$. \subsection{Cell Centered Finite Volume Method -- A Short Introduction}\label{cc} -- GitLab From aaf245dc1461c84ca1c9e644699821d0b9ebe2f1 Mon Sep 17 00:00:00 2001 From: Martin Schneider Date: Wed, 12 Dec 2018 11:37:17 +0100 Subject: [PATCH 41/57] [handbook][disc] Use mpfa stuff from Dennis --- doc/handbook/5_spatialdiscretizations.tex | 130 +- doc/handbook/SVG/mpfa_iv.svg | 1754 +++++++++++++++++++++ 2 files changed, 1881 insertions(+), 3 deletions(-) create mode 100644 doc/handbook/SVG/mpfa_iv.svg diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index c772f2f1b2..c0688d4447 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -172,7 +172,7 @@ flow and transport equations: \end{equation} Equation \eqref{eq:discfin} has to be fulfilled for each box $B_j$. -\subsection{Cell Centered Finite Volume Method -- A Short Introduction}\label{cc} +\subsection{Cell Centered Finite Volume Methods -- A Short Introduction}\label{cc} \begin{figure} [ht] \centering @@ -198,8 +198,132 @@ should only be applied for structured grids direction of the gradient between the two element/control volume centers). -% \subsubsection{MPFA}\label{cc_mpfa} -% TODO +We consider a domain $\Omega \in \mathbb{R}^d$, $d \in \{ 2, 3 \}$ with boundary $\Gamma = \bar{\Omega} / \Omega$ and the following elliptic model problem: + +\begin{equation} + \begin{aligned} + \nabla \cdot \left( - \mathbf{\Lambda} \nabla u \right) &= q &&\mathrm{in} \, \Omega \\ + \left( - \mathbf{\Lambda} \nabla u \right) \cdot \mathbf{n} &= v_N &&\mathrm{on} \, \Gamma_N \\ + u &= u_D &&\mathrm{on} \, \Gamma_D. + \label{eq:elliptic} + \end{aligned} +\end{equation} + +Here, $\mathbf{\Lambda} = \mathbf{\Lambda}(\mathbf{x}, \mathbf{u})$ is a symmetric and positive definite tensor of second rank, $u = u (\mathbf{x})$ is unknown and $q = q(\mathbf{x}, \mathbf{u})$ is a source/sink. For the derivation of the finite-volume formulation we integrate the first equation of \eqref{eq:elliptic} over $\Omega$ and apply the Gauss divergence theorem: + +\begin{equation} + \int_{\Gamma} \left( - \mathbf{\Lambda} \nabla u \right) \cdot \mathbf{n} \mathrm{d} \Gamma = \int_\Omega q \mathrm{d}\Omega. + \label{eq:ellipticIntegrated} +\end{equation} + +We denote by $\mathcal{M}$ the mesh that results from the division of the domain $\Omega$ into $n_e$ control volumes $K_i$. Each $K_i$ is a polygonal open set and $\mathring{K_i} \mathring{\cap K_j} = \emptyset, \forall{i \neq j}$ and $\Omega = \cup_i^{n_e} K_i$. We then enforce equation \eqref{eq:ellipticIntegrated} to be fulfilled in each control volume, which leads to + +\begin{equation} + \sum_{\sigma \in K} F_{K, \sigma} = Q_K, \forall_{K \in \mathcal{M}} +\end{equation} + +where $F_{K, \sigma} \approx \int_{\sigma} \left( - \mathbf{\Lambda} \nabla u \right) \cdot \mathbf{n} \mathrm{d} \Gamma$ is the discrete flux through a face $\sigma$ of cell $K$ and $Q_k = \int_K q \mathrm{d}x$ is the integrated source/sink term. + +\subsubsection{TPFA}\label{cc_tpfa} + + + +\subsubsection{MPFA}\label{cc_mpfa} +Expressions for the face fluxes $F_{K, \sigma}$ are usually obtained by introducing intermediate face unknowns $\bar{u}_\sigma$ in addition to the cell unknowns $u_K$ and enforcing the physically motivated continuity of fluxes and continuity of the solution across the faces. For a face $\sigma$ between the two polygons $K$ and $L$ these conditions read: + +\begin{equation} + \begin{aligned} + &F_{K, \sigma} + F_{L, \sigma} = 0 \\ + &\bar{u}_{\sigma, K} = \bar{u}_{\sigma, L} = \bar{u}_{\sigma}. + \label{eq:sigmaConditions} + \end{aligned} +\end{equation} + +Using these conditions the intermediate face unknowns $\bar{u}_\sigma$ can be eliminated and the fluxes are expressed as a function of the cell unknowns $u_k$ and associated transmissibilities $t_{\sigma, k}$: + +\begin{equation} + F_{\sigma} = \sum_{k \in \mathcal{S}_\sigma} t_{\sigma, k} u_{k}. + \label{eq:FVFluxExpression} +\end{equation} + +%\begin{figure}[t] +% \hspace{-15mm} +% \def\svgwidth{500pt} +% \input{pics/interactionregion.pdf_tex} +% \caption{Interaction region for the Mpfa-o method. The graphic on the right illustrates %how the sub-control volume $m^v_2$ and face $\sigma^v_2$ are embedded in cell $K_2$. Note %that the face stencils for all sub-control volume faces in the depicted interaction region %are $\mathcal{S}_{\sigma^v_i} = \{ 1, .., 7 \}$.} +% \label{fig:interactionRegion_mpfa} +%\end{figure} + +Here, $\mathcal{S}_\sigma$ is the face stencil. The main difference between the various finite-volume schemes available is the assembly of the face fluxes, i.e.\ the computation of the $t_{\sigma, k}$ and the size of $\mathcal{S}_\sigma$. The standard scheme used in industrial codes is the two-point flux approximation (tpfa), which is computationally very efficient, but leads to inconsistent fluxes on general meshes. We cannot assure certain mesh properties as we want to consider meshes being constrained to arbitrary lower-dimensional fracture entities. Therefore, the method presented in this work is based on a multi-point flux approximation method (Mpfa-o method), which was first introduced in \citet{Aavatsmark2002}. In this scheme, a dual grid is created by connecting the barycenters of the cells with the barycenters of the faces ($d=2$) or the barycenters of the faces and edges ($d=3$). This divides each cell into sub-control volumes $m^v_K$ and each face into sub-control volume faces $\sigma^v$. The continuity conditions \eqref{eq:sigmaConditions} are now imposed on the $\sigma^v$ locally within an interaction region, which consists of sub-cells and sub-control volume faces sharing a common vertex (see fig. \ref{fig:interactionRegion_mpfa}). We allow for piecewise constant $\mathbf{\Lambda}$ (per cell) and construct discrete gradients $\nabla_K^v u$ (per sub-control volume), which enables us to write the discrete flux across $\sigma^v_1$ from cell $1$ as follows: + +\begin{equation} + F_{1, \sigma^v_1} = - |\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_1 \nabla_1^v u. + \label{eq:discreteFlux} +\end{equation} + +We use the definition for the sub-control volume gradient given in \citet{Aavatsmark2002}: + +\begin{equation} + \nabla_1^v u = \frac{1}{T_1} \boldsymbol{\nu}_{11} (\bar{u}_{\sigma^v_1} - u_1) + + \frac{1}{T_1} \boldsymbol{\nu}_{12} (\bar{u}_{\sigma^v_7} - u_1), +\end{equation} + +which uses the relations + +\begin{equation} + \begin{aligned} + &\boldsymbol{\nu}_{11} = \mathbf{R} \mathbf{x}_{12}, \\ + &\boldsymbol{\nu}_{12} = - \mathbf{R} \mathbf{x}_{11}, \\ + &T_1 = \| \mathbf{x}_{12} \mathbf{R} \mathbf{x}_{11} \|, + \end{aligned} +\end{equation} + +where $\mathbf{R} = \left( {\begin{array}{cc} + 0 & 1 \\ + -1 & 0 + \end{array} } \right)$. Inserting this into equation \eqref{eq:discreteFlux} gives + +\begin{equation} + F_{1, \sigma^v_1} = - \frac{|\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_1 \boldsymbol{\nu}_{11}}{T_1} (\bar{u}_{\sigma^v_1} - u_1) - + \frac{|\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_1 \boldsymbol{\nu}_{12}}{T_1} (\bar{u}_{\sigma^v_7} - u_1). +\end{equation} + +We now introduce the coefficients $\omega^k_{j, \sigma_i^v} = - \frac{|\sigma^v_i| \mathbf{n}_{\sigma^v_i}^T \mathbf{\Lambda}_j \boldsymbol{\nu}_{jk}}{T_j}$, where $j$ and $i$ are the local indices of a sub-control volume and sub-control volume face within the interaction region and $k$ ($1 \leq k \leq d$) is the local coordinate direction in the sub-control volume. This leads to the following general expression for a sub-control volume face flux (here shown for $d = 2$) + +\begin{equation} + F_{j, \sigma^v_i} = \left( \omega^1_{j, \sigma^v_i} \hspace{2mm} \omega^2_{j, \sigma^v_i} \right)^T \left( {\begin{array}{c} + \bar{u}_{\sigma^v_{\varphi(j, 1)}} - u_j \\ + \bar{u}_{\sigma^v_{\varphi(j, 2)}} - u_j + \end{array} } \right), +\end{equation} + +where we introduced the surjective function $\varphi: (j, k) \rightarrow i$, which maps to each pair of local sub-control volume index and coordinate direction the local index of the corresponding sub-control volume face. The fluxes for all sub-control volume faces within an interaction region can be written in matrix form as a function of the $u_j$ and $\bar{u}^v_{\sigma^v_i}$: + +\begin{equation} + \mathbf{f} = \mathbf{C}^{7 \times 7} \mathbf{\bar{u}} + \mathbf{D}^{7 \times 7} \mathbf{u}. + \label{eq:fluxesInInteractionVolume} +\end{equation} + +The continuity conditions \eqref{eq:sigmaConditions} are enforced on one point per sub-control volume face, which can be defined anywhere between the center of the face of the primal grid and the vertex position, parameterized by $q$ ($0 \leq q < 1$, see fig. \ref{fig:interactionRegion_mpfa}). This gives rise to one equation per face, which in matrix form reads + +\begin{equation} + \mathbf{A}^{7 \times 7} \mathbf{\bar{u}} = \mathbf{B}^{7 \times 7} \mathbf{u} + \label{eq:localSystem} +\end{equation} + +and leads to the following expression for the sub-control volume face fluxes as a function of only the cell unknowns $\mathbf{u}$: + +\begin{equation} + \mathbf{f} = \mathbf{C}^{7 \times 7} \mathbf{\bar{u}} + \mathbf{D}^{7 \times 7} \mathbf{u} \ + = \left[ \mathbf{C}^{7 \times 7} \left( \mathbf{A}^{7 \times 7} \right)^{-1} \mathbf{B}^{7 \times 7} + \mathbf{D}^{7 \times 7} \right] \mathbf{u} = \mathbf{T}^{7 \times 7} \mathbf{u}. + \label{eq:fluxExpression} +\end{equation} + +In the above equation \eqref{eq:fluxExpression} the rows of the system are the resulting flux expressions $F_{\sigma^v_i} = \sum_{k = 1}^7 t_{\sigma^v_i, k} u_{k}$ for the sub-control volume faces within the interaction region, where the matrix $\mathbf{T}$ contains the corresponding transmissibilities. The overall flux across a face $\sigma$ of the primal grid is the sum over all its embedded sub-control volume faces: + +\begin{equation} + F_{\sigma} = \sum_{\sigma^v \in \sigma} F_{\sigma^v}. +\end{equation} % \subsubsection{NLTPFA}\label{cc_nltpfa} % TODO diff --git a/doc/handbook/SVG/mpfa_iv.svg b/doc/handbook/SVG/mpfa_iv.svg new file mode 100644 index 0000000000..4005af703a --- /dev/null +++ b/doc/handbook/SVG/mpfa_iv.svg @@ -0,0 +1,1754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + -- GitLab From 132fbb01626c4f8c22e971a282ad26ce64a1f670 Mon Sep 17 00:00:00 2001 From: Martin Schneider Date: Wed, 12 Dec 2018 14:42:15 +0100 Subject: [PATCH 42/57] [handbook][disc] Add first draft of TPFA description --- doc/handbook/0_dumux-handbook.tex | 1 + doc/handbook/5_spatialdiscretizations.tex | 36 +++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/doc/handbook/0_dumux-handbook.tex b/doc/handbook/0_dumux-handbook.tex index 99e3a3faed..7d8185ce93 100644 --- a/doc/handbook/0_dumux-handbook.tex +++ b/doc/handbook/0_dumux-handbook.tex @@ -73,6 +73,7 @@ \DeclareMathOperator{\grad}{\mathbf{grad}} \DeclareMathOperator{\curl}{curl} \DeclareMathOperator{\Div}{div} +\newcommand{\meas}[1]{\lvert{#1}\rvert} \pagestyle{scrheadings} diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index c0688d4447..a26e43529a 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -224,7 +224,43 @@ We denote by $\mathcal{M}$ the mesh that results from the division of the domain where $F_{K, \sigma} \approx \int_{\sigma} \left( - \mathbf{\Lambda} \nabla u \right) \cdot \mathbf{n} \mathrm{d} \Gamma$ is the discrete flux through a face $\sigma$ of cell $K$ and $Q_k = \int_K q \mathrm{d}x$ is the integrated source/sink term. +Cell-centered finite-volume schemes differ in the way how the term +$(\mathbf{\Lambda} \nabla u ) \cdot \mathbf{n} $ is approximated. Using the symmetry of the tensor $\mathbf{\Lambda}$, this term can be rewritten as +$\nabla u \cdot \mathbf{\Lambda}\mathbf{n}$, which corresponds to the directional derivative of $u$ in co-normal direction $\mathbf{\Lambda}\mathbf{n}$. +In the following, the main ideas of the two-point flux approximation and the multi-point flux approximation methods are briefly described. Hereby, we restrict the discussion to the two-dimensional case. + \subsubsection{TPFA}\label{cc_tpfa} +The linear two-point flux approximation is a simple but robust cell-centered finite-volume scheme, which is commonly used in commercial software. +This scheme can be derived by using the conormal decomposition, which reads +\begin{equation} +\mathbf{\Lambda}_K \mathbf{n}_{K, \sigma} = t_{K,\sigma} \mathbf{d}_{K,\sigma} + \mathbf{d}^{\bot}_{K,\sigma}, \quad t_{K,\sigma} = \frac{\mathbf{n}_{K, \sigma}^T \mathbf{\Lambda}_K \mathbf{d}_{K,\sigma} }{\mathbf{d}_{K,\sigma}^T \mathbf{d}_{K,\sigma}}, \; \mathbf{d}^{\bot}_{K,\sigma} = \mathbf{\Lambda}_K \mathbf{n}_{K, \sigma} - t_{K,\sigma} \mathbf{d}_{K,\sigma}, +\end{equation} +with the distance vector $\mathbf{d}_{K,\sigma} := \mathbf{x}_\sigma - \mathbf{x}_K$ and $\mathbf{d}_{K,\sigma}^T \mathbf{d}^{\bot}_{K,\sigma} = 0$. The same can be done for the conormal $\mathbf{\Lambda}_L \mathbf{n}_{L, \sigma}$. The $t_{K,\sigma}$ and $t_{L,\sigma}$ are the transmissibilities associated with the face $\sigma$. These transmissibilities are calculated in \Dumux by using the function \texttt{computeTpfaTransmissibility}. + +With these notations, it follows that for each cell $K$ and face $\sigma$ +\begin{equation} +\nabla u \cdot \mathbf{\Lambda}_K \mathbf{n}_{K, \sigma} = t_{K,\sigma} \nabla u \cdot \mathbf{d}_{K,\sigma} + \nabla u \cdot \mathbf{d}^{\bot}_{K,\sigma}. +\end{equation} +For the TPFA scheme, the second part in the above equation is neglected. By using the fact that $\nabla u \cdot \mathbf{d}_{K,\sigma} \approx u_\sigma - u_K$, the discrete fluxes for face $\sigma$ are given by +\begin{equation} +F_{K,\sigma} = -\meas{\sigma} t_{K,\sigma} (u_\sigma - u_K), \qquad F_{L,\sigma} = -\meas{\sigma} t_{L,\sigma} (u_\sigma - u_L). +\label{eq:TPFAOneSided} +\end{equation} +Enforcing local flux conservation, i.e. $F_{K,\sigma}+F_{L,\sigma}=0$, results in +\begin{equation} +u_\sigma = \frac{t_{K,\sigma} u_K + t_{L,\sigma} u_L}{t_{K,\sigma} + t_{L,\sigma}}. +\end{equation} +With this, the fluxes \eqref{eq:TPFAOneSided} are rewritten as +\begin{equation} +F_{K,\sigma} = \meas{\sigma} \frac{t_{K,\sigma} t_{L,\sigma}}{t_{K,\sigma} + t_{L,\sigma}} (u_K - u_L), \quad F_{L,\sigma} = \meas{\sigma} \frac{t_{K,\sigma} t_{L,\sigma}}{t_{K,\sigma} + t_{L,\sigma}} (u_L - u_K). +\label{eq:TPFAFlux} +\end{equation} +By neglecting the orthogonal term, the consistency of the scheme is lost for general grids, where $\nabla u \cdot \mathbf{d}^{\bot}_{K,\sigma} \not = 0$. The consistency is achieved only for so-called K-orthogonal grids for which $\mathbf{d}^{\bot}_{K,\sigma} = 0$. For such grids we deduce that +\begin{equation} +\frac{t_{K,\sigma} t_{L,\sigma}}{t_{K,\sigma} + t_{L,\sigma}} = \frac{\tau_{K,\sigma} \tau_{L,\sigma}}{\tau_{K,\sigma} d_{L,\sigma} + \tau_{L,\sigma} d_{K,\sigma}}, +\label{eq:TPFAcoeffNew} +\end{equation} +with $\tau_{K,\sigma} := \mathbf{n}_{K, \sigma} \mathbf{\Lambda}_K\mathbf{n}_{K, \sigma}, \tau_{L,\sigma} := \mathbf{n}_{L, \sigma} \mathbf{\Lambda}_L\mathbf{n}_{L, \sigma}$, $d_{K,\sigma}:= \mathbf{n}_{K, \sigma} \cdot \mathbf{d}_{K, \sigma}$, and $d_{L,\sigma}:= \mathbf{n}_{L, \sigma} \cdot \mathbf{d}_{L, \sigma}$. This reduces, for the case of scalar permeability, to a distance weighted harmonic averaging of permeabilities. -- GitLab From 8ac053032998efa5f119c8927bc46dd3c3f3a2b4 Mon Sep 17 00:00:00 2001 From: Martin Schneider Date: Mon, 17 Dec 2018 16:45:20 +0100 Subject: [PATCH 43/57] [handbook][disc] Add first draft of MPFA description --- doc/handbook/5_spatialdiscretizations.tex | 130 +- doc/handbook/PNG/mpfa_iv.png | Bin 0 -> 75474 bytes doc/handbook/SVG/mpfa_iv.svg | 1835 ++++++++++++++++----- 3 files changed, 1475 insertions(+), 490 deletions(-) create mode 100644 doc/handbook/PNG/mpfa_iv.png diff --git a/doc/handbook/5_spatialdiscretizations.tex b/doc/handbook/5_spatialdiscretizations.tex index a26e43529a..5db22f9105 100644 --- a/doc/handbook/5_spatialdiscretizations.tex +++ b/doc/handbook/5_spatialdiscretizations.tex @@ -174,12 +174,6 @@ Equation \eqref{eq:discfin} has to be fulfilled for each box $B_j$. \subsection{Cell Centered Finite Volume Methods -- A Short Introduction}\label{cc} -\begin{figure} [ht] -\centering -\includegraphics[width=0.4\linewidth,keepaspectratio]{png/cc_disc.png} -\caption{\label{pc:cc} Discretization of the cell centered finite volume method} -\end{figure} - The cell-centered finite volume method uses the elements of the grid as control volumes. For each control volume all discrete values are determined at the element/control volume center (see Figure~\ref{pc:cc}). @@ -229,11 +223,12 @@ $(\mathbf{\Lambda} \nabla u ) \cdot \mathbf{n} $ is approximated. Using the symm $\nabla u \cdot \mathbf{\Lambda}\mathbf{n}$, which corresponds to the directional derivative of $u$ in co-normal direction $\mathbf{\Lambda}\mathbf{n}$. In the following, the main ideas of the two-point flux approximation and the multi-point flux approximation methods are briefly described. Hereby, we restrict the discussion to the two-dimensional case. -\subsubsection{TPFA}\label{cc_tpfa} +\subsubsection{Tpfa Method}\label{cc_tpfa} The linear two-point flux approximation is a simple but robust cell-centered finite-volume scheme, which is commonly used in commercial software. This scheme can be derived by using the conormal decomposition, which reads \begin{equation} \mathbf{\Lambda}_K \mathbf{n}_{K, \sigma} = t_{K,\sigma} \mathbf{d}_{K,\sigma} + \mathbf{d}^{\bot}_{K,\sigma}, \quad t_{K,\sigma} = \frac{\mathbf{n}_{K, \sigma}^T \mathbf{\Lambda}_K \mathbf{d}_{K,\sigma} }{\mathbf{d}_{K,\sigma}^T \mathbf{d}_{K,\sigma}}, \; \mathbf{d}^{\bot}_{K,\sigma} = \mathbf{\Lambda}_K \mathbf{n}_{K, \sigma} - t_{K,\sigma} \mathbf{d}_{K,\sigma}, +\label{eq:conormalDecTpfa} \end{equation} with the distance vector $\mathbf{d}_{K,\sigma} := \mathbf{x}_\sigma - \mathbf{x}_K$ and $\mathbf{d}_{K,\sigma}^T \mathbf{d}^{\bot}_{K,\sigma} = 0$. The same can be done for the conormal $\mathbf{\Lambda}_L \mathbf{n}_{L, \sigma}$. The $t_{K,\sigma}$ and $t_{L,\sigma}$ are the transmissibilities associated with the face $\sigma$. These transmissibilities are calculated in \Dumux by using the function \texttt{computeTpfaTransmissibility}. @@ -241,7 +236,7 @@ With these notations, it follows that for each cell $K$ and face $\sigma$ \begin{equation} \nabla u \cdot \mathbf{\Lambda}_K \mathbf{n}_{K, \sigma} = t_{K,\sigma} \nabla u \cdot \mathbf{d}_{K,\sigma} + \nabla u \cdot \mathbf{d}^{\bot}_{K,\sigma}. \end{equation} -For the TPFA scheme, the second part in the above equation is neglected. By using the fact that $\nabla u \cdot \mathbf{d}_{K,\sigma} \approx u_\sigma - u_K$, the discrete fluxes for face $\sigma$ are given by +For the Tpfa scheme, the second part in the above equation is neglected. By using the fact that $\nabla u \cdot \mathbf{d}_{K,\sigma} \approx u_\sigma - u_K$, the discrete fluxes for face $\sigma$ are given by \begin{equation} F_{K,\sigma} = -\meas{\sigma} t_{K,\sigma} (u_\sigma - u_K), \qquad F_{L,\sigma} = -\meas{\sigma} t_{L,\sigma} (u_\sigma - u_L). \label{eq:TPFAOneSided} @@ -264,102 +259,85 @@ with $\tau_{K,\sigma} := \mathbf{n}_{K, \sigma} \mathbf{\Lambda}_K\mathbf{n}_{K, -\subsubsection{MPFA}\label{cc_mpfa} -Expressions for the face fluxes $F_{K, \sigma}$ are usually obtained by introducing intermediate face unknowns $\bar{u}_\sigma$ in addition to the cell unknowns $u_K$ and enforcing the physically motivated continuity of fluxes and continuity of the solution across the faces. For a face $\sigma$ between the two polygons $K$ and $L$ these conditions read: - +\subsubsection{Mpfa Method}\label{cc_mpfa} +Expressions for the face fluxes $F_{K, \sigma}$ are usually obtained by introducing intermediate face unknowns $u_\sigma$ in addition to the cell unknowns $u_K$ and enforcing the physically motivated continuity of fluxes and continuity of the solution across the faces. For a face $\sigma$ between the two polygons $K$ and $L$ these conditions read: \begin{equation} \begin{aligned} &F_{K, \sigma} + F_{L, \sigma} = 0 \\ - &\bar{u}_{\sigma, K} = \bar{u}_{\sigma, L} = \bar{u}_{\sigma}. + &{u}_{K,\sigma} = {u}_{L,\sigma} = {u}_{\sigma}. \label{eq:sigmaConditions} \end{aligned} \end{equation} - -Using these conditions the intermediate face unknowns $\bar{u}_\sigma$ can be eliminated and the fluxes are expressed as a function of the cell unknowns $u_k$ and associated transmissibilities $t_{\sigma, k}$: +Using these conditions the intermediate face unknowns ${u}_\sigma$ can be eliminated and the fluxes are expressed as a function of the cell unknowns $u_N$ and associated transmissibilities $t^N_{K,\sigma}$: \begin{equation} - F_{\sigma} = \sum_{k \in \mathcal{S}_\sigma} t_{\sigma, k} u_{k}. + F_{K,\sigma} = \sum_{N \in \mathcal{S}_{K,\sigma}} t^N_{K,\sigma} u_{N}. \label{eq:FVFluxExpression} \end{equation} -%\begin{figure}[t] -% \hspace{-15mm} -% \def\svgwidth{500pt} -% \input{pics/interactionregion.pdf_tex} -% \caption{Interaction region for the Mpfa-o method. The graphic on the right illustrates %how the sub-control volume $m^v_2$ and face $\sigma^v_2$ are embedded in cell $K_2$. Note %that the face stencils for all sub-control volume faces in the depicted interaction region %are $\mathcal{S}_{\sigma^v_i} = \{ 1, .., 7 \}$.} -% \label{fig:interactionRegion_mpfa} -%\end{figure} - -Here, $\mathcal{S}_\sigma$ is the face stencil. The main difference between the various finite-volume schemes available is the assembly of the face fluxes, i.e.\ the computation of the $t_{\sigma, k}$ and the size of $\mathcal{S}_\sigma$. The standard scheme used in industrial codes is the two-point flux approximation (tpfa), which is computationally very efficient, but leads to inconsistent fluxes on general meshes. We cannot assure certain mesh properties as we want to consider meshes being constrained to arbitrary lower-dimensional fracture entities. Therefore, the method presented in this work is based on a multi-point flux approximation method (Mpfa-o method), which was first introduced in \citet{Aavatsmark2002}. In this scheme, a dual grid is created by connecting the barycenters of the cells with the barycenters of the faces ($d=2$) or the barycenters of the faces and edges ($d=3$). This divides each cell into sub-control volumes $m^v_K$ and each face into sub-control volume faces $\sigma^v$. The continuity conditions \eqref{eq:sigmaConditions} are now imposed on the $\sigma^v$ locally within an interaction region, which consists of sub-cells and sub-control volume faces sharing a common vertex (see fig. \ref{fig:interactionRegion_mpfa}). We allow for piecewise constant $\mathbf{\Lambda}$ (per cell) and construct discrete gradients $\nabla_K^v u$ (per sub-control volume), which enables us to write the discrete flux across $\sigma^v_1$ from cell $1$ as follows: - -\begin{equation} - F_{1, \sigma^v_1} = - |\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_1 \nabla_1^v u. - \label{eq:discreteFlux} -\end{equation} - -We use the definition for the sub-control volume gradient given in \citet{Aavatsmark2002}: +\begin{figure} [ht] +\centering +\includegraphics[width=0.8\linewidth,keepaspectratio]{PNG/mpfa_iv.png} +\caption{Interaction region for the Mpfa-O method. The graphic on the right illustrates how the sub-control volume $L^v$ and face $\sigma^v_2$ are embedded in cell $L$. Note that the face stencils for all sub-control volume faces in the depicted interaction region are $\mathcal{S}_{\sigma^v_i} = \{ K,L,M \}$, meaning that the fluxes over the sub-control volume faces depend on the three cell unknowns $u_K, u_L, u_M$.} +\label{pc:interactionRegion_mpfa} +\end{figure} -\begin{equation} - \nabla_1^v u = \frac{1}{T_1} \boldsymbol{\nu}_{11} (\bar{u}_{\sigma^v_1} - u_1) + - \frac{1}{T_1} \boldsymbol{\nu}_{12} (\bar{u}_{\sigma^v_7} - u_1), -\end{equation} +The main difference between the various finite-volume schemes available is the assembly of the face fluxes, i.e. the computation of the $t^N_{K,\sigma}$ and the size of $\mathcal{S}_{K,\sigma}$. For the Tpfa, that has been presented in the last section, the stencil and transmissibilities are given as +\begin{equation*} +\mathcal{S}_{K,\sigma} = \lbrace K,L \rbrace, \quad t^K_{K,\sigma} = \meas{\sigma} \frac{t_{K,\sigma} t_{L,\sigma}}{t_{K,\sigma} + t_{L,\sigma}},\; t^L_{K,\sigma} = -\meas{\sigma} \frac{t_{K,\sigma} t_{L,\sigma}}{t_{K,\sigma} + t_{L,\sigma}}, +\end{equation*} +with $t_{K,\sigma},t_{L,\sigma}$ as defined in equation \eqref{eq:conormalDecTpfa}. -which uses the relations +In the following, a multi-point flux approximation method (Mpfa-O method), which was first introduced in \citet{Aavatsmark2002}, is presented. The main difference to the Tpfa scheme is the fact that a consistent discrete gradient is constructed, i.e. the term $\nabla u \cdot \mathbf{d}^{\bot}_{K,\sigma}$ is not neglected. +For this scheme, a dual grid is created by connecting the barycenters of the cells with the barycenters of the faces ($d=2$) or the barycenters of the faces and edges ($d=3$). This divides each cell into sub-control volumes $K^v$. Analogously, each face is sub-divided into sub-control volume faces $\sigma^v$, see Figure \ref{pc:interactionRegion_mpfa}. We allow for piecewise constant $\mathbf{\Lambda}$ (per cell) and construct discrete gradients $\nabla_\mathcal{D}^{K^v} u$ (per sub-control volume $K^v$). +In the following, we restrict our discussion to the two-dimensional setup that is shown in Figure \ref{pc:interactionRegion_mpfa}. +Here, the discrete gradients are constructed to be consistent such that the following conditions hold: \begin{equation} - \begin{aligned} - &\boldsymbol{\nu}_{11} = \mathbf{R} \mathbf{x}_{12}, \\ - &\boldsymbol{\nu}_{12} = - \mathbf{R} \mathbf{x}_{11}, \\ - &T_1 = \| \mathbf{x}_{12} \mathbf{R} \mathbf{x}_{11} \|, - \end{aligned} +\nabla_\mathcal{D}^{K^v} u \cdot (\mathbf{x}_{\sigma^v_1}- \mathbf{x}_{K}) = u_{\sigma^v_1} - u_K, \quad \nabla_\mathcal{D}^{K^v} u \cdot (\mathbf{x}_{\sigma^v_3}- \mathbf{x}_{K}) = u_{\sigma^v_3} - u_K. \end{equation} - -where $\mathbf{R} = \left( {\begin{array}{cc} - 0 & 1 \\ - -1 & 0 - \end{array} } \right)$. Inserting this into equation \eqref{eq:discreteFlux} gives - +Thus, a discrete gradient (for sub-control volume $K^v$) that fulfills these conditions is given as \begin{equation} - F_{1, \sigma^v_1} = - \frac{|\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_1 \boldsymbol{\nu}_{11}}{T_1} (\bar{u}_{\sigma^v_1} - u_1) - - \frac{|\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_1 \boldsymbol{\nu}_{12}}{T_1} (\bar{u}_{\sigma^v_7} - u_1). +\nabla_\mathcal{D}^{K^v} u = \mathbb{D}^{-T}_{K^v} + \begin{bmatrix} + u_{\sigma^v_1} - u_K \\ + u_{\sigma^v_3} - u_K + \end{bmatrix}, \qquad \text{ with }\; \mathbb{D}_{K^v} := + \begin{bmatrix} + \mathbf{x}_{\sigma^v_1}- \mathbf{x}_K & \mathbf{x}_{\sigma^v_3} - \mathbf{x}_K + \end{bmatrix}. + \label{eq:MPFAGradientRecons} \end{equation} -We now introduce the coefficients $\omega^k_{j, \sigma_i^v} = - \frac{|\sigma^v_i| \mathbf{n}_{\sigma^v_i}^T \mathbf{\Lambda}_j \boldsymbol{\nu}_{jk}}{T_j}$, where $j$ and $i$ are the local indices of a sub-control volume and sub-control volume face within the interaction region and $k$ ($1 \leq k \leq d$) is the local coordinate direction in the sub-control volume. This leads to the following general expression for a sub-control volume face flux (here shown for $d = 2$) - +This enables us to write the discrete flux across $\sigma^v_1$ from cell $K$ as follows: \begin{equation} - F_{j, \sigma^v_i} = \left( \omega^1_{j, \sigma^v_i} \hspace{2mm} \omega^2_{j, \sigma^v_i} \right)^T \left( {\begin{array}{c} - \bar{u}_{\sigma^v_{\varphi(j, 1)}} - u_j \\ - \bar{u}_{\sigma^v_{\varphi(j, 2)}} - u_j - \end{array} } \right), + F_{K, \sigma^v_1} := - |\sigma^v_1| \mathbf{n}_{\sigma^v_1}^T \mathbf{\Lambda}_K \nabla_\mathcal{D}^{K^v} u. + \label{eq:discreteFlux} \end{equation} - -where we introduced the surjective function $\varphi: (j, k) \rightarrow i$, which maps to each pair of local sub-control volume index and coordinate direction the local index of the corresponding sub-control volume face. The fluxes for all sub-control volume faces within an interaction region can be written in matrix form as a function of the $u_j$ and $\bar{u}^v_{\sigma^v_i}$: - +Inserting the discrete gradient, yields \begin{equation} - \mathbf{f} = \mathbf{C}^{7 \times 7} \mathbf{\bar{u}} + \mathbf{D}^{7 \times 7} \mathbf{u}. - \label{eq:fluxesInInteractionVolume} + F_{K, \sigma^v_1} = \omega_{K,\sigma^v_1\sigma^v_1}(u_K - u_{\sigma^v_1}) + \omega_{K,\sigma^v_1 \sigma^v_3}(u_K - u_{\sigma^v_3}), + \label{eq:discreteFluxRef} \end{equation} - -The continuity conditions \eqref{eq:sigmaConditions} are enforced on one point per sub-control volume face, which can be defined anywhere between the center of the face of the primal grid and the vertex position, parameterized by $q$ ($0 \leq q < 1$, see fig. \ref{fig:interactionRegion_mpfa}). This gives rise to one equation per face, which in matrix form reads - +with $(\omega_{K,\sigma^v_1\sigma^v_1},\omega_{K,\sigma^v_1 \sigma^v_3})^T = |\sigma^v_1| \mathbb{D}^{-1}_{K^v}\mathbf{\Lambda}_K \mathbf{n}_{\sigma^v_1}$. +\\ \ \\ +To deduce a cell-centered scheme, the introduced face unknowns $u_{\sigma^v_i}$ have to be eliminated. This is done by enforcing flux continuity for each sub-control volume face, i.e. +\begin{align} +F_{K, \sigma^v_1} + F_{L, \sigma^v_1} &= 0, \\ F_{K, \sigma^v_3} + F_{M, \sigma^v_3} &= 0, \\ F_{L, \sigma^v_2} + F_{M, \sigma^v_2} &= 0. +\end{align} +This results in a system of equations for the face unknowns $\mathbf{u}_{\sigma}$ \begin{equation} - \mathbf{A}^{7 \times 7} \mathbf{\bar{u}} = \mathbf{B}^{7 \times 7} \mathbf{u} - \label{eq:localSystem} +\mathbb{A}^{3\times 3} \mathbf{u}_{\sigma} = \mathbb{B}^{3\times 3} \mathbf{u}, \end{equation} - -and leads to the following expression for the sub-control volume face fluxes as a function of only the cell unknowns $\mathbf{u}$: - +where $\mathbf{u}$ contains the three cell unknowns $u_K,u_L,u_M$ and $\mathbf{u}_{\sigma}$ the three face unknowns $u_{\sigma^v_1}, u_{\sigma^v_2}, u_{\sigma^v_3}$. +Inserting these face unknowns into the flux expression \eqref{eq:discreteFluxRef} yields \begin{equation} - \mathbf{f} = \mathbf{C}^{7 \times 7} \mathbf{\bar{u}} + \mathbf{D}^{7 \times 7} \mathbf{u} \ - = \left[ \mathbf{C}^{7 \times 7} \left( \mathbf{A}^{7 \times 7} \right)^{-1} \mathbf{B}^{7 \times 7} + \mathbf{D}^{7 \times 7} \right] \mathbf{u} = \mathbf{T}^{7 \times 7} \mathbf{u}. - \label{eq:fluxExpression} + F_{K,\sigma^v_i} = \sum_{N \in \lbrace K,L,M \rbrace } t^N_{K,\sigma^v_i} u_{N} = \mathbf{t}_{K,\sigma^v_i} \cdot \mathbf{u}, + \label{eq:FVFluxExpressionSubFace} \end{equation} +for each cell $K$ and sub-control volume face $\sigma^v_i$. +In \Dumux the transmissibility vector $\mathbf{t}_{K,\sigma^v_i}$ is returned by the function \texttt{advectionTijSecondaryIv()} or \texttt{advectionTijPrimaryIv()}, depending on the chosen interaction volume type (the primary interaction volume is used by default). -In the above equation \eqref{eq:fluxExpression} the rows of the system are the resulting flux expressions $F_{\sigma^v_i} = \sum_{k = 1}^7 t_{\sigma^v_i, k} u_{k}$ for the sub-control volume faces within the interaction region, where the matrix $\mathbf{T}$ contains the corresponding transmissibilities. The overall flux across a face $\sigma$ of the primal grid is the sum over all its embedded sub-control volume faces: - -\begin{equation} - F_{\sigma} = \sum_{\sigma^v \in \sigma} F_{\sigma^v}. -\end{equation} % \subsubsection{NLTPFA}\label{cc_nltpfa} % TODO diff --git a/doc/handbook/PNG/mpfa_iv.png b/doc/handbook/PNG/mpfa_iv.png new file mode 100644 index 0000000000000000000000000000000000000000..a54765dd8792a7e66b783696048467143c90cdec GIT binary patch literal 75474 zcmYJa1z3~c`#(N5U~~+S9!jG$(y1WbDh{auA|f?y zjRvU^5>mf`pYQ+wTo)G?59c}Ou5-uh+$X`*ScjI1g9-ou(CX=GnF9czb^riqNkLA0 zld8L#M*KzUb6f8o1@Q@?coa|kn-ZaG=>q^*YhV13FlTDsBEDqzy#w>T>-pF>z~0*l z5D*X`?&9I<<7kg?68H3W&f8Ss006E6^t5i>L*}nf1?1oR(}LX|e)$t9`iTl=W=0a6 zM3p%8`nA+8M;d+R$MwY{Ij(wMpY%NT`kpY0hL?=ECiJ|HU}G^Td5&|%q_RA}K58GZ zJgHtNlmFA+|EIJ}hseyq+K0LVMdzh24et9Y%LgZgcFZEaP*Z5gJ~x*4@<9ctjFaf* zAvKh*LMH9zC9g1EJn3!BKX)|w(~dfI*i9Kj;x8Xvh(LQx-4%n7fpFtg$IEey{mS|w z)OODZX0chSO#z&#{|1Jd%~^4cF{J+W58z7r_saI-)zgR+*qjy1|K_964@v5mhs|-4 z1u3WA(Yko}J%zW$pleZS(#6zYN8A+xbqoR$E+)u){dx_+U-~=T7PezWDeA*%JRR>a z!-QTey8Nyz`bkeyb2Z7By`C+7al-^+=eEGuh7u&?$-;w+0cAbJ{~vw_S}~^n75C>% zm4PkeOg?=mM`EcH z;W;W9opeZXP=gSrYLhr2Sta@TZzlQ$*v9%j6DQ}6P^}*t1aL;s*Qa}2GL>$Wd3dFR1#`7}&@m^BB-L&tk!Bu)paFE<>|HpWT+^i*wD@ao8-|xHjydjz90Tv;RB(0q+TW!& zB4#lbou@%~*~G8}!ArvW0V#*ssbS!vf$(mMW$aR`2WDHtbN%+9He4YPGFcflO}nlIc+yjREq2tPMW#7WSqw7j|ibx=AA2Vye6K zW$&2KL^G-Nsu_S&Zngufke%{(