描画班班ゼミ資料 2004/10/27 飛田伸一 今週やったこと • Sin関数を使えるように努力 – mathlib • タイマーを使った測定(続編) – BS法 • Hccプログラミング – rocket.hcc • 非線形問題についての考察 • Hcc manualの読み込み • Hcc 処理系のソース読み • Grifonのソース読み • 時間測定についての考察 ※多体問題のサーベイはやらなかった mathlib • hccのマニュアルではsinなどの三角関数や random,absoluteなどの数学に関する関数につい ては何も触れられていない • srcディレクトリを見るとmathlib.cというファイルがあ りその中で定義してある。そしてそれをライブラリに して動的にリンクすることで、これらの関数を実現し ようとしている – #LIBRARY mathlibで使えるようにしてある • ここで定義されている関数は、 sin,pTsin,cos,pTcos,sqrt,pTsqrt,random,absolute, tan,signなどである mathlib • しかし、現在の処理系ではこれらは使えない • 原因は探りきれなかった • 試しにexamplesディレクトリのplane.hccを動 かしてみた。 mathlib • エラーメッセージは以下の通り – 自分のマシン(WinXP)のcygwinのエラー dlopen: Win32 error 193 Segmentation fault (core dumped) – banonのエラー ./bin/hybrid: /lib/libc.so.6: version `GLIBC_2.3' not found (required by ./bin/hybrid) Exit 1 – brieのエラー ./mathlib.so: cannot open shared object file: No such file or directory セグメントエラー 139で終了しました – 自分のマシンのwin版hccでやったときのエラー dlopen: Win32 error 193 6 [main] hybrid 3272 handle_exceptions: Exception: STATUS_ACCESS_VIOLATION 1550 [main] hybrid 3272 open_stackdumpfile: Dumping stack trace to hybrid.exe .stackdump mathlib • エラーについては http://www.skz.or.jp/ir9/sheela/prog/ayu/win32err .htmを参照すると良いかもしれない • 色々といじってみたが、結局解決しなかった • sinなどはシミュレーションにとって非常に重要なも のであるから、これが使えないというのは大問題 • Uedalabなどに流して助けを求めても良いかもしれ ない タイマーを使った測定(BS法) • 先週、BS法の測定をやっていなかったので やってみた – #INTEGRATOR BS • 条件は先週のスライドを参照 • 使用マシンはbrie • RKQCとBSでは#INTEGRATION_INITが無 効であるということが判明 タイマーを使った測定(BS法) • 何故か、ものすごく処理に時間が掛かった • しかし、タイムを見てみるとそんなに時間が たったわけではない • 理由は不明 • グラフ化は全データが集まってからにしたい planetの多体問題(相互依存)BS 1 2 1 0 0.01 2 0.02 0.03 3 2.14 4.32 4 5.7 11 5 11.15 22.26 6 20.2 40.56 7 32.75 8 65.9 9 178.39 10 254.41 複数のballの運動(依存関係なし)BS 1 2 1 0.01 0.01 2 0.01 0.01 3 0 0.01 4 0 5 0.01 6 7 8 9 10 4 0 0.03 8.8 21.99 46.51 8 0 0.04 17.57 43.16 92.62 16 0 0.05 34.9 85 181.05 32 0 0.05 70.33 171.36 64 0 0.06 141.23 344.98 4 0 0.01 0.01 0.02 0.02 8 0 0.02 0.03 0.05 16 0.01 0.04 0.06 0.09 32 0.02 0.07 0.11 64 0.04 0.13 0.21 0.38 Hccプログラミング • • • • rocket.hcc ロケットが真上に飛んでいくプログラム 2段(多段)ロケットにしたい 詳細はプログラムを参照のこと – Waitは待ち時間。自分より下のロケットが燃えて いる状態 – Fireは自分が燃えている状態 – Nofuelは燃料が無くなり、ロケットから切り離され て落ちている状態 Hccプログラミング • 課題点 – ロケット間の関係を見るのにはlistが必要。現在のverで はforallを使って自分の下のロケットを確認しているので、 処理時間がO(n^2)となっている。→lists.hccを参照して勉 強 – フラグを使って状態遷移を制御しているが、現在うまく いっていない→hccプログラミングの工夫 – 自分よりも上の重さは、今は引数によって与えているが、 自分で計算できるようにしたい – 自分の高さは、下の高さと自分の長さを足したものだが、 その辺をうまく計算できない 非線形問題についての考察 • とりあえず非線形が何を示すのかが漠然とし ているのは先週と同じ • 積分法について少し調べてみて、Euler法や ニュートン・ラプソン法を使えば非線形方程式 でも解けるという記述は発見した • では何故非線形問題で解けないものがある と言われているのか? 非線形問題についての考察 • 結論としてはその辺はまだ良く分かっていないので、調べる 必要がある。 • 教授に聞くのが早いかも知れない • おまけ:この前RKQCは4次と5次のRKをステップサイズを 見て使い分けていると、中村さんに言ったが、間違っている ということに気がついた。本当は4次と5次でやってみて、答 えに差が出てきたらステップサイズを動的に小さくするという 方法だった。 • この辺(integrator)については、まとめたものをwikiに載せて おいた方が良いだろう (参 考:http://science3.2ch.net/test/read.cgi/sim/948899815/) Hcc mamualの読み込み • 7章、8章辺りを読んだ • ソースも参考にしてみると、かなり分かりやす かった • 後で日本語化してpdfか何かにしておく予定 • TRAIL_CHUNK (p22)が良く分からない Grifonのソース読み(簡単に) • Grifonとhccの境目辺りを読んでみた • どこにバグがあるのかを見つけるのが重要 • EclipseのCVSの使用をもう少し効果的にす ると良い • Grifonが使えるようになれば、視覚的効果が 期待できる 時間測定についての考察 • 現在の処理系はclock()を使って時間を計っている。 この関数をつかうと、精度は10ミリ秒ぐらいになる • 若槻さんからgettimeofday()を使ってみてはとの提 案があったのでそれについて考えてみた • 調べてみたところgettimeofday()は、「CPU時間で はない」、「機種依存しない」、という特徴があること が分かった • clock()はCPU時間で、機種に依存する 時間測定についての考察 • 結局CPU時間でないと、測定時に困るのでclock()のほうが 良いのではないか • getrusage()というclock()の精度を良くした関数もある • しかし、精度が10ミリ秒あれば、現行のhccでは困らないと思 われる。何故なら、アニメーションの特性上、長時間hccを動 かさなければならないはずなので、そうなってくると10ミリ秒 の精度があればことが足りるからである • というわけでclock()でもそんなに問題は無いはず • 誰か暇な人がgetrusage()を使った処理系を実装 (参考:http://www.super-computing.org/sr8000/timer.html) 来週の目標 • 多体問題のサーベイ(先が見えないので、や る気が起きない) • Grifon周り(やっぱりアニメーションがあると 説得力が出てくるため) • Hccのソース読み • 来週は地味に
© Copyright 2024 ExpyDoc