本テキストへの感想, 質問, 要望, バグ報告などはこちらへお願いします.

3. PythonコードのソルバをiRICに組み込む

ここでは https://i-ric.org/yasu/nbook2/12_Chapt12.html に示されている2次元流れと河床変動の計算コードを iRIC Version 4 に組み込んで,

  1. 計算条件の設定

  2. 計算の実施

  3. 計算結果の表示

を行う方法について解説します. 上記コードは https://i-ric.org/yasu/nbook2/11_Chapt11.html#id2 で示されている流路が曲がっている場合の条件も含まれているため, 蛇行しながら川幅の変化も伴うような自然河川のあらゆる 平面形状もほぼ網羅していることになります. すなわち, iRICで動くPythonで書かれた任意形状河川・水路の流れと 河床変動計算モデル(ソルバー)ということになります.

なお, iRIC Version 3 では既に NaysMini Ver. 1 https://i-ric.org/yasu/NaysMini/index.html というソルバーを公開してました. こちらは, Pythonによる2次元流れの計算を iRICに組み込んだものですが,

  1. 河床変動の計算は出来ない

  2. 座標が直交・直線座標にのみにしか対応していない

ということで,今回はこれらの問題を解消したより汎用性が高いソルバーの 公開を行うこととし, これを iRIC Version 4 対応の NaysMini Ver. 2 とします.

3.1. 計算条件パラメーター

以下の情報をパラメーターとして入力することにします.

Table 3.1 水理・河床・数値計算条件(Hydraulic Bed and Computational Condition)

パラメータ名

変数名

単位

流量

qp

m \(^3\) /s

マニングの粗度係数

snm

m \(^{-1/3}\) s

重力加速度

g

m/s \(^2\)

動粘性係数

snu_0

m \(^2\) /s

側壁摩擦係数

cw

河床材料平均粒径

diam

m

河床材料の空隙率

slambda

静止摩擦係数 \(\times\) 動摩擦係数

musk

無次元2次流強度

nsta

水位収束計算の緩和係数

alh

各タイムステップでの水位収束計算最大回数

lmax

最小水深

hmin

m

最小流速

vmin

m/s

渦動粘性係数の係数

ep_alpha

Table 3.2 時間に関するパラメーター(Time related parameters)

パラメータ名

変数名

単位

計算修了時間

etime

sec.

計算結果アウトプット間隔

tuk

sec.

計算タイムステップ

dt

sec

河床変動開始時間

bstime

sec

Table 3.3 境界条件と初期条件(Boundary and initial condition)

パラメータ名

変数名

判定

上流条件

j_west

0:開放, 1:閉鎖

下流条件

j_east

0:開放, 1:閉鎖

下流端水位条件

j_hdown

0:自由流出, 1:等流水深, 2:固定水位を与える

下流端水位(j_hdwon=2の場合のみ有効)

h_down

m単位

初期水位縦断条件

j_inih

0:直線 1:等流計算 2:不等流計算

3.2. ソルバー定義ファイル(definition.xml)の作成

ソルバーの基本情報, 計算条件, 格子属性などが記載された ソルバー定義ファイルを作成します. ソルバー定義ファイルについての詳しい説明はこちら https://iric-solver-dev-manual.readthedocs.io/ja/v4_jp/02/02_folder_solverdef.html#create-solverdef-folder を参照してください. ここでは, 2次元, 構造格子で, 上記の計算条件をiRIC-GUIで入力するための情報を含む defaul.xmlファイルはこちら https://github.com/YasuShimizu/NaysMini-V2/blob/main/definition.xml になります.

3.3. 2次元河床変動計算モデル

河床変動計算モデルの基本的部分は [現場のための水理学令和版] に掲載されている 蛇行河川の河床変動計算(実践編) と同じものですが, 本テキストの目的はすべてのコードをiRICのGUIと連携させながら動かすことなので,I/O部分の改良が必要です. また,iRICとは直接関係ありませんが,計算の安定化のために.以下の改良を行っております.

3.3.1. Non-Advection Phaseにおける水位計算差分式の変更

[現場のための水理学令和版] 執筆の段階では Non-Advection Phaseにおける水位計算差分式は https://i-ric.org/yasu/nbook2/09_Chapt09.html#oldeqs に示す,下記のような差分式で計算してましたが,

(3.1)\[\overline{u_s}= u_s^n +\Delta t \Biggl( - g{\cfrac{\partial \overline{h}}{\partial s}} - g{\cfrac{\partial \eta}{\partial s}} - g{\cfrac{n_m^2 \overline{u_s}\sqrt{\overline{u_s}^2 +\overline{u_{ns}}^2}} {\overline{h_s}^{4/3}}} +{\cfrac{\overline{u_s}\; \overline{u_{ns}}}{r_s}}\Biggr)\]
(3.2)\[\overline{u_n}= u_n^n+\Delta t\Biggl(- g{{\partial \overline{h}}\over{\partial n}} - g{{\partial \eta}\over{\partial n}} - g{{n_m^2 \overline{u_n}\sqrt{\overline{u_{sn}}^2 +\overline{u_n}^2}} \over{\overline{h_n}^{4/3}}} -\cfrac{\overline{u_{sn}}^2}{r_n} \Biggr)\]

ここでは,右辺の摩擦項にある \(\overline{u_s}\) および \(\overline{u_n}\) を 右辺に移動し未知数として扱うことにより以下の式で求めることにします.

(3.3)\[\overline{u_s}=\cfrac{u_s^n +\Delta t \displaystyle{\left(- g{{\partial \overline{h}}\over{\partial s}} - g{{\partial \eta}\over{\partial s}} + {\cfrac{\overline{u_s}\; \overline{u_{ns}}}{r_s}}\right)}} {1+\Delta t \cfrac{g n_m^2 \sqrt{\overline{u_s}^2 +\overline{u_{ns}}^2}}{\overline{h_s}^{4/3}}}\]
(3.4)\[\overline{u_n}=\cfrac{u_s^n +\Delta t \displaystyle{\left(- g{{\partial \overline{h}}\over{\partial n}} - g{{\partial \eta}\over{\partial n}} - {\cfrac{\overline{u_{sn}}^2}{r_s}}\right)}} {1+\Delta t \cfrac{g n_m^2 \sqrt{\overline{u_{sn}}^2 +\overline{u_{n}}^2}}{\overline{h_s}^{4/3}}}\]

3.3.2. プリポスト処理に対するiRICライブラリーの適用

プリ処理としての計算条件パラメータの入力,およびポスト処理としての計算結果出力およびiRICとの連携は https://iric-solver-dev-manual.readthedocs.io/ja/v4_jp/index.html のiRIC Software Developper's Manualに示されるiRICライブラリーを使用します.

3.3.3. Pythonを用いた2次元流れと河床変動計算ソースコード

作成されたiRIC用のソースコードを https://github.com/YasuShimizu/NaysMini-V2 に示します.メインの部分は https://github.com/YasuShimizu/NaysMini-V2/blob/main/NaysMini.py であり,ここから同じレポジトリ中の各コードが参照され実行されます. "README" ファイルはソルバの説明(英文), "README_ja_JP" は日本語版の説明文です. "transration_ja_JP.ts" はプリポストで使用されるパラメーターや変数の英語・日本語対応ファイルです.

3.3.4. インストール方法

[iRIC-Version4]のインストールフォルダ"/private/solvers" に"NaysMini"というフォルダを作成し,その中に上記リポジトリ中のすべてのファイルをコピーすることにより iRICへのインストールが完了します.