Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

流体力学シミュレーション

Important

この章を読む前に

この章を読むには、以下の章を先に読んでおく必要があります。

私たちの身の回りにある空気や水の流れ、さらには天気予報や航空機の設計に至るまで、流体の動きを理解し予測することは工学的・科学的に極めて重要です。 数値流体力学 (Computational Fluid Dynamics, CFD) は、コンピュータを用いて流体現象をシミュレーションする分野であり、現代の設計開発には欠かせないツールとなっています。

本章では、流体の支配方程式であるナビエ=ストークス方程式を理解し、それを数値的に解くための代表的な2つのアプローチを学びます。

本章の構成

  1. ナビエ=ストークス方程式の基礎 流体の運動を記述する支配方程式(連続の式、運動量保存則)を導出し、非圧縮性流体の特徴と数値計算上の難しさ(圧力の扱い)について解説します。

  2. 差分法による流体シミュレーション 偏微分方程式を直接離散化する古典的な手法(MAC法)を用いて、キャビティ流れをシミュレーションします。圧力のポアソン方程式を解くプロセスをRustで実装します。

  3. 格子ボルツマン法 (LBM) 流体を仮想粒子の集団として捉える、比較的新しいシミュレーション手法です。アルゴリズムが単純で並列化に適しているため、GPUコンピューティングなどで威力を発揮します。

作業テーマ

作業ディレクトリは ~/rust-computational-physics-work/ からの相対パスです。 ユニットテストで確認する具体的なケースは、解析解、境界条件、許容誤差の観点からAI coding agentと相談して決めます。

テーマ作業ディレクトリ構造化するコードユニットテスト演習拡張演習
Navier-Stokes方程式fluid-dynamics/navier-stokesdivergence, laplacian, pressure_gradient小さい速度場で発散と差分を確認する無次元数やgrid spacingをmetadataに保存する
差分法によるCFDfluid-dynamics/finite-difference-cfdadvect, diffuse, project, apply_boundary小さい格子で境界条件とprojectionを確認するcavity flowの速度場をCSVに出力する
格子Boltzmann法fluid-dynamics/lattice-boltzmannequilibrium, collide, stream, macroscopic一様分布で密度と速度が保たれることを確認する障害物まわりの流れを保存する

検証と実装の観点

流体シミュレーションでは、格子、境界条件、安定条件、保存量を分けて確認します。 圧力、速度、分布関数を同じ関数に詰め込むと、誤差や不安定化の原因を追いにくくなります。

  • 差分演算、境界条件、time step、出力処理を分けて実装する。
  • divergence、mass、residualなど、問題に応じた診断量を確認する。
  • grid shape、spacing、Reynolds number、time step、境界条件をmetadataとして残す。
  • field dataはCSVで足りない場合、NumPy形式やHDF5などの配列形式も検討する。