2009/05/01
昔話と中学生のとき作ったソルバー
Diary | |
なんとなく思い出した。中3のとき、飛行機が飛ぶ原理を解明したくて、空気の動きをシミュレーションするソルバーを作ったことがある。それを自由研究として出したら、マイクロソフト本社研修旅行の切符を手に入れてしまったのだ。
粒子法
粒子を空気の分子と見立て、翼に衝突すれば反射し、運動エネルギーを与えるという単純なモデルを採用した。空気の圧力 (とそれに関連する物理法則) は、グリッドに存在する粒子の数を数え、隣同士のグリッドの圧力の差を調べ、さらにグリッドに属する粒子に運動エネルギーを与えることでシミュレーションを行った。
バグ
ブースで説明をするとき、どこかで物理を教えている (と記憶している) 先生からの指摘があった。それは、翼から衝撃波が発生してはいないか?というものだった。よく調べてみると、確かに衝撃波だった。
僕の作ったソルバーはシミュレーションのタイムステップが重要な役目を果たしている。隣接するグリッドに圧力が伝播する時間をタイムステップにしなければ、適切に計算できないのだ。後でじっくり調べてみると、流体の速度の 1/2 がそのまま音速になるというとんでもないバグがあった。つまり、どのような巡航速度で調べても、マッハ2 のときとおなじ衝撃波が発生してしまうのだ。
疑問
このソルバーは飛行機の翼が傾いているときには揚力 (実際には揚力でなく浮力) を発生させることを示したのだが、傾いていないときには、逆に飛行機が沈む方向に運動エネルギーが発生してしまったのだ。(飛行機の翼は主に上方向に出っ張っていて、その部分から沈む方向のエネルギーが発生する。) 当時は空気の粘性をシミュレーションしていないための問題と結論付けたが…謎である。(今考えれば…ベルヌーイの定理をシミュレーションしていなかったため?)
でも物理的に間違っていなかったこと
衝撃波をこのソルバーで作成し、衝撃波を構成する分子の速度を調べてみると、ほとんど変化はしないということが結論づけられた。(翼にぶつかった粒子がおもいっきり反発するので、その分は変化してしまうのだが。) これは物理的に正しい事実だったはず。衝撃波はあくまで波動であって、粒子の目だった運動ではないということだ。