Added (optional for the moment) SDF support in simulation_loaders.

This commit is contained in:
Guilhem Lavaux 2013-02-27 13:35:59 -05:00
parent 2d09cb68df
commit 3f7b54a3d2
7 changed files with 330 additions and 51 deletions

View file

@ -1,6 +1,9 @@
#include <cmath>
#include <CosmoTool/loadSimu.hpp>
#include "simulation_loader.hpp"
#ifdef SDF_SUPPORT
#include "sdfloader_internal.hpp"
#endif
using std::min;
using namespace CosmoTool;
@ -44,30 +47,39 @@ void SimulationLoader::applyTransformations(SimuData *s)
void SimulationLoader::basicPreprocessing(SimuData *d,
SimulationPreprocessor *preproc)
{
long numAccepted = 0;
bool *accepted = new bool[d->NumPart];
for (long i = 0; i < d->NumPart; i++)
{
SingleParticle p;
for (int k = 0; k < 3; k++)
{
p.Pos[k] = (d->Pos[k]) ? 0 : d->Pos[k][i];
p.Vel[k] = (d->Vel[k]) ? 0 : d->Vel[k][i];
}
p.ID = (d->Id) ? 0 : d->Id[i];
accepted[i] = preproc->accept(p);
numAccepted += accepted[i];
}
for (int k = 0; k < 3; k++)
{
filteredCopy(d->Pos[k], accepted, d->NumPart);
filteredCopy(d->Vel[k], accepted, d->NumPart);
}
filteredCopy(d->Id, accepted, d->NumPart);
filteredCopy(d->type, accepted, d->NumPart);
delete[] accepted;
if (preproc == 0)
return;
long numAccepted = 0;
bool *accepted = new bool[d->NumPart];
for (long i = 0; i < d->NumPart; i++)
{
SingleParticle p;
for (int k = 0; k < 3; k++)
{
p.Pos[k] = (d->Pos[k]) ? 0 : d->Pos[k][i];
p.Vel[k] = (d->Vel[k]) ? 0 : d->Vel[k][i];
}
p.ID = (d->Id) ? 0 : d->Id[i];
accepted[i] = preproc->accept(p);
numAccepted += accepted[i];
}
for (int k = 0; k < 3; k++)
{
filteredCopy(d->Pos[k], accepted, d->NumPart);
filteredCopy(d->Vel[k], accepted, d->NumPart);
}
filteredCopy(d->Id, accepted, d->NumPart);
filteredCopy(d->type, accepted, d->NumPart);
delete[] accepted;
}
void simulationLoadersInit(int& argc, char **& argv)
{
#ifdef SDF_SUPPORT
sdfLoaderInit(argc, argv);
#endif
}