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