MatsuLab. Lecture Note/sougouenshu2007/round3/nbody
はすでに存在します。
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*N体問題パッケージ [#t241a10f]
基本的な計算の流れは以下になります。serial プログラムを参...
ちなみに、加速度算出のための式は以下~
ma = GmM/|r|^2 * r
m :点1質量
M :点2質量
G :万有引力定数
a :点1の加速度ベクトル
r :点1と2を結んだ方向ベクトル
|r|:二点間の距離
+点データを読み込む
+加速度計算をする(各点の位置情報が必要)
+速度計算をする(各点の加速度情報が必要)
+位置計算をする(各店の速度情報が必要)
+2に戻る
+規定ステップ繰り返したらデータを書き出して終了する
与えられる問題は以下の情報で構成されます
:state_t st| 問題の情報を収めた構造体
typedef struct state{
int nplots; // 点の総数
int delta_t; // 1ステップで経過する時間
int xmax; // すべての点の横方向の最大値、右端
int ymax; // すべての点の縦方向の最大値、下端
int xmin; // すべての点の横方向の最小値、左端
int ymin; // すべての点の縦方向の最小値、上端
float gc; // この問題で利用する万有引力定数
int cutoff; // カットオフ距離 (第4回までは使わない)
float msum; // 点の質量の総和 (普通は使わない)
} state_t;
:point_t plot| 点の情報
typedef struct point{
float x; // 点の x 座標
float y; // 点の y 座標
float vx; // 点の x 方向速度
float vy; // 点の y 方向速度
float m; // 点の質量
} point_t;
**パッケージ構成(2007/01/10現在) [#g92f7af3]
-&ref(nbody.tar.gz,, N体問題パッケージ 1/10版);
- nbody
+- nbody
| +- nbody-api.c
| +- mt19937ar.c
| +- nbody.h
| +- mt19937ar.h
| +- Makefile
|
+- problem
| +- problem.c
| +- Makefile
|
+- serial
| +- nbody.c
| +- Makefile
|
+- mpi_poor
| +- nbody.c
| +- Makefile
|
+- spe_poor
+- nbody.c
+- Makefile
-どんどん追加されていく予定
**準備 [#yfef734c]
-好きな場所で解凍する
tar xzf nbody.tar.gz
-一括コンパイルする
cd nbody
./make.sh
**使い方 [#n234404f]
*** libnbody.a (nbody 内) [#p9787ffc]
-問題読み込み等のAPIを持つライブラリ
-各自のPPEプログラムに必ずリンクすること
-利用するときはプログラムの最初に以下の行を書くこと
#include "nbody.h"
-たとえば、パッケージ内のディレクトリ serial に mynbody.c...
cd serial // serial の中に入る
gcc mynbody.c ../libnbody.a -o mynbody -I../nbody
-APIについて
:init_plots_map(char* filename, state_t *st, point_t **pl...
point_t *plots;
state_t st;
init_plots_map("filename", &st, &plots);
(plots[i].x とか plots[i].y とかでつかえる)
:write_plots_map(char* filename, state_t *st, point_t *pl...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
write_plots_map("filename", &st, plots);
:print_plols_map(point_t *plots, state_t st, int px, int ...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
print_plots_map(plots, st, 64, 32); //(横, 縦) = (64文字...
:dump_plots_map(point_t *plots, state_t st) | plots のデ...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
dump_plots_map(plots, st);
:fini_plots_map(point_t *plots) | plots に割り当てたメモ...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
fini_plots_map(plots);
*** problem (problem 内) [#l92db6de]
-問題の作成、閲覧を行うプログラム
-1024*1024空間の問題が作成される。閲覧はソレを 64*32 に縮...
-点数を大きくしすぎるとSPEのローカルストア上に乗らなくな...
-作成(点数1000の問題をファイル a.dat に書き込むとき)
./problem -n 1000 -w a.dat
-閲覧(ファイル a.dat を見るとき)
./problem -r a.dat
*** serial (serial 内) [#l484e8ad]
-逐次版 N体問題プログラム
-実行(../problem/a.dat を使い 10 ステップ計算して b.dat ...
./serial ../problem/a.dat b.dat 10
終了行:
*N体問題パッケージ [#t241a10f]
基本的な計算の流れは以下になります。serial プログラムを参...
ちなみに、加速度算出のための式は以下~
ma = GmM/|r|^2 * r
m :点1質量
M :点2質量
G :万有引力定数
a :点1の加速度ベクトル
r :点1と2を結んだ方向ベクトル
|r|:二点間の距離
+点データを読み込む
+加速度計算をする(各点の位置情報が必要)
+速度計算をする(各点の加速度情報が必要)
+位置計算をする(各店の速度情報が必要)
+2に戻る
+規定ステップ繰り返したらデータを書き出して終了する
与えられる問題は以下の情報で構成されます
:state_t st| 問題の情報を収めた構造体
typedef struct state{
int nplots; // 点の総数
int delta_t; // 1ステップで経過する時間
int xmax; // すべての点の横方向の最大値、右端
int ymax; // すべての点の縦方向の最大値、下端
int xmin; // すべての点の横方向の最小値、左端
int ymin; // すべての点の縦方向の最小値、上端
float gc; // この問題で利用する万有引力定数
int cutoff; // カットオフ距離 (第4回までは使わない)
float msum; // 点の質量の総和 (普通は使わない)
} state_t;
:point_t plot| 点の情報
typedef struct point{
float x; // 点の x 座標
float y; // 点の y 座標
float vx; // 点の x 方向速度
float vy; // 点の y 方向速度
float m; // 点の質量
} point_t;
**パッケージ構成(2007/01/10現在) [#g92f7af3]
-&ref(nbody.tar.gz,, N体問題パッケージ 1/10版);
- nbody
+- nbody
| +- nbody-api.c
| +- mt19937ar.c
| +- nbody.h
| +- mt19937ar.h
| +- Makefile
|
+- problem
| +- problem.c
| +- Makefile
|
+- serial
| +- nbody.c
| +- Makefile
|
+- mpi_poor
| +- nbody.c
| +- Makefile
|
+- spe_poor
+- nbody.c
+- Makefile
-どんどん追加されていく予定
**準備 [#yfef734c]
-好きな場所で解凍する
tar xzf nbody.tar.gz
-一括コンパイルする
cd nbody
./make.sh
**使い方 [#n234404f]
*** libnbody.a (nbody 内) [#p9787ffc]
-問題読み込み等のAPIを持つライブラリ
-各自のPPEプログラムに必ずリンクすること
-利用するときはプログラムの最初に以下の行を書くこと
#include "nbody.h"
-たとえば、パッケージ内のディレクトリ serial に mynbody.c...
cd serial // serial の中に入る
gcc mynbody.c ../libnbody.a -o mynbody -I../nbody
-APIについて
:init_plots_map(char* filename, state_t *st, point_t **pl...
point_t *plots;
state_t st;
init_plots_map("filename", &st, &plots);
(plots[i].x とか plots[i].y とかでつかえる)
:write_plots_map(char* filename, state_t *st, point_t *pl...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
write_plots_map("filename", &st, plots);
:print_plols_map(point_t *plots, state_t st, int px, int ...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
print_plots_map(plots, st, 64, 32); //(横, 縦) = (64文字...
:dump_plots_map(point_t *plots, state_t st) | plots のデ...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
dump_plots_map(plots, st);
:fini_plots_map(point_t *plots) | plots に割り当てたメモ...
point_t *plots;
state_t st;
(plots のデータ読みこみと計算後)
fini_plots_map(plots);
*** problem (problem 内) [#l92db6de]
-問題の作成、閲覧を行うプログラム
-1024*1024空間の問題が作成される。閲覧はソレを 64*32 に縮...
-点数を大きくしすぎるとSPEのローカルストア上に乗らなくな...
-作成(点数1000の問題をファイル a.dat に書き込むとき)
./problem -n 1000 -w a.dat
-閲覧(ファイル a.dat を見るとき)
./problem -r a.dat
*** serial (serial 内) [#l484e8ad]
-逐次版 N体問題プログラム
-実行(../problem/a.dat を使い 10 ステップ計算して b.dat ...
./serial ../problem/a.dat b.dat 10
ページ名:
既存のページ名で編集する