趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

windows intel fortran 環境でのcmakeによるスタックサイズの設定

プライベートも仕事も忙しくてなかなか書けてません.

忘備録的に.

コマンドラインで打つときは,

ifort *** /fast /F10000000

的な感じですが,cmakeで

set (CMAKE_Fortran_FLAGS_RELEASE "/fast /F10000000")

だと駄目です.

正しくは

set (CMAKE_Fortran_FLAGS_RELEASE "/fast")
set (CMAKE_EXE_LINKER_FLAGS "/STACK:10000000" )

です.

地味に結構悩みました.

スタックサイズのチェック方法も忘れないようにリンクを張っておきます.

http://uzulla.hateblo.jp/entry/2013/08/14/230551

はてブロってcmakeもシンタックスハイライトがつくみたいです.

はてブロでjavascript

jsを埋め込み

普通に書けるみたいです.びっくりしました.

遊びで,leafletに地理院地図を取り込みD3.jsでsvgを書いて重ねてみました. 以下が参考サイトです.

http://bl.ocks.org/d3noob/9267535

https://shimz.me/blog/d3-js/3517

htmlからとのタグだけを削除すればOKです. ソースを見て頂けるとわかります.

感想

  • d3が使えるのは大きいです.計算結果とかにも使えそうです.
  • 地図系だとleaflet,openlayers,cesiumあたりが有名ですが,このあたりは慣れないと使えないですね.独特過ぎます.
  • 今はソースにsvgjsonを書いてますが,これを外部ファイルにすれば,サーバで計算を回して,レンダリングするみたいなことができそうです.ただ,膨大なデータだと処理が必要になってくるので,Node.jsとか使う必要がありそうです.
  • 最終的には,こんなのが作りたいですね.

Serre-type equations in deep waterって何?

https://arxiv.org/pdf/1607.00216.pdf

気になって,読んでるけど全然わかんないです.

わかれば教えてください.

アジョイント法と降下法と

あけましておめでとうございます。 今年は暴れます。

python

年末から取り組んでいましたが、fortranのアジョイント法をテスト用にpythonで書いてみました。 一応双子実験の同化結果の水深です。流下距離40kmで、0,20,40kmの結果です。完璧です。

f:id:SedimentHydraulics:20180106004104p:plain

fortranだと数千行のコードが300行程度です。嫌になりますね。もう少しまとまったらgitにあげようかと。

ただ、速度面のデメリットは相当あります。

DBに置いておきます。勉強会の議題にでも。

降下法

実は降下法のチェック用に書きました。 共役勾配法を使っていましたが、準ニュートン法にしようかと考えていました。 自分で書くのは大変なので、ググると、

http://users.iems.northwestern.edu/~nocedal/lbfgsb.html

が引っかかりました。fortranだし丁度いいなと。修正BSDだし。 ソースめっちゃ汚いです。名前だけのf90で実態はf77です。

ただ、降下法の速度を比較するため、pythonで作業していたので、python版も無いかと探していると、scipyにoptimizeのライブラリがあり,それを使うことにしました。

そこで、scipyのlbfgsbのソースを読んでいると面白いことに気付きました。 なんと、上のソースをf2pyで変換しただけです。

https://github.com/scipy/scipy/tree/master/scipy/optimize/lbfgsb

scipyも公開コードを使うんだな思いました。

師走ですね

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

基礎水理シンポジウム

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