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