00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef INC_PASO_SPARSEMATRIX
00026 #define INC_PASO_SPARSEMATRIX
00027
00028 #include "Common.h"
00029 #include "Pattern.h"
00030 #include "Options.h"
00031 #include "Paso.h"
00032
00033
00034
00035
00036
00037
00038 typedef int Paso_SparseMatrixType;
00039
00040 typedef struct Paso_SparseMatrix {
00041 Paso_SparseMatrixType type;
00042 dim_t reference_counter;
00043
00044 dim_t row_block_size;
00045 dim_t col_block_size;
00046 dim_t block_size;
00047
00048 dim_t numRows;
00049 dim_t numCols;
00050 Paso_Pattern* pattern;
00051 dim_t len;
00052
00053 double *val;
00054
00055 index_t solver_package;
00056 void* solver_p;
00057
00058 } Paso_SparseMatrix;
00059
00060
00061
00062 Paso_SparseMatrix* Paso_SparseMatrix_alloc(Paso_SparseMatrixType,Paso_Pattern*,dim_t,dim_t,const bool_t);
00063 Paso_SparseMatrix* Paso_SparseMatrix_getReference(Paso_SparseMatrix*);
00064 dim_t Paso_SparseMatrix_getNumColors(Paso_SparseMatrix*);
00065 void Paso_SparseMatrix_applyDiagonal_CSR_OFFSET0(Paso_SparseMatrix* A, const double* left, const double* right);
00066 index_t* Paso_SparseMatrix_borrowColoringPointer(Paso_SparseMatrix*);
00067 void Paso_SparseMatrix_free(Paso_SparseMatrix*);
00068 void Paso_SparseMatrix_MatrixVector_CSC_OFFSET0(const double alpha, const Paso_SparseMatrix* A, const double* in, const double beta, double* out);
00069 void Paso_SparseMatrix_MatrixVector_CSC_OFFSET1(const double alpha, const Paso_SparseMatrix* A, const double* in, const double beta, double* out);
00070 void Paso_SparseMatrix_MatrixVector_CSR_OFFSET0(const double alpha, const Paso_SparseMatrix* A, const double* in, const double beta, double* out);
00071 void Paso_SparseMatrix_MatrixVector_CSR_OFFSET1(const double alpha, const Paso_SparseMatrix* A, const double* in, const double beta, double* out);
00072 void Paso_SparseMatrix_MatrixVector_CSR_OFFSET0_DIAG(const double alpha, const Paso_SparseMatrix* A, const double* in, const double beta, double* out);
00073
00074 void Paso_SparseMatrix_copy(Paso_SparseMatrix*,double*);
00075 void Paso_SparseMatrix_maxAbsRow_CSR_OFFSET0(const Paso_SparseMatrix*,double*);
00076 void Paso_SparseMatrix_addAbsRow_CSR_OFFSET0(const Paso_SparseMatrix*,double*);
00077 void Paso_SparseMatrix_addRow_CSR_OFFSET0(Paso_SparseMatrix*,double*);
00078 void Paso_SparseMatrix_nullifyRowsAndCols_CSC_BLK1(Paso_SparseMatrix* A, double* mask_row, double* mask_col, double main_diagonal_value);
00079 void Paso_SparseMatrix_nullifyRowsAndCols_CSR_BLK1(Paso_SparseMatrix* A, double* mask_row, double* mask_col, double main_diagonal_value);
00080 void Paso_SparseMatrix_nullifyRowsAndCols_CSC(Paso_SparseMatrix* A, double* mask_row, double* mask_col, double main_diagonal_value);
00081 void Paso_SparseMatrix_nullifyRowsAndCols_CSR(Paso_SparseMatrix* A, double* mask_row, double* mask_col, double main_diagonal_value);
00082 void Paso_SparseMatrix_nullifyRows_CSR_BLK1(Paso_SparseMatrix* A, double* mask_row, double main_diagonal_value);
00083 void Paso_SparseMatrix_saveHB_CSC(Paso_SparseMatrix *, FILE*);
00084 Paso_SparseMatrix* Paso_SparseMatrix_getSubmatrix(Paso_SparseMatrix* A,dim_t,dim_t,index_t*,index_t*);
00085 Paso_SparseMatrix* Paso_SparseMatrix_getBlock(Paso_SparseMatrix* A, int blockid);
00086 Paso_SparseMatrix* Paso_SparseMatrix_MatrixMatrix(const Paso_SparseMatrix* A, const Paso_SparseMatrix* B);
00087 void Paso_SparseMatrix_MatrixMatrix_DD(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B);
00088 void Paso_SparseMatrix_MatrixMatrix_DB(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B);
00089 void Paso_SparseMatrix_MatrixMatrix_BD(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B);
00090 void Paso_SparseMatrix_MatrixMatrix_BB(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B);
00091
00092 Paso_SparseMatrix* Paso_SparseMatrix_MatrixMatrixTranspose(const Paso_SparseMatrix* A, const Paso_SparseMatrix* B, const Paso_SparseMatrix* T);
00093 void Paso_SparseMatrix_MatrixMatrixTranspose_DD(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B, const Paso_SparseMatrix* T);
00094 void Paso_SparseMatrix_MatrixMatrixTranspose_DB(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B, const Paso_SparseMatrix* T);
00095 void Paso_SparseMatrix_MatrixMatrixTranspose_BD(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B, const Paso_SparseMatrix* T);
00096 void Paso_SparseMatrix_MatrixMatrixTranspose_BB(Paso_SparseMatrix *C, const Paso_SparseMatrix* A, const Paso_SparseMatrix* B, const Paso_SparseMatrix* T);
00097
00098 Paso_SparseMatrix* Paso_SparseMatrix_unroll(const Paso_SparseMatrixType type, const Paso_SparseMatrix* A);
00099 Paso_SparseMatrix* Paso_SparseMatrix_getTranspose(Paso_SparseMatrix* P);
00100
00101 void Paso_SparseMatrix_setValues(Paso_SparseMatrix*,double);
00102 void Paso_SparseMatrix_saveMM_CSC(Paso_SparseMatrix *, FILE *);
00103 void Paso_SparseMatrix_MatrixVector_CSR_OFFSET0_stripe(const double alpha, const dim_t nRows, const dim_t row_block_size, const dim_t col_block_size, const index_t* ptr, const index_t* index, const double* val, const double* in, const double beta, double* out);
00104 Paso_SparseMatrix* Paso_SparseMatrix_loadMM_toCSR( char *fileName_p );
00105 void Paso_SparseMatrix_saveMM(Paso_SparseMatrix * A_p, char * fileName_p);
00106 void Paso_SparseMatrix_nullifyRows_CSR(Paso_SparseMatrix*, double*, double);
00107 index_t* Paso_SparseMatrix_borrowMainDiagonalPointer(Paso_SparseMatrix * A_p);
00108 void Paso_SparseMatrix_copyFromMainDiagonal(Paso_SparseMatrix * A_p, double* out);
00109 void Paso_SparseMatrix_copyToMainDiagonal(Paso_SparseMatrix * A_p, const double* in);
00110 void Paso_SparseMatrix_copyBlockFromMainDiagonal(Paso_SparseMatrix * A_p, double* out);
00111 void Paso_SparseMatrix_copyBlockToMainDiagonal(Paso_SparseMatrix * A_p, const double* in);
00112 void Paso_SparseMatrix_applyBlockMatrix(Paso_SparseMatrix * A_p, double* block_diag, int* pivot, double*x, double *b);
00113 void Paso_SparseMatrix_invMain(Paso_SparseMatrix * A_p, double* inv_diag, int* pivot);
00114 dim_t Paso_SparseMatrix_maxDeg(Paso_SparseMatrix * A_p);
00115 dim_t Paso_SparseMatrix_getTotalNumRows(const Paso_SparseMatrix* A);
00116 dim_t Paso_SparseMatrix_getTotalNumCols(const Paso_SparseMatrix*A);
00117 dim_t Paso_SparseMatrix_getNumRows(const Paso_SparseMatrix*A);
00118 dim_t Paso_SparseMatrix_getNumCols(const Paso_SparseMatrix*A);
00119 double Paso_SparseMatrix_getSize(const Paso_SparseMatrix*A);
00120 double Paso_SparseMatrix_getSparsity(const Paso_SparseMatrix*A);
00121
00122
00123 #endif
00124