この記事は著者が韓国語で書いた原文の翻訳です。 原文(한국어)を読む
9本の矢に閉じ込めたMaxwell–Boltzmann — LBM平衡分布が多項式である理由
コードの東向きの偏りは速度0.0891、マッハ約0.154に止まります。N=2の多項式が支える格子速度は約0.173までです。
1986年に格子ガスは倒れました。セルあたりの粒子が0個か1個で、ノイズは平均しても消えません。1992年にその整数は実数分布 に替わりました。ノイズは消えました。問いは残ります。実数9個が、無限次元のMaxwell–Boltzmannの代わりになるのか、です。
図の drift と切り捨て次数 を変えると、実線のMaxwell–Boltzmannと破線の多項式は重なるか、離れます。
で のとき、密度・運動量・エネルギーは重なります。 が1を超えると、破線だけが実線から外れます。マッハの天井 は、この外れとは別の位置です。数字は後で割ります。
整数から実数へ — 1986年のLGCAの死とLBMの誕生#
LGCA(Lattice Gas Cellular Automaton)は正方格子、6方向、衝突則一つでした。マクロ平均はNavier–Stokesに戻ります。ブール粒子(0または1)は統計的ノイズを増やしました。時間平均を延ばすとノイズは死にますが、見たかった過渡(transient)も一緒に死にます。
McNamaraとZanettiは各節点に実数分布 を置きました。 は時刻 、位置 で方向 へ向かう粒子の期待個数です。1ステップは二つに分かれます。衝突(collision)と伝送(streaming)です。
は緩和時間(relaxation time)です。 が平衡分布です。衝突は非平衡部分を の尺度で削り、streamingはその分布を1セル動かします。9個で足りる理由は、この の形にあります。
Maxwell–Boltzmannが抱える時限爆弾#
連続運動論の平衡はMaxwell–Boltzmannです。
は分子速度、 はマクロ流速、 は次元、 は温度、 は気体定数です。爆弾は が連続だということです。9本や19本だけ残すなら、この分布を間引く必要があります。
ガウシアン積分を矩形和に置き換えると失敗します。Navier–Stokesが求めるモーメント、、、運動量テンソル 、エネルギーが格子和とずれます。保存が壊れるとLBMはその場で止まります。
残す道は展開です。Maxwell–Boltzmannを直交多項式で開き、必要なモーメントだけ残します。その多項式がHermite、エルミートです。
エルミート多項式が分布を細切れにする
確率論的エルミート多項式(probabilist Hermite polynomial) は、標準ガウシアン重み の下で直交します。
最初の数項は 、、、 です。1次元平衡を等温、つまり に置くと、母関数が次を与えます。
は静止したガウシアンです。 は小さな drift です。 は平均運動エネルギーの補正です。より高い は非対称な裾です。LBMはこの和を有限次数で切ります。
等温展開の は1なので、熱速度も1です。図の はその熱速度で割った値です。天井として書かれた0.3は、この目盛りの です。 は天井より0.1上なのに、 の最初の3モーメントは合います。破線が離れる はマッハ1を過ぎた場所です。0.3と1は同じ失敗ではありません。
級数の 項は で、 です。係数だけ見ると、 では です。 では で、天井の約2.37倍です。 では で、 の約37倍です。比は です。 はこの項をまるごと捨てます。だから で密度・運動量・エネルギーが合っても、捨てた3次の大きさはすでに天井値の2倍を超えています。破線が離れる は、その係数が0.17付近まで上がった場所です。マッハ天井0.3は、曲線が目に見えて離れる点ではありません。3次の係数が0.0045を超える瞬間に、あらかじめ引いた線です。
2次切り捨ての意味 — 保存されるモーメント#
1次粘性のNavier–Stokesに要るのは三層です。、、運動量フラックス 。 が なので、分布に 項が要ります。
級数を で切ります。
これが平衡分布の連続形です。 以上は熱流束に使います。標準の等温LBMには残りません。捨てた項が、等温仮定とマッハ0.3の天井を同時に残します。その3次を戻すと、等温という仮定が先に壊れます。熱流束はその項が運ぶ断片なので、2次で止めたコードは、温度が流れる問題をこの多項式では受け取れません。マッハの天井と等温仮定は、一つの切断の両面です。速度を0.173より下に置いても、熱い壁と冷たい壁を同じ格子に載せると、この平衡は熱を運びません。
D2Q9はどうやって作られたか#
連続積分 を格子和 に変えるには求積(quadrature)が要ります。 次まで合わせるなら、その次数の多項式を正確に積分すれば足ります。
2次元で まで合わせるには、ガウシアン重みの下で5次多項式まで正確でなければなりません。運動量テンソルが を生むからです。Gauss–Hermiteの3点求積がその積分を担います。
1次元の節点は 、重みは です。その三つの根がなぜその位置なのかは、6次モーメントを9速度へ折ったエルミート求積が別に数えます。2次元のテンソル積は です。これがD2Q9です。格子単位に直すと で、速度は整数座標 に載ります。重み は、ガウシアン因子をGauss–Hermite重みに吸収した値です。
| index | ||
|---|---|---|
| 0 | ||
| 1–4 | ||
| 5–8 |
格子上の平衡は、連続形に を入れたものです。
、、 です。式の3、、 はこの三つです。 なら括弧は1で、 です。重みを足すと です。静止した質量の は0番方向に残ります。表の三つの重みは、1次元の重み の積です。静止方向は です。軸方向は です。対角は です。軸4本と対角4本を足すと で再び閉じます。9という個数と三つの分母は、同じテンソル積から出ます。
この1行が等温LBMコードの平衡です。多項式ですが、Maxwell–Boltzmannの最初の3モーメントを中に閉じ込めています。
Python — BGK衝突の1ステップ#
節点一つでの衝突1ステップです。
import numpy as np
cx = np.array([0, 1, 0, -1, 0, 1, -1, -1, 1])
cy = np.array([0, 0, 1, 0, -1, 1, 1, -1, -1])
w = np.array([4/9, 1/9, 1/9, 1/9, 1/9, 1/36, 1/36, 1/36, 1/36])
def equilibrium(rho, ux, uy):
"""D2Q9平衡 — 9つの多項式"""
ciu = cx * ux + cy * uy # 内積
usq = ux * ux + uy * uy
return w * rho * (1 + 3 * ciu + 4.5 * ciu**2 - 1.5 * usq)
def bgk_collision(f, tau):
rho = f.sum()
ux = (cx * f).sum() / rho
uy = (cy * f).sum() / rho
feq = equilibrium(rho, ux, uy)
return f - (f - feq) / tau, rho, ux, uy
# 非平衡な初期分布
f = w * 1.0
f[1] += 0.05; f[3] -= 0.04 # 東側へわずかに偏らせる
for step in range(20):
f, rho, ux, uy = bgk_collision(f, tau=0.8)
err = np.linalg.norm(f - equilibrium(rho, ux, uy))
print(f"step {step:2d}: rho={rho:.4f}, u=({ux:+.4f},{uy:+.4f}), ||delta||={err:.2e}")初期分布は から に0.05を足し、 から0.04を引きます。質量は です。 運動量は です。なので 、 です。 で割るとマッハは約0.154です。天井0.3の格子速度 より下です。本文が言う20ステップ後の 未満の残差は、この保存された の上の平衡へ寄る過程です。衝突が残すのは、各ステップの と だけです。
を0.55側へ下げると、残差は1、2ステップで消えます。粘性は です。コードの では です。 では で、コードの粘性の6分の1です。 をさらに まで押すと粘性は0になり、格子は不安定になります。 を上げると粘性は増え、平衡へ引き寄せられる速さは落ちます。非平衡を1ステップで掛ける倍率は です。コードの では なので、倍率は です。符号がひっくり返る過緩和です。絶対値 を20回掛けると です。偏差が1の程度でも、20ステップ後には よりずっと下です。本文が20ステップを の目盛りにしたのは、この倍率だけでもすでに余裕のある回数だからです。 なら倍率は0で、1ステップで平衡に着きます。コードの0.8は、その1ステップ平衡から一つ外した値です。
マッハ0.3の向こうでは、この多項式を信じません#
は 、、運動量フラックスまでを合わせます。その上は捨てました。格子速度が約0.173を超えると、捨てた項はもう小さくありません。 を下げて粘性を から にしても、平衡多項式はそのままです。速度を天井の上へ上げることと、粘性だけを下げることは、別の失敗です。
静止枠で合わせた粘性が、枠を横へずらしてもそのままかは、この式は答えません。切り捨てた3次がその答えを持っています。枠を動かしたとき、3次モーメントの欠損が粘性を変えるかは、まだこの多項式の外にあります。
関連記事
役に立ったらシェアしてください。