#include #include #define M_ARGON 6.6335e-26 //アルゴンの質量 #define E_ARGON 1.67e-21 //アルゴンのイプシロン #define S_ARGON 3.40e-10 //アルゴンのシグマ #define L_ARGON 1.680e-9 //アルゴンのセルの長さ #define DT 1.0e-15 //微小時間 #define STEP 50000 //ステップ数 #define N 100 //分子数 #define MD 7.5374990578e24 //0.5/M_ARGON void input(FILE *file,double r[][3],double v[][3]); void output(FILE *file,double r[][3]); void next_r(double r[][3],double v[][3],double f[][3]); void result(double v[][3],double f0[][3],double f1[][3],double potential,int n); double force(double f[][3],double r[][3]); int main(void){ FILE *file1,*file2; double r[N][3]; //位置 double v[N][3]; //速度 double f0[N][3]={{0}};//今の力 double f1[N][3]={{0}};//次の力 double potential; int n; /*初期処理*/ file1=fopen("argon.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),n=0;n0.5*L_ARGON) r[i][j]-=L_ARGON; if(r[i][j]<-0.5*L_ARGON) r[i][j]+=L_ARGON; } } /*次の速度、力の初期化、エネルギーの計算と表示*/ void result(double v[][3],double f0[][3],double f1[][3],double potential,int n){ int i,j; double kinetic=0; for(i=0;ivec[k]) vec[k]+=L_ARGON; } dis=pow(vec[0],2)+pow(vec[1],2)+pow(vec[2],2); t1=pow(S_ARGON,2)/dis; t2=t1*t1*t1; t3=1/dis; t4=pow(t2,2); //ポテンシャルを計算 potential+=t4-t2; t5=24*E_ARGON*t3*(2*t4-t2); //力を計算 for(k=0;k<3;k++){ f[i][k]+=t5*vec[k]; f[j][k]-=t5*vec[k]; } } } return potential; }