古典力学シミュレーション
Important
この章を読む前に
この章を読むには、以下の章を先に読んでおく必要があります。
物理シミュレーションにおいて、最も基本的かつ直感的なのが古典力学 (Classical Mechanics) のシミュレーションです。 粒子の動きを追跡することは、惑星の軌道計算から気体分子の運動、さらには銀河の形成に至るまで、あらゆるスケールの現象理解の基礎となります。
数学的には、これはニュートンの運動方程式を数値的に解くことに他なりません。
本章では、常微分方程式で学んだ解法を物理の問題に応用し、さらに物理系特有の性質(エネルギー保存則など)に適した高度なアルゴリズムへと発展させていきます。
本章の構成
-
質点系の運動 運動方程式を数値計算に適した1階の連立微分方程式に変換する方法と、基本的な空気抵抗のある落体のシミュレーションを行います。
-
シンプレクティック積分法 標準的なルンゲ=クッタ法が抱える「エネルギー保存の破れ」という問題を指摘し、長時間の安定計算を可能にするシンプレクティック積分(オイラー・クローマー法、速度ベレ法)を導入します。
-
惑星運動(ケプラー問題) 万有引力を受けて運動する惑星の軌道を計算します。ここで
ndarrayクレートを用いたベクトル演算の実装方法を学び、シンプレクティック積分の威力を確認します。 -
分子動力学入門 多数の粒子が相互作用する多体系のシミュレーション(分子動力学法)を構築します。周期境界条件やレナード・ジョーンズ・ポテンシャルの実装を通じて、実践的な物理シミュレーションの基礎を固めます。
作業テーマ
作業ディレクトリは ~/rust-computational-physics-work/ からの相対パスです。
ユニットテストで確認する具体的なケースは、解析解、境界条件、許容誤差の観点からAI coding agentと相談して決めます。
| テーマ | 作業ディレクトリ | 構造化するコード | ユニットテスト演習 | 拡張演習 |
|---|---|---|---|---|
| 質点系の運動 | classical-mechanics/particle-motion | force, state_derivative, rk4_step | 空気抵抗なしの放物運動を解析解と比較する | 軌道をCSVに出力する |
| シンプレクティック積分 | classical-mechanics/symplectic | euler_cromer_step, velocity_verlet_step, energy | 調和振動子でエネルギーの変化を確認する | Euler法と長時間安定性を比較する |
| Kepler問題 | classical-mechanics/kepler | acceleration, energy, angular_momentum, step_verlet | 円軌道のエネルギーと角運動量を確認する | 軌道と保存量をCSVに出力する |
| 分子動力学 | classical-mechanics/molecular-dynamics | minimum_image, pair_force, compute_forces, kinetic_energy | 周期境界、LJ力のゼロ点、作用反作用を確認する | SoA化し、cargo benchで力計算を比較する |
検証と実装の観点
古典力学のシミュレーションでは、軌道の見た目だけでなく、保存量と単位系を確認します。 特に長時間積分では、短時間の局所誤差よりもエネルギーや角運動量のdriftが重要になる場合があります。
- force、state、time step、保存量の計算を分けて実装する。
- 解析解、保存量、対称性、作用反作用を小さいテストで確認する。
- 初期条件、単位系、time step、積分手法をmetadataとして残す。
- agentに実装を任せた場合も、力の符号、境界条件、保存量の定義をdiffで確認する。