2020年5月4日月曜日

Python で河床変動計算

GWに入ったものの、出社禁止&テレワークだと(休日含む)残業を認めないという即席ルールのため、まとまった時間ができてしまいました。

せっかくなので、河床変動計算の復習をすることにしました。簡単な1次元のコードを作りながらより理解を深めようと(あわよくば地表流のコツを掴もうと)いう目的です。

コードは「現場のための水理学」をベースにしました。30年以上前の資料です。今でもBasic や Fortran ソースがHPで配布されています。
http://river.ceri.go.jp/contents/tool/suirigaku.html
まず、これを Python に取り込むことに。メモリ確保の手間や入出力、図化の効率を考えるとこちらの方が圧倒的に楽です。

と、いきなりですが、ここで躓きました。
サブルーチンを dll にしたのですが、Python側で読めません。少し粘りましたが解決せず。時間がもったいないのであきらめて完全移植することに(また後日調べましょう)。速度面のデメリットはありますが、1次元であれば許容できます。

次に改変。
ベースにしたのは不等流であり、これを Quasi-unsteady として時系列データに対応するよう改変しました。条件等をEXCELで作り、pandas 1行で読み込むだけです。本線・支川の流量はもちろん、下流端水位や支川からの土砂流入など、境界条件等を容易に設定できます。ついでにジオメトリもEXCELで。これも読むだけですのでお手軽です。

で、計算。1次元なのですぐに終了。同時に河床形状や水位を時系列で重ねて図化・表示するようにしたので、その場で結果の良し悪しがわかります。この点が特に欲しかった機能でした。

が、その結果がイマイチ。
上流端に境界条件として土砂流入を入れる形にしたのですが、これがマズイようでした。
あらためて上流端付近に支川を合流させ、そこから土砂を入れると良い形状になりました。支川は1つ増えますが、無理のない設定・計算なのでコチラが正解だったのでしょう。1つ賢くなりました。


2・3次元の現象を1次元に落とし込むには計算経験とセンスが必要です。私のような初心者にとって、このような手探りの作業を繰り返すことは必須なのでしょう。
今回、2年前に曖昧にしていた点の一部はクリアになりました。実務で使うにはマダマダですが、今後も改変を続けながら経験を積み上げていきましょう。

2 件のコメント:

  1. 初めまして、河川水理学を勉強しているものです。よろしければこの記事のpythonコード共有して頂けませんか?

    返信削除
    返信
    1. 初めまして。

      いくつか問題があり、共有できませんでした。
      御要望にお応えできず、申し訳ありません。

      「現場のための水理学」のソースを参考にしていますので、そちらを参照願います。


      削除