diff --git a/external/cosmotool/src/loadGadget.cpp b/external/cosmotool/src/loadGadget.cpp index 47100c8..f9f1072 100644 --- a/external/cosmotool/src/loadGadget.cpp +++ b/external/cosmotool/src/loadGadget.cpp @@ -268,10 +268,10 @@ SimuData *CosmoTool::loadGadgetMulti(const char *fname, int id, -void CosmoTool::writeGadget(const char *fname, SimuData *data, int GadgetFormat) +void CosmoTool::writeGadget(const std::string& fname, SimuData *data, int GadgetFormat) { UnformattedWrite *f; - int npart[6]; + int npart[6], npartTotal[6]; float mass[6]; if (data->Pos[0] == 0 || data->Vel[0] == 0 || data->Id == 0) @@ -283,12 +283,12 @@ void CosmoTool::writeGadget(const char *fname, SimuData *data, int GadgetFormat) for (int i = 0; i < 6; i++) { - npart[i] = 0; + npart[i] = npartTotal[i] = 0; mass[i] = 0; } mass[1] = 1.0; - npart[1] = data->NumPart; + npartTotal[1] = data->TotalNumPart; f->beginCheckpoint(); for (int i = 0; i < 6; i++) @@ -302,7 +302,7 @@ void CosmoTool::writeGadget(const char *fname, SimuData *data, int GadgetFormat) f->writeInt32(0); for (int i = 0; i < 6; i++) - f->writeInt32(npart[i]); + f->writeInt32(npartTotal[i]); f->writeInt32(0); f->writeInt32(1); f->writeReal64(data->BoxSize); diff --git a/external/cosmotool/src/loadGadget.hpp b/external/cosmotool/src/loadGadget.hpp index ad0e412..e05a187 100644 --- a/external/cosmotool/src/loadGadget.hpp +++ b/external/cosmotool/src/loadGadget.hpp @@ -36,6 +36,8 @@ knowledge of the CeCILL license and that you accept its terms. #ifndef __COSMO_LOAD_GADGET_HPP #define __COSMO_LOAD_GADGET_HPP +#include + #include "load_data.hpp" #include "loadSimu.hpp" @@ -45,7 +47,7 @@ namespace CosmoTool { int GadgetFormat = 1, SimuFilter filter = 0); // Only single snapshot supported - void writeGadget(const char *fname, SimuData *data, int GadgetFormat = 1); + void writeGadget(const std::string& fname, SimuData *data, int GadgetFormat = 1); }; diff --git a/external/cosmotool/src/mykdtree.hpp b/external/cosmotool/src/mykdtree.hpp index 27d66ae..bf1eaa0 100644 --- a/external/cosmotool/src/mykdtree.hpp +++ b/external/cosmotool/src/mykdtree.hpp @@ -136,7 +136,13 @@ namespace CosmoTool { void setPeriodic(bool on, CoordType replicate) { periodic = on; - this->replicate = replicate; + std::fill(this->replicate, this->replicate+N, replicate); + } + + void setPeriodic(bool on, const coords& replicate) + { + periodic = on; + std::copy(replicate, replicate+N, this->replicate); } uint32_t getIntersection(const coords& x, CoordType r, @@ -193,7 +199,7 @@ namespace CosmoTool { Cell *base_cell; bool periodic; - CoordType replicate; + coords replicate; Node *buildTree(Cell **cell0, uint32_t NumCells, diff --git a/external/cosmotool/src/replicateGenerator.hpp b/external/cosmotool/src/replicateGenerator.hpp index fd7035f..4d89050 100644 --- a/external/cosmotool/src/replicateGenerator.hpp +++ b/external/cosmotool/src/replicateGenerator.hpp @@ -46,18 +46,29 @@ namespace CosmoTool { public: typedef Coord Coords[N]; - Coord replicate; + Coords replicate; ReplicateGenerator(const Coords& x, Coord shift) { face = 0; - replicate = shift; + std::fill(replicate, replicate+N, shift); numFaces = spower(3); std::copy(x, x+N, x_base); if (!next()) abort(); } + ReplicateGenerator(const Coords& x, Coords& shift) + { + face = 0; + std::copy(shift, shift+N, replicate); + numFaces = spower(3); + std::copy(x, x+N, x_base); + if (!next()) + abort(); + } + + bool next() { if (face == numFaces) @@ -72,7 +83,7 @@ namespace CosmoTool int c_face; c_face = q_face % 3; q_face /= 3; - x_shifted[i] = x_base[i] + (c_face-1)*replicate; + x_shifted[i] = x_base[i] + (c_face-1)*replicate[i]; no_move = no_move && (c_face == 1); } if (no_move)