iRICの格子生成アルゴリズムNays2Dv用格子生成ツール "Grid Generator for Nays2Dv"の機能追加及び修正について

# はじめに
2022年9月27日にiRICに搭載されている格子生成アルゴリズムである「Nays2Dv用格子生成ツール」のバージョン1.0.22092701をリリースしました。
本記事は追加された機能、修正点について紹介するものです。

なお、「Nays2Dv用格子生成ツール」の紹介記事については現在作成中のため近日中に公開予定です。

<details><summary>バージョンについて補足</summary>

本バージョンへの更新以前ではiRICのver3とver4（試験的にリリースされているもの）ではインストールできる「Nays2Dv用格子生成ツール」のバージョンが異なっていました。
今回のアップデートによりiRICの両バージョンで同じバージョンの「Nays2Dv用格子生成ツール」がインストールできるようになっています。
本記事ではiRIC　ver3に搭載されていた「Nays2Dv用格子生成ツール」のver 1.0.5から今回搭載されたver1.0.22092701への変更点をまとめて整理しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/67322bf9-5ab5-c9fa-6469-5712778469e8.png)


</details>

# 変更点
変更点は主に以下の3つです。
GUIのパラメータ名等が少し異なっているので旧バージョンを使用されていた方はご注意下さい。

* [下流端の河床高を指定できるように変更しました。](#下流端水位の河床高を指定できるように変更)
* [縦断方向の平均河床高の求め方を修正しました。](#縦断方向の平均河床高の求め方を修正)
* [入力するパラメータを変更しました。](#入力するパラメータを変更)

## 下流端水位の河床高を指定できるように変更
旧バージョン(ver 1.0.5)では下流端の河床高を設定できませんでしたが、新バージョンでは下流端の河床高を指定できるようになりました。
河床高の指定は格子生成条件の入力画面で、`河床形状`グループある`下流端の河床高(m)`という項目に任意の標高を入力して下さい。
デフォルトでは0mに設定されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/565814ee-9c60-531f-cb14-e3a7b9950f03.png)



以下の条件で河床高(j=1の格子点のY座標)が設定される流れのイメージを示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/a6be3abb-3a74-25ab-a8e7-e7df242fc98a.png)




* 初期状態ではすべての格子の河床高は0で設定されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/73464d2a-4f04-02ec-851a-c9f044ad1395.png)

* 河床勾配を設定することによる各格子点の変位量は以下の式でで与えられます。

```math
\biggl( \frac{流下方向水路延長}{2} - 上流端からの距離 \biggr) * 河床勾配
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/a483bad8-b3a9-2841-1859-23ae46f9891b.png)

* 河床擾乱(コサインカーブ)を設定することによる各格子点の変位量は以下の式で与えられます。




```math

河床擾乱の波高*\cos \biggl(2 \pi \Bigl(\frac{河床擾乱波長-上流端からの距離}{河床擾乱波長}\Bigr) \biggr)
```
ただし
```math
河床擾乱波長=\frac{流下方向水路長}{河床擾乱の波数} \\
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/5c7b76ec-83fe-71da-11ec-503b6cf56d77.png)

* 上記で求められた勾配による変位と擾乱による変位量を合計して河床形状を求める。
（ver 1.0.5では河床高の設定はここまでで終わっていました。）



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/8aee21d1-71ce-547d-6b44-dc8ce45cb67f.png)

* 下流端の河床高を指定した値に設定するため、①各格子点から下流端の河床高を引いて下流端の河床高を0に合わせてから、②各格子点に指定した下流端河床高の値を足してスライドさせる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/3ec02ed2-77ba-fd7b-4e14-d8c1ccf5f476.png)


## 縦断方向の平均河床高の求め方を修正
「Nays2Dv用格子生成ツール」では水位(j=nyの格子点のY座標)を縦断方向の平均水深を指定して設定することができます。
その際に水深は縦断方向の平均河床高に指定した平均水深を加えた高さを基準に勾配や擾乱が設定されます。

iRIC ver 3に搭載されていたver 1.0.5では、下流端の河床高は指定されず、平均河床高は固定で0mに設定されていたと思われます。（ver 1.0.5のソースコードを入手できなかったため作成される格子より推測）

