From 30ead6980e98f3229a2a6892f5ecd0a046a1d69c Mon Sep 17 00:00:00 2001 From: Holger Class <holger.class@iws.uni-stuttgart.de> Date: Mon, 26 Nov 2018 16:24:54 +0100 Subject: [PATCH] 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