趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

師走ですね

プライベートがバタバタしており全然駄目です。時間がない。趣味のコーディングが全然できない

基礎水理シンポジウム

http://www.jsce.or.jp/committee/hydraulic/kisosuiri/h29/kiso_suiri_symp_2017.html

出張が入ってしまい行けなくなってしまいましたが、ちょっと中身がヤバイですね。 大事なテーマではありますが、興味のある人が超限定的ですね。参加者少なそうです。

ついでに実河川の乱流問題について思うところを。

  • 乱流モデルも大事ですが、実験水路と実河川ではレイノルズ数があまりにも違うので参考になるのかどうかもよくわからない。
  • 現地観測は、三次元的な計測事例は平水時や閉鎖性水域のみ。やっぱり我々のターゲットは洪水時。で、洪水時の計測は、木下良作さんの水面渦くらいでしょうか。このあたりは近年飛躍的に計測技術が向上しているので期待ですね。先ずは平面渦を計測し、いわゆる第一種二次元流の実河川スケールでの特徴を把握することが重要な気がします。
  • 乱流モデルは、現時点では趣味の世界ですね。多分、LESでメッシュを小さくして計算するのが良いと思いますが、河川流で重要な粘性底層の取り扱い等課題は山積みです。
  • ただ、乱流問題の重要性は非常にわかりにくいので土木で扱うのはけっこう大変かもしれないですね。

その他

  • 変分法にドはまり中です。同化対象を上流端流量⇒上流端流量+初期流量+初期水位に変更したら、多峰性にはまってしまいました。
  • いつか細田先生的なアプローチでデータ同化の論文を書いてみたいなと思ってます。「一点の水位情報のみで流れ場を計算」ではなく、「一点の水位情報から境界・初期条件を推定することにより流れ場を計算」になりますが、面白いと思いますか?
  • いつの間にはwordでsvgが扱えるようになってました。これでようやくmatplotlibからベクターで貼れます。

Upwind Flux Scheme:不連続面の修正2

前回上げたものが若干間違っていたので、修正しました。

せっかくシンプルなスキームなのにどうしても複雑になってしまいます。

河床高と水位の関係より不連続面の判定をしていますが、dxが大きくなった場合、この判定が上手く使えるか微妙なところです。

概ね安定しますが、ほんの僅かに質量保存が崩れてます。

不連続面は厄介ですね。みんなどうやってるのでしょうか。


処理なしの場合

f:id:SedimentHydraulics:20171030181522g:plain

処理を追加した場合

f:id:SedimentHydraulics:20171030181633g:plain

gist9a00b27130017211382ec8514ae2d340

環境構築:bash on ubuntu on windowsのgcc,g++,gfortranのアップデート

bash on ubuntu on windows(Windows Subsystem for Linux:以下WSL)のgcc等は、5.4で、c++11以降あるいはf2003以降が使えません。なので、最新を入れました。

http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/

から最新版の7.2をダウンロードしました。 以下を参考にソースからコンパイルしました。

https://solarianprogrammer.com/2017/05/04/building-gcc-wsl-windows-subsystem-linux/

なぜかconfigureでコケまくりました。原因不明ですが、configureの際に、buildのディレクトリを作らずにそのままの場所で行うと上手くいきました。

makeが死ぬほど時間がかかります。一晩くらいです。

この方法だと、最初からインストールされているgccとは別にgcc-7.2ができます。上書きしても問題ない気がしますが一応参考サイトのとおりに作りました。


プロキシ環境だとwget,apt等の設定が必要です。以下あたりを参考にしました。

http://blog.syo-ko.com/?eid=2441

https://qiita.com/chroju/items/752eaba0fc0e1b11c524

QGISでSAGAが動かないときの対処法:windows10-64bit環境

最近は仕事モードになってきて、以前ぶっ飛んだPCの環境を整えてます。

めずらしく備忘録的にあげておきます。

私はなぜかSAGA(System for Automated Geoscientific Analyses)が好きで、QGISで処理をするときは、ほとんどSAGAプラグインを使います。 先日PCがとんだので、QGISをインストールし直したら、SAGAが全然動きませんでした。 で、そのときの対応方法です。

QGIS SAGAのエラー

https://gis.stackexchange.com/questions/209902/problem-with-saga-in-qgis-2-14-6