これは擾乱形状を直線またはコサインカーブとした場合、高さ0mを基準に縦断方向中央を中心とした点対称な河道形状となるため、問題ないのですが、河床波形状を選択した場合擾乱による変位が点対象ではないため平均水深がおかしな値となってしまう問題がありました。

（また、試験的に公開されているiRIC ver 4 betaに搭載されていたver 1.0.22090201では上流端と下流端の河床高の平均が用いられていたため、擾乱形状をコサインカーブか河床波形状に設定するとおかしな値になってしまう問題もありました。）

そのため今回新たにiRIC ver3およびiRIC ver4に搭載された新しいバージョンでは各格子点間の平均河床高の平均を求めることにより水路全体の河床高を求めるように変更しました。

上流からi番目の格子点(j=1)の河床高を$z(i)$、縦断方向のノード数を$n_x$とすると平均河床高を次式で求められます。

```math

\frac{\sum_{i=2}^{n_x} \frac{z(i)+z(i-1)}{2}}{n_x -1} 

```

イメージとしては$y=0$の直線と河床を示す直線に囲まれた面積と同じ面積を持つ、幅が水路長の矩形の高さが平均水深となるというものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/103a3d21-31ad-2bf8-88b3-493414d255e1.png)



## 入力するパラメータを変更

上記の2点の変更に伴い、格子生成条件入力画面で入力するパラメータも変更されました。

ver 1.0.5からの変更点を以下に整理します。

#### 河床形状グループ

* これまで「縦断形の設定（自動）」→「基本形状」の枠でまとめられていた河床擾乱に関するパラメータを「河床形状」としてまとめました。
* 「下流端の河床高(m)」を追加しました。
* 河床擾乱の波高は「河床擾乱形状」を直線またはコサインカーブにした場合は「河床擾乱の波高」、河床波形状にした場合は「河床波の波高」の値を使用していましたが、「河床擾乱形状」の選択に関わらず「河床擾乱の波高」を使用するように変更しました。
* 「河床擾乱の波高」に入力された値は「河床波波高」の項目により、1つの変数で実際の波高の値と平均水深に対する比率の2つの役割を切替えていましたが、これを「河床擾乱の波高(m)」と「河床擾乱波高の平均水深に対する比率」の2つの項目に分離させ変数を独立させました。
* 「河床波波高の単位」を「河床擾乱波高の設定方法」に変更し、選択肢を「実際の波高を入力する」と「平均水深に対する比率から求める」に変更しました。
* いくつかのパラメータのデフォルト値を変更しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/f2183d2f-ea94-dfe4-4236-d1774a66c780.png)


#### 初期水面勾配グループ

* グループ名を「初期水面勾配」から「水面形状」に変更しました。
* 「河床形状」グループにあわせて「鉛直方向のノード数」と「水面勾配」の位置を移動しました。
* 「河床擾乱の波高」と同様に「擾乱の波高（平均水深に対する比率）」を「水面擾乱の波高(m)」と「水面擾乱波高の平均水深に対する比率」に分離させました。
* 「Unit of Surface Perturbation Amplitude」を「水面擾乱波高の設定方法」に変更し、選択肢を「実際の波高を入力する」と「平均水深に対する比率から求める」に変更しました。
* いくつかのパラメータのデフォルト値を変更しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/c5761fc5-eab4-7003-1599-5d3820c2c220.png)

* 「水面形の定義方法」が「下流端の水位を与える」の場合、「平均水深」がグレーアウトして編集できませんでした。
河床または水面擾乱の波高を平均水深に対する比率から求める場合、この「平均水深」に入力された値を使用するため、「水面形の定義方法」で「下流端の水位を与える」を選択してもグレーアウトせず値を編集できるように変更しました。
* なお、新しいバージョンでは「水面形の定義方法」の選択肢は「平均水深を与えて擾乱を与える」と「下流端の水位と一定勾配を与える」に変更されています。

:::note
「水面形の定義方法」が「下流端の水位と一定勾配を与える」の場合、「平均水深」に入力された値は擾乱の波高を求めるためだけに使用されます。
水面形状はあくまで「下流端の水位(m)」と「水面勾配」から計算されるため、生成された格子の平均水深と「平均水深」に入力した値は別物であり、異なる値になります。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/b320c645-07b4-4f82-1fa1-bed1c57d1b15.png)