趣味で計算流砂水理

趣味で計算流砂水理 Computational Sediment Hydraulics for Fun Learning

数値計算とか河川工学とかプログラミングのことを書いています

MENU

河川流一次元モデルの構築:インターフェイスの公開

ティーザーの公開(河川流一次元モデルの構築:ティーザー - 趣味で計算流砂水理)から随分時間がたってしまいましたが、ようやくインターフェイスが完成しました。

f:id:SedimentHydraulics:20200420231944p:plain

使用方法

データの読み込み

Webアプリケーションhttps://s1dmodel.herokuapp.com/s1dmodelを立ち上げると 次の画面が表示される。 (起動に1分程度かかります。)

f:id:SedimentHydraulics:20200420232014p:plain

参照でデータファイルを指定してdrawingをクリックすると 横断図と平面図が描画される。

サンプルデータは次のgithubリポジトリのdata-format-exampleフォルダのcalc-RiverSection.geojsonを使ってます。

GitHub - computational-sediment-hyd/WebApp-S1DRiverFlow-model: the project of web application development for S1D River flow model

データフォーマットの説明はこちら

computational-sediment-hyd.hatenablog.jp

横断図の操作方法

右上のPan又はBox Zoomを選択後、Cross Section図上のマウス操作で移動、拡大縮小が可能。Cross Section(横断図)とManning's roughness coefficient(マニングの粗度係数)はx軸がリンクしているため同時に動く。

f:id:SedimentHydraulics:20200420232036p:plain

平面図の操作方法

右上のBox Selectを選択後、Location図上で測点を選択すると該当する点がCross Section図上にも表示される。

f:id:SedimentHydraulics:20200420232059p:plain

悩んでいる点

レイアウト

ティーザーでは縦並びにしていましたが横並びにしました。一般的なノートPCだとスクロールなしで見れるかなという感じです。

分割断面の表示方法

なかなか良い方法が思いつかず色分けにしました。見にくいかな。


物理モデル部はすでにできているのですがレイアウトが・・・という感じです。

ソースはgithubで公開してます。

GitHub - computational-sediment-hyd/WebApp-S1DRiverFlow-model: the project of web application development for S1D River flow model

アプリケーションはHeroku上のDockerで動作しており、Pythonのパッケージのpanelを使っています。 解説記事は後日書きます。


関連記事を書きました。

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

2020/4/16時点pyviz関連の不具合の解消法

このブログでもしばしば登場するgeoviewsやholoviews等pyviz関連の話題です。

最近新しいシステムを作っていてbokeh serverやgeoviewsに不具合が出まくって苦労したのでその対応メモです。

これまでは、conda環境でpyviz channelを使って、

conda install -c pyviz [module name]

な感じで入れると動いていたのですが、先月(2020年3月)にbokehの大幅アップデート(1.4.0から2.0.0)があり、それ以降駄目っぽいです。

参考:Releases — Bokeh 2.0.1 Documentation

解決策としては1.4.0に戻すだけですが依存パッケージが多いので気を付ける必要があります。

githubのissuesには2.0.0でも大丈夫と書いていましたが駄目でした。geoviewsが動きませんでした。

参考:KeyError: 'show_bounds' when setting projection · Issue #433 · holoviz/geoviews · GitHub

まっさらのpython3.7から環境を作るコツは、

  1. bokeh=1.4.0をインストール
  2. pyvizをインストール

の手順で進めることです。逆にすると、geoviews等のパッケージがダウングレードされて不具合がでます。

具体的にcondaでgeoviewsを作る手順は以下です。 windows環境なのでその他の環境の方は必要に応じて修正して下さい。

conda create -n pyviz python=3.7
conda activate pyviz
conda install -c conda-forge bokeh=1.4.0
conda install -c pyviz geoviews

今後変わると思うのでその都度修正します。

衛星画像planetが面白い:河口砂州の月変動をレンダリングしてみた

久しぶりにふわっとしたネタを.

planet社の衛生画像を使うと下のような河口砂州の月変化が簡単に作れちゃいます。うっとりします。一昔前なら考えられない。