によると、SAGA2.2.3までしか対応していないとのことです。私がインストールしたQGIS2.18 64bitでは、SAGA2.3.2でした。

修正方法1 ⇒ 駄目でした。

上のサイトにあるように、SAGAをプラグインを2.2.3に変更すれば良いと考えて、2.2.3をダウンロードしてきて、プラグインディレクトリを差し替えてみました。

でも、全く動きませんでした。ちなみに、QGIS2.14では、この対応により解決しました。

修正方法2

https://gis.stackexchange.com/questions/217414/saga-algorithms-not-working-on-qgis-2-18-on-mac-osx

にあるように、saga コマンドの変更により、"INTERPOL"が"RESAMPLING"が変更になったようです。それが、プラグインに反映されていないことが原因です。

なので、上記サイトを参考に修正しました。

  1. 対象フォルダに移動

私の環境では以下でした。

c:\OSGeo4W64\apps\qgis\python\plugins\processing\algs\saga\

  1. bashで以下を実行
mv description description_old
mkdir description
cd description_old
for i in *.txt; do sed "s/|INTERPOL|/|RESAMPLING|/g" $i > ../description/$i ; done

こんなときは、bashが便利ですね。

以上でSAGAが使えるようになりました。

seabornで日本語表示

何かとバタバタしていて全然書けないです。 今月は書きます。

seabornで日本語表示

windowsが変わるごとにフォントが変わるのでもう大変です。 多分この方法が一番ラクかなと思います。

ここを参考にしました。

  • ここからIPAexフォントをダウンロードします。
  • 解凍し、C:\Anaconda3\Lib\site-packages\matplotlib\mpl-data\fonts\ttfにコピー

これだけで、下準備はO.K.です。

後はpython上で

import seaborn as sns
sns.set(font='IPAexGothic', context='notebook', font_scale=1.5, style="whitegrid", palette="deep")

として、普通にmatplotlibでグラフを書けばO.K.です。

windows10と同じ、Yu Gothic UIのttf場所が全然わかりません。

Upwind Flux Schemeの問題点と修正

  • 2d Upwind Flux Schemeの計算で厳しい条件の場合、全然回らなくて苦労していたのですが、1dでいろいろテストして、ようやく見つけました。

  • Upwind Flux Schemeに限ったことではないですが、水面の不連続面が出てきた場合、厄介なことになります。コロケート格子特有かもしれませんが、下のgifのように水面はなんとか解けますが、どんどん水が増えてしまいます。

f:id:SedimentHydraulics:20170928205415g:plain

  • そこで、水面と河床高の関係より、不連続面を判断し、そこの運動量フラックスをキャンセルすることにより、連続性は確保されるようになりました。また、二次元でもテストしてみます。

f:id:SedimentHydraulics:20170928205504g:plain

  • 一次元だとここまで急変する断面はないですが、平面二次元だと普通にでてくるので、注意が必要です。とゆうか、こうゆう話ってどこにも書いてないですよね。あえて挙げると以下を参考にしました。

http://www.impact-project.net/publications/wp3_pub7.pdf

  • さくっと書いてますが、見つけるまでに相当苦労しました。最初はドライベッドの問題だと思い、そこばかりを気にしていたのに全然違いました。

gist4faa1ea740856745c1892422d06de8fd

続:改めて不等間隔格子の河川流一次元計算

冷静に考えたら、座標変換ですね。

基礎式です。


\frac{\partial A}{\partial t} + \frac{\partial \xi}{\partial x}\frac{\partial Q}{\partial \xi} = 0


\frac{\partial Q}{\partial t} + \frac{\partial \xi}{\partial x}\frac{\partial }{\partial \xi} \left( \frac{Q^2}{A} \right) = -gA\frac{\partial \xi}{\partial x}\frac{\partial H}{\partial \xi} -gAI_e


\frac{\partial \xi}{\partial x} = \frac{1}{\Delta x_{i+1} + \Delta x_{i}}\left(\frac{ \Delta x_{i}}{ \Delta x_{i+1} }(\xi_{i+1} - \xi_{i} ) + \frac{ \Delta x_{i+1}}{ \Delta x_{i} }(\xi_{i} - \xi_{i-1} )\right)


\Delta x_{i+1} = x_{i+1} - x_{i}


\Delta x_{i} = x_{i} - x_{i-1}

実河川の問題では必須のような気がします。

今度テスト計算をしてみます。