From 996a17b509c631d59aacc328d46e037e724ed9d1 Mon Sep 17 00:00:00 2001 From: Guilhem Lavaux Date: Fri, 23 Apr 2010 09:29:10 +0200 Subject: [PATCH] Load gadget data --- lib/Makefile | 4 ++-- src/loadGadget.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++ src/loadGadget.hpp | 12 ++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/loadGadget.cpp create mode 100644 src/loadGadget.hpp diff --git a/lib/Makefile b/lib/Makefile index ff55a71..baa976a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,5 +1,5 @@ SHLIBS= libCosmoTool.so -SOURCES= loadRamses.cpp yorick.cpp miniargs.cpp fortran.cpp interpolate.cpp load_data.cpp powerSpectrum.cpp octTree.cpp +SOURCES= loadRamses.cpp yorick.cpp miniargs.cpp fortran.cpp interpolate.cpp load_data.cpp powerSpectrum.cpp octTree.cpp loadGadget.cpp LIBS= -lnetcdf_c++ -lnetcdf -lgsl -lgslcblas -lm include config.mk @@ -8,7 +8,7 @@ VPATH=../src all: $(SHLIBS) -libCosmoTool.so: loadRamses.o yorick.o miniargs.o fortran.o interpolate.o load_data.o powerSpectrum.o octTree.o +libCosmoTool.so: loadRamses.o yorick.o miniargs.o fortran.o interpolate.o load_data.o powerSpectrum.o octTree.o loadGadget.o depend: $(SOURCES) @echo "[DEPENDS] $^" diff --git a/src/loadGadget.cpp b/src/loadGadget.cpp new file mode 100644 index 0000000..a8a3e34 --- /dev/null +++ b/src/loadGadget.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include "load_data.hpp" +#include "loadGadget.hpp" +#include "fortran.hpp" + +using namespace CosmoTool; + +PurePositionData *CosmoTool::loadGadgetPosition(const char *fname) +{ + PurePositionData *data; + int p, n; + UnformattedRead f(fname); + GadgetHeader h; + + data = new PurePositionData; + f.beginCheckpoint(); + for (int i = 0; i < 6; i++) + h.npart[i] = f.readInt32(); + for (int i = 0; i < 6; i++) + h.mass[i] = f.readReal64(); + h.time = f.readReal64(); + h.redshift = f.readReal64(); + h.flag_sfr = f.readInt32(); + h.flag_feedback = f.readInt32(); + for (int i = 0; i < 6; i++) + h.npartTotal[i] = f.readInt32(); + h.flag_cooling = f.readInt32(); + h.num_files = f.readInt32(); + h.BoxSize = f.readReal64(); + h.Omega0 = f.readReal64(); + h.OmegaLambda = f.readReal64(); + h.HubbleParam = f.readReal64(); + f.endCheckpoint(true); + + data->NumPart = 0; + for(int k=0; k<5; k++) + data->NumPart += h.npart[k]; + + data->pos = new FCoordinates[data->NumPart]; + + f.beginCheckpoint(); + for(int k = 0, p = 0; k < 5; k++) { + for(int n = 0; n < h.npart[k]; n++) { + data->pos[p][0] = f.readReal32(); + data->pos[p][1] = f.readReal32(); + data->pos[p][2] = f.readReal32(); + p++; + } + } + f.endCheckpoint(); + + // Skip velocities + f.skip((long)data->NumPart*3+2*4); + // Skip ids + + return data; +} diff --git a/src/loadGadget.hpp b/src/loadGadget.hpp new file mode 100644 index 0000000..aa01281 --- /dev/null +++ b/src/loadGadget.hpp @@ -0,0 +1,12 @@ +#ifndef __COSMO_LOAD_GADGET_HPP +#define __COSMO_LOAD_GADGET_HPP + +#include "load_data.hpp" + +namespace CosmoTool { + + PurePositionData *loadGadgetPosition(const char *fname); + +}; + +#endif