# Changeset 4215

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

New flux and slope limiter draft.

File:
1 edited

### Legend:

Unmodified
 r1778 \newcommand{\hmin}{h_{\mbox{\tiny min}}} \begin{document} \section{Limiting} \section{Flux limiting} The shallow water equations are solved numerically using a finite volume method on unstructured triangular grid. The upwind central scheme due to Kurganov and Petrova is used as an approximate Riemann solver for the computation of inviscid flux functions. This makes it possible to handle discontinuous solutions. To alleviate the problems associated with numerical instabilities due to small water depths near a wet/dry boundary we employ a new flux limiter that ensures that unphysical fluxes are never encounted. Let $u$ and $v$ be the velocity components in the $x$ and $y$ direction, $w$ the absolute water level (stage) and $z$ the bed elevation. The latter are assumed to be relative to the same height datum. The conserved quantities tracked by ANUGA are momentum in the $x$-direction ($\mu = uh$), momentum in the $y$-direction ($\nu = vh$) and depth ($h = w-z$). The flux calculation requires access to the velocity vector $(u, v)$ where each component is obtained as $u = \mu/h$ and $v = \nu/h$ respectively. In the presence of very small water depths, these calculations become numerically unreliable and will typically cause unphysical speeds. We have employed a flux limiter which replaces the calculations above with the limited approximations. \begin{equation} \hat{u} = \frac{\mu}{h + h_0/h}, \bigskip \hat{v} = \frac{\nu}{h + h_0/h}, \end{equation} where $h_0$ is a regularisation parameter that controls the minimal magnitude of the denominator. Taking the limits we have for $\hat{u}$ $\lim_{h \rightarrow 0} \hat{u} = \lim_{h \rightarrow 0} \frac{\mu}{h + h_0/h} = 0$ and $\lim_{h \rightarrow \infty} \hat{u} = \lim_{h \rightarrow \infty} \frac{\mu}{h + h_0/h} = \frac{\mu}{h} = u$ with similar results for $\hat{v}$. The maximal value of $\hat{u}$ is attained when $h+h_0/h$ is minimal or (by differentiating the denominator) $1 - h_0/h^2 = 0$ or $h_0 = h^2$ ANUGA has a global parameter $H_0$ that controls the minimal depth which is considered in the various equations. This parameter is typically set to $10^{-3}$. Setting $h_0 = H_0^2$ provides a reasonable balance between accurracy and stability. In fact, setting $h=H_0$ will scale the predicted speed by a factor of $0.5$: $\left[ \frac{\mu}{h + h_0/h} \right]_{h = H_0} = \frac{\mu}{2 H_0}$ In general, for multiples of the minimal depth $N H_0$ one obtains $\left[ \frac{\mu}{h + h_0/h} \right]_{h = N H_0} = \frac{\mu}{H_0 (1 + 1/N^2)}$ which converges quadratically to the true value with the multiple N. %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. \section{Slope limiting} A 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. However 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. Let $w, z, h$  be the stage, bed elevation and depth at the centroid and let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$. Define the minimal depth across all vertices as $\hmin$ as $\hmin = \min_i h_i$ Let $\tilde{w_i}$ be the stage obtained from a gradient limiter limiting on stage only. The corresponding depth is then defined as $\tilde{h_i} = \tilde{w_i} - z_i$ We would use this limiter in deep water which we will define (somewhat boldly) as $\hmin \ge \epsilon$ Similarly, let $\bar{w_i}$ be the stage obtained from a gradient limiter limiting on depth respecting the bed slope. The corresponding depth is defined as $\bar{h_i} = \bar{w_i} - z_i$ We introduce the concept of a balanced stage $w_i$ which is obtained as the linear combination $w_i = \alpha \tilde{w_i} + (1-\alpha) \bar{w_i}$ or $w_i = z_i + \alpha \tilde{h_i} + (1-\alpha) \bar{h_i}$ where $\alpha \in [0, 1]$. Since $\tilde{w_i}$ is obtained in 'deep' water where the bedslope is ignored we have immediately that $\alpha = 1 \mbox{for} \hmin \ge \epsilon or dz=0$ where the maximal bed elevation range $dz$ is defined as $dz = \max_i |z_i - z|$ If $\hmin < \epsilon$ we want to use the 'shallow' limiter just enough that no negative depths occur. Formally, we will require that $\alpha \tilde{h_i} + (1-\alpha) \bar{h_i} > \epsilon, \forall i$ or $\alpha(\tilde{h_i} - \bar{h_i}) > \epsilon - \bar{h_i}, \forall i$ Rearranging and solving for $\alpha$ one obtains the bound $\alpha > \frac{\epsilon - \bar{h_i}}{\tilde{h_i} - \bar{h_i}}, \forall i$ Ensuring this holds true for all vertices on arrives at the definition \begin{equation} \alpha = \max_{i} \frac{\epsilon - \bar{h_i}}{\tilde{h_i} - \bar{h_i}} \end{equation} which will guarantee that no vertex 'cuts' through the bed. \section{Slope limiting (old)} Let $w, z, h$  be the stage, bed elevation and depth at the centroid and let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$. Define the maximal bed elevation range $dz$ as \] and the minimal depth $h_{\mbox{\tiny min}}$ as $h_{\mbox{\tiny min}} = \min_i h_i and the minimal depth \hmin as \[ \hmin = \min_i h_i$ \alpha = \left \{ \begin{array}{ll} \max (\min ( 2 h_{\mbox{\tiny min}} / dz )) & dz > 0 \\ \max (\min ( 2 \hmin / dz )) & dz > 0 \\ 1 & dz \leq 0 \end{array}