xref: /petsc/include/petscmat.h (revision 70f55243aafb320636e2a54ff30cab5d1e8d3d7b)
1 /* $Id: mat.h,v 1.110 1996/07/15 23:38:53 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, 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 {MAT_FLUSH_ASSEMBLY=1,MAT_FINAL_ASSEMBLY=0} MatAssemblyType;
39 extern int MatAssemblyBegin(Mat,MatAssemblyType);
40 extern int MatAssemblyEnd(Mat,MatAssemblyType);
41 
42 typedef enum {MAT_ROW_ORIENTED=1,MAT_COLUMN_ORIENTED=2,MAT_ROWS_SORTED=4,
43               MAT_COLUMNS_SORTED=8,MAT_NO_NEW_NONZERO_LOCATIONS=16,
44               MAT_YES_NEW_NONZERO_LOCATIONS=32,MAT_SYMMETRIC=64,
45               MAT_STRUCTURALLY_SYMMETRIC,MAT_NO_NEW_DIAGONALS,
46               MAT_YES_NEW_DIAGONALS,MAT_INODE_LIMIT_1,MAT_INODE_LIMIT_2,
47               MAT_INODE_LIMIT_3,MAT_INODE_LIMIT_4,MAT_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 extern int MatGetBlockSize(Mat,int *);
59 
60 extern int MatMult(Mat,Vec,Vec);
61 extern int MatMultAdd(Mat,Vec,Vec,Vec);
62 extern int MatMultTrans(Mat,Vec,Vec);
63 extern int MatMultTransAdd(Mat,Vec,Vec,Vec);
64 
65 extern int MatConvert(Mat,MatType,Mat*);
66 extern int MatCopy(Mat,Mat);
67 extern int MatView(Mat,Viewer);
68 extern int MatLoad(Viewer,MatType,Mat*);
69 
70 typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType;
71 extern int MatGetInfo(Mat,MatInfoType,int*,int*,int*);
72 extern int MatValid(Mat,PetscTruth*);
73 extern int MatGetDiagonal(Mat,Vec);
74 extern int MatTranspose(Mat,Mat*);
75 extern int MatDiagonalScale(Mat,Vec,Vec);
76 extern int MatDiagonalShift(Mat,Vec);
77 extern int MatEqual(Mat,Mat, PetscTruth*);
78 
79 extern int MatNorm(Mat,NormType,double *);
80 extern int MatZeroEntries(Mat);
81 extern int MatZeroRows(Mat,IS,Scalar*);
82 extern int MatZeroColumns(Mat,IS,Scalar*);
83 
84 extern int MatGetSize(Mat,int*,int*);
85 extern int MatGetLocalSize(Mat,int*,int*);
86 extern int MatGetOwnershipRange(Mat,int*,int*);
87 
88 typedef enum {MAT_INITIAL_MATRIX, MAT_REUSE_MATRIX} MatGetSubMatrixCall;
89 extern int MatGetSubMatrices(Mat,int,IS *,IS *,MatGetSubMatrixCall,Mat **);
90 extern int MatDestroyMatrices(int, 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_FLOW,
109               ORDER_APPLICATION_1,ORDER_APPLICATION_2} MatReordering;
110 extern int MatGetReordering(Mat,MatReordering,IS*,IS*);
111 extern int MatGetReorderingTypeFromOptions(char *,MatReordering*);
112 extern int MatReorderingRegister(MatReordering *,char*,PetscTruth,int,
113                                  int (*)(int*,int*,int*,int*,int*));
114 extern int MatReorderingRegisterAll();
115 extern int MatReorderingRegisterDestroy();
116 extern int MatReorderingGetName(MatReordering,char **);
117 extern PetscTruth MatReorderingRequiresSymmetric[];
118 extern int MatReorderingIndexShift[];
119 
120 extern int MatReorderForNonzeroDiagonal(Mat,double,IS,IS);
121 
122 extern int MatCholeskyFactor(Mat,IS,double);
123 extern int MatCholeskyFactorSymbolic(Mat,IS,double,Mat*);
124 extern int MatCholeskyFactorNumeric(Mat,Mat*);
125 
126 extern int MatLUFactor(Mat,IS,IS,double);
127 extern int MatILUFactor(Mat,IS,IS,double,int);
128 extern int MatLUFactorSymbolic(Mat,IS,IS,double,Mat*);
129 extern int MatILUFactorSymbolic(Mat,IS,IS,double,int,Mat*);
130 extern int MatIncompleteCholeskyFactorSymbolic(Mat,IS,double,int,Mat*);
131 extern int MatLUFactorNumeric(Mat,Mat*);
132 extern int MatILUDTFactor(Mat,double,int,IS,IS,Mat *);
133 
134 
135 extern int MatSolve(Mat,Vec,Vec);
136 extern int MatForwardSolve(Mat,Vec,Vec);
137 extern int MatBackwardSolve(Mat,Vec,Vec);
138 extern int MatSolveAdd(Mat,Vec,Vec,Vec);
139 extern int MatSolveTrans(Mat,Vec,Vec);
140 extern int MatSolveTransAdd(Mat,Vec,Vec,Vec);
141 
142 typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3,
143               SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8,
144               SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16,
145               SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128
146               } MatSORType;
147 extern int MatRelax(Mat,Vec,double,MatSORType,double,int,Vec);
148 
149 typedef enum { MAT_SET_VALUES=0,
150                MAT_GET_ROW=1,
151                MAT_RESTORE_ROW=2,
152                MAT_MULT=3,
153                MAT_MULT_ADD=4,
154                MAT_MULT_TRANS=5,
155                MAT_MULT_TRANS_ADD=6,
156                MAT_SOLVE=7,
157                MAT_SOLVE_ADD=8,
158                MAT_SOLVE_TRANS=9,
159                MAT_SOLVE_TRANS_ADD=10,
160                MAT_LUFACTOR=11,
161                MAT_CHOLESKYFACTOR=12,
162                MAT_RELAX=13,
163                MAT_TRANSPOSE=14,
164                MAT_GETINFO=15,
165                MAT_EQUAL=16,
166                MAT_GET_DIAGONAL=17,
167                MAT_DIAGONAL_SCALE=18,
168                MAT_NORM=19,
169                MAT_ASSEMBLY_BEGIN=20,
170                MAT_ASSEMBLY_END=21,
171                MAT_COMPRESS=22,
172                MAT_SET_OPTION=23,
173                MAT_ZERO_ENTRIES=24,
174                MAT_ZERO_ROWS=25,
175                MAT_GET_REORDERING=26,
176                MAT_LUFACTOR_SYMBOLIC=27,
177                MAT_LUFACTOR_NUMERIC=28,
178                MAT_CHOLESKY_FACTOR_SYMBOLIC=29,
179                MAT_CHOLESKY_FACTOR_NUMERIC=30,
180                MAT_GET_SIZE=31,
181                MAT_GET_LOCAL_SIZE=32,
182                MAT_GET_OWNERSHIP_RANGE=33,
183                MAT_ILUFACTOR_SYMBOLIC=34,
184                MAT_INCOMPLETECHOLESKYFACTOR_SYMBOLIC=35,
185                MAT_GET_ARRAY=36,
186                MAT_RESTORE_ARRAY=37,
187                MAT_CONVERT=38,
188                MAT_GET_SUBMATRIX=39,
189                MAT_GET_SUBMATRIX_INPLACE=40,
190                MAT_CONVERT_SAME_TYPE=41,
191                MAT_FORWARD_SOLVE=42,
192                MAT_BACKWARD_SOLVE=43,
193                MAT_ILUFACTOR=44,
194                MAT_INCOMPLETECHOLESKYFACTOR=45,
195                MAT_AXPY=46,
196                MAT_GET_SUBMATRICES=47,
197                MAT_INCREASE_OVERLAP=48,
198                MAT_GET_VALUES=49,
199                MAT_COPY=50,
200                MAT_PRINT_HELP=51,
201                MAT_SCALE=52,
202                MAT_SHIFT=53,
203                MAT_DIAGONAL_SHIFT=54,
204                MAT_DESTROY=250,
205                MAT_VIEW=251
206              } MatOperation;
207 extern int MatHasOperation(Mat,MatOperation,PetscTruth*);
208 extern int MatShellSetOperation(Mat,MatOperation,void *);
209 
210 /*
211    Codes for matrices stored on disk. By default they are
212  stored in a universal format. By changing the format with
213  ViewerSetFormat(viewer,BINARY_FORMAT_NATIVE); the matrices will
214  be stored in a way natural for the matrix, for example dense matrices
215  would be stored as dense. Matrices stored this way may only be
216  read into matrices of the same time.
217 */
218 #define MATRIX_BINARY_FORMAT_DENSE -1
219 
220 #endif
221 
222 
223 
224