From 39d10fdd6bf2dad54f3a242aca68d90f0f2879c4 Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Thu, 7 Mar 2013 09:33:21 -0600 Subject: [PATCH] Enforce particles to be in the boxsize for the SDF loader --- c_tools/mock/loaders/sdf_loader.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/c_tools/mock/loaders/sdf_loader.cpp b/c_tools/mock/loaders/sdf_loader.cpp index 2e9c77b..363e4ed 100644 --- a/c_tools/mock/loaders/sdf_loader.cpp +++ b/c_tools/mock/loaders/sdf_loader.cpp @@ -69,7 +69,6 @@ public: return num_splitting; } - int64_t getStart(int id) { return sdf_header->TotalNumPart * int64_t(id) / num_splitting; @@ -87,7 +86,7 @@ public: #define INFINITY std::numeric_limits::max() float shift = 0.5*d->BoxSize; rescale_position /= d->time; - float min_pos[3] = {INFINITY,INFINITY, INFINITY}, max_pos[3] = {-INFINITY,-INFINITY,-INFINITY}; +// float min_pos[3] = {INFINITY,INFINITY, INFINITY}, max_pos[3] = {-INFINITY,-INFINITY,-INFINITY}; if (d->Pos[0] != 0) { @@ -96,10 +95,10 @@ public: for (int64_t i = 0; i < d->NumPart; i++) { d->Pos[k][i] = (d->Pos[k][i]*rescale_position + shift); - min_pos[k] = std::min(min_pos[k], d->Pos[k][i]); - max_pos[k] = std::max(max_pos[k], d->Pos[k][i]); +// min_pos[k] = std::min(min_pos[k], d->Pos[k][i]); +// max_pos[k] = std::max(max_pos[k], d->Pos[k][i]); } - cout << boost::format("min[%d] = %g, max[%d] = %g") % k % min_pos[k] % k %max_pos[k] << endl; +// cout << boost::format("min[%d] = %g, max[%d] = %g") % k % min_pos[k] % k %max_pos[k] << endl; } } if (d->Vel[0] != 0) @@ -115,6 +114,20 @@ public: } + void enforceBoxSize(SimuData *d) + { + for (int k = 0; k < 3; k++) + { + for (int64_t i = 0; i < d->NumPart; i++) + { + while (d->Pos[k][i]<0) + d->Pos[k][i] += d->BoxSize; + while (d->Pos[k][i]>=d->BoxSize) + d->Pos[k][i] -= d->BoxSize; + } + } + } + SimuData *loadFile(int id) { SimuData *d; int64_t starts[7]; @@ -177,6 +190,7 @@ public: if (load_flags & (NEED_POSITION | NEED_VELOCITY)) rescaleParticles(d, d->Hubble*1e-5, one_kpc/one_Gyr); + enforceBoxSize(d); applyTransformations(d); basicPreprocessing(d, preproc);