/* 銀河の衝突のシミュレーション */ #define N 6 #define NMAX 10000 #include "cpgplot.h" #include #include #include void rungen(double t, double x[], double dt); double fx(double t,double x,double y,double z,double vx,double vy,double vz); double fy(double t,double x,double y,double z,double vx,double vy,double vz); double fx(double t,double x,double y,double z,double vx,double vy,double vz); double fvx(double t,double x,double y,double z,double vx,double vy,double vz); double fvy(double t,double x,double y,double z,double vx,double vy,double vz); double fvz(double t,double x,double y,double z,double vx,double vy,double vz); double fx1, fy1, fz1; void main() { double xr[N]; double x[NMAX], y[NMAX], z[NMAX]; /* 粒子の座標 */ double vx[NMAX], vy[NMAX], vz[NMAX]; /* 粒子の速度 */ double t, dt; /* 時間, 時間ステップ */ float xplot[NMAX], yplot[NMAX], zplot[NMAX]; /* for plot */ double x1, x2, y1, y2; double xg1, yg1, zg1; double xg2, yg2, zg2; double vxg2, vyg2, vzg2; double mg1, mg2, eps, eps2; double dx1, dy1, dz1; double dx2, dy2, dz2; double r1, r2, r13, r23; double xp, yp, zp; double pi; double r, rg, vcirc; double ekin, epot, etot; int npar, nstep, np, i, istep, iseed; /* mg1, mg2: 銀河の質量 fx1, fy1, fz1: 粒子に働く力 */ char STR[8]; printf("粒子数: npar ?\n"); scanf("%d", &npar); printf("計算ステップ数: nstep ?\n"); scanf("%d", &nstep); printf("時間刻み: dt ?\n"); scanf("%lf", &dt); printf("衝突銀河の質量: mg2 ?\n"); scanf("%lf", &mg2); printf("衝突パラメータ: yg2 ?\n"); scanf("%lf", &yg2); printf("衝突銀河の速度: vxg2 ?\n"); scanf("%lf", &vxg2); pi= 3.1415926; mg1=1.0; /* mg2=1.0; */ eps=0.1; eps2=eps*eps; /* 初期条件の設定 */ x1=-5.0; x2=5.0; y1=-5.0; y2=5.0; /* 銀河1の位置 */ xg1=0.0; yg1=0.0; zg1=0.0; /* 銀河2の位置 */ xg2=-5.0; /* yg2=2.0; */ zg2=0.0; /* 銀河2の速度 */ /* vxg2=1.0; */ vyg2=0.0; vzg2=0.0; rg=1.0; iseed=1; np=-1; srand(iseed); /* 粒子を半径rgの球内にランダムに分布させ、回転の速度を与える */ for(i=0; i