xref: /petsc/include/petscmat.h (revision fae171e0928a68051052473fbd80ecaec6ec1e7e)
1 /* $Id: mat.h,v 1.100 1996/03/19 21:30:28 bsmith Exp bsmith $ */
2 /*
3      Include file for the matrix component of PETSc
4 */
5 #ifndef __MAT_PACKAGE
6 #define __MAT_PACKAGE
7 #include "vec.h"
8 
9 #define MAT_COOKIE         PETSC_COOKIE+5
10 
11 typedef struct _Mat*           Mat;
12 
13 typedef enum { MATSAME=-1, MATSEQDENSE, MATSEQAIJ, MATMPIAIJ, MATSHELL,
14                MATMPIROWBS, MATSEQBDIAG, MATMPIBDIAG,
15                MATMPIDENSE, MATSEQBAIJ } MatType;
16 
17 extern int MatCreate(MPI_Comm,int,int,Mat*);
18 extern int MatCreateSeqDense(MPI_Comm,int,int,Scalar*,Mat*);
19 extern int MatCreateMPIDense(MPI_Comm,int,int,int,int,Scalar*,Mat*);
20 extern int MatCreateSeqAIJ(MPI_Comm,int,int,int,int*,Mat*);
21 extern int MatCreateMPIAIJ(MPI_Comm,int,int,int,int,int,int*,int,int*,Mat*);
22 extern int MatCreateMPIRowbs(MPI_Comm,int,int,int,int*,void*,Mat*);
23 extern int MatCreateSeqBDiag(MPI_Comm,int,int,int,int,int*,Scalar**,Mat*);
24 extern int MatCreateMPIBDiag(MPI_Comm,int,int,int,int,int,int*,Scalar**,Mat*);
25 extern int MatCreateSeqBAIJ(MPI_Comm,int,int,int,int,int*,Mat*);
26 
27 extern int MatDestroy(Mat);
28 
29 extern int MatCreateShell(MPI_Comm,int,int,void *,Mat*);
30 extern int MatShellGetContext(Mat,void **);
31 extern int MatShellSetMult(Mat,int (*)(void*,Vec,Vec));
32 extern int MatShellSetDestroy(Mat,int (*)(void*));
33 extern int MatShellSetMultTrans(Mat,int (*)(void*,Vec,Vec));
34 extern int MatShellSetMultTransAdd(Mat,int (*)(void*,Vec,Vec,Vec));
35 
36 extern int MatPrintHelp(Mat);
37 
38 /* ------------------------------------------------------------*/
39 extern int MatSetValues(Mat,int,int*,int,int*,Scalar*,InsertMode);
40 typedef enum {FLUSH_ASSEMBLY=1,FINAL_ASSEMBLY=0} MatAssemblyType;
41 extern int MatAssemblyBegin(Mat,MatAssemblyType);
42 extern int MatAssemblyEnd(Mat,MatAssemblyType);
43 
44 typedef enum {ROW_ORIENTED=1,COLUMN_ORIENTED=2,ROWS_SORTED=4,
45               COLUMNS_SORTED=8,NO_NEW_NONZERO_LOCATIONS=16,
46               YES_NEW_NONZERO_LOCATIONS=32,SYMMETRIC_MATRIX=64,
47               STRUCTURALLY_SYMMETRIC_MATRIX,NO_NEW_DIAGONALS,
48               YES_NEW_DIAGONALS,INODE_LIMIT_1,INODE_LIMIT_2,
49               INODE_LIMIT_3,INODE_LIMIT_4,INODE_LIMIT_5} MatOption;
50 extern int MatSetOption(Mat,MatOption);
51 extern int MatGetType(Mat,MatType*,char**);
52 extern int MatGetTypeFromOptions(MPI_Comm,char*,MatType*,int*);
53 extern int MatGetValues(Mat,int,int*,int,int*,Scalar*);
54 extern int MatGetRow(Mat,int,int *,int **,Scalar**);
55 extern int MatRestoreRow(Mat,int,int *,int **,Scalar**);
56 extern int MatGetColumn(Mat,int,int *,int **,Scalar**);
57 extern int MatRestoreColumn(Mat,int,int *,int **,Scalar**);
58 extern int MatGetArray(Mat,Scalar **);
59 extern int MatRestoreArray(Mat,Scalar **);
60 
61 extern int MatMult(Mat,Vec,Vec);
62 extern int MatMultAdd(Mat,Vec,Vec,Vec);
63 extern int MatMultTrans(Mat,Vec,Vec);
64 extern int MatMultTransAdd(Mat,Vec,Vec,Vec);
65 
66 extern int MatConvert(Mat,MatType,Mat*);
67 extern int MatCopy(Mat,Mat);
68 extern int MatView(Mat,Viewer);
69 extern int MatLoad(Viewer,MatType,Mat*);
70 
71 typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType;
72 extern int MatGetInfo(Mat,MatInfoType,int*,int*,int*);
73 extern int MatValid(Mat,PetscTruth*);
74 extern int MatGetDiagonal(Mat,Vec);
75 extern int MatTranspose(Mat,Mat*);
76 extern int MatDiagonalScale(Mat,Vec,Vec);
77 extern int MatDiagonalShift(Mat,Vec);
78 extern int MatEqual(Mat,Mat, PetscTruth*);
79 
80 extern int MatNorm(Mat,NormType,double *);
81 extern int MatZeroEntries(Mat);
82 extern int MatZeroRows(Mat,IS,Scalar*);
83 extern int MatZeroColumns(Mat,IS,Scalar*);
84 
85 extern int MatGetSize(Mat,int*,int*);
86 extern int MatGetLocalSize(Mat,int*,int*);
87 extern int MatGetOwnershipRange(Mat,int*,int*);
88 
89 typedef enum {MAT_INITIAL_MATRIX, MAT_REUSE_MATRIX} MatGetSubMatrixCall;
90 extern int MatGetSubMatrix(Mat,IS,IS,MatGetSubMatrixCall,Mat*);
91 extern int MatGetSubMatrixInPlace(Mat,IS,IS);
92 extern int MatGetSubMatrices(Mat,int,IS *,IS *,MatGetSubMatrixCall,Mat **);
93 extern int MatIncreaseOverlap(Mat,int,IS *,int);
94 
95 extern int MatAXPY(Scalar *,Mat,Mat);
96 extern int MatCompress(Mat);
97 
98 extern int MatScale(Scalar *,Mat);
99 extern int MatShift(Scalar *,Mat);
100 
101 /* Routines unique to particular data structures */
102 extern int MatBDiagGetData(Mat,int*,int*,int**,int**,Scalar***);
103 
104 /*
105   These routines are not usually accessed directly, rather solving is
106   done through the SLES, KSP and PC interfaces.
107 */
108 
109 typedef enum {ORDER_NATURAL=0,ORDER_ND=1,ORDER_1WD=2,
110               ORDER_RCM=3,ORDER_QMD=4,ORDER_ROWLENGTH=5,ORDER_APPLICATION_1,
111               ORDER_APPLICATION_2} MatOrdering;
112 extern int MatGetReordering(Mat,MatOrdering,IS*,IS*);
113 extern int MatGetReorderingTypeFromOptions(char *,MatOrdering*);
114 extern int MatReorderForNonzeroDiagonal(Mat,double,IS,IS);
115 extern int MatReorderingRegister(MatOrdering *,char*,PetscTruth,int,
116                                  int (*)(int*,int*,int*,int*,int*));
117 extern int MatReorderingRegisterAll();
118 extern int MatReorderingRegisterDestroy();
119 extern int MatReorderingGetName(MatOrdering,char **);
120 extern PetscTruth MatReorderingRequiresSymmetric[];
121 extern int MatReorderingIndexShift[];
122 
123 extern int MatLUFactor(Mat,IS,IS,double);
124 extern int MatILUFactor(Mat,IS,IS,double,int);
125 extern int MatCholeskyFactor(Mat,IS,double);
126 extern int MatLUFactorSymbolic(Mat,IS,IS,double,Mat*);
127 extern int MatILUFactorSymbolic(Mat,IS,IS,double,int,Mat*);
128 extern int MatCholeskyFactorSymbolic(Mat,IS,double,Mat*);
129 extern int MatIncompleteCholeskyFactorSymbolic(Mat,IS,double,int,Mat*);
130 extern int MatLUFactorNumeric(Mat,Mat*);
131 extern int MatCholeskyFactorNumeric(Mat,Mat*);
132 
133 extern int MatSolve(Mat,Vec,Vec);
134 extern int MatForwardSolve(Mat,Vec,Vec);
135 extern int MatBackwardSolve(Mat,Vec,Vec);
136 extern int MatSolveAdd(Mat,Vec,Vec,Vec);
137 extern int MatSolveTrans(Mat,Vec,Vec);
138 extern int MatSolveTransAdd(Mat,Vec,Vec,Vec);
139 
140 typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3,
141               SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8,
142               SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16,
143               SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128
144               } MatSORType;
145 extern int MatRelax(Mat,Vec,double,MatSORType,double,int,Vec);
146 
147 typedef enum { MAT_SET_VALUES=0,
148                MAT_GET_ROW=1,
149                MAT_RESTORE_ROW=2,
150                MAT_MULT=3,
151                MAT_MULT_ADD=4,
152                MAT_MULT_TRANS=5,
153                MAT_MULT_TRANS_ADD=6,
154                MAT_SOLVE=7,
155                MAT_SOLVE_ADD=8,
156                MAT_SOLVE_TRANS=9,
157                MAT_SOLVE_TRANS_ADD=10,
158                MAT_LUFACTOR=11,
159                MAT_CHOLESKYFACTOR=12,
160                MAT_RELAX=13,
161                MAT_TRANSPOSE=14,
162                MAT_GETINFO=15,
163                MAT_EQUAL=16,
164                MAT_GET_DIAGONAL=17,
165                MAT_DIAGONAL_SCALE=18,
166                MAT_NORM=19,
167                MAT_ASSEMBLY_BEGIN=20,
168                MAT_ASSEMBLY_END=21,
169                MAT_COMPRESS=22,
170                MAT_SET_OPTION=23,
171                MAT_ZERO_ENTRIES=24,
172                MAT_ZERO_ROWS=25,
173                MAT_GET_REORDERING=26,
174                MAT_LUFACTOR_SYMBOLIC=27,
175                MAT_LUFACTOR_NUMERIC=28,
176                MAT_CHOLESKY_FACTOR_SYMBOLIC=29,
177                MAT_CHOLESKY_FACTOR_NUMERIC=30,
178                MAT_GET_SIZE=31,
179                MAT_GET_LOCAL_SIZE=32,
180                MAT_GET_OWNERSHIP_RANGE=33,
181                MAT_ILUFACTOR_SYMBOLIC=34,
182                MAT_INCOMPLETECHOLESKYFACTOR_SYMBOLIC=35,
183                MAT_GET_ARRAY=36,
184                MAT_RESTORE_ARRAY=37,
185                MAT_CONVERT=38,
186                MAT_GET_SUBMATRIX=39,
187                MAT_GET_SUBMATRIX_INPLACE=40,
188                MAT_CONVERT_SAME_TYPE=41,
189                MAT_FORWARD_SOLVE=42,
190                MAT_BACKWARD_SOLVE=43,
191                MAT_ILUFACTOR=44,
192                MAT_INCOMPLETECHOLEKSYFACTOR=45,
193                MAT_AXPY=46,
194                MAT_GET_SUBMATRICES=47,
195                MAT_INCREASE_OVERLAP=48,
196                MAT_GET_VALUES=49,
197                MAT_COPY=50,
198                MAT_PRINT_HELP=51,
199                MAT_SCALE=52,
200                MAT_SHIFT=53,
201                MAT_DIAGONAL_SHIFT=54,
202                MAT_DESTROY=250,
203                MAT_VIEW=251
204              } MatOperation;
205 extern int MatHasOperation(Mat,MatOperation,PetscTruth*);
206 extern int MatShellSetOperation(Mat,MatOperation,void *);
207 
208 /*  Not currently supported!
209 #define MAT_SCATTER_COOKIE PETSC_COOKIE+15
210 typedef struct _MatScatter* MatScatter;
211 
212 extern int MatScatterBegin(Mat,Mat,InsertMode,MatScatter);
213 extern int MatScatterEnd(Mat,Mat,InsertMode,MatScatter);
214 extern int MatScatterCreate(Mat,IS,IS,Mat,IS,IS,MatScatter*);
215 extern int MatScatterDestroy(MatScatter);
216 */
217 
218 /*
219    Codes for matrices stored on disk. By default they are
220  stored in a universal format. By changing the format with
221  ViewerSetFormat(viewer,BINARY_FORMAT_NATIVE); the matrices will
222  be stored in a way natural for the matrix, for example dense matrices
223  would be stored as dense. Matrices stored this way may only be
224  read into matrices of the same time.
225 */
226 #define MATRIX_BINARY_FORMAT_DENSE -1
227 
228 #endif
229 
230 
231 
232