画像を右クリックで再生を選択

大きいものはこちら

planetの概要

要点は、

* 120機以上の衛生で常時全球をカバー
* アーカイブは晴れた日は1日1画像が保存されている。
* 空間解像度3m
* 4バンド(可視+近赤外)

河道分析への活用

河道の面的情報は実は非常に少なく、航空写真は数年に1枚程度です。 それだけだと例えば、河口砂州のように徐々に変化する現象はよくわかりません。 それを月単位、日単位でレンダリングすると、出水による流出、波浪による形成がより詳細に把握でき、メカニズム解明のきっかけになるはずです。 他にも河道内の現象はわかってないことが多くあり、解決に役立つと考えられます。

いろいろチャレンジしてみようと思ってます。

オーバーシュート解説:エイプリルフールなので

エイプリルフールなので.

fuckin CORONAの思いを込めて.

というか時間が余ったら勉強しましょう。


Lax-Wendroffスキームはオーバーシュートとアンダーシュートが生じる。

f:id:SedimentHydraulics:20200401191753p:plain

コードはこちら

河川流一次元モデルの構築:入力データの形式

ティーザー(河川流一次元モデルの構築:ティーザー - 趣味で計算流砂水理)を出した後、予備知識が無いと伝わらないことに気付きいろいろ関連記事を書いていました。

記事も揃ったので続きを書きます。

入力データの形式

データのイメージはこんな感じです。

'properties': {
    'calc-input': [
      //  分割断面1の情報 
        {'point': [
            [x[1],y[1],z[1]],
            [x[2],y[2],z[2]],
        //    ---------
            [x[n],y[n],z[n]],
        ]
      , 'manning': [man[1],man[2].....man[n-1]]}
      //  分割断面2の情報 
      , {'point': [
            [x[1],y[1],z[1]],
            [x[2],y[2],z[2]],
        //    ---------
            [x[n],y[n],z[n]],
        ]
      , 'manning': [man]} // 粗度係数は1要素のリストでも.man[1] = man[2].....= man[n-1] = manを想定
    ]
}

ティーザーに上げたデータを示すと以下です。

f:id:SedimentHydraulics:20200317192354p:plain

'properties': {
    'calc-input': [{'point': [[-24017.545356, -40951.686842, 26.07],
       [-24021.866931, -40954.201597, 25.59],
       [-24026.188506, -40956.716352, 24.06],
       [-24034.831655, -40961.745862, 21.82],
       [-24047.796379, -40969.290127, 21.7],
       [-24056.439528, -40974.319637, 20.96],
       [-24073.725827, -40984.378656, 18.83],
       [-24095.3337, -40996.952431, 18.66],
       [-24099.655275, -40999.467186, 16.87],
       [-24151.514171, -41029.644245, 16.46],
       [-24155.835746, -41032.159, 18.39],
       [-24173.122044, -41042.21802, 19.09],
       [-24220.659366, -41069.880324, 19.67],
       [-24255.231963, -41089.998364, 18.62],
       [-24259.553538, -41092.513119, 20.17],
       [-24268.196687, -41097.542629, 21.37]],
      'manning': [0.025]},
     {'point': [[-24268.196687, -41097.542629, 21.37],
       [-24281.161411, -41105.086893, 21.8],
       [-24289.80456, -41110.116403, 21.61],
       [-24302.769284, -41117.660668, 22.69],
       [-24307.090859, -41120.175423, 22.6],
       [-24311.412434, -41122.690178, 22.03],
       [-24345.985031, -41142.808218, 22.02],
       [-24354.62818, -41147.837727, 24.12],
       [-24358.949755, -41150.352482, 25.53]],
      'manning': [0.04, 0.04, 0.04, 0.04, 0.04, 0.035, 0.04, 0.04]}]}

データはこちら

次回はようやくインターフェイスです。Herokuを使っているのでそっちも書かないと。


fuckin CORONA

現場の水理学のヒントシリーズ:自然河道断面の平均流速公式

