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);

previous    contents     next

Peter Junglas 11.5.2000