数学とか語学とか楽しいよね

フランス語、ドイツ語、ロシア語、アラビア語、オランダ語、英語、スペイン語、ラテン語とか数学とか数値計算(有限要素法、有限体積法、差分法、格子ボルツマン法、数理最適化、C++コード付き)とか勉強したことをまとめます。右のカテゴリーから興味のある記事を探してください。最近はクラシックの名演も紹介しています。noteにも書いています。https://note.mu/kumag_min

【浅水流方程式】1次元浅水流方程式の基本形

【浅水流方程式】サイトマップ(ここから関連記事が探せます)


1次元浅水流方程式(Shallow Water Equation, SWE)を勉強していきましょう!そのために、まず1次元浅水流方程式の基本形を書いておきたいと思います。

水平な長方形の一様断面を考えることにします。浅水流方程式においては非圧縮性が仮定されています(密度が時間・場所変化しない)。まず、水深と流速で記述した場合は

 \displaystyle
\begin{eqnarray} 
&\frac{\partial h}{\partial t} + \frac{\partial (hu)}{\partial x} = 0 \\
&\frac{\partial (hu)}{\partial t} + \frac{\partial}{\partial x} \left( hu^2 + \frac{1}{2}gh^2 \right) = 0
\end{eqnarray}

となります。ここで  t は時間、 x は1次元座標、 h は水深、 u は流速、 g は重力加速度です。上の式が連続式で、下の式が運動量方程式です。次に水深と流量を用いて記述する場合です。水深と流量の関係

 \displaystyle
\begin{eqnarray} 
&q = uh
\end{eqnarray}

を用いて上式を変形すると

 \displaystyle
\begin{eqnarray} 
&\frac{\partial h}{\partial t} + \frac{\partial q}{\partial x} = 0 \\
&\frac{\partial q}{\partial t} + \frac{\partial}{\partial x} \left( \frac{q^2}{h} + \frac{1}{2}gh^2 \right) = 0
\end{eqnarray}

となります。こちらの式は保存量で書かれており、数値計算ではこちらのほうがよく用いられている気がします。

次にこれらの式をベクトルでまとめておきます。まず、水深と流速の式は

 \displaystyle
\begin{eqnarray} 
&\mathbf{U} = \left( \begin{array}{c} h \\ hu \end{array} \right), \quad \mathbf{F} = \left( \begin{array}{c} hu \\ hu^2 + \frac{1}{2}gh^2 \end{array} \right)\\
&\mathbf{U}_t + \mathbf{F}(\mathbf{U})_x = \mathbf{0} \\
\end{eqnarray}

です。次に、水深と流量の式は

 \displaystyle
\begin{eqnarray} 
&\mathbf{U} = \left( \begin{array}{c} h \\ q \end{array} \right), \quad \mathbf{F} = \left( \begin{array}{c} q \\ \frac{q^2}{h} + \frac{1}{2}gh^2 \end{array} \right)\\
&\mathbf{U}_t + \mathbf{F}(\mathbf{U})_x = \mathbf{0} \\
\end{eqnarray}

となります。 \mathbf{U} は保存量、 \mathbf{F} はフラックス(流束)と呼ばれます。ベクトル形式はよく出てくるので慣れておきましょう。


次に、勾配と摩擦がある場合の式を書きます。まず、水深と流速の式は

 \displaystyle
\begin{eqnarray} 
&\frac{\partial h}{\partial t} + \frac{\partial (hu)}{\partial x} = 0 \\
&\frac{\partial (hu)}{\partial t} + \frac{\partial}{\partial x} \left( hu^2 + \frac{1}{2}gh^2 \right) = -gh\frac{\partial z}{\partial x} - g\frac{n^2 u |u|}{h^{\frac{4}{3}}}
\end{eqnarray}

です。ここで  z は河床の基準面からの高さ、 n はマニングの粗度係数です。下の式の右辺第一項が勾配で、第二項が摩擦をあらわしています。流れの向きと逆方向に摩擦が働くように絶対値が付いています。次に水深と流量を用いて記述する場合は

 \displaystyle
\begin{eqnarray} 
&\frac{\partial h}{\partial t} + \frac{\partial q}{\partial x} = 0 \\
&\frac{\partial q}{\partial t} + \frac{\partial}{\partial x} \left( \frac{q^2}{h} + \frac{1}{2}gh^2 \right) = -gh\frac{\partial z}{\partial x} - g\frac{n^2 q |q|}{h^{\frac{10}{3}}}
\end{eqnarray}

となります。

次にこれらの式もベクトルでまとめておきます。まず、水深と流速の式は

 \displaystyle
\begin{eqnarray} 
&\mathbf{U} = \left( \begin{array}{c} h \\ hu \end{array} \right), \quad \mathbf{F} = \left( \begin{array}{c} hu \\ hu^2 + \frac{1}{2}gh^2 \end{array} \right), \quad \mathbf{S} = \left( \begin{array}{c} 0 \\ -gh\frac{\partial z}{\partial x} - g\frac{n^2 u |u|}{h^{\frac{4}{3}}} \end{array} \right)\\
&\mathbf{U}_t + \mathbf{F}(\mathbf{U})_x = \mathbf{S} \\
\end{eqnarray}

です。次に、水深と流量の式は

 \displaystyle
\begin{eqnarray} 
&\mathbf{U} = \left( \begin{array}{c} h \\ q \end{array} \right), \quad \mathbf{F} = \left( \begin{array}{c} q \\ \frac{q^2}{h} + \frac{1}{2}gh^2 \end{array} \right), \quad \mathbf{S} = \left( \begin{array}{c} 0 \\ -gh\frac{\partial z}{\partial x} - g\frac{n^2 q |q|}{h^{\frac{10}{3}}} \end{array}\right)\\
&\mathbf{U}_t + \mathbf{F}(\mathbf{U})_x = \mathbf{S} \\
\end{eqnarray}

となります。



参考
E. F. Toro, Shock-Capturing Methods for Free-Surface Shallow Flows, 第2章
R. J. Leveque, Finite Volume Methods for Hyperbolic Problems, 第13章
R. Szymkiewicz, Numerical Modeling in Open Channel Hydraulics, 第1章

Shock-Capturing Methods for Free-Surface Shallow Flows

Shock-Capturing Methods for Free-Surface Shallow Flows

Finite Volume Methods for Hyperbolic Problems (Cambridge Texts in Applied Mathematics)

Finite Volume Methods for Hyperbolic Problems (Cambridge Texts in Applied Mathematics)