前提・実現したいこと
pythonで格子ボルツマン法の気体シミュレーションを作っています。
境界条件について検討する段階で、以下の問題に直面しました。
発生している問題・エラーメッセージ
関数stream()内のnp.rollの第三引数にあたえるのはaxis=(0か1)しかないのではないと認識していたため、 以下のソースコードのがなぜ成り立つのかわかりません。 第三引数に軸を指定しているとネットには書いてあったのですが、どこを軸ととらえているのでしょうか。 説明をお願いしたいと思います。 以下のソースコードはこちらのサイトを参照しています。 https://salad-bowl-of-knowledge.github.io/hp/physics/2018/01/30/lattice_boltzmann.html
該当のソースコード
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation from ipywidgets import interact w = np.array([4/9 , 1 / 9, 1 / 9, 1 / 9, 1 / 9, 1 / 36, 1 / 36, 1 / 36, 1 / 36]) e = np.array([[0, 0], [0, 1], [0, -1], [1, 0], [-1, 0], [1, 1], [-1, -1],[1, -1], [-1, 1]]) def stream(): #障害物との衝突処理 global n for i, axis in zip(range(1, 5),[[1, 1, 0, 1], [1, -1, 0, -1], [0, 1, 1, -1], [0, -1, 1, 1]]): #(1)式 n[:, :, i] = np.roll(n[:, :, i], axis[1], axis=axis[0]) n[:, :, i + 4] = np.roll(np.roll(n[:, :, i + 4], axis[1],axis=axis[0]),axis[3],axis=axis[2]) for i in range(1, 9): n[:, :, i][barrier[:, :, i]] = n[:, :, i - (-1)**i][barrier[:, :, 0]] #衝突した分を逆向きの成分に流してます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。