趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

オープンデータによる河川流解析:平面二次元流解析 : 数値計算編

computational-sediment-hyd.hatenablog.jp

の続きです.

数値計算は,特に変わったことはせずに普通の平面二次元計算です.

ドライベッドの処理

ちょっとサボって連続式だけに以下のような条件を付け加えました.

{ \displaystyle
    \begin{align}
        h^{n+1} = h^n - \frac{\Delta t}{\Delta x}( {q_x}_{i+1/2} - {q_x}_{i-1/2})
    \end{align}
}

if {q_x}_{i+1} == 0

 if {q_x}_{i} > 0

  {q_x}_{i+1/2} = {q _ x} _ { i }

 else : {q_x}_{i+1/2} = 0

else if {q_x}_{i} == 0

 if {q_x}_{i+1}  \lt 0

  {q _ x} _ {i+1/2} = {q _ x} _ {i+1}

 else : {q_x}_{i+1/2} = 0

ぎりぎり質量が保存される感じです.

今後修正します.

計算速度

computational-sediment-hyd.hatenablog.jp

numba.jitでまたまた衝撃的な速度です. 時間がかかり過ぎるので,計算時間を120分の1にしています.

  • numba.jitあり : 実時間3600sec 計算時間30秒
  • numba.jitなし : 実時間30sec 計算時間150秒

なんと600倍です.意味がわかりません.

コードはこちら


Wuさんの本のDry Bedの処理のところ(6.1.4 Wetting and drying technique)が面白いです.

Computational River Dynamics

Computational River Dynamics

AWS EC2上でのintel fortranのベンチマーク

computational-sediment-hyd.hatenablog.jp

をふまえて,

computational-sediment-hyd.hatenablog.jp

の続きです.

テストコードは前回と一緒です.

環境

環境について,AWS-EC2の環境について,容量不足でintel compilerが入らなかったので,前回よりストレージを無料枠の最大の30GBまで大きくしました.

AWS-EC2

  • EC2 t2.micro ストレージ30GB,東京リージョン:無料枠を利用
  • ubuntu18.04
  • gfortran GNU Fortran 7.3.0
  • ifort version 19.0.2.187

local-wsl-ubuntu

  • CPU:intel Core i7-8550U
  • windows10proのWSLのubuntu18.04
  • gfortran GNU Fortran 7.3.0
  • ifort version 19.0.2.187

local-windows10

結果

前回と少し結果が変わったので前回の条件のものも再記します.

AWS-EC2

  • gfortran : 6.4sec
  • ifort : 6.4sec
  • ifort -fast option : 6.4sec

local-wsl-ubuntu

  • gfortran : 5.2sec
  • ifort : 4.7sec
  • ifort -fast option : 4.3sec

local-windows10

  • gfortran : 5.4sec

考察

  • AWSの場合,intelを使っても全然早くない.なぜでしょう?大規模コードならもう少し差がでるかも.
  • localは,さすがintelさんです.
  • localのwindowsubuntuの差はほとんどない.
  • 上の結果からわかりませんが,AWSは各計算で計算時間がほとんど同じ.一方,localは他のタスクの影響をもろに受けるので時間差がでる.

もう少しいろいろ試してみます.


オープンデータによる河川流解析:平面二次元流解析 : 格子生成編

computational-sediment-hyd.hatenablog.jp

の詳細編です.

jupyterはこちら

格子生成

  • 原点の東経132.8143, 北緯35.4159,緯度から角度が26度
  • x軸(ξ軸)が1000m,y軸(η軸)が90m
  • メッシュサイズは5m

標高データの設定

  • さらに,周期境界で扱いやすくするため,平均河床勾配により正規化を行う.平均河床勾配は1/670.

出力

今回は,多次元データを取扱いのため,xarrayモジュールを使って,NetCDF形式で出力.

