xref: /petsc/include/petscmat.h (revision 9717bf64d4faebce4f1af1a10f7542c45ee499e8)
12eac72dbSBarry Smith /*
22eac72dbSBarry Smith      Include file for the matrix component of PETSc
32eac72dbSBarry Smith */
48ed539a5SBarry Smith #ifndef __MAT
58ed539a5SBarry Smith #define __MAT
68ed539a5SBarry Smith #include "vec.h"
72eac72dbSBarry Smith 
82eac72dbSBarry Smith typedef struct _Mat*           Mat;
92eac72dbSBarry Smith typedef struct _MatScatterCtx* MatScatterCtx;
102eac72dbSBarry Smith 
112eac72dbSBarry Smith 
128ed539a5SBarry Smith extern int MatCreateSequentialDense(int,int,Mat*);
13aabeff55SBarry Smith extern int MatCreateSequentialAIJ(int,int,int,int *,Mat*);
14aabeff55SBarry Smith 
15*9717bf64SBarry Smith #if defined(USING_MPI)
16*9717bf64SBarry Smith extern int MatCreateMPIAIJ(MPI_Comm,int,int,int,int,int,int*,int,int*,Mat*);
17*9717bf64SBarry Smith #endif
18*9717bf64SBarry Smith 
19aabeff55SBarry Smith extern int MatShellCreate(int,int,void *,Mat*);
20aabeff55SBarry Smith extern int MatShellSetMult(Mat,int (*)(void*,Vec,Vec));
21aabeff55SBarry Smith extern int MatShellSetMultTrans(Mat,int (*)(void*,Vec,Vec));
22aabeff55SBarry Smith 
232eac72dbSBarry Smith 
248ed539a5SBarry Smith /* ------------------------------------------------------------*/
258ed539a5SBarry Smith extern int  MatValidMatrix(Mat);
262eac72dbSBarry Smith 
278ed539a5SBarry Smith extern int MatInsertValues(Mat,Scalar*,int,int*,int,int*);
288ed539a5SBarry Smith extern int MatAddValues(Mat,Scalar*,int,int*,int,int*);
298ed539a5SBarry Smith extern int MatBeginAssembly(Mat);
308ed539a5SBarry Smith extern int MatEndAssembly(Mat);
318ed539a5SBarry Smith extern int MatSetInsertOption(Mat,int);
328ed539a5SBarry Smith #define ROW_ORIENTED              1
338ed539a5SBarry Smith #define COLUMN_ORIENTED           2
348ed539a5SBarry Smith #define ROWS_SORTED               3
358ed539a5SBarry Smith #define COLUMNS_SORTED            4
368ed539a5SBarry Smith #define NO_NEW_NONZERO_LOCATIONS  5
378ed539a5SBarry Smith #define YES_NEW_NONZERO_LOCATIONS 6
382eac72dbSBarry Smith 
398ed539a5SBarry Smith extern int MatGetValues(Mat,Scalar*,int,int*,int,int*);
408ed539a5SBarry Smith extern int MatGetRow(Mat,int,int *,int **,Scalar**);
418ed539a5SBarry Smith extern int MatRestoreRow(Mat,int,int *,int **,Scalar**);
428ed539a5SBarry Smith extern int MatGetCol(Mat,int,int *,int **,Scalar**);
438ed539a5SBarry Smith extern int MatRestoreCol(Mat,int,int *,int **,Scalar**);
442eac72dbSBarry Smith 
458ed539a5SBarry Smith extern int MatMult(Mat,Vec,Vec);
468ed539a5SBarry Smith extern int MatMultAdd(Mat,Vec,Vec,Vec);
478ed539a5SBarry Smith extern int MatMultTrans(Mat,Vec,Vec);
488ed539a5SBarry Smith extern int MatMultTransAdd(Mat,Vec,Vec,Vec);
492eac72dbSBarry Smith 
508ed539a5SBarry Smith #define ORDER_NATURAL 0
518ed539a5SBarry Smith #define ORDER_ND      1
528ed539a5SBarry Smith #define ORDER_1WD     2
538ed539a5SBarry Smith #define ORDER_RCM     3
548ed539a5SBarry Smith #define ORDER_QMD     4
558ed539a5SBarry Smith extern int MatGetReordering(Mat,int,IS*,IS*);
562eac72dbSBarry Smith 
578ed539a5SBarry Smith extern int MatLUFactor(Mat,IS,IS);
588ed539a5SBarry Smith extern int MatCholeskyFactor(Mat,IS);
598ed539a5SBarry Smith extern int MatLUFactorSymbolic(Mat,IS,IS,Mat*);
608ed539a5SBarry Smith extern int MatCholeskyFactorSymbolic(Mat,IS,Mat*);
618ed539a5SBarry Smith extern int MatLUFactorNumeric(Mat,Mat);
628ed539a5SBarry Smith extern int MatCholeskyFactorNumeric(Mat,Mat);
638ed539a5SBarry Smith 
648ed539a5SBarry Smith extern int MatSolve(Mat,Vec,Vec);
658ed539a5SBarry Smith extern int MatSolveAdd(Mat,Vec,Vec,Vec);
668ed539a5SBarry Smith extern int MatSolveTran(Mat,Vec,Vec);
678ed539a5SBarry Smith extern int MatSolveTranAdd(Mat,Vec,Vec,Vec);
688ed539a5SBarry Smith 
698ed539a5SBarry Smith #define SOR_FORWARD_SWEEP      1
708ed539a5SBarry Smith #define SOR_BACKWARD_SWEEP     2
718ed539a5SBarry Smith #define SOR_SYMMETRIC_SWEEP    3
728ed539a5SBarry Smith #define SOR_ZERO_INITIAL_GUESS 4
738ed539a5SBarry Smith extern int MatRelax(Mat,Vec,double,int,IS,int,Vec);
748ed539a5SBarry Smith 
758ed539a5SBarry Smith extern int MatCopy(Mat,Mat*);
768ed539a5SBarry Smith extern int MatView(Mat,Viewer);
778ed539a5SBarry Smith #include <stdio.h>
788ed539a5SBarry Smith extern int MatPrintMatlab(Mat,FILE*,char *);
798ed539a5SBarry Smith extern int  MatNonZeros(Mat,int*);
808ed539a5SBarry Smith extern int  MatMemoryUsed(Mat,int*);
818ed539a5SBarry Smith extern int MatGetDiagonal(Mat,Vec);
828ed539a5SBarry Smith extern int MatTranspose(Mat);
838ed539a5SBarry Smith extern int MatScale(Mat,Vec,Vec);
848ed539a5SBarry Smith extern int MatShrink(Mat,int,int*,int,int*);
858ed539a5SBarry Smith extern int  MatEqual(Mat,Mat);
86aabeff55SBarry Smith extern int  MatScatterBegin(Mat,IS,IS,Mat,IS,IS,MatScatterCtx*);
87aabeff55SBarry Smith extern int  MatScatterEnd(Mat,IS,IS,Mat,IS,IS,MatScatterCtx*);
88aabeff55SBarry Smith extern int  MatScatterAddBegin(Mat,IS,IS,Mat,IS,IS,MatScatterCtx*);
89aabeff55SBarry Smith extern int  MatScatterAddEnd(Mat,IS,IS,Mat,IS,IS,MatScatterCtx*);
908ed539a5SBarry Smith extern int MatReOrder(Mat,IS,IS);
912eac72dbSBarry Smith 
922eac72dbSBarry Smith #define NORM_1         1
932eac72dbSBarry Smith #define NORM_2         2
942eac72dbSBarry Smith #define NORM_FROBENIUS 3
952eac72dbSBarry Smith #define NORM_INFINITY  4
968ed539a5SBarry Smith extern int MatNorm(Mat,int,double *);
972eac72dbSBarry Smith 
988ed539a5SBarry Smith extern int MatZeroEntries(Mat);
998ed539a5SBarry Smith extern int MatZeroRows(Mat);
1008ed539a5SBarry Smith 
1018ed539a5SBarry Smith extern int MatCompress(Mat);
1028ed539a5SBarry Smith extern int MatDestroy(Mat);
1038ed539a5SBarry Smith 
1048ed539a5SBarry Smith extern int MatCreateInitialMatrix(int,int,Mat*);
1058ed539a5SBarry Smith 
1068ed539a5SBarry Smith 
1078ed539a5SBarry Smith 
1082eac72dbSBarry Smith #endif
1092eac72dbSBarry Smith 
1102eac72dbSBarry Smith 
111