From dc03871f37b118f89a99463d2f9585f8df3210bd Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Thu, 28 Jun 2012 09:36:28 -0400 Subject: [PATCH] Upgraded ramses format-on-disk. DInterpolate assertion check --- src/dinterpolate.tcc | 7 +++++- src/loadRamses.cpp | 56 +++++++++++++++++++++++++++++++++++++------- src/loadRamses.hpp | 4 ++-- 3 files changed, 56 insertions(+), 11 deletions(-) diff --git a/src/dinterpolate.tcc b/src/dinterpolate.tcc index 58e7dfb..e18a7e6 100644 --- a/src/dinterpolate.tcc +++ b/src/dinterpolate.tcc @@ -19,7 +19,10 @@ namespace CosmoTool { for (uint32_t i = 0; i < numPoints; i++) index_by_point[i] = numSimplex_by_point[i] = 0; for (uint32_t i = 0; i < (N+1)*numSimplex; i++) - numSimplex_by_point[simplex_list[i]]++; + { + assert(simplex_list[i] < numPoints); + numSimplex_by_point[simplex_list[i]]++; + } // Compute the total number and the index for accessing lists. for (uint32_t i = 0; i < numPoints; i++) @@ -35,6 +38,7 @@ namespace CosmoTool { for (int j = 0; j <= N; j++) { uint32_t p = simplex_list[(N+1)*i+j]; + assert(index_by_point[p] < point_to_simplex_size); point_to_simplex_list_base[index_by_point[p]] = i; ++index_by_point[p]; } @@ -45,6 +49,7 @@ namespace CosmoTool { { // check assertion assert((i==0 && index_by_point[0]==numSimplex_by_point[0]) || ((index_by_point[i]-index_by_point[i-1]) == (numSimplex_by_point[i]+1))); + assert(index_by_point[i] < point_to_simplex_size); point_to_simplex_list_base[index_by_point[i]] = -1; } diff --git a/src/loadRamses.cpp b/src/loadRamses.cpp index 7999cf6..4dcbad2 100644 --- a/src/loadRamses.cpp +++ b/src/loadRamses.cpp @@ -258,7 +258,7 @@ int readInfoFile(const char *basename, int outputId, InfoData& info) return 1; } -CosmoTool::SimuData *CosmoTool::loadRamsesSimu(const char *basename, int outputId, int cpuid, int flags) +CosmoTool::SimuData *CosmoTool::loadRamsesSimu(const char *basename, int outputId, int cpuid, bool dp, int flags) { CosmoTool::SimuData *data = new CosmoTool::SimuData(); @@ -346,6 +346,26 @@ CosmoTool::SimuData *CosmoTool::loadRamsesSimu(const char *basename, int outputI infile.beginCheckpoint(); data->NumPart = nPar = infile.readInt32(); infile.endCheckpoint(); + + infile.beginCheckpoint(); + for (int i = 0; i < 4; i++) infile.readInt32(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readInt32(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readReal64(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readReal64(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readInt32(); + infile.endCheckpoint(); if (flags & NEED_POSITION) { @@ -371,7 +391,7 @@ CosmoTool::SimuData *CosmoTool::loadRamsesSimu(const char *basename, int outputI { for (uint32_t i = 0; i < nPar; i++) { - data->Pos[k][i] = infile.readReal32(); + data->Pos[k][i] = dp ? infile.readReal64() : infile.readReal32(); data->Pos[k][i] *= data->BoxSize; } infile.endCheckpoint(); @@ -386,7 +406,7 @@ CosmoTool::SimuData *CosmoTool::loadRamsesSimu(const char *basename, int outputI { for (uint32_t i = 0; i < nPar; i++) { - data->Vel[k][i] = infile.readReal32(); + data->Vel[k][i] = dp ? infile.readReal64() : infile.readReal32(); data->Vel[k][i] *= unit_vel; } infile.endCheckpoint(); @@ -399,7 +419,7 @@ CosmoTool::SimuData *CosmoTool::loadRamsesSimu(const char *basename, int outputI infile.beginCheckpoint(); for (uint32_t i = nPar; i > 0; i--) { - float dummyF = infile.readReal32(); + float dummyF = dp ? infile.readReal64() : infile.readReal32(); if (dummyF < minMass) minMass = dummyF; } infile.endCheckpoint(); @@ -797,7 +817,7 @@ CosmoTool::PhaseSpaceData *CosmoTool::loadRamsesPhase(const char *basename, int } -CosmoTool::PhaseSpaceDataID *CosmoTool::loadRamsesPhase1(const char *basename, int outputId, int cpuid, bool quiet) +CosmoTool::PhaseSpaceDataID *CosmoTool::loadRamsesPhase1(const char *basename, int outputId, int cpuid, bool dp, bool quiet) { PhaseSpaceDataID *gd = (PhaseSpaceDataID *)malloc(sizeof(PhaseSpaceDataID)); int id = 1; @@ -905,6 +925,26 @@ CosmoTool::PhaseSpaceDataID *CosmoTool::loadRamsesPhase1(const char *basename, i nPar = infile.readInt32(); infile.endCheckpoint(); + infile.beginCheckpoint(); + for (int i = 0; i < 4; i++) infile.readInt32(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readInt32(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readReal64(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readReal64(); + infile.endCheckpoint(); + + infile.beginCheckpoint(); + infile.readInt32(); + infile.endCheckpoint(); + gd->pos = new FCoordinates[nPar]; gd->vel = new FCoordinates[nPar]; @@ -913,7 +953,7 @@ CosmoTool::PhaseSpaceDataID *CosmoTool::loadRamsesPhase1(const char *basename, i infile.beginCheckpoint(); for (uint32_t i = 0; i < nPar; i++) { - gd->pos[i][k] = infile.readReal32()*gd->BoxSize; + gd->pos[i][k] = (dp ? infile.readReal64() : infile.readReal32())*gd->BoxSize; } infile.endCheckpoint(); } @@ -923,7 +963,7 @@ CosmoTool::PhaseSpaceDataID *CosmoTool::loadRamsesPhase1(const char *basename, i infile.beginCheckpoint(); for (uint32_t i = 0; i < nPar; i++) { - gd->vel[i][k] = infile.readReal32()*unit_vel; + gd->vel[i][k] = (dp ? infile.readReal64() : infile.readReal32())*unit_vel; } infile.endCheckpoint(); } @@ -932,7 +972,7 @@ CosmoTool::PhaseSpaceDataID *CosmoTool::loadRamsesPhase1(const char *basename, i infile.beginCheckpoint(); for (uint32_t i = nPar; i > 0; i--) { - float dummyF = infile.readReal32(); + float dummyF = (dp ? infile.readReal64() : infile.readReal32()); if (dummyF < minMass) minMass = dummyF; } infile.endCheckpoint(); diff --git a/src/loadRamses.hpp b/src/loadRamses.hpp index f09d569..15e6275 100644 --- a/src/loadRamses.hpp +++ b/src/loadRamses.hpp @@ -10,9 +10,9 @@ namespace CosmoTool { PurePositionData *loadRamsesPosition(const char *fname, int id, bool quiet = false, bool dp = true); PhaseSpaceData *loadRamsesPhase(const char *fname, int id, bool quiet = false); - PhaseSpaceDataID *loadRamsesPhase1(const char *fname, int id, int cpuid, bool quiet = false); + PhaseSpaceDataID *loadRamsesPhase1(const char *fname, int id, int cpuid, bool dp = true, bool quiet = false); - SimuData *loadRamsesSimu(const char *basename, int id, int cpuid, int flags); + SimuData *loadRamsesSimu(const char *basename, int id, int cpuid, bool dp, int flags); }; #endif