ds = xr.Dataset({'dz': (['x','y'], ZZZ)}, coords={'xc': (('x', 'y'), Qx), 'yc': (('x', 'y'), Qy)})
ds.to_netcdf('dz.nc')

ポイントと参考サイト

geoviewsによる描画

QuadMeshメソッドを使うことにより,曲線座標系の描画が非常に楽.

Quadmesh — HoloViews

Resampling Grids — GeoViews 1.6.2.post2+g5918985-dirty documentation

xarrayによるデータセットの作成

  • 今回は出力のみ使っているが,計算結果もxarrayによる出力している.多次元かつirregular gridsの扱いが容易.
  • NetCDFのファイルに入出力が可能であり軽量

Plotting — xarray 0.11.3+1.ga5cacb7 documentation

Serialization and IO — xarray 0.11.3+1.ga5cacb7 documentation

intel社さんからintel compiler for linuxを提供頂きました

経緯

intelのHP内に,Free Software Toolsのページあり,「Supporting qualified students, educators, academic researchers and open source contributors」と記載されております. そこで,Open Source Contributorの項目を辿ると,非商用ライセンスの申し込みのページがあり,個人情報やopen sourceの公開ページ(私はこのブログのgithubを記載),Project Description(私は河川の数値解析をオープンソースとして公開していると記載)を記載し,申し込みました.

すると,数日後intel社より,シリアルナンバー等が送られてきました. しかも,Intel® Parallel Studio XE Cluster Editionというフルパッケージです(50万円相当).

intel社さん,ありがとうございます.頑張ってopen sourceをアップします.

開発環境

提供いただいたのは良いのですが,手元にlinux環境がありません. 簡単に作れそうな環境として,WSL,AWSを利用しようと考えており,とりあえずWSLのみテストしました.

intel compiler on WSL

  • WSLのubuntu 18.04では,問題なく動きました.ただし,windows10のbuild 1803以降が条件です.1709では駄目でした. 詳しくはこちらを記事を参照

software.intel.com

  • インストール方法は以下を参照

qiita.com


AWSでの計算,ベンチマーク等は後日整理します.

AWS EC2上でのgfortranのベンチマーク

EC2が計算機として使えるのかをチェックしてみました.

環境

AWS-EC2

  • EC2の無料枠を利用
  • ubuntu18.04
  • gfortran GNU Fortran 7.3.0

local

ベンチマークコード

qiita.com

のコードをそのまま利用し,時間出力を追記しました.

program LeibnizFormula
  implicit none
  integer :: i = 0
  real(8) :: s = 0.0
  integer :: t1, t2, t_rate, t_max, diff

  call system_clock(t1)

  do i=0, 10**8
     s = s + (-1.0)**i /(2.0*i + 1.0)
  end do
  print *, 'Ans:', s*4

  call system_clock(t2, t_rate, t_max)
  if ( t2 < t1 ) then
      diff = (t_max - t1) + t2 + 1
  else
      diff = t2 - t1
  endif
  print "(A, F10.3)", "time it took was:", diff/dble(t_rate)

end program LeibnizFormula

結果

AWS-EC2 : 6.7秒

local : 5.1秒

  • localの普通のノートPCより20%程度遅い結果.
  • 致命的に遅くはないので,計算機としても使えるけど,速度を優先する場合は厳しい感じです.
  • 手軽に使えるので大量のケースの計算が必要な場合はいいかもしれないですね.

オープンデータによる河川流解析:平面二次元流解析

ようやく今年1つ目の記事です.

今年はオープンデータを活用したフィールドの計算をやろうとかなと思ってます. 第一弾は,平面二次元流の計算結果です.まだ,ソースは上げてないですが週末には上げます.

斐伊川ですがなかなかいい感じです.実はドライベッドで質量が保存しないところに結構苦労しました.

大きいものはこちら

2019/2/4 uplaod

github.com

徐々に解説を書きます.


www.xsim.info

openfoamの条件ファイルを作るwebアプリですがご存知でしたか?

こんなのが作りたいです.