00001
00002
00003
00004
00005
00006 #if !defined(INC_SPMV_UBCSR_H)
00007 #define INC_SPMV_UBCSR_H
00008
00009 #if !defined(INC_SPMV_H)
00010 typedef struct tagSparseMatrixCSR SparseMatrixCSR;
00011 #endif
00012
00013 #if !defined(INC_SPMV_VBR_H)
00014 typedef struct tagSparseMatrixVBR SparseMatrixVBR;
00015 #endif
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 typedef struct tagSparseMatrixUBCSR
00026 {
00027 int m, n;
00028 int nnz;
00029 int r, c;
00030 int num_blocks;
00031
00032 int bm;
00033 int *b_row_ptr;
00034 int *b_row_ind;
00035 int *b_col_ind;
00036 double *b_val;
00037
00038 int is_symm;
00039 } SparseMatrixUBCSR;
00040
00041
00042 typedef void (*SPMV_UBCSR_FP) (int bm, const int *ptr,
00043 const int *row_ind, const int *col_ind,
00044 const double *val, const double *x, double *y);
00045
00046 #define UBCSR_MAX_ROWS 10
00047 #define UBCSR_MAX_COLS 10
00048
00049 extern SPMV_UBCSR_FP spmvUBlkCSRRoutines[];
00050
00051 extern void spmv_convert_vbr2ubcsr (const SparseMatrixVBR * A,
00052 int r, int c, SparseMatrixUBCSR * B1,
00053 SparseMatrixCSR * B2);
00054
00055
00056
00057
00058
00059
00060
00061
00062 extern void spmv_alloc_ubcsr (SparseMatrixUBCSR * A, int r, int c, int m,
00063 int n, int mb, int nblocks);
00064 extern void spmv_destroy_ubcsr (SparseMatrixUBCSR * A);
00065
00066 extern void spmv_ubcsr (const SparseMatrixUBCSR * A,
00067 const double *x, double *y);
00068
00069 #endif
00070
00071