lalib.h
/*
* lalib.h
*
* Header for lalib library
*
*/
#include <mpi.h>
typedef enum {FALSE, TRUE} Boolean;
/*
Lalib_grid: infos about logical 'processor' grid
*/
#define LALIB_NDIMS 2 /* number of dimensions of processor grid */
typedef struct {
int rows; /* dimensions of 'processor' grid */
int cols;
int myrow; /* position of local process */
int mycol;
MPI_Comm grid_comm;
MPI_Comm row_comm;
MPI_Comm col_comm;
} Lalib_grid;
Lalib_grid *lalib_build_grid(MPI_Comm comm, int rows, int cols);
/*
* Lalib_vector: row- or columnwise replicated distributed vector
*/
#define LALIB_ROW 0 /* vector types */
#define LALIB_COL 1
typedef struct {
int length; /* full length of vector */
int local_length; /* local vector length */
int blocklength; /* length of blocks */
int type; /* column or row vector */
double * data; /* local part of vector data */
Lalib_grid * grid; /* processor grid */
} Lalib_vector;
Lalib_vector *lalib_build_vector(int length, int type, int blocklen,
Lalib_grid *grid);
/* mappings between global vector index and (1d-processor, local index) */
void lalib_vector_local_index(Lalib_vector *v, int m, int *p, int*i);
void lalib_vector_global_index(Lalib_vector *v, int p, int i, int *m);
int lalib_dot_nostride(Lalib_vector *a, Lalib_vector *b, double *result);
int lalib_dot_stride(Lalib_vector *a, Lalib_vector *b, double *result);

Peter Junglas 11.5.2000