12eac72dbSBarry Smith /* 22eac72dbSBarry Smith Include file for the matrix component of PETSc 32eac72dbSBarry Smith */ 4*8ed539a5SBarry Smith #ifndef __MAT 5*8ed539a5SBarry Smith #define __MAT 6*8ed539a5SBarry Smith #include "vec.h" 72eac72dbSBarry Smith 82eac72dbSBarry Smith typedef struct _Mat* Mat; 92eac72dbSBarry Smith typedef struct _MatScatterCtx* MatScatterCtx; 102eac72dbSBarry Smith 112eac72dbSBarry Smith 12*8ed539a5SBarry Smith extern int MatCreateSequentialDense(int,int,Mat*); 13*8ed539a5SBarry Smith extern int MatCreateSequentialAIJ(int,int,int,Mat*); 142eac72dbSBarry Smith 15*8ed539a5SBarry Smith /* ------------------------------------------------------------*/ 16*8ed539a5SBarry Smith extern int MatValidMatrix(Mat); 172eac72dbSBarry Smith 18*8ed539a5SBarry Smith extern int MatInsertValues(Mat,Scalar*,int,int*,int,int*); 19*8ed539a5SBarry Smith extern int MatAddValues(Mat,Scalar*,int,int*,int,int*); 20*8ed539a5SBarry Smith extern int MatBeginAssembly(Mat); 21*8ed539a5SBarry Smith extern int MatEndAssembly(Mat); 22*8ed539a5SBarry Smith extern int MatSetInsertOption(Mat,int); 23*8ed539a5SBarry Smith #define ROW_ORIENTED 1 24*8ed539a5SBarry Smith #define COLUMN_ORIENTED 2 25*8ed539a5SBarry Smith #define ROWS_SORTED 3 26*8ed539a5SBarry Smith #define COLUMNS_SORTED 4 27*8ed539a5SBarry Smith #define NO_NEW_NONZERO_LOCATIONS 5 28*8ed539a5SBarry Smith #define YES_NEW_NONZERO_LOCATIONS 6 292eac72dbSBarry Smith 30*8ed539a5SBarry Smith extern int MatGetValues(Mat,Scalar*,int,int*,int,int*); 31*8ed539a5SBarry Smith extern int MatGetRow(Mat,int,int *,int **,Scalar**); 32*8ed539a5SBarry Smith extern int MatRestoreRow(Mat,int,int *,int **,Scalar**); 33*8ed539a5SBarry Smith extern int MatGetCol(Mat,int,int *,int **,Scalar**); 34*8ed539a5SBarry Smith extern int MatRestoreCol(Mat,int,int *,int **,Scalar**); 352eac72dbSBarry Smith 36*8ed539a5SBarry Smith extern int MatMult(Mat,Vec,Vec); 37*8ed539a5SBarry Smith extern int MatMultAdd(Mat,Vec,Vec,Vec); 38*8ed539a5SBarry Smith extern int MatMultTrans(Mat,Vec,Vec); 39*8ed539a5SBarry Smith extern int MatMultTransAdd(Mat,Vec,Vec,Vec); 402eac72dbSBarry Smith 41*8ed539a5SBarry Smith #define ORDER_NATURAL 0 42*8ed539a5SBarry Smith #define ORDER_ND 1 43*8ed539a5SBarry Smith #define ORDER_1WD 2 44*8ed539a5SBarry Smith #define ORDER_RCM 3 45*8ed539a5SBarry Smith #define ORDER_QMD 4 46*8ed539a5SBarry Smith extern int MatGetReordering(Mat,int,IS*,IS*); 472eac72dbSBarry Smith 48*8ed539a5SBarry Smith extern int MatLUFactor(Mat,IS,IS); 49*8ed539a5SBarry Smith extern int MatCholeskyFactor(Mat,IS); 50*8ed539a5SBarry Smith extern int MatLUFactorSymbolic(Mat,IS,IS,Mat*); 51*8ed539a5SBarry Smith extern int MatCholeskyFactorSymbolic(Mat,IS,Mat*); 52*8ed539a5SBarry Smith extern int MatLUFactorNumeric(Mat,Mat); 53*8ed539a5SBarry Smith extern int MatCholeskyFactorNumeric(Mat,Mat); 54*8ed539a5SBarry Smith 55*8ed539a5SBarry Smith extern int MatSolve(Mat,Vec,Vec); 56*8ed539a5SBarry Smith extern int MatSolveAdd(Mat,Vec,Vec,Vec); 57*8ed539a5SBarry Smith extern int MatSolveTran(Mat,Vec,Vec); 58*8ed539a5SBarry Smith extern int MatSolveTranAdd(Mat,Vec,Vec,Vec); 59*8ed539a5SBarry Smith 60*8ed539a5SBarry Smith #define SOR_FORWARD_SWEEP 1 61*8ed539a5SBarry Smith #define SOR_BACKWARD_SWEEP 2 62*8ed539a5SBarry Smith #define SOR_SYMMETRIC_SWEEP 3 63*8ed539a5SBarry Smith #define SOR_ZERO_INITIAL_GUESS 4 64*8ed539a5SBarry Smith extern int MatRelax(Mat,Vec,double,int,IS,int,Vec); 65*8ed539a5SBarry Smith 66*8ed539a5SBarry Smith extern int MatCopy(Mat,Mat*); 67*8ed539a5SBarry Smith extern int MatView(Mat,Viewer); 68*8ed539a5SBarry Smith #include <stdio.h> 69*8ed539a5SBarry Smith extern int MatPrintMatlab(Mat,FILE*,char *); 70*8ed539a5SBarry Smith extern int MatNonZeros(Mat,int*); 71*8ed539a5SBarry Smith extern int MatMemoryUsed(Mat,int*); 72*8ed539a5SBarry Smith extern int MatGetDiagonal(Mat,Vec); 73*8ed539a5SBarry Smith extern int MatTranspose(Mat); 74*8ed539a5SBarry Smith extern int MatScale(Mat,Vec,Vec); 75*8ed539a5SBarry Smith extern int MatShrink(Mat,int,int*,int,int*); 76*8ed539a5SBarry Smith extern int MatEqual(Mat,Mat); 77*8ed539a5SBarry Smith extern int MatGetSubMatrix(Mat,IS,IS); 78*8ed539a5SBarry Smith extern int MatSetSubMatrix(Mat,Mat,IS,IS); 79*8ed539a5SBarry Smith extern int MatReOrder(Mat,IS,IS); 802eac72dbSBarry Smith 812eac72dbSBarry Smith #define NORM_1 1 822eac72dbSBarry Smith #define NORM_2 2 832eac72dbSBarry Smith #define NORM_FROBENIUS 3 842eac72dbSBarry Smith #define NORM_INFINITY 4 85*8ed539a5SBarry Smith extern int MatNorm(Mat,int,double *); 862eac72dbSBarry Smith 87*8ed539a5SBarry Smith extern int MatZeroEntries(Mat); 88*8ed539a5SBarry Smith extern int MatZeroRows(Mat); 89*8ed539a5SBarry Smith 90*8ed539a5SBarry Smith extern int MatCompress(Mat); 91*8ed539a5SBarry Smith extern int MatDestroy(Mat); 92*8ed539a5SBarry Smith 93*8ed539a5SBarry Smith extern int MatCreateInitialMatrix(int,int,Mat*); 94*8ed539a5SBarry Smith 95*8ed539a5SBarry Smith 96*8ed539a5SBarry Smith 972eac72dbSBarry Smith #endif 982eac72dbSBarry Smith 992eac72dbSBarry Smith 100