diff --git a/c_tools/mock/ramses_loader.cpp b/c_tools/mock/ramses_loader.cpp new file mode 100644 index 0000000..00258a6 --- /dev/null +++ b/c_tools/mock/ramses_loader.cpp @@ -0,0 +1,79 @@ +#include +#include +#include +#include +#include "simulation_loader.hpp" + +using namespace std; +using namespace CosmoTool; + +class RamsesLoader: public SimulationLoader +{ +private: + int load_flags; + int _num_files; + int baseid; + bool double_precision; + SimuData *ramses_header; + string snapshot_name; +public: + RamsesLoader(const string& basename, int baseid, bool dp, SimuData *header, int flags, int _num) + : snapshot_name(basename), load_flags(flags), _num_files(_num), double_precision(dp), + ramses_header(header) + { + } + + ~RamsesLoader() + { + delete ramses_header; + } + + SimuData *getHeader() { + return ramses_header; + } + + int num_files() { + return _num_files; + } + + SimuData *loadFile(int id) { + SimuData *d; + + if (id >= _num_files) + return 0; + + d = loadRamsesSimu(snapshot_name.c_str(), baseid, id, double_precision, load_flags); + assert(d != 0); + + long *uniqueID = new long[d->NumPart]; + for (long i = 0; i < d->NumPart; i++) + { + uniqueID[i] = d->Id[i]; + } + + d->new_attribute("uniqueID", uniqueID, delete_adaptor); + + applyTransformations(d); + + return d; + } +}; + +SimulationLoader *ramsesLoader(const std::string& snapshot, int baseid, bool double_precision, int flags) +{ + SimuData *d, *header; + int num_files = 0; + + header = loadRamsesSimu(snapshot.c_str(), baseid, 0, double_precision, 0); + if (header == 0) + return 0; + + while ((d = loadRamsesSimu(snapshot.c_str(), baseid, num_files, double_precision, 0)) != 0) + { + num_files++; + delete d; + } + + return new RamsesLoader(snapshot, baseid, double_precision, header, flags, num_files); +} + diff --git a/c_tools/mock/simulation_loader.hpp b/c_tools/mock/simulation_loader.hpp index e039cf6..e605fec 100644 --- a/c_tools/mock/simulation_loader.hpp +++ b/c_tools/mock/simulation_loader.hpp @@ -43,7 +43,7 @@ void delete_adaptor(void *ptr) SimulationLoader *gadgetLoader(const std::string& snapshot, double Mpc_unitLength, int flags); SimulationLoader *flashLoader(const std::string& snapshot, int flags); SimulationLoader *multidarkLoader(const std::string& snapshot, int flags); -SimulationLoader *ramsesLoader(const std::string& snapshot, int flags); +SimulationLoader *ramsesLoader(const std::string& snapshot, int baseid, bool double_precision, int flags); #endif