source: anuga_core/documentation/user_manual/old_pyvolution_documentation/limiting.tex @ 4265

Last change on this file since 4265 was 4265, checked in by ole, 17 years ago

Move mathematical destcription from linuxconf paper and limiting.tex into user manual.
Have not tried to compile it though.

File size: 7.3 KB
Line 
1
2\documentclass[12pt]{article}
3\usepackage{graphicx}
4
5
6% THIS HAS BEEN MOVED INTO THE USER MANUAL (16 Feb 2007)
7
8\newcommand{\hmin}{h_{\mbox{\tiny min}}}
9
10\begin{document}
11
12Ole's thoughts on flux and slope limiting in ANUGA - 7 February 2007.
13
14This is a rough draft, please let me know if this makes sense.
15O
16
17\section{Flux limiting}
18
19The shallow water equations are solved numerically using a
20finite volume method on unstructured triangular grid.
21The upwind central scheme due to Kurganov and Petrova is used as an
22approximate Riemann solver for the computation of inviscid flux functions.
23This makes it possible to handle discontinuous solutions.
24
25To alleviate the problems associated with numerical instabilities due to
26small water depths near a wet/dry boundary we employ a new flux limiter that
27ensures that unphysical fluxes are never encounted.
28
29
30Let $u$ and $v$ be the velocity components in the $x$ and $y$ direction,
31$w$ the absolute water level (stage) and
32$z$ the bed elevation. The latter are assumed to be relative to the
33same height datum.
34The conserved quantities tracked by ANUGA are momentum in the
35$x$-direction ($\mu = uh$), momentum in the $y$-direction ($\nu = vh$)
36and depth ($h = w-z$).
37
38The flux calculation requires access to the velocity vector $(u, v)$ 
39where each component is obtained as $u = \mu/h$ and $v = \nu/h$ respectively.
40In the presence of very small water depths, these calculations become
41numerically unreliable and will typically cause unphysical speeds.
42
43We have employed a flux limiter which replaces the calculations above with
44the limited approximations.
45\begin{equation}
46  \hat{u} = \frac{\mu}{h + h_0/h}, \bigskip \hat{v} = \frac{\nu}{h + h_0/h},
47\end{equation}
48where $h_0$ is a regularisation parameter that controls the minimal
49magnitude of the denominator. Taking the limits we have for $\hat{u}$
50\[
51  \lim_{h \rightarrow 0} \hat{u} = 
52  \lim_{h \rightarrow 0} \frac{\mu}{h + h_0/h} = 0
53\]
54and
55\[
56  \lim_{h \rightarrow \infty} \hat{u} = 
57  \lim_{h \rightarrow \infty} \frac{\mu}{h + h_0/h} = \frac{\mu}{h} = u
58\]
59with similar results for $\hat{v}$.
60
61The maximal value of $\hat{u}$ is attained when $h+h_0/h$ is minimal or (by differentiating the denominator)
62\[
63  1 - h_0/h^2 = 0
64\]
65or
66\[
67  h_0 = h^2
68\]
69
70
71ANUGA has a global parameter $H_0$ that controls the minimal depth which
72is considered in the various equations. This parameter is typically set to
73$10^{-3}$. Setting
74\[
75  h_0 = H_0^2
76\]
77provides a reasonable balance between accurracy and stability. In fact,
78setting $h=H_0$ will scale the predicted speed by a factor of $0.5$:
79\[
80  \left[ \frac{\mu}{h + h_0/h} \right]_{h = H_0} = \frac{\mu}{2 H_0}
81\]
82In general, for multiples of the minimal depth $N H_0$ one obtains
83\[
84  \left[ \frac{\mu}{h + h_0/h} \right]_{h = N H_0} = 
85  \frac{\mu}{H_0 (1 + 1/N^2)}
86\]
87which converges quadratically to the true value with the multiple N.
88
89
90%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.
91
92
93
94
95
96\section{Slope limiting}
97A 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.
98
99However 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.
100
101
102Let $w, z, h$  be the stage, bed elevation and depth at the centroid and
103let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$.
104Define the minimal depth across all vertices as $\hmin$ as
105\[
106  \hmin = \min_i h_i
107\]
108
109Let $\tilde{w_i}$ be the stage obtained from a gradient limiter
110limiting on stage only. The corresponding depth is then defined as
111\[
112  \tilde{h_i} = \tilde{w_i} - z_i
113\]
114We would use this limiter in deep water which we will define (somewhat boldly)
115as
116\[
117  \hmin \ge \epsilon
118\]
119
120
121Similarly, let $\bar{w_i}$ be the stage obtained from a gradient
122limiter limiting on depth respecting the bed slope.
123The corresponding depth is defined as
124\[
125  \bar{h_i} = \bar{w_i} - z_i
126\]
127
128
129We introduce the concept of a balanced stage $w_i$ which is obtained as
130the linear combination
131
132\[
133  w_i = \alpha \tilde{w_i} + (1-\alpha) \bar{w_i}
134\]
135or
136\[
137  w_i = z_i + \alpha \tilde{h_i} + (1-\alpha) \bar{h_i}
138\]
139where $\alpha \in [0, 1]$.
140
141Since $\tilde{w_i}$ is obtained in 'deep' water where the bedslope
142is ignored we have immediately that
143\[
144  \alpha = 1 \mbox{ for } \hmin \ge \epsilon %or dz=0
145\]
146%where the maximal bed elevation range $dz$ is defined as
147%\[
148%  dz = \max_i |z_i - z|
149%\]
150
151If $\hmin < \epsilon$ we want to use the 'shallow' limiter just enough that
152no negative depths occur. Formally, we will require that
153\[
154  \alpha \tilde{h_i} + (1-\alpha) \bar{h_i} > \epsilon, \forall i
155\]
156or
157\begin{equation} 
158  \alpha(\tilde{h_i} - \bar{h_i}) > \epsilon - \bar{h_i}, \forall i
159  \label{eq:limiter bound}
160\end{equation} 
161
162There are two cases:
163\begin{enumerate} 
164  \item $\bar{h_i} \le \tilde{h_i}$: The deep water (limited using stage)
165  vertex is at least as far away from the bed than the shallow water
166  (limited using depth). In this case we won't need any contribution from
167  $\bar{h_i}$ and can accept any $alpha$.
168 
169  E.g.\ $\alpha=1$ reduces Equation \ref{eq:limiter bound} to
170  \[
171    \tilde{h_i} > \epsilon 
172  \]
173  whereas $\alpha=0$ yields
174  \[
175    \bar{h_i} > \epsilon       
176  \]
177  all well and good.
178  \item $\bar{h_i} > \tilde{h_i}$: In this case the the deep water vertex is
179  closer to the bed than the shallow water vertex or even below the bed.
180  In this case we need to find an $alpha$ that will ensure a positive depth.   
181  Rearranging Equation \ref{eq:limiter bound} and solving for $\alpha$ one
182  obtains the bound
183  \[
184    \alpha < \frac{\epsilon - \bar{h_i}}{\tilde{h_i} - \bar{h_i}}, \forall i
185  \] 
186\end{enumerate} 
187
188Ensuring Equation \ref{eq:limiter bound} holds true for all vertices one
189arrives at the definition
190\[
191  \alpha = \min_{i} \frac{\bar{h_i} - \epsilon}{\bar{h_i} - \tilde{h_i}}
192\]
193which will guarantee that no vertex 'cuts' through the bed. Finally, should
194$\bar{h_i} < \epsilon$ and therefore $\alpha < 0$, we suggest setting
195$alpha=0$ and similarly capping $\alpha$ at 1 just in case.
196
197%Furthermore,
198%dropping the $\epsilon$ ensures that alpha is always positive and also 
199%provides a numerical safety {??)
200 
201 
202
203
204
205
206
207
208
209
210
211\section{Slope limiting (old version)}
212
213Let $w, z, h$  be the stage, bed elevation and depth at the centroid and
214let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$.
215
216Define the maximal bed elevation range $dz$ as
217
218\[
219  dz = \max_i |z_i - z|
220\]
221
222and the minimal depth $\hmin$ as
223
224\[
225  \hmin = \min_i h_i
226\]
227
228
229\[
230  \alpha = \left \{
231  \begin{array}{ll}
232    \max (\min ( 2 \hmin / dz )) & dz > 0 \\
233    1 & dz \leq 0     
234  \end{array}
235  \right . 
236\]
237
238
239Let $\tilde{w_i}$ be the stage obtained from a gradient limiter limiting on stage. The corresponding depth is the defined as
240
241\[
242  \tilde{h_i} = \tilde{w_i} - z_i
243\]
244
245Let $\bar{h_i}$ be the depth obtained from a gradient limiter limiting on depth.
246The corresponding stage is the defined as
247
248\[
249  \bar{w_i} = z_i + \bar{h_i}
250\]
251
252
253The balanced stage $w_i$ is then obtained by the linear combination
254
255\[
256  w_i = \alpha \tilde{w_i} + (1-\alpha) \bar{w_i}
257\]
258
259or
260
261\[
262  w_i = z_i + \alpha \tilde{h_i} + (1-\alpha) \bar{h_i}
263\]
264
265\end{document}
Note: See TracBrowser for help on using the repository browser.