git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@3763 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2010-02-01 16:58:37 +00:00
parent a15fe3e78e
commit ba5a3fd0cb

View File

@ -349,16 +349,29 @@ double ComputeReduce::compute_scalar()
double one = compute_one(0,-1); double one = compute_one(0,-1);
if (mode == SUM) if (mode == SUM) {
if (flavor[0] == GLOBAL)
scalar = one;
else
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
else if (mode == MINN) } else if (mode == MINN) {
if (flavor[0] == GLOBAL)
scalar = one;
else
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_MIN,world); MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_MIN,world);
else if (mode == MAXX) } else if (mode == MAXX) {
if (flavor[0] == GLOBAL)
scalar = one;
else
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_MAX,world); MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_MAX,world);
else if (mode == AVE) { } else if (mode == AVE) {
if (flavor[0] == GLOBAL)
scalar = one;
else
MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_SUM,world); MPI_Allreduce(&one,&scalar,1,MPI_DOUBLE,MPI_SUM,world);
scalar /= count(0); scalar /= count(0);
} }
return scalar; return scalar;
} }
@ -374,21 +387,36 @@ void ComputeReduce::compute_vector()
indices[m] = index; indices[m] = index;
} }
if (mode == SUM) if (mode == SUM) {
MPI_Allreduce(onevec,vector,size_vector,MPI_DOUBLE,MPI_SUM,world); for (int m = 0; m < nvalues; m++) {
if (flavor[m] == GLOBAL)
vector[m] = onevec[m];
else
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_SUM,world);
}
else if (mode == MINN) { } else if (mode == MINN) {
if (!replace) if (!replace) {
MPI_Allreduce(onevec,vector,size_vector,MPI_DOUBLE,MPI_MIN,world); for (int m = 0; m < nvalues; m++) {
else { if (flavor[m] == GLOBAL)
vector[m] = onevec[m];
else
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_MIN,world);
}
} else {
for (int m = 0; m < nvalues; m++) for (int m = 0; m < nvalues; m++)
if (replace[m] < 0) { if (replace[m] < 0) {
if (flavor[m] == GLOBAL) {
vector[m] = onevec[m];
owner[m] = me;
} else {
pairme.value = onevec[m]; pairme.value = onevec[m];
pairme.proc = me; pairme.proc = me;
MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MINLOC,world); MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MINLOC,world);
vector[m] = pairall.value; vector[m] = pairall.value;
owner[m] = pairall.proc; owner[m] = pairall.proc;
} }
}
for (int m = 0; m < nvalues; m++) for (int m = 0; m < nvalues; m++)
if (replace[m] >= 0) { if (replace[m] >= 0) {
if (me == owner[replace[m]]) if (me == owner[replace[m]])
@ -398,17 +426,27 @@ void ComputeReduce::compute_vector()
} }
} else if (mode == MAXX) { } else if (mode == MAXX) {
if (!replace) if (!replace) {
MPI_Allreduce(onevec,vector,size_vector,MPI_DOUBLE,MPI_MAX,world); for (int m = 0; m < nvalues; m++) {
else { if (flavor[m] == GLOBAL)
vector[m] = onevec[m];
else
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_MAX,world);
}
} else {
for (int m = 0; m < nvalues; m++) for (int m = 0; m < nvalues; m++)
if (replace[m] < 0) { if (replace[m] < 0) {
if (flavor[m] == GLOBAL) {
vector[m] = onevec[m];
owner[m] = me;
} else {
pairme.value = onevec[m]; pairme.value = onevec[m];
pairme.proc = me; pairme.proc = me;
MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world); MPI_Allreduce(&pairme,&pairall,1,MPI_DOUBLE_INT,MPI_MAXLOC,world);
vector[m] = pairall.value; vector[m] = pairall.value;
owner[m] = pairall.proc; owner[m] = pairall.proc;
} }
}
for (int m = 0; m < nvalues; m++) for (int m = 0; m < nvalues; m++)
if (replace[m] >= 0) { if (replace[m] >= 0) {
if (me == owner[replace[m]]) if (me == owner[replace[m]])
@ -418,8 +456,13 @@ void ComputeReduce::compute_vector()
} }
} else if (mode == AVE) { } else if (mode == AVE) {
MPI_Allreduce(onevec,vector,size_vector,MPI_DOUBLE,MPI_MAX,world); for (int m = 0; m < nvalues; m++) {
for (int m = 0; m < nvalues; m++) vector[m] /= count(m); if (flavor[m] == GLOBAL)
vector[m] = onevec[m];
else
MPI_Allreduce(&onevec[m],&vector[m],1,MPI_DOUBLE,MPI_SUM,world);
vector[m] /= count(m);
}
} }
} }
@ -451,6 +494,7 @@ double ComputeReduce::compute_one(int m, int flag)
if (mode == SUM) one = 0.0; if (mode == SUM) one = 0.0;
else if (mode == MINN) one = BIG; else if (mode == MINN) one = BIG;
else if (mode == MAXX) one = -BIG; else if (mode == MAXX) one = -BIG;
else if (mode == AVE) one = 0.0;
if (which[m] == X) { if (which[m] == X) {
double **x = atom->x; double **x = atom->x;