cosmotool/src/hdf5_flash.h
2011-06-06 09:56:54 -04:00

193 lines
3.9 KiB
C

/* general header file for the HDF 5 IO in FLASH */
#ifndef _HDF5_FLASH_H
#define _HDF5_FLASH_H
/* pull in some basic FLASH information */
//#include "flash_defines.fh"
/* define an integer file format version number, that is stored
in the output files. This way, people can check this number
before reading, and compare against a published format to know
what is stored in the file. In theory, this number should be
incremented anytime a change is made to the file format */
/* File format history:
1 -- original version
2 -- added build records:
"FLASH build date"
"FLASH build directory"
"FLASH build machine"
"FLASH setup call"
added the "file format version" record
3 -- added the "run comment record" (why was this
not done long ago?)
4 -- added extrema attributes to the variable records
5 -- redshift included
6 -- added the Module data to the attributes of "/"
7 -- make build info attributes on "/"
*/
#define FILE_FORMAT_VERSION 7
#define RUNTIME_PARAMETER_STRING_SIZE 80
#define TIMER_NAME_STRING_SIZE 30
#define MAX_STRING_LENGTH 80
#define LIST_STRING_SIZE 80
#define OUTPUT_PROP_LENGTH 24
typedef struct real_list_t {
char name[LIST_STRING_SIZE];
double value;
} real_list_t;
typedef struct int_runtime_params_t {
char name[RUNTIME_PARAMETER_STRING_SIZE];
int value;
} int_runtime_params_t;
typedef struct real_runtime_params_t {
char name[RUNTIME_PARAMETER_STRING_SIZE];
double value;
} real_runtime_params_t;
typedef struct str_runtime_params_t {
char value[RUNTIME_PARAMETER_STRING_SIZE];
char name[RUNTIME_PARAMETER_STRING_SIZE];
} str_runtime_params_t;
typedef struct log_runtime_params_t {
int value;
char name[RUNTIME_PARAMETER_STRING_SIZE];
} log_runtime_params_t;
#define MAX_TIMER_PARENTS 20
#define MAX_TIMER_CALL_STACK_DEPTH 20
typedef struct timer_data_t {
char name[TIMER_NAME_STRING_SIZE];
double t_value[MAX_TIMER_PARENTS];
int t_counts[MAX_TIMER_PARENTS];
int t_on[MAX_TIMER_PARENTS];
int t_stacks[MAX_TIMER_PARENTS][MAX_TIMER_CALL_STACK_DEPTH];
int t_num_parents;
int t_stack_sizes[MAX_TIMER_PARENTS];
} full_timer_data_t;
typedef struct sim_params_t {
int total_blocks;
int nsteps;
int nxb;
int nyb;
int nzb;
double time;
double timestep;
double redshift;
} sim_params_t;
typedef struct sim_params_sp_t {
int total_blocks;
int nsteps;
int nxb;
int nyb;
int nzb;
float time;
float timestep;
float redshift;
} sim_params_sp_t;
typedef struct sim_info_t {
int file_format_version;
char setup_call[400];
char file_creation_time[MAX_STRING_LENGTH];
char flash_version[MAX_STRING_LENGTH];
char build_date[MAX_STRING_LENGTH];
char build_dir[MAX_STRING_LENGTH];
char build_machine[MAX_STRING_LENGTH];
char cflags[400];
char fflags[400];
char setup_time_stamp[MAX_STRING_LENGTH];
char build_time_stamp[MAX_STRING_LENGTH];
} sim_info_t;
/* define some particle property constants */
#if FLASH_NUMBER_OF_INT_PARTICLE_PROPS > 0
#define NUMINTPROPS 2*((FLASH_NUMBER_OF_INT_PARTICLE_PROPS+1)/2)
#else
#define NUMINTPROPS 2
#endif
#if FLASH_NUMBER_OF_REAL_PARTICLE_PROPS > 0
#define NUMREALPROPS FLASH_NUMBER_OF_REAL_PARTICLE_PROPS
#else
#define NUMREALPROPS 1
#endif
#define NUMACTUALINTPROPS FLASH_NUMBER_OF_INT_PARTICLE_PROPS
#define NUMACTUALREALPROPS FLASH_NUMBER_OF_REAL_PARTICLE_PROPS
/* set the dimension and grid variables -- the variable N_DIM is set
in the compile line */
/* mdim is the maximum dimension -- this is set in tree.fh */
#define MDIM 3
#define MGID 15
/* 3-d problem */
#if N_DIM == 3
#define NDIM 3
#define NGID 15
#define k2d 1
#define k3d 1
/* 2-d problem */
#elif N_DIM == 2
#define NDIM 2
#define NGID 9
#define k2d 1
#define k3d 0
/* 1-d problem */
#else
#define NDIM 1
#define NGID 5
#define k2d 0
#define k3d 0
#endif
#endif