Youtube登録者5000人突破!!

【LBM】計算フロー【格子ボルツマン法講座 #5】

はじめて格子ボルツマン法を学ぶ初心者のための講座、第5回になります。

格子ボルツマン法は歴史が浅いこともあり、まだ情報が少ないのが正直なところです。そこで、本サイトでは、ゼロからでも理解できるように丁寧に進めていくようにします。数学的な部分も極力簡単にするので、ぜひ最後までついてきていただけると幸いです。

全く知識のない人でも一応理解できるように説明しますが、可能であればナビエストークス方程式やほかのCFD(流体解析)の手法を知っておくとベターです。

前回は格子ボルツマン方程式の衝突項について説明しました。下記からどうぞ。

重要なポイントは下記のとおりです。

  • 衝突項は流体の保存に関する制約がある
  • 衝突モデルで最も有名で簡単なのがBGKモデルである
  • BGKモデルは単緩和時間モデル(SRT)とも呼ばれる
  • 多緩和時間モデル(MRT)もあり、複雑だが数値安定性に優れる
  • BGKモデルは緩和係数で流体が平衡状態になるまでの時間を設定する
  • 緩和係数は粘度で決定される
  • 平衡分布関数は局所的な平衡状態を表しており、マクロ的に見える流れの成分である
  • 非平衡分布関数は局所的な非平衡であり、マクロ的に見えない流れの成分である
  • 平衡分布関数は各方向に応じて重みがつけられる

前回は衝突に関する説明をしました。今回までの講座で格子ボルツマン方程式については全て説明したため、今回は格子ボルツマン方程式の全体の計算フローについて説明したいと思います。

計算フロー

格子ボルツマン法も他のCFDと同様に、「初期化」「計算ループ」の手順を踏むことになります。

例えば、初期値として流れの無いば$\rho = 1$、$u = 0$を考えてみましょう。

まずは平衡分布関数$f^{eq}$を計算します。

$$ f_i^{eq} (x,t) = w_i \rho ( 1 + \frac{u \cdot c_i}{c_s^2} + \frac{ (u \cdot c_i)^2 }{ 2 c_s^4} – \frac{u \cdot u}{ 2 c_s^2}) $$

この平衡分布関数$f^{eq}$を分布関数の初期値として使用します。

これで初期化は完了したため、計算ループに移ります。手順は下記のとおりです。

計算ループ

①衝突

ここではBGKモデルを使った衝突について説明します。

衝突と並進のステップに分けるため、一時変数$f^t$を取り入れます。衝突のステップは下記で計算できます。

$$ f_i^t (x,t)= f_i (x,t) – \frac{\Delta t}{\tau} ( f_i (x,t) – f_i^{eq} (x,t) ) $$

一見、格子ボルツマン方程式とおなじに見えるかもしれませんが、左辺が一時変数$f^t$になっていることと、左辺の空間・時間変数が進行していないことがわかります。(格子ボルツマン方程式だと$ (x+ e \Delta t , t + \Delta t) $)

実際のプログラムでは、計算回数を減らすために分布関数をまとめた下記式がよく使われます。

$$ f_i^t (x,t) = f_i (x,t) ( 1 – \frac{\Delta t}{\tau} ) + f^{eq}_i (x,t) \frac{\Delta t}{\tau} $$

②並進

衝突が終わったら並進のステップに進みます。

衝突で得た一時変数に対して、時間ステップを進めることで次の時間ステップの分布関数が得られます。

$$ f_i(x + e_i \Delta t, t+\Delta t) = f_i^t (x,t) $$

右辺は空間・時間変数が変化していないのに対して、左辺は空間・時間変数が変化していることがわかります。これが並進ステップです。

格子ボルツマン法では明確な時間ステップの進行はありません。その代わりに並進と時間ステップの進行が同時に起こります。

一回の時間ステップが小さいので大した差ではないですが、普通のCFDとは少し違うので覚えておきましょう。

③マクロ量の更新

分布関数が得られたらマクロ量を更新します。

$$ \rho = \sum f_i $$

$$ u = \frac{\sum e f}{ \rho } $$

これで一通りの計算フローは完了です。

境界条件を追加する場合は、並進の前後に挿入することになります。与え方にもよりますが、並進後の値を更新することが多いです。

衝突と並進どちらが先か?

格子ボルツマン法では、衝突と並進のどちらを先にすべきか議論になることが多くあります。

決着はついていないですが、個人的には計算できればどちらでもOKだと思います。

ただ、衝突と並進によって境界条件を与えるタイミングも変わってくると思うので、変更の際は境界条件の与え方に気をつけてください。

おわりに

今回は格子ボルツマン法の計算フローについて説明しました。

少し短いですが、全体像の把握はすごく重要です。ぜひ流れとして理解していただければと思います。

ポイントは下記のとおりです。

  • 計算は、「初期化」「衝突」「並進」「マクロ値の更新」で構成される
  • 衝突と並進を分けるため、一時変数を導入する
  • 境界条件は並進の後に入れる

格子ボルツマン法では、フラクショナルステップ法のように分けて計算します。一時変数はこれからもよく出てくるので、$f^t$の形は慣れておいてください。

次回はナビエ・ストークス方程式の復元として、Chapman-Enskog展開について説明します。

格子ボルツマン方程式は、ナビエ・ストークス方程式と同等の結果が得られますが、それは証明できます。次回は最も有名な Chapman-Enskog展開 について説明したいと思います。

かなり難しい内容ですが、重要な部分と全体像を理解できるようにわかりやすく説明するのでついてきていただけると幸いです。下記からどうぞ。