.. sectionauthor:: 清水康行 ===================================== 1次元非定常流(幅が変化する場合) ===================================== 基礎式 ================ 前章では流下方向に川幅が一定の場合の1次元不定流の計算法について述べましたが, ここでは流下方向川幅が変化する場合について述べます. 幅が一定の場合,流量は単位幅流量 :math:`q` で扱いましたが,ここでは全流量 :math:`Q` を用います. 一般断面の1次元非定常流れの連続式および運動方程式を以下で表します. .. math:: :label: bd1_1 {{\partial A}\over{\partial t}}+ {{\partial Q}\over{\partial x}}= 0 .. math:: :label: bd1_2 {{1}\over{g A}}{{\partial Q}\over{\partial t}} +{{1}\over{g A}}{{\partial (A u^2)}\over{\partial x}} +{{\partial H}\over{\partial x}} + I_f =0 ここで, :math:`t` は時間, :math:`x` は流下方向距離, :math:`A` は断面積, :math:`Q` は流量, :math:`g` は重力加速度, :math:`u` は断面平均流速, :math:`H` は水位, :math:`I_f` はエネルギー勾配 です. :eq:`bd1_1` 式は上下流の流量の差が断面積の時間変化に等しいという連続の式 です. :eq:`bd1_2` 式の第1項以外は定常流の運動量の式です. 第1項は運動量の 時間変化を表したものです. 上記の式は任意の断面形に適用可能な式ですが, 最終的には1次元の河床変動計算に応用しますので以降, 断面は矩形断面と して扱うことにします. 即ち, .. math:: :label: bd1_3 A=Bh, \ \ Q=Au=Bhu の関係が成立するものとします. ただし, :math:`B` は水路幅, :math:`h` は水深で, :math:`H=h+z_b`, :math:`z_b` は河床高です. :eq:`bd1_3` 式の関係を用い, :math:`h` は :math:`x` と :math:`t` の関数, :math:`B` は :math:`x` のみの関数 ( :math:`B` は時間的には変化しない)であることを考慮すると :eq:`bd1_1` , :eq:`bd1_2` 式は以下のように変形されます. .. math:: :label: bd1_4 B{{\partial h}\over{\partial t}} + {{\partial (uBh)}\over{\partial x}} = 0 .. math:: :label: bd1_5 {{\partial (uBh)}\over{\partial t}} + {{\partial (u^2 Bh)}\over{\partial x}}= -gBh{{\partial H}\over{\partial x}} -gBhI_f :eq:`bd1_5` 式の左辺は保存形と呼ばれる形で表現されており, 水面形が不連続の場合にも適用可能な形式となっています. 水面形が連続な場合, 即ち, :math:`\displaystyle{{\partial h}\over{\partial x}}` や :math:`\displaystyle{{\partial u}\over{\partial x}}` が 存在する場合には :eq:`bd1_5` 式の左辺は, .. math:: :label: bd1_6 Bu{{\partial h}\over{\partial t}}+Bh{{\partial u}\over{\partial t}} + u{{\partial(Buh)}\over{\partial x}}+Buh{{\partial u}\over{\partial x}} と展開可能となり, :eq:`bd1_4` 式の連続式を用いることにより, :eq:`bd1_5` 式は次式となります. .. math:: :label: bd1_7 {{\partial u}\over{\partial t}}+u{{\partial u}\over{\partial x}} = -g{{\partial H}\over{\partial x}} -gI_f エネルギー勾配 :math:`I_f` はマニング則を用い, 広矩形断面を仮定して, .. math:: :label: eslope u={1 \over n_m} h^{2/3} I_f^{1/2} の関係を用いると, :eq:`bd1_7` 式は以下のように変形できます. ただし :math:`n_m` はマニングの粗度係数です. .. math:: :label: bd1_8 {{\partial u}\over{\partial t}}+u{{\partial u}\over{\partial x}} = -g{{\partial H}\over{\partial x}}-{{g n_m^2 u^2}\over{h^{4/3}}} 以下の説明では, 運動方程式としてこの非保存形の :eq:`bd1_8` 式を用います. 本来は, 非保存形では不連続な流れは扱えないはずなのですが, CIP法を用いると :eq:`bd1_8` 式でも不連続な流れにある程度対応可能なことは前の章でも説明したとおりです. CIP法の適用の準備(分離解法) ============================ 基礎式を再記すると, .. math:: :label: b_cont {{\partial h}\over{\partial t}}+ {1 \over B}{{\partial (uBh)}\over{\partial x}} = 0 .. math:: :label: b_mom {{\partial u}\over{\partial t}} + u{{\partial u}\over{\partial x}} = -g{{\partial (h + z_b)}\over{\partial x}} -{{g n_m^2 u^2}\over{h^{4/3}}} ということになります. :eq:`b_cont` 式で :math:`h` を, :eq:`b_mom` 式で :math:`u` を計算します. ここで, 分離解法を :eq:`b_mom` 式に適用します. 即ち, .. math:: :label: bb_1 {{\partial u}\over{\partial t}}= -g \displaystyle{\left( {{\partial h}\over{\partial x}} + {{\partial z_b}\over{\partial x}} \right) } -{{g n_m^2 u^2}\over{h^{4/3}}} .. math:: :label: bb_2 {{\partial u}\over{\partial t}}+u{{\partial u}\over{\partial x}}=0 と分離します. ただし, :math:`H=h+z_b` の関係を用いてあります. :eq:`b_mom` 式で, :math:`u^n \rightarrow u^{n+1}` を計算するのを, 中間に :math:`\widetilde{u}` を設け, :eq:`bb_1` 式で :math:`u^n \rightarrow \widetilde{u}` を, :eq:`bb_2` 式で :math:`\widetilde{u} \rightarrow u^{n+1}` を計算します. なお :eq:`bb_1` 式には :math:`h` が含まれているため, :eq:`bb_1` 式を計算する際に, :eq:`b_cont` 式を同時 に満たす必要があります. これを :math:`h^n \rightarrow \widetilde{h}` と 表しておきます. なお :eq:`bb_2` 式のほうには :math:`h` が含まれませんので, :eq:`b_cont` 式と関連付けようがありませんので, :math:`h^{n+1}` は :eq:`b_cont` 式と :eq:`bb_1` 式を連立して出てくる :math:`\widetilde{h}` をそのまま用いて, .. math:: :label: bb_3 h^{n+1}=\widetilde{h} とすることにします. 以上を整理しますと以下の表のようになります. .. list-table:: 1次元非定常流れの分離解法 :header-rows: 1 * - Phase名 - :math:`u` と :math:`h` の更新 - 使用する式 * - **[A]** \ Non-advection Phase - :math:`u^n \rightarrow \widetilde{u}, h^n \rightarrow \widetilde{h}` - :eq:`bb_1` 式, :eq:`b_cont` 式 * - **[B]** \ Advection Phase - :math:`\widetilde{u} \rightarrow u^{n+1}, \widetilde{h} \rightarrow h^{n+1}` - :eq:`bb_2` 式, :eq:`bb_3` 式 Non-Advection Phase ====================== :eq:`bb_1` 式で :math:`u^n \rightarrow \widetilde{u}` を計算して 同時に :math:`h^n \rightarrow \widetilde{h}` を行うので, :eq:`bb_1` 式を以下のように表します. .. math:: :label: bsa_1 {{\widetilde{u}-u^n}\over{\Delta t}}=-g \displaystyle{ \left( {{\partial \widetilde{h}}\over{\partial x}} + {{\partial z_b}\over{\partial x}} \right) } -{{g n_m^2 \widetilde{u}^2}\over{\widetilde{h}^{4/3}}} これより, .. math:: :label: bsa_2 \widetilde{u}= u^n - g \Delta t {{\partial \widetilde{h}}\over{\partial x}} - g \Delta t {{\partial z_b}\over{\partial x}} - g \Delta t {{n_m^2 \widetilde{u}^2}\over{\widetilde{h}^{4/3}}} 一方, :eq:`b_cont` 式で :math:`h^n \rightarrow \widetilde{h}` を求めるので, .. math:: :label: bsa_3 {{\widetilde{h}-h^n}\over{\Delta t}} + {1 \over B} {{\partial}\over{\partial x}} (\widetilde{u} \widetilde{h} B ) =0 を満たす必要があります. したがって, :eq:`bsa_2` 式と :eq:`bsa_3` 式を連立して得られる :math:`\widetilde{h}` および :math:`\widetilde{u}` を求める必要があります. CIP法で流体の計算を行う場合は :math:`u` と :math:`h` の計算点を交互に配置する スタッカード格子が用いられます. ここでは, :numref:`1d_stk_b` に示すような計算点 の配置を採用することにします. .. _1d_stk_b: .. figure:: images/03/1d_stk_b.png :width: 80% : スタッカード格子 :numref:`1d_stk_b` の計算点の配置を考慮して :eq:`bsa_2` 式を差分表示すると, .. math:: :label: bsa_4 \widetilde{u}(i) = u^n(i)-g\Delta t {{\widetilde{h}(i+1) - \widetilde{h}(i)}\over{\Delta x}} -g\Delta t {{z_b(i+1) - z_b(i)}\over{\Delta x}} - g \Delta t {{n_m^2 \widetilde{u}(i)^2}\over{\widetilde{h_p}^{4/3}}} ただし, :math:`\widetilde{h_p}=[\widetilde{h}(i)+\widetilde{h}(i+1)]/2` , となり, これを :eq:`bsa_2` 式左辺第2項に代入するために, .. math:: :label: bsa_5 \widetilde{Q}=\widetilde{u} \widetilde{h} B なる流量 :math:`Q` を定義し(:math:`Q` 計算点は :math:`u` と同じとする), 格子点の配置を考慮して, .. math:: :label: bsa_6 \widetilde{Q}(i)= \widetilde{u}(i) {{\widetilde{h}(i+1)+\widetilde{h}(i)}\over{2}} B_u(i) ただし, :math:`B_u` は :math:`u` の計算点における `B` の値であり, .. math:: :label: bsa_61 B(i)=\cfrac{B_u(i)+B_u(i-1)}{2} で表される. :eq:`bsa_6` 式の :math:`Q` を用いた :eq:`bsa_3` 式の差分式 .. math:: :label: bsa_7 \widetilde{h}(i) = h^n(i) + {1 \over B(i)} \left[ \widetilde{Q}(i)-\widetilde{Q}(i-1) \right] {{\Delta t}\over{\Delta x}} より :math:`\widetilde{h}` を求めることが出来ます. ただし, :math:`bsa_7` 式には右辺の :math:`\widetilde{Q}`にも :math:`\widetilde{h}` が陰な形式で含まれるため, 繰り返し計算が必要になります. この手順は :numref:`flow_chart4` に示すとおりです. .. _flow_chart4: .. figure:: images/03/flow_chart4.png :width: 60% : Non-Advection Phase における :math:`\widetilde{h}(i)` および :math:`\widetilde{u}(i)` の計算手順 Non-Advection Phaseにおける :math:`\widetilde{u}(i)` が求まった段階で, Non-Advection Phaseにおける :math:`\displaystyle{\widetilde{{\partial u}\over{\partial x}}}` を求めておく必要があります. これは, :eq:`na8` 式で :math:`f` を :math:`u` と置いた次式で求めることが出来ます. .. math:: :label: bsa_8 \widetilde{{\partial u}\over{\partial x}}(i)= {{\partial u}\over{\partial x}}^n(i) +{{1}\over{2\Delta t}} \left[ \widetilde{u}(i+1)-u^n(i+1)-\widetilde{u}(i-1)+u^n(i-1) \right] Advection Phase ====================== Advextion Phaseにおいては :eq:`bb_2` 式に直接CIP法を適用することが出来ます. これについては何度も説明しましたので結果のみ書きますと, 次式で求めることが出来ます. .. math:: :label: ap_1 {u(i)}^{n+1}=U(X)= \left[(aX+b)X+ \widetilde{{\partial u}\over{\partial x}}(i) \right] X +\widetilde{u}(i) ただし, :math:`\widetilde{u}(i)` および, :math:`\displaystyle{\widetilde{{\partial u}\over{\partial x}}(i)}` はそれぞれNon-Advection Phaseにおける :math:`u` および :math:`u` の空間微分量であり, それぞれ, :eq:`bsa_4` 式および :eq:`bsa_7` 式で求まった値です. また, :math:`U(X)` は Non-Advection Phaseにおける :math:`u` の空間分布関数であり, 次式で与えられます. .. math:: :label: ap_2 U(X)= \left[(aX+b)X+ \widetilde{{\partial u}\over{\partial x}}(i) \right] X +\widetilde{u}(i) 従って, Advection Phaseにおける :math:`u` は :math:`U(X)` を用いて, .. math:: :label: ap_3 u(i)^{n+1}=U(X) となります. Advection Phaseにおける :math:`u` の空間微分量 も同様に, .. math:: :label: ap_4 \widehat{{\partial u}\over{\partial x}}(i) = 3aX^2 + 2bX + \widetilde{{\partial u}\over{\partial x}}(i) および .. math:: :label: ap_5 {{\partial u}\over{\partial x}}^{n+1}(i) = \widehat{{\partial u}\over{\partial x}}(i) -{{u(i+1)-u(i-1))}\over{2\Delta x}} \widehat{{\partial u}\over{\partial x}}(i) \Delta t で求めることができます. まとめ ======== 以上,流下方向に川幅が変化する1次元自由水面流れの計算をまとめると :numref:`flowchart5` のフローチャートとなります. .. _flowchart5: .. figure:: images/03/flow_chart5.png :width: 60% : 幅が変化する1次元自由水面を有する流れの計算フローチャート Pythonコード =============== 上記水路幅が縦断方向に変化する1次元非定常流れの計算コードの例を下記に示します. https://github.com/YasuShimizu/1D-Free-Water-Surface-with-Width-Variation このGitHubのフォルダにある拡張子がpyのファイルが計算用のファイル群ですが,このうちmain.pyが計算コードの本体と なります.計算条件は[config.yml]を下記で記述します.コメントにある項目を適宜修正することにより 条件を変更しながら計算を行うことが出来ます. .. code-block:: python xl : 200 # 水路長(m) nx: 51 # x方向格子数 j_channel: 1 # 水路の状態 1=一定勾配 2=勾配変化点あり # j_channel=1の場合 slope: 0.002 # 全体の勾配 # j_channel=2の場合 x_slope : 100 # 勾配変化点 slope1 : 0.001 # 上流側勾配 slope2 : 0.01 # 下流側勾配 xb1 : 90 # 突起始り地点の上流端からの距離(m) xb2 : 100 # 突起頂点の上流端からの距離(m) xb3 : 110 # 突起終了地点の上流からの距離(m) dbed : 0. #突起高さ(m) xw1 : 80 # 川幅変化点1の位置(m) xw2 : 100 # 川幅変化点2の位置(m) xw3 : 120 # 川幅変化点3の位置(m) w0: 1 # 川幅1(m)(上流端) w1: 1 # 川幅2(m) w2: 0.75 # 川幅3(m) w3: 1 # 川幅4(m) w4: 1 # 川幅5(m)(下流端) qp : 1 #単位幅流量(m**2/2) g : 9.8 #重力加速度 snm : 0.025 # 粗度係数 alh : 0.6 # 水位計算緩和係数 lmax : 50 # 水位計算最大繰り返し回数 errmax : 0.0001 # 打ち切り誤差 hmin : 0.01 # 最小水深(m) j_upstm : 2 # 上流端の条件 1=Wall, 2=Free, 3=Fixed Value j_dwstm : 3 # 下流端の条件 alpha_up: 1.0 # 上流端の水深(等流水深に対する割合) alpha_dw: 0.7 # 下流端の水深(等流水深に対する割合) etime : 400 # 計算終了時間(sec) dt : 0.05 # 計算タイムステップ tuk : 10 # アウトプットインターバル 川幅の変化は,xw1, xw2, xw3, w0, w1, w2, w3,w4 で与えることとし, これらのパラメーターの説明は下図のとおりとなります. .. _width_cond: .. figure:: images/03/width_cond.png :width: 80% : 川幅の設定に関するパラメータ 計算例 ======== 中央部に狭窄区間を含む直線水路の水面計の計算例 ------------------------------------------------------ 幅1mで中央部に幅が0.75mの狭窄部を含む水路の計算例を下図にしまします. この例では,下流端を等流水深より下げた,低下背水としてあります. 計算結果の図には,以下の式で表される等流水位,限界水位も並記して あります. .. math:: :label: h0hc h_0=\left(\cfrac{Q n}{B \sqrt{i}}\right)^{3/5}, \ \ h_c=\left(\cfrac{Q^2}{B^2 g}\right)^{1/3} .. _htwidth: .. figure:: images/03/htwidth.gif :width: 90% : 水路の途中に狭窄区間を含む流れの低下背水の計算例