自然河道断面の計算は、教科書の水理学から実務の水理学へ展開するときの第一歩のようなものです。 簡単なんですが知らないとちょっと面倒なので解説しておきます。

基本なのにしっかりと記載されている書籍があまりないです。 水理公式集 に難解に記されているので読んでも良いと思いますが。。。

自然河道断面の平均流速公式

f:id:SedimentHydraulics:20200328193319p:plain

f:id:SedimentHydraulics:20200328193511p:plain

まとめ

  • 思ったよりすっきり書けた気がします。ニーズがあれば出典も含めてもう少し詳しく書きます。
  • プログラミングする方はわかると思いますが、オブジェクト指向に最適です。練習用にぜひコーディングしてみて下さい。

さらに高みに

それぞれが重い内容なのでニーズがあれば記事を書きます。

  • 不等流や不定流計算に用いる場合は、運動量補正係数又はエネルギー補正係数も上式を用いて計算する。
  • 実務ではもう少し複雑な方法を用いています。たかだか流速を計算するのに逆行列の計算が必要になります。興味のある方は河道計画検討の手引きに難解に記載されています。
  • 径深分割法の他に勾配分割法というものもありますが現在はあまり使われておりません。
  • 複断面河道で分割断面法を用いる重要な理由の一つに水位-流量の関係を単調増加関数として取り扱うというものがあります。この話が書いてある文献等は多分ないと思います。初心者には難しいですが井田(1960):広巾員開水路の定常流くらいですかね。

github

元データはgithubJupyter Notebook Viewer


  • はてなTeXは全然駄目ですね。複雑なalign環境は駄目です。
  • 書いてた論文の査読がやっと終わりました。今から校正みたいです。

マニング則の適用水深範囲について:粗度係数と相当粗度の関係より

河川流計算では河床の摩擦抵抗評価にマニング則が広く用いられます。 その理由は、マニングの粗度係数が水深によってほとんど変わらず、使い勝手が良いためです。

そこで、マニング則がどのような水深レンジまで適用できるのかを簡単にまとめてみました。

手法

マニング則と対数則を用いて、水深ごとの粗度係数と相当粗度の関係がどうなるかを示す。

マニング則を抵抗係数C_fで書き換えると次式となる。


C_f = \frac{g n^2}{h^{1/3}}

同様に、水深平均した対数則(粗面乱流)を書き換えると次式となる。


C_f = \dfrac{1}{\left[\dfrac{1}{\kappa}\log_e\left(\dfrac{11h}{k_s}\right)\right]^2}

ここに、\kappa:カルマン定数、n:マニングの粗度係数、k_s:相当粗度とする。

これらを連立して導いた、水深ごとのnk_sの関係は下図となる。

f:id:SedimentHydraulics:20200321155540p:plain

拡大縮小できるものはこちら

考察

k_s:4mm(河床粒径が約2mm)の場合

上図を拡大してみると下図となり、k_sが4mmのとき水深が0.01~10mでマニングの粗度係数nは0.015~0.018とほとんど変わらない。

⇒ 通常の計算ではマニング則で問題ない。

f:id:SedimentHydraulics:20200321163614p:plain

k_s:4cm(河床粒径が約2cm)の場合

同様にみると、k_sが4cmのとき水深が0.1~10mでマニングの粗度係数nは0.021~0.024とほとんど変わらないが、水深が0.01mではnは0.05と急激に上昇する。

⇒ 当たり前ですが、水深が粗度層以下になるのでマニング則は使えない。

f:id:SedimentHydraulics:20200321163629p:plain

まとめ

一次元流れのように十分な水深がある計算では問題ないですが、多次元で砂州のようなドライベッドが連続する河床での計算ではマニング則の適用について考えましょう。

githubにも同じ内容+グラフのコード等を上げてます。

Jupyter Notebook Viewer

参考

はてなTeX規則すぐに忘れる。

はてなブログでtexの数式がうまく表示されない場合の対処法 - INPUTしたらOUTPUT!


この内容もとある計算の準備です。