#include #include #define M_XENON 2.1802e-25 //キセノンの質量 #define E_XENON 3.20e-21 //キセノンのイプシロン #define S_XENON 3.98e-10 //キセノンのシグマ #define L_XENON 1.948e-9 //キセノンのセルの長さ #define DT 1.0e-15 //微小時間 #define STEP 50000 //ステップ数 #define N 100 //分子数 #define MD 2.29336758e24 //0.5/M_XENON void input(FILE *file1,double r[][3],double v[][3]); void force(double f[][3],double r[][3]); void next_r(double r[][3],double v[][3],double f0[][3]); void next_v(double v[][3],double f0[][3],double f1[][3],int n); void output(FILE *file2,double r[][3]); double potential,kinetic; int main(void){ FILE *file1,*file2; double r[N][3]; //位置 double v[N][3]; //速度 double f0[N][3]={{0}};//現在の力 double f1[N][3]={{0}};//次ステップの力 int n=0; file1=fopen("xenon.inp","r"); file2=fopen("mol.arc","w"); fprintf(file2,"100\n"); /***初期位置と初期速度の取り込み***/ input(file1,r,v); printf("cycle \t kinetic \t potential \t total\n"); for(force(f0,r);nvec[k]) vec[k]+=L_XENON; } dis=pow(vec[0],2)+pow(vec[1],2)+pow(vec[2],2); t1=pow(S_XENON,2)/dis; t2=t1*t1*t1; t3=pow(t2,2); t4=1/dis; potential+=t3-t2; t5=24*E_XENON*t4*(2*t3-t2); //力を求める(作用反作用の法則) for(k=0;k<3;k++){ f[i][k]+=t5*vec[k]; f[j][k]-=t5*vec[k]; } } } } /***次ステップの位置を求める***/ void next_r(double r[][3],double v[][3],double f0[][3]){ int i,j; for(i=0;i0.5*L_XENON) r[i][j]-=L_XENON; if(r[i][j]<-0.5*L_XENON) r[i][j]+=L_XENON; } } /***次ステップの速度を求め、エネルギーの表示***/ void next_v(double v[][3],double f0[][3],double f1[][3],int n){ int i,j; kinetic=0; for(i=0;i