Newer
Older
#ifndef _DISPATCH_H_
#define _DISPATCH_H_
#include "../game_of_life/gol.h"
//#include "../lattice_boltzmann/lbm.h"
#define NB_SIDES 6
#define NB_CHUNKS 9
#define INDEX_SIDE_BACK 0
#define INDEX_SIDE_BOTTOM 1
#define INDEX_SIDE_FRONT 2
#define INDEX_SIDE_LEFT 3
#define INDEX_SIDE_RIGHT 4
#define INDEX_SIDE_TOP 5
#define INDEX_CHUNK_NORTH_WEST 0
#define INDEX_CHUNK_WEST 1
#define INDEX_CHUNK_SOUTH_WEST 2
#define INDEX_CHUNK_SOUTH 3
#define INDEX_CHUNK_SOUTH_EAST 4
#define INDEX_CHUNK_EAST 5
#define INDEX_CHUNK_NORTH_EAST 6
#define INDEX_CHUNK_NORTH 7
#define INDEX_CHUNK_SURFACE 8
typedef struct side_envelope {
chunk_info_t chunks[NB_CHUNKS];
chunk_info_t *north_west;
chunk_info_t *north;
chunk_info_t *north_east;
chunk_info_t *east;
chunk_info_t *south;
chunk_info_t *south_east;
chunk_info_t *west;
chunk_info_t *south_west;
chunk_info_t *surface;
} side_envelope_t;
side_envelope_t sides[NB_SIDES];
side_envelope_t *back;
side_envelope_t *bottom;
side_envelope_t *front;
side_envelope_t *left;
side_envelope_t *right;
side_envelope_t *top;
extern struct dispatch_context *dispatch_context_new(const int *dimensions, MPI_Datatype datatype, int n_dimensions);
extern void dispatch_context_print(struct dispatch_context *dc);
extern envelope_t *get_inner_envelope(struct dispatch_context *dc, struct futhark_context *fc, int thickness);
extern envelope_t *get_outer_envelope(struct dispatch_context *dc, struct futhark_context *fc, int thickness);
//extern void *
//futhark_outer_envelope_new(struct dispatch_context *dc, struct futhark_context *fc, envelope_t *outer_envelope,
// void *f(struct futhark_context *, const void *), char *futhark_type);
extern chunk_info_t get_chunk_info(struct dispatch_context *dc);
extern void *get_chunk_with_envelope(struct dispatch_context *dc, struct futhark_context *fc, int thickness,
void *f(struct futhark_context*, const uint8_t *, ...));
extern void *get_data(struct dispatch_context *dc);
extern void dispatch_context_free(struct dispatch_context *dc);
extern void envelope_free(envelope_t *envelope);
#endif //_DISPATCH_H_