Remove segfaults
Signed-off-by: Rafael Ravedutti <rafaelravedutti@gmail.com>
This commit is contained in:
parent
a119fcdfdd
commit
eedcc97e4a
@ -61,7 +61,7 @@ extern int readAtom(Atom*, Parameter*);
|
|||||||
extern void growAtom(Atom*);
|
extern void growAtom(Atom*);
|
||||||
extern void growClusters(Atom*);
|
extern void growClusters(Atom*);
|
||||||
|
|
||||||
#define cluster_ptr(ci) &(atom->cl_x[ci * CLUSTER_DIM_N * 3])
|
#define cluster_ptr(ci) &(atom->cl_x[(ci) * CLUSTER_DIM_N * 3])
|
||||||
|
|
||||||
#ifdef AOS
|
#ifdef AOS
|
||||||
#define POS_DATA_LAYOUT "AoS"
|
#define POS_DATA_LAYOUT "AoS"
|
||||||
|
@ -102,11 +102,6 @@ void setupNeighbor(Parameter *param, Atom *atom) {
|
|||||||
bininvx = 1.0 / binsizex;
|
bininvx = 1.0 / binsizex;
|
||||||
bininvy = 1.0 / binsizey;
|
bininvy = 1.0 / binsizey;
|
||||||
|
|
||||||
printf("hi = %f, %f\n", xhi, yhi);
|
|
||||||
printf("atom_density = %f\n", atom_density);
|
|
||||||
printf("atoms_in_cell = %f\n", atoms_in_cell);
|
|
||||||
printf("binsize = %f, %f\n", binsizex, binsizey);
|
|
||||||
printf("nbin = %d, %d\n", nbinx, nbiny);
|
|
||||||
coord = xlo - cutneigh - SMALL * xprd;
|
coord = xlo - cutneigh - SMALL * xprd;
|
||||||
mbinxlo = (int) (coord * bininvx);
|
mbinxlo = (int) (coord * bininvx);
|
||||||
if (coord < 0.0) {
|
if (coord < 0.0) {
|
||||||
@ -207,7 +202,6 @@ int atomDistanceInRange(Atom *atom, int ci, int cj, MD_FLOAT rsq) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void buildNeighbor(Atom *atom, Neighbor *neighbor) {
|
void buildNeighbor(Atom *atom, Neighbor *neighbor) {
|
||||||
printf("buildNeighbor start\n");
|
|
||||||
int nall = atom->Nclusters_local + atom->Nclusters_ghost;
|
int nall = atom->Nclusters_local + atom->Nclusters_ghost;
|
||||||
|
|
||||||
/* extend atom arrays if necessary */
|
/* extend atom arrays if necessary */
|
||||||
@ -272,7 +266,6 @@ void buildNeighbor(Atom *atom, Neighbor *neighbor) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
neighbor->numneigh[ci] = n;
|
neighbor->numneigh[ci] = n;
|
||||||
|
|
||||||
if(n >= neighbor->maxneighs) {
|
if(n >= neighbor->maxneighs) {
|
||||||
resize = 1;
|
resize = 1;
|
||||||
|
|
||||||
@ -289,7 +282,6 @@ void buildNeighbor(Atom *atom, Neighbor *neighbor) {
|
|||||||
neighbor->neighbors = (int*) malloc(atom->Nmax * neighbor->maxneighs * sizeof(int));
|
neighbor->neighbors = (int*) malloc(atom->Nmax * neighbor->maxneighs * sizeof(int));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("buildNeighbor end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* internal subroutines */
|
/* internal subroutines */
|
||||||
@ -356,7 +348,6 @@ void coord2bin2D(MD_FLOAT xin, MD_FLOAT yin, int *ix, int *iy) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void binAtoms(Atom *atom) {
|
void binAtoms(Atom *atom) {
|
||||||
printf("binatoms start\n");
|
|
||||||
int nall = atom->Nlocal + atom->Nghost;
|
int nall = atom->Nlocal + atom->Nghost;
|
||||||
int resize = 1;
|
int resize = 1;
|
||||||
|
|
||||||
@ -369,7 +360,6 @@ void binAtoms(Atom *atom) {
|
|||||||
|
|
||||||
for(int i = 0; i < nall; i++) {
|
for(int i = 0; i < nall; i++) {
|
||||||
int ibin = coord2bin(atom_x(i), atom_y(i));
|
int ibin = coord2bin(atom_x(i), atom_y(i));
|
||||||
|
|
||||||
if(bincount[ibin] < atoms_per_bin) {
|
if(bincount[ibin] < atoms_per_bin) {
|
||||||
int ac = bincount[ibin]++;
|
int ac = bincount[ibin]++;
|
||||||
bins[ibin * atoms_per_bin + ac] = i;
|
bins[ibin * atoms_per_bin + ac] = i;
|
||||||
@ -384,7 +374,6 @@ void binAtoms(Atom *atom) {
|
|||||||
bins = (int*) malloc(mbins * atoms_per_bin * sizeof(int));
|
bins = (int*) malloc(mbins * atoms_per_bin * sizeof(int));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("binatoms end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Use pigeonhole sorting
|
// TODO: Use pigeonhole sorting
|
||||||
@ -416,7 +405,6 @@ void sortAtomsByZCoord(Atom *atom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void buildClusters(Atom *atom) {
|
void buildClusters(Atom *atom) {
|
||||||
printf("buildClusters start\n");
|
|
||||||
atom->Nclusters_local = 0;
|
atom->Nclusters_local = 0;
|
||||||
|
|
||||||
/* bin local atoms */
|
/* bin local atoms */
|
||||||
@ -480,12 +468,9 @@ void buildClusters(Atom *atom) {
|
|||||||
atom->Nclusters_local++;
|
atom->Nclusters_local++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("buildClusters end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void binClusters(Atom *atom) {
|
void binClusters(Atom *atom) {
|
||||||
printf("binClusters start\n");
|
|
||||||
const int nlocal = atom->Nclusters_local;
|
const int nlocal = atom->Nclusters_local;
|
||||||
int resize = 1;
|
int resize = 1;
|
||||||
|
|
||||||
@ -496,7 +481,6 @@ void binClusters(Atom *atom) {
|
|||||||
cluster_bincount[bin] = 0;
|
cluster_bincount[bin] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("local\n");
|
|
||||||
for(int ci = 0; ci < nlocal && !resize; ci++) {
|
for(int ci = 0; ci < nlocal && !resize; ci++) {
|
||||||
int bin = atom->clusters[ci].bin;
|
int bin = atom->clusters[ci].bin;
|
||||||
int c = cluster_bincount[bin];
|
int c = cluster_bincount[bin];
|
||||||
@ -508,7 +492,6 @@ void binClusters(Atom *atom) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("ghost\n");
|
|
||||||
for(int ci = 0; ci < atom->Nclusters_ghost && !resize; ci++) {
|
for(int ci = 0; ci < atom->Nclusters_ghost && !resize; ci++) {
|
||||||
MD_FLOAT *cptr = cluster_ptr(nlocal + ci);
|
MD_FLOAT *cptr = cluster_ptr(nlocal + ci);
|
||||||
MD_FLOAT xtmp, ytmp;
|
MD_FLOAT xtmp, ytmp;
|
||||||
@ -517,12 +500,15 @@ void binClusters(Atom *atom) {
|
|||||||
xtmp = cluster_x(cptr, 0);
|
xtmp = cluster_x(cptr, 0);
|
||||||
ytmp = cluster_y(cptr, 0);
|
ytmp = cluster_y(cptr, 0);
|
||||||
coord2bin2D(xtmp, ytmp, &ix, &iy);
|
coord2bin2D(xtmp, ytmp, &ix, &iy);
|
||||||
|
ix = MAX(MIN(ix, nbinx - 1), 0);
|
||||||
|
iy = MAX(MIN(iy, nbiny - 1), 0);
|
||||||
for(int cii = 1; cii < atom->clusters[ci].natoms; cii++) {
|
for(int cii = 1; cii < atom->clusters[ci].natoms; cii++) {
|
||||||
int nix, niy;
|
int nix, niy;
|
||||||
xtmp = cluster_x(cptr, cii);
|
xtmp = cluster_x(cptr, cii);
|
||||||
ytmp = cluster_y(cptr, cii);
|
ytmp = cluster_y(cptr, cii);
|
||||||
coord2bin2D(xtmp, ytmp, &nix, &niy);
|
coord2bin2D(xtmp, ytmp, &nix, &niy);
|
||||||
|
nix = MAX(MIN(nix, nbinx - 1), 0);
|
||||||
|
niy = MAX(MIN(niy, nbiny - 1), 0);
|
||||||
// Always put the cluster on the bin of its innermost atom so
|
// Always put the cluster on the bin of its innermost atom so
|
||||||
// the cluster should be closer to local clusters
|
// the cluster should be closer to local clusters
|
||||||
if(atom->PBCx[ci] > 0 && ix > nix) { ix = nix; }
|
if(atom->PBCx[ci] > 0 && ix > nix) { ix = nix; }
|
||||||
@ -541,15 +527,12 @@ void binClusters(Atom *atom) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("end\n");
|
|
||||||
if(resize) {
|
if(resize) {
|
||||||
free(cluster_bins);
|
free(cluster_bins);
|
||||||
clusters_per_bin *= 2;
|
clusters_per_bin *= 2;
|
||||||
cluster_bins = (int*) malloc(mbins * clusters_per_bin * sizeof(int));
|
cluster_bins = (int*) malloc(mbins * clusters_per_bin * sizeof(int));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("binClusters end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void updateSingleAtoms(Atom *atom) {
|
void updateSingleAtoms(Atom *atom) {
|
||||||
|
@ -44,7 +44,6 @@ void initPbc(Atom* atom) {
|
|||||||
/* update coordinates of ghost atoms */
|
/* update coordinates of ghost atoms */
|
||||||
/* uses mapping created in setupPbc */
|
/* uses mapping created in setupPbc */
|
||||||
void updatePbc(Atom *atom, Parameter *param) {
|
void updatePbc(Atom *atom, Parameter *param) {
|
||||||
printf("updatePbc start\n");
|
|
||||||
int *border_map = atom->border_map;
|
int *border_map = atom->border_map;
|
||||||
int nlocal = atom->Nclusters_local;
|
int nlocal = atom->Nclusters_local;
|
||||||
MD_FLOAT xprd = param->xprd;
|
MD_FLOAT xprd = param->xprd;
|
||||||
@ -61,13 +60,11 @@ void updatePbc(Atom *atom, Parameter *param) {
|
|||||||
cluster_z(cptr, cii) = cluster_z(bmap_cptr, cii) + atom->PBCz[ci] * zprd;
|
cluster_z(cptr, cii) = cluster_z(bmap_cptr, cii) + atom->PBCz[ci] * zprd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("updatePbc end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* relocate atoms that have left domain according
|
/* relocate atoms that have left domain according
|
||||||
* to periodic boundary conditions */
|
* to periodic boundary conditions */
|
||||||
void updateAtomsPbc(Atom *atom, Parameter *param) {
|
void updateAtomsPbc(Atom *atom, Parameter *param) {
|
||||||
printf("updateAtomsPbc start\n");
|
|
||||||
MD_FLOAT xprd = param->xprd;
|
MD_FLOAT xprd = param->xprd;
|
||||||
MD_FLOAT yprd = param->yprd;
|
MD_FLOAT yprd = param->yprd;
|
||||||
MD_FLOAT zprd = param->zprd;
|
MD_FLOAT zprd = param->zprd;
|
||||||
@ -91,7 +88,6 @@ void updateAtomsPbc(Atom *atom, Parameter *param) {
|
|||||||
atom_z(i) -= zprd;
|
atom_z(i) -= zprd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf("updateAtomsPbc end\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setup periodic boundary conditions by
|
/* setup periodic boundary conditions by
|
||||||
@ -124,7 +120,6 @@ void growPbc(Atom* atom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void setupPbc(Atom *atom, Parameter *param) {
|
void setupPbc(Atom *atom, Parameter *param) {
|
||||||
printf("setupPbc start\n");
|
|
||||||
int *border_map = atom->border_map;
|
int *border_map = atom->border_map;
|
||||||
MD_FLOAT xprd = param->xprd;
|
MD_FLOAT xprd = param->xprd;
|
||||||
MD_FLOAT yprd = param->yprd;
|
MD_FLOAT yprd = param->yprd;
|
||||||
|
Loading…
Reference in New Issue
Block a user