xref: /petsc/include/petscmat.h (revision d6dfbf8f6aa26f18ad3ebf3c96fa582aa9714225)
1 /*
2      Include file for the matrix component of PETSc
3 */
4 #ifndef __MAT_PACKAGE
5 #define __MAT_PACKAGE
6 #include "vec.h"
7 
8 #define MAT_COOKIE 0x404040
9 
10 typedef struct _Mat*           Mat;
11 typedef struct _MatScatterCtx* MatScatterCtx;
12 
13 
14 extern int MatCreateSequentialDense(int,int,Mat*);
15 extern int MatCreateSequentialAIJ(int,int,int,int *,Mat*);
16 extern int MatCreateMPIAIJ(MPI_Comm,int,int,int,int,int,int*,int,int*,Mat*);
17 
18 extern int MatShellCreate(int,int,void *,Mat*);
19 extern int MatShellSetMult(Mat,int (*)(void*,Vec,Vec));
20 extern int MatShellSetMultTrans(Mat,int (*)(void*,Vec,Vec));
21 extern int MatShellSetMultTransAdd(Mat,int (*)(void*,Vec,Vec,Vec));
22 
23 /* ------------------------------------------------------------*/
24 extern int  MatValidMatrix(Mat);
25 
26 extern int MatSetValues(Mat,int,int*,int,int*,Scalar*,InsertMode);
27 extern int MatBeginAssembly(Mat);
28 extern int MatEndAssembly(Mat);
29 extern int MatSetOption(Mat,int);
30 #define ROW_ORIENTED              1
31 #define COLUMN_ORIENTED           2
32 #define ROWS_SORTED               4
33 #define COLUMNS_SORTED            8
34 #define NO_NEW_NONZERO_LOCATIONS  16
35 #define YES_NEW_NONZERO_LOCATIONS 32
36 #define ALLOW_OUT_OF_RANGE        64
37 
38 extern int MatGetValues(Mat,Scalar*,int,int*,int,int*);
39 extern int MatGetRow(Mat,int,int *,int **,Scalar**);
40 extern int MatRestoreRow(Mat,int,int *,int **,Scalar**);
41 extern int MatGetCol(Mat,int,int *,int **,Scalar**);
42 extern int MatRestoreCol(Mat,int,int *,int **,Scalar**);
43 
44 extern int MatMult(Mat,Vec,Vec);
45 extern int MatMultAdd(Mat,Vec,Vec,Vec);
46 extern int MatMultTrans(Mat,Vec,Vec);
47 extern int MatMultTransAdd(Mat,Vec,Vec,Vec);
48 
49 #define ORDER_NATURAL 0
50 #define ORDER_ND      1
51 #define ORDER_1WD     2
52 #define ORDER_RCM     3
53 #define ORDER_QMD     4
54 extern int MatGetReordering(Mat,int,IS*,IS*);
55 
56 extern int MatLUFactor(Mat,IS,IS);
57 extern int MatCholeskyFactor(Mat,IS);
58 extern int MatLUFactorSymbolic(Mat,IS,IS,Mat*);
59 extern int MatCholeskyFactorSymbolic(Mat,IS,Mat*);
60 extern int MatLUFactorNumeric(Mat,Mat*);
61 extern int MatCholeskyFactorNumeric(Mat,Mat*);
62 
63 extern int MatSolve(Mat,Vec,Vec);
64 extern int MatSolveAdd(Mat,Vec,Vec,Vec);
65 extern int MatSolveTran(Mat,Vec,Vec);
66 extern int MatSolveTranAdd(Mat,Vec,Vec,Vec);
67 
68 #define SOR_FORWARD_SWEEP            1
69 #define SOR_BACKWARD_SWEEP           2
70 #define SOR_SYMMETRIC_SWEEP          3
71 #define SOR_LOCAL_FORWARD_SWEEP      4
72 #define SOR_LOCAL_BACKWARD_SWEEP     8
73 #define SOR_LOCAL_SYMMETRIC_SWEEP    12
74 #define SOR_ZERO_INITIAL_GUESS 16
75 extern int MatRelax(Mat,Vec,double,int,double,int,Vec);
76 
77 extern int MatCopy(Mat,Mat*);
78 extern int MatView(Mat,Viewer);
79 #include <stdio.h>
80 extern int MatPrintMatlab(Mat,FILE*,char *);
81 extern int MatNonZeros(Mat,int*);
82 extern int MatMemoryUsed(Mat,int*);
83 extern int MatGetDiagonal(Mat,Vec);
84 extern int MatTranspose(Mat);
85 extern int MatScale(Mat,Vec,Vec);
86 extern int MatShrink(Mat,int,int*,int,int*);
87 extern int MatEqual(Mat,Mat);
88 extern int MatScatterBegin(Mat,IS,IS,Mat,IS,IS,InsertMode,MatScatterCtx*);
89 extern int MatScatterEnd(Mat,IS,IS,Mat,IS,IS,InsertMode,MatScatterCtx*);
90 extern int MatReOrder(Mat,IS,IS);
91 
92 #define NORM_1         1
93 #define NORM_2         2
94 #define NORM_FROBENIUS 3
95 #define NORM_INFINITY  4
96 extern int MatNorm(Mat,int,double *);
97 
98 extern int MatZeroEntries(Mat);
99 extern int MatZeroRows(Mat,IS,Scalar*);
100 extern int MatZeroColumns(Mat,IS,Scalar*);
101 
102 extern int MatCompress(Mat);
103 extern int MatDestroy(Mat);
104 
105 extern int MatGetSize(Mat,int*,int*);
106 extern int MatGetLocalSize(Mat,int*,int*);
107 extern int MatGetOwnershipRange(Mat,int*,int*);
108 extern int MatSetIndexWindow(Mat,int,int,int,int);
109 
110 extern int MatCreateInitialMatrix(int,int,Mat*);
111 
112 
113 
114 
115 #endif
116 
117 
118