improvements to voidOverlap

This commit is contained in:
P.M. Sutter 2013-09-06 14:51:32 -05:00
parent 7ba3b2a98d
commit 3eaa77ea6b

View file

@ -114,9 +114,10 @@ int main(int argc, char **argv) {
float closestMatchDist; float closestMatchDist;
float commonVolRatio; float commonVolRatio;
MATCHPROPS newMatch; MATCHPROPS newMatch;
int MAX_MATCHES = 100; int MAX_MATCHES = 300;
float matchDist = 0.25; float matchDist = 0.25;
bool alreadyMatched; bool alreadyMatched;
int clock1, clock2;
CATALOG catalog1, catalog2; CATALOG catalog1, catalog2;
@ -168,6 +169,9 @@ int main(int argc, char **argv) {
// find closest voids // find closest voids
printf(" Finding nearest matches...\n"); printf(" Finding nearest matches...\n");
for (iVoid1 = 0; iVoid1 < catalog1.numVoids; iVoid1++) { for (iVoid1 = 0; iVoid1 < catalog1.numVoids; iVoid1++) {
printf(" Matching for void %d of %d...", iVoid1, catalog1.numVoids);
fflush(stdout);
clock1 = clock();
for (iVoid2 = 0; iVoid2 < catalog2.numVoids; iVoid2++) { for (iVoid2 = 0; iVoid2 < catalog2.numVoids; iVoid2++) {
rdist = getDist(catalog1, catalog2, iVoid1, iVoid2, rdist = getDist(catalog1, catalog2, iVoid1, iVoid2,
periodicX, periodicY, periodicZ); periodicX, periodicY, periodicZ);
@ -178,7 +182,7 @@ int main(int argc, char **argv) {
newMatch.dist = rdist; newMatch.dist = rdist;
//if (rdist > 1.5) continue; //if (rdist > 1.5) continue;
if (rdist/catalog1.voids[iVoid1].radius > 2.0) continue; if (rdist/catalog1.voids[iVoid1].radius > 1.5) continue;
// see if center is contained in void // see if center is contained in void
match = false; match = false;
@ -203,7 +207,7 @@ int main(int argc, char **argv) {
r1 = pow(3./4./M_PI*catalog1.part[partID1].volume / r1 = pow(3./4./M_PI*catalog1.part[partID1].volume /
catalog1.numPartTot, 1./3.); catalog1.numPartTot, 1./3.);
if (rdist <= matchDist*4*r1) { if (rdist <= matchDist*8*r1) {
match = true; match = true;
break; break;
} }
@ -229,6 +233,10 @@ int main(int argc, char **argv) {
// catalog1.voids[iVoid1].matches[farthestMatchID] = newMatch; // catalog1.voids[iVoid1].matches[farthestMatchID] = newMatch;
//} //}
} }
clock2 = clock();
printf("Time: %f sec\n", (1.*clock2-clock1)/CLOCKS_PER_SEC);
clock1 = clock();
} }
// pick the closest matches to speed up computation // pick the closest matches to speed up computation
@ -238,14 +246,15 @@ int main(int argc, char **argv) {
if (numPotential > MAX_MATCHES) { if (numPotential > MAX_MATCHES) {
sortMatches(catalog1.voids[iVoid1].matches, catalog2, 1); sortMatches(catalog1.voids[iVoid1].matches, catalog2, 1);
}
catalog1.voids[iVoid1].matches.resize(MAX_MATCHES); catalog1.voids[iVoid1].matches.resize(MAX_MATCHES);
} }
}
printf(" Determining overlap...\n"); printf(" Determining overlap...\n");
for (iVoid1 = 0; iVoid1 < catalog1.numVoids; iVoid1++) { for (iVoid1 = 0; iVoid1 < catalog1.numVoids; iVoid1++) {
printf(" Working on void %d of %d...\n", iVoid1+1, catalog1.numVoids); printf(" Working on void %d of %d...", iVoid1+1, catalog1.numVoids);
fflush(stdout);
clock1 = clock();
voidID1 = catalog1.voids[iVoid1].voidID; voidID1 = catalog1.voids[iVoid1].voidID;
for (iMatch = 0; iMatch < catalog1.voids[iVoid1].matches.size();iMatch++) { for (iMatch = 0; iMatch < catalog1.voids[iVoid1].matches.size();iMatch++) {
@ -325,6 +334,9 @@ int main(int argc, char **argv) {
//catalog2.voids[matchID].vol; //catalog2.voids[matchID].vol;
} }
// sortMatches(catalog1.voids[iVoid1].matches, catalog2); // sortMatches(catalog1.voids[iVoid1].matches, catalog2);
clock2 = clock();
printf("Time: %f sec\n", (1.*clock2-clock1)/CLOCKS_PER_SEC);
clock1 = clock();
//printf("BEST VOL %e\n", catalog2.voids[catalog1.voids[iVoid1].matches[0].matchID].vol/catalog1.voids[iVoid1].vol); //printf("BEST VOL %e\n", catalog2.voids[catalog1.voids[iVoid1].matches[0].matchID].vol/catalog1.voids[iVoid1].vol);
} // end match finding } // end match finding