#include #include #include #include #include typedef struct part {double x; double y; double z;double vx; double vy; double vz;} part; typedef struct vect {double x; double y; double z;} vect; #define N 100 int initialized=1; double Lx=10,Ly=10,Lz=10; double e,ek,ep,kT=0.1; double dt=0.01,dx=0.1,*dd,rate; part p[N]; double phi=0,tet=0,disp=10,alpha=1; double (*iterate)(part p[N], double dd); void (*Analyze)(part p[N]); double dPE(part p[N],vect d,int n){ double dE=0; for (int m=0; m=Lx) d.x-=Lx; d.y = dx*((double) 2*rand()/RAND_MAX-1); if (p[n].y+d.y<0) d.y+=Ly; if (p[n].y+d.y>=Ly) d.y-=Ly; d.z = dx*((double) 2*rand()/RAND_MAX-1); if (p[n].z+d.z<0) d.z+=Lz; if (p[n].z+d.z>=Lz) d.z-=Lz; double dE = dPE(p,d,n); if (dE<=0){ p[n].x += d.x; p[n].y += d.y; p[n].z += d.z; count++; } else if ((double) rand()/RAND_MAXLx) p[n].x-=Lx;*/ p[n].x = fmod(p[n].x+Lx,Lx); p[n].y = fmod(p[n].y+Ly,Ly); p[n].z = fmod(p[n].z+Lz,Lz); } FF(p,F); for (int n=0; nxdim*Ly){ scale = xdim/Lx; xoff=0; yoff= 0.5*(ydim-Ly*scale); } else { scale = ydim/Ly; xoff= 0.5*(xdim-Lx*scale); yoff= 0; } r1=1*scale; r2=pow(2,-1./6.)*scale; for (int n=0; nxdim*Ly){ scale = 0.8*xdim/Lx*disp; } else { scale = 0.8*ydim/Ly*disp; } int x1,y1,x2,y2; x1 = xdim/2 + box[0].x/box[0].z*scale; y1 = ydim/2 - box[0].y/box[0].z*scale; x2 = xdim/2 + box[1].x/box[1].z*scale; y2 = ydim/2 - box[1].y/box[1].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[1].x/box[1].z*scale; y1 = ydim/2 - box[1].y/box[1].z*scale; x2 = xdim/2 + box[3].x/box[3].z*scale; y2 = ydim/2 - box[3].y/box[3].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[2].x/box[2].z*scale; y1 = ydim/2 - box[2].y/box[2].z*scale; x2 = xdim/2 + box[3].x/box[3].z*scale; y2 = ydim/2 - box[3].y/box[3].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[2].x/box[2].z*scale; y1 = ydim/2 - box[2].y/box[2].z*scale; x2 = xdim/2 + box[0].x/box[0].z*scale; y2 = ydim/2 - box[0].y/box[0].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[0].x/box[0].z*scale; y1 = ydim/2 - box[0].y/box[0].z*scale; x2 = xdim/2 + box[4].x/box[4].z*scale; y2 = ydim/2 - box[4].y/box[4].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[1].x/box[1].z*scale; y1 = ydim/2 - box[1].y/box[1].z*scale; x2 = xdim/2 + box[5].x/box[5].z*scale; y2 = ydim/2 - box[5].y/box[5].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[2].x/box[2].z*scale; y1 = ydim/2 - box[2].y/box[2].z*scale; x2 = xdim/2 + box[6].x/box[6].z*scale; y2 = ydim/2 - box[6].y/box[6].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[3].x/box[3].z*scale; y1 = ydim/2 - box[3].y/box[3].z*scale; x2 = xdim/2 + box[7].x/box[7].z*scale; y2 = ydim/2 - box[7].y/box[7].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[4].x/box[4].z*scale; y1 = ydim/2 - box[4].y/box[4].z*scale; x2 = xdim/2 + box[5].x/box[5].z*scale; y2 = ydim/2 - box[5].y/box[5].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[5].x/box[5].z*scale; y1 = ydim/2 - box[5].y/box[5].z*scale; x2 = xdim/2 + box[7].x/box[7].z*scale; y2 = ydim/2 - box[7].y/box[7].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[6].x/box[6].z*scale; y1 = ydim/2 - box[6].y/box[6].z*scale; x2 = xdim/2 + box[7].x/box[7].z*scale; y2 = ydim/2 - box[7].y/box[7].z*scale; mydrawline(1,x1,y1,x2,y2); x1 = xdim/2 + box[6].x/box[6].z*scale; y1 = ydim/2 - box[6].y/box[6].z*scale; x2 = xdim/2 + box[4].x/box[4].z*scale; y2 = ydim/2 - box[4].y/box[4].z*scale; mydrawline(1,x1,y1,x2,y2); /* Sort */ for (int n=0; n