#include #include #define NM 10 /* Maximum number of atoms */ #define PM ((NM * NM) / 2) /* Maximum number of pairs */ #define KB 1.38e-23 /* Boltzmann Constant */ #define EPS (100.0 * KB) /* energy unit */ #define SIGMA 2.0e-10 /* length unit*/ #define TDELTA 1.0e-15 /* increment of time step */ #define WM 6.634e-26 /* mass of atom */ main() { int i, j, natom, npair, ip[PM], jp[PM]; double x[NM], y[NM], vx[NM], vy[NM]; double rx[PM], ry[PM], r[PM], rs; double phi[PM], dphi[PM], dphix, dphiy; double fx[NM], fy[NM]; double x1[NM], y1[NM], vx1[NM], vy1[NM]; natom = 10; for (i = 0; i < natom; i++) { /* Data input */ scanf("%lf%lf%lf%lf", &x[i], &y[i], &vx[i], &vy[i]); /* Initial Data output */ printf("%2d %15.8e %15.8e %15.8e %15.8e\n", i, x[i], y[i], vx[i], vy[i]); } /* Finding pairs between atoms */ npair = 0; for (i = 0; i < natom - 1; i++) { for (j = i + 1; j < natom; j++) { rx[npair] = x[i] - x[j]; ry[npair] = y[i] - y[j]; r[npair] = sqrt(rx[npair] * rx[npair] + ry[npair] * ry[npair]); ip[npair] = i; jp[npair] = j; npair = npair + 1; } } fprintf(stderr, "(pair)%5d\n", npair); for (i = 0; i < natom; i++) { /* initialization of force vectors */ fx[i] = 0.0; fy[i] = 0.0; } for (i = 0; i < npair; i++) { rs = SIGMA / r[i]; phi[i] = 4.0 * EPS * (pow(rs, 12.0) - pow(rs, 6.0)); dphi[i] = -24.0 * EPS / SIGMA * (2.0 * pow(rs, 13.0) - pow(rs, 7.0)); dphix = -dphi[i] * rx[i] / r[i]; dphiy = -dphi[i] * ry[i] / r[i]; fx[ip[i]] += dphix; fx[jp[i]] -= dphix; fy[ip[i]] += dphiy; fy[jp[i]] -= dphiy; } /* New velocities, New coordinates x1, y1, vx1, vy1*/ for (i = 0; i < natom; i++) { vx1[i] = vx[i] + (fx[i] / WM) * TDELTA; vy1[i] = vy[i] + (fy[i] / WM) * TDELTA; x1[i] = x[i] + 0.5 * vx1[i]* TDELTA; y1[i] = y[i] + 0.5 * vy1[i]* TDELTA; } /* Output */ for (i = 0; i < natom; i++) { printf("%2d %15.8e %15.8e %15.8e %15.8e\n", i, x1[i], y1[i], vx1[i], vy1[i]); } }