xref: /petsc/include/petscmat.h (revision 8ed539a5e9028ff5f4219e37f66f1bef6cd978d1)
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