diff --git a/gromacs/includes/atom.h b/gromacs/includes/atom.h index 1978dbb..246fb07 100644 --- a/gromacs/includes/atom.h +++ b/gromacs/includes/atom.h @@ -52,6 +52,7 @@ typedef struct { MD_FLOAT *cutforcesq; MD_FLOAT *cutneighsq; Cluster *clusters; + int *PBCx, *PBCy, *PBCz; } Atom; extern void initAtom(Atom*); diff --git a/gromacs/main.c b/gromacs/main.c index ebb2dbd..761d17e 100644 --- a/gromacs/main.c +++ b/gromacs/main.c @@ -101,7 +101,7 @@ double setup( if(param->input_file == NULL) { adjustThermo(param, atom); } setupPbc(atom, param); updatePbc(atom, param); - buildNeighbor(atom, neighbor); + buildNeighbor(param, atom, neighbor); E = getTimeStamp(); return E-S; @@ -120,7 +120,7 @@ double reneighbour( setupPbc(atom, param); updatePbc(atom, param); //sortAtom(atom); - buildNeighbor(atom, neighbor); + buildNeighbor(param, atom, neighbor); LIKWID_MARKER_STOP("reneighbour"); E = getTimeStamp(); diff --git a/gromacs/neighbor.c b/gromacs/neighbor.c index a45f284..3c3ad3c 100644 --- a/gromacs/neighbor.c +++ b/gromacs/neighbor.c @@ -54,8 +54,6 @@ static MD_FLOAT binsizex, binsizey; static int coord2bin(MD_FLOAT, MD_FLOAT); static MD_FLOAT bindist(int, int); -extern int *PBCx, *PBCy, *PBCz; - /* exported subroutines */ void initNeighbor(Neighbor *neighbor, Parameter *param) { @@ -510,10 +508,10 @@ void binGhostClusters(Parameter *param, Atom *atom) { coord2bin2D(xtmp, ytmp, &nix, &niy); // Always put the cluster on the bin of its innermost atom so // the cluster should be closer to local clusters - if(PBCx[ci] > 0 && ix > nix) { ix = nix; } - if(PBCx[ci] < 0 && ix < nix) { ix = nix; } - if(PBCy[ci] > 0 && iy > niy) { iy = niy; } - if(PBCy[ci] < 0 && iy < niy) { iy = niy; } + if(atom->PBCx[ci] > 0 && ix > nix) { ix = nix; } + if(atom->PBCx[ci] < 0 && ix < nix) { ix = nix; } + if(atom->PBCy[ci] > 0 && iy > niy) { iy = niy; } + if(atom->PBCy[ci] < 0 && iy < niy) { iy = niy; } } int bin = iy * mbinx + ix + 1; diff --git a/gromacs/pbc.c b/gromacs/pbc.c index 24db091..77b71d5 100644 --- a/gromacs/pbc.c +++ b/gromacs/pbc.c @@ -30,7 +30,6 @@ #define DELTA 20000 static int NmaxGhost; -static int *PBCx, *PBCy, *PBCz; static void growPbc(Atom*); @@ -38,7 +37,7 @@ static void growPbc(Atom*); void initPbc(Atom* atom) { NmaxGhost = 0; atom->border_map = NULL; - PBCx = NULL; PBCy = NULL; PBCz = NULL; + atom->PBCx = NULL; atom->PBCy = NULL; atom->PBCz = NULL; } /* update coordinates of ghost atoms */ @@ -55,9 +54,9 @@ void updatePbc(Atom *atom, Parameter *param) { MD_FLOAT *bmap_cptr = cluster_ptr(border_map[ci]); for(int cii = 0; cii < atom->clusters[ci].natoms; cii++) { - cluster_x(cptr, cii) = cluster_x(bmap_cptr, cii) + PBCx[ci] * xprd; - cluster_y(cptr, cii) = cluster_y(bmap_cptr, cii) + PBCy[ci] * yprd; - cluster_z(cptr, cii) = cluster_z(bmap_cptr, cii) + PBCz[ci] * zprd; + cluster_x(cptr, cii) = cluster_x(bmap_cptr, cii) + atom->PBCx[ci] * xprd; + cluster_y(cptr, cii) = cluster_y(bmap_cptr, cii) + atom->PBCy[ci] * yprd; + cluster_z(cptr, cii) = cluster_z(bmap_cptr, cii) + atom->PBCz[ci] * zprd; } } } @@ -74,6 +73,7 @@ void updateAtomsPbc(Atom *atom, Parameter *param) { atom_x(i) += xprd; } else if(atom_x(i) >= xprd) { atom_x(i) -= xprd; + } if(atom_y(i) < 0.0) { atom_y(i) += yprd; @@ -96,9 +96,9 @@ void updateAtomsPbc(Atom *atom, Parameter *param) { #define ADDGHOST(dx,dy,dz) \ Nghost++; \ border_map[Nghost] = ci; \ - PBCx[Nghost] = dx; \ - PBCy[Nghost] = dy; \ - PBCz[Nghost] = dz; \ + atom->PBCx[Nghost] = dx; \ + atom->PBCy[Nghost] = dy; \ + atom->PBCz[Nghost] = dz; \ copy_cluster_types(atom, atom->Nclusters_local + Nghost, ci) void copy_cluster_types(Atom *atom, int dest, int src) { @@ -107,6 +107,17 @@ void copy_cluster_types(Atom *atom, int dest, int src) { } } +/* internal subroutines */ +void growPbc(Atom* atom) { + int nold = NmaxGhost; + NmaxGhost += DELTA; + + atom->border_map = (int*) reallocate(atom->border_map, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); + atom->PBCx = (int*) reallocate(atom->PBCx, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); + atom->PBCy = (int*) reallocate(atom->PBCy, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); + atom->PBCz = (int*) reallocate(atom->PBCz, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); +} + void setupPbc(Atom *atom, Parameter *param) { int *border_map = atom->border_map; MD_FLOAT xprd = param->xprd; @@ -131,7 +142,6 @@ void setupPbc(Atom *atom, Parameter *param) { MD_FLOAT bbmaxy = atom->clusters[ci].bbmaxy; MD_FLOAT bbminz = atom->clusters[ci].bbminz; MD_FLOAT bbmaxz = atom->clusters[ci].bbmaxz; - /* Setup ghost atoms */ /* 6 planes */ if (bbminx < Cutneigh) { ADDGHOST(+1,0,0); } @@ -168,14 +178,3 @@ void setupPbc(Atom *atom, Parameter *param) { atom->Nclusters_ghost = Nghost + 1; atom->Nclusters = atom->Nclusters_local + Nghost + 1; } - -/* internal subroutines */ -void growPbc(Atom* atom) { - int nold = NmaxGhost; - NmaxGhost += DELTA; - - atom->border_map = (int*) reallocate(atom->border_map, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); - PBCx = (int*) reallocate(PBCx, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); - PBCy = (int*) reallocate(PBCy, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); - PBCz = (int*) reallocate(PBCz, ALIGNMENT, NmaxGhost * sizeof(int), nold * sizeof(int)); -}