モチベーション
- このブログでもしばしば登場するnumba.jitを3D計算でどれほど使えるのかを 前記事(SIMPLE法でもpythonならシンプルに書けるのか ⇒ かなりシンプルになるがやっぱり...(ソースコードあり) - 趣味で計算流砂水理)のSIMPLE法による3Dキャビテーション流れの計算で試してみました。
- numba.jitを知らない方はまず関連記事を読んだほうがスムーズだと思います。
関連記事
computational-sediment-hyd.hatenablog.jp
computational-sediment-hyd.hatenablog.jp
結果
- 先に結果を示すと10分が6秒になりました。約100倍です。悪くないです。
プログラミング
ほとんど修正していません。 numbaモジュールをimportすることと
import numpy as np import numba
各defの前に以下ように一行付け加えるだけです。
@numba.jit(nopython=True, parallel=False) def calupre(p,u,v,w,Vdir,Vbound,alphaU,dx,dy,dz,nu,axis):
@numba.jit(nopython=True, parallel=False) def caldp(p,u,v,w,acu,acv,acw,dx,dy,dz):
@numba.jit(nopython=True, parallel=False) def SIMPLE(p,u,v,w,Uslip,Vslip,alphaU,alphaP,dx,dy,dz,nu):
コード全体はこちら
上記の関連記事のとおり、numba.jitが使えない条件は多々ありますが、慣れてくるとほとんど引っかからないです。
私は日頃からnumba.jitを愛用しているため、無意識にnumba.jitが適用できるようにコーディングしている気がします。
まとめ
GitHub
前記事から久しぶりに新しいモデルを書いたので楽しかったです。ぜひ回してみて下さい。