趣味で計算流砂水理

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

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

MENU

似非VOF:like interfoam

以前Openfoamのinterfoamの話がでたので、気になって自分でコーディングしてみました。 延べ2週間以上かかりました。苦労しました。

いろんなことがわかったので書いておきます。

参考資料

このあたりです。

https://www.jstage.jst.go.jp/article/jscejoe/69/2/69_I_748/_pdf

https://www.researchgate.net/publication/235679014_Influence_of_surface_tension_implementation_in_Volume_of_Fluid_and_coupled_Volume_of_Fluid_with_Level_Set_methods_for_bubble_growth_and_detachment

https://www.slideshare.net/takuyayamamoto1800/openfoaminterfoam

特徴

  • interfoamはVOFですが、SOLA-VOFのようにドナーアクセプタとか考えるのが煩わしいので、そこを簡易的に扱ってます。言葉で説明できないですが、支配方程式をみれば多分わかります。
  • あくまでも、二相流のソルバーです。密度の異なる2相を同一の方程式で解いてます。
  • 今回は省きましたが、運動方程式の表面張力項や占有率の保存則の付加項により、界面がきれいに表現できるらしい。

モデルと結果

  • とりあえず鉛直二次元です。
  • 空間解像度は、0.1m、dtを0.0001secです。fortran2008で書いており、gfortranでコンパイルしてます。
  • ノートパソコンですが、10secの計算に30分程度かかります。
  • dtを大きくしても回りますが、結果がおかしくなります。
  • スキームはHSMACを使ってます。openfoamは、PISOなので、計算時間に関係しているのかもしれないです。
  • PISOって、SIMPLEを非定常場に適用できるように拡張したものらしいですが、線形化を行ってる点は同じですね。openfoamの公式をみると、PISO+SIMPLEでPIMPLEという名前になってましたが、独自の名前っぽいです。以下を参照しました。

http://zzchina2010.blog.shinobi.jp/%E3%82%BD%E3%83%AB%E3%83%90%E3%83%BC%EF%BC%9Aopenfoam/openfoam%E3%82%BD%E3%83%AB%E3%83%90%E3%83%BC%E9%96%8B%E7%99%BA%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA%E7%9F%A5%E8%AD%98

  • 上記の川崎先生の論文の条件と合わせてましたが、計算時間短縮のため、メッシュサイズは5倍です。
  • なんとなく雰囲気はでてますよね。

f:id:SedimentHydraulics:20170715124150g:plain

結論

  • 界面の表現に注力しすぎてて、流れの内部構造に関する議論がない。ほんとに大丈夫?
  • 精度を上げるためには、四分木(八分木)は必須じゃないかと。
  • 密度や動粘性係数の評価方法に物理的根拠はない。
  • こんなの物理じゃない。なので、VOFはもう辞めます。

コードはDBにfakeInterfoamで。fortranですが、こんなコードをC++で書きたいと思ってます。


2019/5/29追記

ソースコードをみたいとのコメントがありましたのでgithubに上げました. 非常に稚拙なコードで恥ずかしいです...

github.com

windows環境

いろいろありがとうございます。

私の環境は、VS 2017 communityです。問題なく動いてます。intel compilerも入れてますが、VS 2017上で動きます。全ての日本語化されてます。 特に工夫もせずにクリックだけで環境が構築出来たので、よくわからないです。 VS 2017は、オンラインインストーラーなので、そのあたりでしょうか。

今手元に4台PCがありますが、すべて64bitで32bitはないです。ただ、配布用のプログラムは、64bit、32bit両方でコンパイルして配布してます。このあたりは、intel compilerは便利です。

昨日gistをあげようとしたら、なぜか上手く行かず何度もチャレンジしていたら、アカウントと凍結されてしまい、supprotにメールをしたりと何か大変でした。今朝確認したら解決されてました。

上げようとしたものは、以前書いたキャビテーションのコードをjupyterで書いたのでそれです。VOFのための事前準備ですが遅すぎて使い物になりませんでした。Fortranで再整理してアップする予定です。

Re:基本的な計算機の作り方について

OSについて

CentOSで問題はないと思いますが、Ubuntuでもできるようです。 MPIについては詳しくないので、ここらへんを知っている方が使っている環境に合わせれば、 いろいろ聞けると思いますので、それも手かなと。

なお、IntelCompilerについてはCentOSでしか、 使ったことがありません・・・。

MPIではありませんが、弊社だとCentOSです。

C++

11とか14とかはわかりませんが、 ロベールの評判がよかったです。 私自身は読んでませんが。

https://www.amazon.co.jp/ロベールのC-入門講座-ロベール/dp/4839926050/ref=la_B004LVT31Q_1_1?s=books&ie=UTF8&qid=1498301564&sr=1-1

オブジェクト指向については、 かなり理解されていると思うので、 ポインタまわりだけでよろしいかと思うのですが。

最近は、

www.amazon.co.jp

です。厚いので大変です。

基本的な計算機の作り方について

linux環境も揃えてるとは… コンパイラは何を使ってますか。gccですか。

基本的なことを教えていただきたいのですが、新規でPCを購入して計算機を作ろうと考えています。

環境はこんな感じをイメージしております。

言語:FortranC++ CPU:Xeon phi 目的:高速化とメモリに乗り切らない場合のためのMPI環境の構築

Cent OS 7.0 + intel compilerが基本だと思っているのですが、これが本当に最良でしょうか?

あと、c++入門の本は何がおすすめでしょうか。

OpenFoam

C++

この前、C++の話をしていたので、OpenFoamでも使ってみようかなと思います。

Tutorialでダムブレークがあったので回して見ました。

f:id:SedimentHydraulics:20170610214456p:plain

Linuxで使うのでインストールがちょっとめんどくさいですが、 それなりに使えるんですね。

自分たちが開発したものと、OpenFoamでの結果と比較できると説得力が増すかなと思います。

RE3:pygridgen-c

pygridgen-cのwindows

何とかコンパイルまでは行ったのですが、pythonから呼んだときにエラーが出ます。試しに32bit環境で動かすと何故か上手く行きます。

いろいろ調べているとctypesに32bitと64bitで差がありそうです。元のプログラムがpython側でしっかりと型宣言していないため、このあたりを丁寧に修正する必要がありそうです。 ただ、c++をよく分かってないので、ちょっと困ってます。ダブルポインタとかあるし。

その他

  • モダンなc++が書きたい気分です。
  • 久しぶりに直交曲線の計算をやったら、デカルトで解けなったのがすんなり解けてびっくりです。やっぱり、実河川の問題では境界適合格子は必要かもしれないですね。