Changeset 4215
- Timestamp:
- Feb 5, 2007, 6:46:13 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
anuga_core/documentation/user_manual/old_pyvolution_documentation/limiting.tex
r1778 r4215 3 3 4 4 5 \newcommand{\hmin}{h_{\mbox{\tiny min}}} 6 5 7 \begin{document} 6 8 7 9 8 \section{Limiting} 9 10 11 \section{Flux limiting} 12 13 The shallow water equations are solved numerically using a 14 finite volume method on unstructured triangular grid. 15 The upwind central scheme due to Kurganov and Petrova is used as an 16 approximate Riemann solver for the computation of inviscid flux functions. 17 This makes it possible to handle discontinuous solutions. 18 19 To alleviate the problems associated with numerical instabilities due to 20 small water depths near a wet/dry boundary we employ a new flux limiter that 21 ensures that unphysical fluxes are never encounted. 22 23 24 Let $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 27 same height datum. 28 The conserved quantities tracked by ANUGA are momentum in the 29 $x$-direction ($\mu = uh$), momentum in the $y$-direction ($\nu = vh$) 30 and depth ($h = w-z$). 31 32 The flux calculation requires access to the velocity vector $(u, v)$ 33 where each component is obtained as $u = \mu/h$ and $v = \nu/h$ respectively. 34 In the presence of very small water depths, these calculations become 35 numerically unreliable and will typically cause unphysical speeds. 36 37 We have employed a flux limiter which replaces the calculations above with 38 the 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} 42 where $h_0$ is a regularisation parameter that controls the minimal 43 magnitude 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 \] 48 and 49 \[ 50 \lim_{h \rightarrow \infty} \hat{u} = 51 \lim_{h \rightarrow \infty} \frac{\mu}{h + h_0/h} = \frac{\mu}{h} = u 52 \] 53 with similar results for $\hat{v}$. 54 55 The 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 \] 59 or 60 \[ 61 h_0 = h^2 62 \] 63 64 65 ANUGA has a global parameter $H_0$ that controls the minimal depth which 66 is considered in the various equations. This parameter is typically set to 67 $10^{-3}$. Setting 68 \[ 69 h_0 = H_0^2 70 \] 71 provides a reasonable balance between accurracy and stability. In fact, 72 setting $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 \] 76 In 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 \] 81 which 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} 91 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. 92 93 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. 10 94 11 95 12 96 Let $w, z, h$ be the stage, bed elevation and depth at the centroid and 13 97 let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$. 98 Define the minimal depth across all vertices as $\hmin$ as 99 \[ 100 \hmin = \min_i h_i 101 \] 102 103 Let $\tilde{w_i}$ be the stage obtained from a gradient limiter 104 limiting on stage only. The corresponding depth is then defined as 105 \[ 106 \tilde{h_i} = \tilde{w_i} - z_i 107 \] 108 We would use this limiter in deep water which we will define (somewhat boldly) 109 as 110 \[ 111 \hmin \ge \epsilon 112 \] 113 114 115 Similarly, let $\bar{w_i}$ be the stage obtained from a gradient 116 limiter limiting on depth respecting the bed slope. 117 The corresponding depth is defined as 118 \[ 119 \bar{h_i} = \bar{w_i} - z_i 120 \] 121 122 123 We introduce the concept of a balanced stage $w_i$ which is obtained as 124 the linear combination 125 126 \[ 127 w_i = \alpha \tilde{w_i} + (1-\alpha) \bar{w_i} 128 \] 129 or 130 \[ 131 w_i = z_i + \alpha \tilde{h_i} + (1-\alpha) \bar{h_i} 132 \] 133 where $\alpha \in [0, 1]$. 134 135 Since $\tilde{w_i}$ is obtained in 'deep' water where the bedslope 136 is ignored we have immediately that 137 \[ 138 \alpha = 1 \mbox{for} \hmin \ge \epsilon or dz=0 139 \] 140 where the maximal bed elevation range $dz$ is defined as 141 \[ 142 dz = \max_i |z_i - z| 143 \] 144 145 If $\hmin < \epsilon$ we want to use the 'shallow' limiter just enough that 146 no negative depths occur. Formally, we will require that 147 \[ 148 \alpha \tilde{h_i} + (1-\alpha) \bar{h_i} > \epsilon, \forall i 149 \] 150 or 151 \[ 152 \alpha(\tilde{h_i} - \bar{h_i}) > \epsilon - \bar{h_i}, \forall i 153 \] 154 Rearranging 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 159 Ensuring 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} 163 which will guarantee that no vertex 'cuts' through the bed. 164 165 166 167 168 169 170 \section{Slope limiting (old)} 171 172 Let $w, z, h$ be the stage, bed elevation and depth at the centroid and 173 let $w_i, z_i, h_i$ be the stage, bed elevation and depth at vertex $i$. 14 174 15 175 Define the maximal bed elevation range $dz$ as … … 19 179 \] 20 180 21 and the minimal depth $ h_{\mbox{\tiny min}}$ as22 23 \[ 24 h_{\mbox{\tiny min}}= \min_i h_i181 and the minimal depth $\hmin$ as 182 183 \[ 184 \hmin = \min_i h_i 25 185 \] 26 186 … … 29 189 \alpha = \left \{ 30 190 \begin{array}{ll} 31 \max (\min ( 2 h_{\mbox{\tiny min}}/ dz )) & dz > 0 \\191 \max (\min ( 2 \hmin / dz )) & dz > 0 \\ 32 192 1 & dz \leq 0 33 193 \end{array}
Note: See TracChangeset
for help on using the changeset viewer.