cosmotool/src/loadFlash.cpp

87 lines
1.8 KiB
C++
Raw Normal View History

2011-06-06 15:56:54 +02:00
/* Reads in FLASH v3 files in HDF5 format */
#include <iostream>
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "load_data.hpp"
#include "loadFlash.hpp"
#include "h5_readFlash.hpp"
#include "H5Cpp.h"
using namespace CosmoTool;
using namespace std;
using namespace H5;
SimuData *CosmoTool::loadFlashMulti(const char *fname, int id, int loadflags)
{
SimuData *data;
int p, n;
H5File *fileID;
H5std_string filename;
//char filename[81];
double lbox, time;
int npart;
const double kpc2cm = 3.08568025e21;
const double km2cm = 1.e5;
data = new SimuData;
if (data == 0) {
return 0;
}
filename = fname;
H5File file (filename, H5F_ACC_RDONLY);
// simulation info
h5_read_flash3_header_info(&file, &time);
data->time = time;
h5_read_runtime_parameters(&file, &lbox, &npart);
data->NumPart = npart;
data->BoxSize = lbox/kpc2cm;
// particle data
for (int i = 0; i < 3; i++) {
data->Pos[i] = new float[data->NumPart];
if (data->Pos[i] == 0) {
delete data;
return 0;
}
}
for (int i = 0; i < 3; i++) {
data->Vel[i] = new float[data->NumPart];
if (data->Vel[i] == 0) {
delete data;
return 0;
}
}
data->Id = new int[data->NumPart];
if (data->Id == 0) {
delete data;
return 0;
}
int offset = 0;
h5_read_flash3_particles(&file, &npart, &npart, &offset,
data->Pos[0], data->Pos[1], data->Pos[2],
data->Vel[0], data->Vel[1], data->Vel[2],
data->Id);
for (int i = 0; i < 3; i++) {
for (int n = 0; i < data->NumPart; i++) {
data->Pos[n][i] = data->Pos[n][i] / kpc2cm;
data->Vel[n][i] = data->Vel[n][i] / km2cm;
}
}
file.close();
return data;
}