Skip to content
Snippets Groups Projects
Commit 0cf66ac0 authored by Loic Hausammann's avatar Loic Hausammann
Browse files

Logger: update index and add major/minor verions into header

parent 126b5f06
No related branches found
No related tags found
1 merge request!685Logger loader
...@@ -47,7 +47,7 @@ include_HEADERS = logger_header.h logger_io.h logger_particle.h logger_time.h lo ...@@ -47,7 +47,7 @@ include_HEADERS = logger_header.h logger_io.h logger_particle.h logger_time.h lo
# Common source files # Common source files
AM_SOURCES = logger_header.c logger_io.c logger_particle.c logger_time.c logger_tools.c logger_reader.c \ AM_SOURCES = logger_header.c logger_io.c logger_particle.c logger_time.c logger_tools.c logger_reader.c \
logger_logfile.c logger_index.c logger_logfile.c
if HAVEPYTHON if HAVEPYTHON
AM_SOURCES += logger_python_wrapper.c AM_SOURCES += logger_python_wrapper.c
endif endif
......
...@@ -116,15 +116,13 @@ void header_read(struct header *h, struct logger_logfile *log) { ...@@ -116,15 +116,13 @@ void header_read(struct header *h, struct logger_logfile *log) {
error("Wrong file format"); error("Wrong file format");
/* Read major version number */ /* Read major version number */
int major; offset = io_read_data(map, sizeof(int), &h->major_version, offset);
offset = io_read_data(map, sizeof(int), &major, offset);
/* Read minor version number */ /* Read minor version number */
int minor; offset = io_read_data(map, sizeof(int), &h->minor_version, offset);
offset = io_read_data(map, sizeof(int), &minor, offset);
if (h->log->reader->verbose > 0) if (h->log->reader->verbose > 0)
message("File version %i.%i", major, minor); message("File version %i.%i", h->major_version, h->minor_version);
/* read the offset directions */ /* read the offset directions */
offset = io_read_data(map, LOGGER_NUMBER_SIZE, &h->offset_direction, offset); offset = io_read_data(map, LOGGER_NUMBER_SIZE, &h->offset_direction, offset);
......
...@@ -60,6 +60,12 @@ struct header { ...@@ -60,6 +60,12 @@ struct header {
/* Logger version. */ /* Logger version. */
char version[STRING_SIZE]; char version[STRING_SIZE];
/* Dump major version */
int major_version;
/* Dump minor version */
int minor_version;
/* Offset of the first record. */ /* Offset of the first record. */
size_t offset_first_record; size_t offset_first_record;
......
...@@ -39,12 +39,14 @@ void logger_index_init(struct logger_index *index, struct logger_reader *reader, ...@@ -39,12 +39,14 @@ void logger_index_init(struct logger_index *index, struct logger_reader *reader,
char *basename) { char *basename) {
/* Set pointers to 0. */ /* Set pointers to 0. */
index->offsets = NULL; index->data = NULL;
index->ids = NULL;
/* Set variables default value. */ /* Set variables default value. */
index->current_file = -1; index->total_number_particles = 0;
index->number_of_particles = 0;
for(int i = 0; i < swift_type_count; i++) {
index->number_particles[i] = 0;
}
} }
/** /**
...@@ -57,12 +59,11 @@ void logger_index_read_file(struct logger_index *index, int i) { ...@@ -57,12 +59,11 @@ void logger_index_read_file(struct logger_index *index, int i) {
/* Cleanup the memory of previous file. */ /* Cleanup the memory of previous file. */
logger_index_free_current_file(index); logger_index_free_current_file(index);
/* Save current index. */
index->current_file = i;
/* Open file. */ /* Open file. */
FILE *f = NULL; FILE *f = NULL;
f = fopen(index->filenames[i], "wb"); char name[200];
sprintf(name, "%s_%04i.index", index->basename, i);
f = fopen(name, "rb");
/* Read the double time. */ /* Read the double time. */
double time; double time;
...@@ -73,32 +74,23 @@ void logger_index_read_file(struct logger_index *index, int i) { ...@@ -73,32 +74,23 @@ void logger_index_read_file(struct logger_index *index, int i) {
fread(&int_time, sizeof(integertime_t), 1, f); fread(&int_time, sizeof(integertime_t), 1, f);
/* Read the number of particles. */ /* Read the number of particles. */
long long N_total[swift_type_count]; fread(index->number_particles, sizeof(long long), swift_type_count, f);
fread(N_total, sizeof(long long), swift_type_count, f);
/* Count total number of particles. */ /* Count total number of particles. */
long long N = 0; long long N = 0;
for(int i = 0; i < swift_type_count; i++) { for(int j = 0; j < swift_type_count; j++) {
N += N_total[i]; N += index->number_particles[j];
} }
index->number_of_particles = N; index->total_number_particles = N;
/* Read the particles ids. */ /* Read the particles ids. */
if (posix_memalign((void**)&index->ids, IO_BUFFER_ALIGNMENT, if (posix_memalign((void**)&index->data, IO_BUFFER_ALIGNMENT,
N * sizeof(long long)) != 0) N * sizeof(struct logger_index_data)) != 0)
error("Unable to allocate the offset buffer"); error("Unable to allocate index data buffer");
fread(index->ids, sizeof(size_t), N, f);
/* Read the particles offsets. */
if (posix_memalign((void**)&index->offsets, IO_BUFFER_ALIGNMENT,
N * sizeof(size_t)) != 0)
error("Unable to allocate the offset buffer");
fread(index->offset, sizeof(size_t), N, f);
fread(index->data, sizeof(struct logger_index_data), N, f);
/* Close the file. */ /* Close the file. */
fclose(f); fclose(f);
...@@ -110,19 +102,17 @@ void logger_index_read_file(struct logger_index *index, int i) { ...@@ -110,19 +102,17 @@ void logger_index_read_file(struct logger_index *index, int i) {
* @param index The #logger_index. * @param index The #logger_index.
*/ */
void logger_index_free_current_file(struct logger_index *index) { void logger_index_free_current_file(struct logger_index *index) {
/* Free the particles offsets. */ /* Free the index data */
if (index->offsets) if (index->data)
free(index->offsets); free(index->data);
index->offsets = NULL; index->data = NULL;
/* Free the particles ids. */
if (index->ids)
free(index->ids);
index->ids = NULL;
/* Set variables to default value. */ /* Set variables to default value. */
index->current_file = -1; index->total_number_particles = 0;
index->number_of_particles = 0;
for(int i = 0; i < swift_type_count; i++) {
index->number_particles[i] = 0;
}
} }
/** /**
...@@ -132,21 +122,6 @@ void logger_index_free_current_file(struct logger_index *index) { ...@@ -132,21 +122,6 @@ void logger_index_free_current_file(struct logger_index *index) {
*/ */
void logger_index_free(struct logger_index *index) { void logger_index_free(struct logger_index *index) {
/* Set variables to default value. */
index->current_file = -1;
index->number_of_particles = 0;
/* Free the memory allocated for current file. */ /* Free the memory allocated for current file. */
logger_index_free_file_data(index); logger_index_free_current_file(index);
/* Free the filenames. */
for(int i = 0; i < index->number_files; i++) {
if (index->filenames[i])
free(index->filenames[i]);
index->filenames[i] = NULL;
}
/* Free the array of filenames. */
free(index->filenames);
index->filenames = NULL;
} }
...@@ -17,6 +17,8 @@ ...@@ -17,6 +17,8 @@
* *
******************************************************************************/ ******************************************************************************/
#include "logger_tools.h"
/** /**
* @file logger_index.h * @file logger_index.h
* @brief This file deals with the index files. * @brief This file deals with the index files.
...@@ -26,6 +28,15 @@ ...@@ -26,6 +28,15 @@
struct logger_reader; struct logger_reader;
struct logger_index_data {
/* The particle's id */
long long id;
/* The particle's offset */
size_t offset;
};
/** /**
* @brief This structure will contain the data related to * @brief This structure will contain the data related to
* the index file. * the index file.
...@@ -47,19 +58,16 @@ struct logger_index { ...@@ -47,19 +58,16 @@ struct logger_index {
int number_files; int number_files;
/* List of all the index filenames */ /* List of all the index filenames */
char **filenames; char *basename;
/* Index of current file */
int current_file;
/* Offsets of the particles in current file */ /* Particles' ids and offsets */
size_t *offsets; struct logger_index_data *data;
/* ids of the particles in current file */
long long *ids;
/* Number of particles */ /* Number of particles */
size_t number_of_particles; size_t total_number_particles;
/* Number of particles per type */
long long number_particles[swift_type_count];
}; };
void logger_index_init(struct logger_index *index, struct logger_reader *reader, void logger_index_init(struct logger_index *index, struct logger_reader *reader,
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "../src/dimension.h" #include "../src/dimension.h"
#include "../src/inline.h" #include "../src/inline.h"
#include "../src/logger.h" #include "../src/logger.h"
#include "../src/part_type.h"
#ifdef HAVE_PYTHON #ifdef HAVE_PYTHON
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment