趣味で計算流砂水理

Computational Sediment Hydraulics for Fun

numba.jitの挑戦:SIMPLE法による3Dキャビテーション流れの計算はどこまで速くなるか!10分⇒?

モチベーション

関連記事

computational-sediment-hyd.hatenablog.jp

computational-sediment-hyd.hatenablog.jp

結果

  • 先に結果を示すと10分が6秒になりました。約100倍です。悪くないです。

f:id:SedimentHydraulics:20200619111552p:plain

プログラミング

ほとんど修正していません。 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が適用できるようにコーディングしている気がします。

まとめ

  • 前記事では計算時間が10分でも十分速いと書きましたが、numba.jitを使うと6秒で回るので全く問題なしです。
  • 不明な点があればコメントをお願いします。

GitHub

github.com


前記事から久しぶりに新しいモデルを書いたので楽しかったです。ぜひ回してみて下さい。