#include #include double rint(double x) { return ( (x<0.)? -floor(-x+.5):floor(x+.5) ); } //rint:四捨五入を与える関数の定義 int main(){ //=======(@ 変数と出力ファイルの設定)================================ const double dt = 4.0; // 積分時間 [fs] const int maxstep = 10000; // ステップ数 const double Tset = 700.; // 温度 [K] const double Pset = 300.*101.3e+3;// 圧力 [Pa] const int N = 50; // 原子数 [個/u.c.] const int spnum = 1; // 成分数 const double KB = 1.38065e-23;// ボルツマン定数[J/K] //LJポテンシャル変数 単位はsig:Å,eps:J //原子の種類ごとにパラメータを設定 double sig[spnum],eps[spnum]; sig[0] = 3.4; eps[0] = 121.0*KB; double cutoff = 9.0; //カットオフ [A] double w[N]; // 原子の重さ [g/mol] double rx[N],ry[N],rz[N]; // 原子の座標 [A] double ax[N],ay[N],az[N]; // MSD用の変数 double vx[N],vy[N],vz[N]; // 原子の速度 [m/s] double fx[N],fy[N],fz[N]; // 各原子の力 int sp[N]; double cx,cy,cz; // 単位セルの大きさ double T; // 系の温度 [K] double KE,PE; // エネルギーの保存用 int i,j,k,m; // 整数型の変数 double r,s,t,F,x,y,z; // 実数型の変数 //出力用ファイルを作製する ofstream fpos("position.dat");// 座標出力用 ofstream fene("energy.dat"); // エネルギー値出力用 ofstream fmsd("msd.dat"); // 座標出力用 //=======(A MD「単位セル」の大きさの計算)========================= double v; // 単位セルの体積 [A^3] const double AVO = 6.02e+23; // アボガドロ数 const double R = 8.314; // 気体定数 [J/(K mol)] v = ((double)N/AVO*R*Tset)/Pset; // PV=nRTから体積を計算 cx = cy = cz = pow(v,1./3)*1.0e+10; // 立方体として各辺を計算 cout <<"セルの一辺の長さは、"<