mirror of
https://bitbucket.org/cosmicvoids/vide_public.git
synced 2025-07-04 23:31:12 +00:00
Added openmp-ization of jozov2_watershed
This commit is contained in:
parent
9b0e7e115e
commit
b555533fa3
1 changed files with 190 additions and 165 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
#ifdef OPENMP
|
||||||
|
#include <omp.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <boost/format.hpp>
|
#include <boost/format.hpp>
|
||||||
|
@ -18,16 +22,6 @@ void doWatershed(PARTICLE *p, pid_t np, ZONE *z, int numZones, float maxvol, flo
|
||||||
float maxdenscontrast = 0;
|
float maxdenscontrast = 0;
|
||||||
bool *done_zones;
|
bool *done_zones;
|
||||||
|
|
||||||
inyet = new char[numZones];
|
|
||||||
inyet2 = new char[numZones];
|
|
||||||
zonelist = new int[numZones];
|
|
||||||
zonelist2 = new int[numZones];
|
|
||||||
done_zones = new bool[numZones];
|
|
||||||
|
|
||||||
fill(inyet, inyet + numZones, 0);
|
|
||||||
fill(inyet2, inyet2 + numZones, 0);
|
|
||||||
fill(done_zones, done_zones + numZones, false);
|
|
||||||
|
|
||||||
double *sorter = new double[numZones+1];
|
double *sorter = new double[numZones+1];
|
||||||
/* Assign sorter by probability (could use volume instead) */
|
/* Assign sorter by probability (could use volume instead) */
|
||||||
for (int h = 0; h < numZones; h++)
|
for (int h = 0; h < numZones; h++)
|
||||||
|
@ -42,7 +36,20 @@ void doWatershed(PARTICLE *p, pid_t np, ZONE *z, int numZones, float maxvol, flo
|
||||||
findrtop(sorter, numZones, iord, numZones);
|
findrtop(sorter, numZones, iord, numZones);
|
||||||
delete[] sorter;
|
delete[] sorter;
|
||||||
|
|
||||||
|
#pragma omp parallel
|
||||||
|
{
|
||||||
|
inyet = new char[numZones];
|
||||||
|
inyet2 = new char[numZones];
|
||||||
|
zonelist = new int[numZones];
|
||||||
|
zonelist2 = new int[numZones];
|
||||||
|
done_zones = new bool[numZones];
|
||||||
|
|
||||||
|
fill(inyet, inyet + numZones, 0);
|
||||||
|
fill(inyet2, inyet2 + numZones, 0);
|
||||||
|
fill(done_zones, done_zones + numZones, false);
|
||||||
|
|
||||||
nhl = 0;
|
nhl = 0;
|
||||||
|
#pragma omp for schedule(dynamic,100)
|
||||||
for (int ii = 0; ii < numZones; ii++)
|
for (int ii = 0; ii < numZones; ii++)
|
||||||
{
|
{
|
||||||
int nhlcount = 0;
|
int nhlcount = 0;
|
||||||
|
@ -189,10 +196,6 @@ void doWatershed(PARTICLE *p, pid_t np, ZONE *z, int numZones, float maxvol, flo
|
||||||
z[h].denscontrast = z[h].leak/p[z[h].core].dens;
|
z[h].denscontrast = z[h].leak/p[z[h].core].dens;
|
||||||
if (z[h].denscontrast < 1.) z[h].denscontrast = 1.;
|
if (z[h].denscontrast < 1.) z[h].denscontrast = 1.;
|
||||||
|
|
||||||
/* find biggest denscontrast */
|
|
||||||
if (z[h].denscontrast > maxdenscontrast) {
|
|
||||||
maxdenscontrast = (double)z[h].denscontrast;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Don't sort; want the core zone to be first */
|
/* Don't sort; want the core zone to be first */
|
||||||
|
|
||||||
|
@ -217,6 +220,28 @@ void doWatershed(PARTICLE *p, pid_t np, ZONE *z, int numZones, float maxvol, flo
|
||||||
delete[] links;
|
delete[] links;
|
||||||
delete[] iord;
|
delete[] iord;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
maxdenscontrast = 0;
|
||||||
|
#pragma omp parallel shared(maxdenscontrast)
|
||||||
|
{
|
||||||
|
double maxdenscontrast_local = 0;
|
||||||
|
|
||||||
|
#pragma omp for schedule(static)
|
||||||
|
for (int h = 0; h < numZones; h++)
|
||||||
|
{
|
||||||
|
/* find biggest denscontrast */
|
||||||
|
if (z[h].denscontrast > maxdenscontrast_local) {
|
||||||
|
maxdenscontrast_local = (double)z[h].denscontrast;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma omp critical
|
||||||
|
{
|
||||||
|
if (maxdenscontrast_local > maxdenscontrast)
|
||||||
|
maxdenscontrast = maxdenscontrast_local;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cout << format("Maxdenscontrast = %f.") % maxdenscontrast << endl;
|
cout << format("Maxdenscontrast = %f.") % maxdenscontrast << endl;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue