Changeset 4215


Ignore:
Timestamp:
Feb 5, 2007, 6:46:13 PM (17 years ago)
Author:
ole
Message:

New flux and slope limiter draft.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • anuga_core/documentation/user_manual/old_pyvolution_documentation/limiting.tex

    r1778 r4215  
    33
    44
     5\newcommand{\hmin}{h_{\mbox{\tiny min}}}
     6
    57\begin{document}
    68
    79
    8 \section{Limiting}
    9 
     10
     11\section{Flux limiting}
     12
     13The shallow water equations are solved numerically using a
     14finite volume method on unstructured triangular grid.
     15The upwind central scheme due to Kurganov and Petrova is used as an
     16approximate Riemann solver for the computation of inviscid flux functions.
     17This makes it possible to handle discontinuous solutions.
     18
     19To alleviate the problems associated with numerical instabilities due to
     20small water depths near a wet/dry boundary we employ a new flux limiter that
     21ensures that unphysical fluxes are never encounted.
     22
     23
     24Let $u$ and $v$ be the velocity components in the $x$ and $y$ direction,
     25$w$ the absolute water level (stage) and
     26$z$ the bed elevation. The latter are assumed to be relative to the
     27same height datum.
     28The conserved quantities tracked by ANUGA are momentum in the
     29$x$-direction ($\mu = uh$), momentum in the $y$-direction ($\nu = vh$)
     30and depth ($h = w-z$).
     31
     32The flux calculation requires access to the velocity vector $(u, v)$
     33where each component is obtained as $u = \mu/h$ and $v = \nu/h$ respectively.
     34In the presence of very small water depths, these calculations become
     35numerically unreliable and will typically cause unphysical speeds.
     36
     37We have employed a flux limiter which replaces the calculations above with
     38the limited approximations.
     39\begin{equation}
     40  \hat{u} = \frac{\mu}{h + h_0/h}, \bigskip \hat{v} = \frac{\nu}{h + h_0/h},
     41\end{equation}
     42where $h_0$ is a regularisation parameter that controls the minimal
     43magnitude of the denominator. Taking the limits we have for $\hat{u}$
     44\[
     45  \lim_{h \rightarrow 0} \hat{u} =
     46  \lim_{h \rightarrow 0} \frac{\mu}{h + h_0/h} = 0
     47\]
     48and
     49\[
     50  \lim_{h \rightarrow \infty} \hat{u} =
     51  \lim_{h \rightarrow \infty} \frac{\mu}{h + h_0/h} = \frac{\mu}{h} = u
     52\]
     53with similar results for $\hat{v}$.
     54
     55The maximal value of $\hat{u}$ is attained when $h+h_0/h$ is minimal or (by differentiating the denominator)
     56\[
     57  1 - h_0/h^2 = 0
     58\]
     59or
     60\[
     61  h_0 = h^2
     62\]
     63
     64
     65ANUGA has a global parameter $H_0$ that controls the minimal depth which
     66is considered in the various equations. This parameter is typically set to
     67$10^{-3}$. Setting
     68\[
     69  h_0 = H_0^2
     70\]
     71provides a reasonable balance between accurracy and stability. In fact,
     72setting $h=H_0$ will scale the predicted speed by a factor of $0.5$:
     73\[
     74  \left[ \frac{\mu}{h + h_0/h} \right]_{h = H_0} = \frac{\mu}{2 H_0}
     75\]
     76In general, for multiples of the minimal depth $N H_0$ one obtains
     77\[
     78  \left[ \frac{\mu}{h + h_0/h} \right]_{h = N H_0} =
     79  \frac{\mu}{H_0 (1 + 1/N^2)}
     80\]
     81which converges quadratically to the true value with the multiple N.
     82
     83
     84%The developed numerical model has been applied to several test cases as well as to real flows. Numerical tests prove the robustness and accuracy of the model.
     85
     86
     87
     88
     89
     90\section{Slope limiting}
     91A multidimensional slope-limiting technique is employed to achieve second-order spatial accuracy and to prevent spurious oscillations. This is using the MinMod limiter and is documented elsewhere.
     92
     93However close to the bed, the limiter must ensure that no negative depths occur. On the other hand, in deep water, the bed topography should be ignored for the purpose of the limiter.
    1094
    1195
    1296Let $w, z, h$  be the stage, bed elevation and depth at the centroid and
    1397let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$.
     98Define the minimal depth across all vertices as $\hmin$ as
     99\[
     100  \hmin = \min_i h_i
     101\]
     102
     103Let $\tilde{w_i}$ be the stage obtained from a gradient limiter
     104limiting on stage only. The corresponding depth is then defined as
     105\[
     106  \tilde{h_i} = \tilde{w_i} - z_i
     107\]
     108We would use this limiter in deep water which we will define (somewhat boldly)
     109as
     110\[
     111  \hmin \ge \epsilon
     112\]
     113
     114
     115Similarly, let $\bar{w_i}$ be the stage obtained from a gradient
     116limiter limiting on depth respecting the bed slope.
     117The corresponding depth is defined as
     118\[
     119  \bar{h_i} = \bar{w_i} - z_i
     120\]
     121
     122
     123We introduce the concept of a balanced stage $w_i$ which is obtained as
     124the linear combination
     125
     126\[
     127  w_i = \alpha \tilde{w_i} + (1-\alpha) \bar{w_i}
     128\]
     129or
     130\[
     131  w_i = z_i + \alpha \tilde{h_i} + (1-\alpha) \bar{h_i}
     132\]
     133where $\alpha \in [0, 1]$.
     134
     135Since $\tilde{w_i}$ is obtained in 'deep' water where the bedslope
     136is ignored we have immediately that
     137\[
     138  \alpha = 1 \mbox{for} \hmin \ge \epsilon or dz=0
     139\]
     140where the maximal bed elevation range $dz$ is defined as
     141\[
     142  dz = \max_i |z_i - z|
     143\]
     144
     145If $\hmin < \epsilon$ we want to use the 'shallow' limiter just enough that
     146no negative depths occur. Formally, we will require that
     147\[
     148  \alpha \tilde{h_i} + (1-\alpha) \bar{h_i} > \epsilon, \forall i
     149\]
     150or
     151\[
     152  \alpha(\tilde{h_i} - \bar{h_i}) > \epsilon - \bar{h_i}, \forall i
     153\]
     154Rearranging and solving for $\alpha$ one obtains the bound
     155\[
     156  \alpha > \frac{\epsilon - \bar{h_i}}{\tilde{h_i} - \bar{h_i}}, \forall i
     157\]
     158
     159Ensuring this holds true for all vertices on arrives at the definition
     160\begin{equation}
     161  \alpha = \max_{i} \frac{\epsilon - \bar{h_i}}{\tilde{h_i} - \bar{h_i}}
     162\end{equation}
     163which will guarantee that no vertex 'cuts' through the bed.
     164
     165
     166
     167
     168
     169
     170\section{Slope limiting (old)}
     171
     172Let $w, z, h$  be the stage, bed elevation and depth at the centroid and
     173let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$.
    14174
    15175Define the maximal bed elevation range $dz$ as
     
    19179\]
    20180
    21 and the minimal depth $h_{\mbox{\tiny min}}$ as
    22 
    23 \[
    24   h_{\mbox{\tiny min}} = \min_i h_i
     181and the minimal depth $\hmin$ as
     182
     183\[
     184  \hmin = \min_i h_i
    25185\]
    26186
     
    29189  \alpha = \left \{
    30190  \begin{array}{ll}
    31     \max (\min ( 2 h_{\mbox{\tiny min}} / dz )) & dz > 0 \\
     191    \max (\min ( 2 \hmin / dz )) & dz > 0 \\
    32192    1 & dz \leq 0     
    33193  \end{array}
Note: See TracChangeset for help on using the changeset viewer.