next up previous
Next: 8 レポート課題 Up: 計算天文学 II 第11回 データ構造とアルゴリズム(2) Previous: 6 計算精度のチェック

7 練習

  1. 参考プログラム
    http://grape.astron.s.u-tokyo.ac.jp/~makino/
            kougi/keisan_tenmongakuII/programs/index.html
    
    にある BHtree.C を動かしてみて、総当たりで計算するのと木構造で計 算するのとで計算した加速度、ポテンシャルの値を比べ、$\theta$ を小さく したときに差がどのように小さくなるか、また小さくなりかたは粒子数によっ てどのように変わるか調べてみよ。
  2. 上の誤差が理論的にはどうなるべきか考察せよ。

  3. 計算時間はどうなるか、粒子数 100 程度から 10,000 程度までで調べ てみよ。

  4. 参考プログラム
    http://grape.astron.s.u-tokyo.ac.jp/~makino/
            kougi/keisan_tenmongakuII/programs/index.html
    
    にある treecode.C を動かしてみて、適当な時刻(5 か 10 くらい)まで計算した時のエネ ルギーや運動量の誤差が ソフトニング、時間刻み、見込み角によってどのように変わるかを調べよ。コ ンパイルするには
    g++ -O2  -I/home/makino/utils/pgplot5.2  -o treecode   treecode.C BHtree.C \
                -L/home/makino/utils/pgplot5.2 -lcpgplot -lpgplot \
                -L/usr/X11R6/lib -lX11 -lf2c -lm
    
    で(多分)大丈夫のはず。

  5. mk_plummer.C は「プラマーモデル」と言われる銀河や星団の星 の分布関数の簡単なモデルに従って粒子を発生させ、標準出力に結果を書くプ ログラムである。
    # mk_plummer -n 100 > plummerin
    
    とすることで 100 個の粒子の質量、位置、速度を1行に1粒子づつ書く。なお、 最初の2行は粒子数と現在時刻(つねに0)である。

    プログラム treecode.C をこの形式のファイルをを読み込んで初期条件とするよう に改造してみよ。

  6. プラマーモデルは「力学平衡」なモデルであり、一つ一つの粒子は動く が全体としての粒子分布は時間がたっても変わらない。これでは見ていてつま らないので、読み込んだ後で位置、速度をずらした自分のコピーを作り、2つ がぶつかるような条件から計算するプログラムを作ってみよ。

  7. 2つのプラマーモデルを正面衝突させることを考える。初期に2つが重力 的に束縛されていれば、この2つは最終的には合体する。逆に初期の速度が十 分大きければ、正面衝突しても通り抜けてしまってそのまま無限遠にいってし まう。合体が起きるためには、初期の速度が無限遠での速度に換算した時にい くつ以下であればよいか調べてみよ。合体するかどうかどうやって判定すれば いいか?また、答は粒子数や計算精度によってどんなふうに変わるか?



Jun Makino
平成16年1月25日