xref: /petsc/include/petscmat.h (revision 123145dfa260b404ec74fab6a7bbe490bcc93c48)
173f4d377SMatthew Knepley /* $Id: petscmat.h,v 1.228 2001/09/07 20:09:08 bsmith Exp $ */
22eac72dbSBarry Smith /*
32eac72dbSBarry Smith      Include file for the matrix component of PETSc
42eac72dbSBarry Smith */
50a835dfdSSatish Balay #ifndef __PETSCMAT_H
60a835dfdSSatish Balay #define __PETSCMAT_H
70a835dfdSSatish Balay #include "petscvec.h"
82eac72dbSBarry Smith 
9d9274352SBarry Smith /*S
10d9274352SBarry Smith      Mat - Abstract PETSc matrix object
112eac72dbSBarry Smith 
12d91e6319SBarry Smith    Level: beginner
13d91e6319SBarry Smith 
14d9274352SBarry Smith   Concepts: matrix; linear operator
15d9274352SBarry Smith 
16d9274352SBarry Smith .seealso:  MatCreate(), MatType, MatSetType()
17d9274352SBarry Smith S*/
18d9274352SBarry Smith typedef struct _p_Mat*           Mat;
19d9274352SBarry Smith 
20d9274352SBarry Smith /*E
21d9274352SBarry Smith     MatType - String with the name of a PETSc matrix or the creation function
22d9274352SBarry Smith        with an optional dynamic library name, for example
23d9274352SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:mymatcreate()
24d9274352SBarry Smith 
25d9274352SBarry Smith    Level: beginner
26d9274352SBarry Smith 
27d9274352SBarry Smith .seealso: MatSetType(), Mat
28d91e6319SBarry Smith E*/
29273d9f13SBarry Smith #define MATSAME     "same"
30273d9f13SBarry Smith #define MATSEQMAIJ  "seqmaij"
31273d9f13SBarry Smith #define MATMPIMAIJ  "mpimaij"
32273d9f13SBarry Smith #define MATIS       "is"
33273d9f13SBarry Smith #define MATMPIROWBS "mpirowbs"
34273d9f13SBarry Smith #define MATSEQDENSE "seqdense"
35273d9f13SBarry Smith #define MATSEQAIJ   "seqaij"
36273d9f13SBarry Smith #define MATMPIAIJ   "mpiaij"
37273d9f13SBarry Smith #define MATSHELL    "shell"
38273d9f13SBarry Smith #define MATSEQBDIAG "seqbdiag"
39273d9f13SBarry Smith #define MATMPIBDIAG "mpibdiag"
40273d9f13SBarry Smith #define MATMPIDENSE "mpidense"
41273d9f13SBarry Smith #define MATSEQBAIJ  "seqbaij"
42273d9f13SBarry Smith #define MATMPIBAIJ  "mpibaij"
43273d9f13SBarry Smith #define MATMPIADJ   "mpiadj"
44273d9f13SBarry Smith #define MATSEQSBAIJ "seqsbaij"
45273d9f13SBarry Smith #define MATMPISBAIJ "mpisbaij"
46cebc7f6cSBarry Smith #define MATDAAD     "daad"
47cebc7f6cSBarry Smith #define MATMFFD     "mffd"
486d88219bSBarry Smith #define MATESI      "esi"
496d88219bSBarry Smith #define MATPETSCESI "petscesi"
50c8a8475eSBarry Smith #define MATNORMAL   "normal"
511c498df8SBarry Smith #define MATGLENN    "glenn"
52273d9f13SBarry Smith typedef char* MatType;
53d91e6319SBarry Smith 
54c06d978dSMatthew Knepley #define MAT_SER_SEQAIJ_BINARY "seqaij_binary"
55c06d978dSMatthew Knepley #define MAT_SER_MPIAIJ_BINARY "mpiaij_binary"
56c06d978dSMatthew Knepley typedef char *MatSerializeType;
57c06d978dSMatthew Knepley 
58c06d978dSMatthew Knepley /* Logging support */
59552e946dSBarry Smith #define    MAT_FILE_COOKIE 1211216    /* used to indicate matrices in binary files */
60c06d978dSMatthew Knepley extern int MAT_COOKIE;
6171d41ebeSBarry Smith extern int MATSNESMFCTX_COOKIE;
62c06d978dSMatthew Knepley extern int MAT_FDCOLORING_COOKIE;
638ba1e511SMatthew Knepley extern int MAT_PARTITIONING_COOKIE;
648ba1e511SMatthew Knepley extern int MAT_NULLSPACE_COOKIE;
65d59c15a7SBarry Smith extern int MAT_Mult, MAT_MultMatrixFree, MAT_Mults, MAT_MultConstrained, MAT_MultAdd, MAT_MultTranspose;
66d59c15a7SBarry Smith extern int MAT_MultTransposeConstrained, MAT_MultTransposeAdd, MAT_Solve, MAT_Solves, MAT_SolveAdd, MAT_SolveTranspose;
67d5ba7fb7SMatthew Knepley extern int MAT_SolveTransposeAdd, MAT_Relax, MAT_ForwardSolve, MAT_BackwardSolve, MAT_LUFactor, MAT_LUFactorSymbolic;
68d5ba7fb7SMatthew Knepley extern int MAT_LUFactorNumeric, MAT_CholeskyFactor, MAT_CholeskyFactorSymbolic, MAT_CholeskyFactorNumeric, MAT_ILUFactor;
69d5ba7fb7SMatthew Knepley extern int MAT_ILUFactorSymbolic, MAT_ICCFactorSymbolic, MAT_Copy, MAT_Convert, MAT_Scale, MAT_AssemblyBegin;
70d5ba7fb7SMatthew Knepley extern int MAT_AssemblyEnd, MAT_SetValues, MAT_GetValues, MAT_GetRow, MAT_GetSubMatrices, MAT_GetColoring, MAT_GetOrdering;
71d5ba7fb7SMatthew Knepley extern int MAT_IncreaseOverlap, MAT_Partitioning, MAT_ZeroEntries, MAT_Load, MAT_View, MAT_AXPY, MAT_FDColoringCreate;
7294e3eecaSKris Buschelman extern int MAT_FDColoringApply, MAT_Transpose;
73c06d978dSMatthew Knepley 
748ba1e511SMatthew Knepley EXTERN int MatInitializePackage(char *);
75c06d978dSMatthew Knepley 
76273d9f13SBarry Smith EXTERN int MatCreate(MPI_Comm,int,int,int,int,Mat*);
77273d9f13SBarry Smith EXTERN int MatSetType(Mat,MatType);
78273d9f13SBarry Smith EXTERN int MatSetFromOptions(Mat);
79273d9f13SBarry Smith EXTERN int MatSetUpPreallocation(Mat);
80273d9f13SBarry Smith EXTERN int MatRegisterAll(char*);
81273d9f13SBarry Smith EXTERN int MatRegister(char*,char*,char*,int(*)(Mat));
82c06d978dSMatthew Knepley EXTERN int MatSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, Mat *, PetscViewer, PetscTruth));
83273d9f13SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
84273d9f13SBarry Smith #define MatRegisterDynamic(a,b,c,d) MatRegister(a,b,c,0)
85c06d978dSMatthew Knepley #define MatSerializeRegisterDynamic(a,b,c,d) MatSerializeRegister(a,b,c,0)
86273d9f13SBarry Smith #else
87273d9f13SBarry Smith #define MatRegisterDynamic(a,b,c,d) MatRegister(a,b,c,d)
88c06d978dSMatthew Knepley #define MatSerializeRegisterDynamic(a,b,c,d) MatSerializeRegister(a,b,c,d)
89273d9f13SBarry Smith #endif
90273d9f13SBarry Smith extern PetscTruth MatRegisterAllCalled;
91b0a32e0cSBarry Smith extern PetscFList MatList;
9228988994SBarry Smith 
93c06d978dSMatthew Knepley EXTERN PetscFList MatSerializeList;
94c06d978dSMatthew Knepley EXTERN int MatSerializeRegisterAll(const char []);
9565804fbbSSatish Balay EXTERN int MatSerializeRegisterDestroy(void);
96c06d978dSMatthew Knepley EXTERN int MatSerializeRegisterAllCalled;
97c06d978dSMatthew Knepley EXTERN int MatSerialize(MPI_Comm, Mat *, PetscViewer, PetscTruth);
98c06d978dSMatthew Knepley EXTERN int MatSetSerializeType(Mat, MatSerializeType);
99c06d978dSMatthew Knepley 
10087828ca2SBarry Smith EXTERN int MatCreateSeqDense(MPI_Comm,int,int,PetscScalar*,Mat*);
10187828ca2SBarry Smith EXTERN int MatCreateMPIDense(MPI_Comm,int,int,int,int,PetscScalar*,Mat*);
102ca44d042SBarry Smith EXTERN int MatCreateSeqAIJ(MPI_Comm,int,int,int,int*,Mat*);
103ca44d042SBarry Smith EXTERN int MatCreateMPIAIJ(MPI_Comm,int,int,int,int,int,int*,int,int*,Mat*);
104c4f061fbSSatish Balay EXTERN int MatCreateMPIRowbs(MPI_Comm,int,int,int,int*,Mat*);
10587828ca2SBarry Smith EXTERN int MatCreateSeqBDiag(MPI_Comm,int,int,int,int,int*,PetscScalar**,Mat*);
10687828ca2SBarry Smith EXTERN int MatCreateMPIBDiag(MPI_Comm,int,int,int,int,int,int*,PetscScalar**,Mat*);
107ca44d042SBarry Smith EXTERN int MatCreateSeqBAIJ(MPI_Comm,int,int,int,int,int*,Mat*);
108ca44d042SBarry Smith EXTERN int MatCreateMPIBAIJ(MPI_Comm,int,int,int,int,int,int,int*,int,int*,Mat*);
109ca44d042SBarry Smith EXTERN int MatCreateMPIAdj(MPI_Comm,int,int,int*,int*,int *,Mat*);
110ca44d042SBarry Smith EXTERN int MatCreateSeqSBAIJ(MPI_Comm,int,int,int,int,int*,Mat*);
111ca44d042SBarry Smith EXTERN int MatCreateMPISBAIJ(MPI_Comm,int,int,int,int,int,int,int*,int,int*,Mat*);
112ca44d042SBarry Smith EXTERN int MatCreateShell(MPI_Comm,int,int,int,int,void *,Mat*);
1133a7fca6bSBarry Smith EXTERN int MatCreateAdic(MPI_Comm,int,int,int,int,int,void (*)(void),Mat*);
114c8a8475eSBarry Smith EXTERN int MatCreateNormal(Mat,Mat*);
115435da068SBarry Smith EXTERN int MatDestroy(Mat);
11621c89e3eSBarry Smith 
117ca44d042SBarry Smith EXTERN int MatPrintHelp(Mat);
1188a124369SBarry Smith EXTERN int MatGetPetscMaps(Mat,PetscMap*,PetscMap*);
119ec0117caSBarry Smith 
1208ed539a5SBarry Smith /* ------------------------------------------------------------*/
12187828ca2SBarry Smith EXTERN int MatSetValues(Mat,int,int*,int,int*,PetscScalar*,InsertMode);
12287828ca2SBarry Smith EXTERN int MatSetValuesBlocked(Mat,int,int*,int,int*,PetscScalar*,InsertMode);
12384cb2905SBarry Smith 
1242ef4de8bSBarry Smith /*S
1252ef4de8bSBarry Smith      MatStencil - Data structure (C struct) for storing information about a single row or
1262ef4de8bSBarry Smith         column of a matrix as index on an associated grid.
1272ef4de8bSBarry Smith 
1282ef4de8bSBarry Smith    Level: beginner
1292ef4de8bSBarry Smith 
1302ef4de8bSBarry Smith   Concepts: matrix; linear operator
1312ef4de8bSBarry Smith 
1322ef4de8bSBarry Smith .seealso:  MatSetValuesStencil(), MatSetStencil()
1332ef4de8bSBarry Smith S*/
134435da068SBarry Smith typedef struct {
135435da068SBarry Smith   int k,j,i,c;
136435da068SBarry Smith } MatStencil;
1372ef4de8bSBarry Smith 
13887828ca2SBarry Smith EXTERN int MatSetValuesStencil(Mat,int,MatStencil*,int,MatStencil*,PetscScalar*,InsertMode);
13987828ca2SBarry Smith EXTERN int MatSetValuesBlockedStencil(Mat,int,MatStencil*,int,MatStencil*,PetscScalar*,InsertMode);
140435da068SBarry Smith EXTERN int MatSetStencil(Mat,int,int*,int*,int);
141435da068SBarry Smith 
1423a7fca6bSBarry Smith EXTERN int MatSetColoring(Mat,ISColoring);
1433a7fca6bSBarry Smith EXTERN int MatSetValuesAdic(Mat,void*);
1443a7fca6bSBarry Smith EXTERN int MatSetValuesAdifor(Mat,int,void*);
1453a7fca6bSBarry Smith 
146d91e6319SBarry Smith /*E
147d91e6319SBarry Smith     MatAssemblyType - Indicates if the matrix is now to be used, or if you plan
148d91e6319SBarry Smith      to continue to add values to it
149d91e6319SBarry Smith 
150d91e6319SBarry Smith     Level: beginner
151d91e6319SBarry Smith 
152d91e6319SBarry Smith .seealso: MatAssemblyBegin(), MatAssemblyEnd()
153d91e6319SBarry Smith E*/
1546d4a8577SBarry Smith typedef enum {MAT_FLUSH_ASSEMBLY=1,MAT_FINAL_ASSEMBLY=0} MatAssemblyType;
155ca44d042SBarry Smith EXTERN int MatAssemblyBegin(Mat,MatAssemblyType);
156ca44d042SBarry Smith EXTERN int MatAssemblyEnd(Mat,MatAssemblyType);
157ca44d042SBarry Smith EXTERN int MatAssembled(Mat,PetscTruth*);
1584f9c727eSBarry Smith 
159b951964fSBarry Smith #define MatSetValue(v,i,j,va,mode) \
160ea709b57SSatish Balay 0; {int _ierr,_row = i,_col = j; PetscScalar _va = va; \
161b951964fSBarry Smith   _ierr = MatSetValues(v,1,&_row,1,&_col,&_va,mode);CHKERRQ(_ierr); \
162b951964fSBarry Smith }
163ea06a074SBarry Smith #define MatGetValue(v,i,j,va) \
164d91e6319SBarry Smith 0; {int _ierr,_row = i,_col = j; \
165ea06a074SBarry Smith   _ierr = MatGetValues(v,1,&_row,1,&_col,&va);CHKERRQ(_ierr); \
166ea06a074SBarry Smith }
167d91e6319SBarry Smith #define MatSetValueLocal(v,i,j,va,mode) \
168ea709b57SSatish Balay 0; {int _ierr,_row = i,_col = j; PetscScalar _va = va; \
169d91e6319SBarry Smith   _ierr = MatSetValuesLocal(v,1,&_row,1,&_col,&_va,mode);CHKERRQ(_ierr); \
170d91e6319SBarry Smith }
171d91e6319SBarry Smith /*E
172d91e6319SBarry Smith     MatOption - Options that may be set for a matrix and its behavior or storage
173d91e6319SBarry Smith 
174d91e6319SBarry Smith     Level: beginner
175d91e6319SBarry Smith 
1760a835dfdSSatish Balay    Any additions/changes here MUST also be made in include/finclude/petscmat.h
177d91e6319SBarry Smith 
178d91e6319SBarry Smith .seealso: MatSetOption()
179d91e6319SBarry Smith E*/
1806d4a8577SBarry Smith typedef enum {MAT_ROW_ORIENTED=1,MAT_COLUMN_ORIENTED=2,MAT_ROWS_SORTED=4,
1816d4a8577SBarry Smith               MAT_COLUMNS_SORTED=8,MAT_NO_NEW_NONZERO_LOCATIONS=16,
1826d4a8577SBarry Smith               MAT_YES_NEW_NONZERO_LOCATIONS=32,MAT_SYMMETRIC=64,
1836ca9ecd3SBarry Smith               MAT_STRUCTURALLY_SYMMETRIC=65,MAT_NO_NEW_DIAGONALS=66,
1846ca9ecd3SBarry Smith               MAT_YES_NEW_DIAGONALS=67,MAT_INODE_LIMIT_1=68,MAT_INODE_LIMIT_2=69,
1856ca9ecd3SBarry Smith               MAT_INODE_LIMIT_3=70,MAT_INODE_LIMIT_4=71,MAT_INODE_LIMIT_5=72,
1866ca9ecd3SBarry Smith               MAT_IGNORE_OFF_PROC_ENTRIES=73,MAT_ROWS_UNSORTED=74,
1874787f768SSatish Balay               MAT_COLUMNS_UNSORTED=75,MAT_NEW_NONZERO_LOCATION_ERR=76,
1887c922b88SBarry Smith               MAT_NEW_NONZERO_ALLOCATION_ERR=77,MAT_USE_HASH_TABLE=78,
1892bad1931SBarry Smith               MAT_KEEP_ZEROED_ROWS=79,MAT_IGNORE_ZERO_ENTRIES=80,MAT_USE_INODES=81,
190*123145dfSKris Buschelman               MAT_DO_NOT_USE_INODES=82} MatOption;
191ca44d042SBarry Smith EXTERN int MatSetOption(Mat,MatOption);
192273d9f13SBarry Smith EXTERN int MatGetType(Mat,MatType*);
19384cb2905SBarry Smith 
19487828ca2SBarry Smith EXTERN int MatGetValues(Mat,int,int*,int,int*,PetscScalar*);
19587828ca2SBarry Smith EXTERN int MatGetRow(Mat,int,int *,int **,PetscScalar**);
19687828ca2SBarry Smith EXTERN int MatRestoreRow(Mat,int,int *,int **,PetscScalar**);
19787828ca2SBarry Smith EXTERN int MatGetColumn(Mat,int,int *,int **,PetscScalar**);
19887828ca2SBarry Smith EXTERN int MatRestoreColumn(Mat,int,int *,int **,PetscScalar**);
199ca44d042SBarry Smith EXTERN int MatGetColumnVector(Mat,Vec,int);
20087828ca2SBarry Smith EXTERN int MatGetArray(Mat,PetscScalar **);
20187828ca2SBarry Smith EXTERN int MatRestoreArray(Mat,PetscScalar **);
202ca44d042SBarry Smith EXTERN int MatGetBlockSize(Mat,int *);
2037b80b807SBarry Smith 
204ca44d042SBarry Smith EXTERN int MatMult(Mat,Vec,Vec);
205ca44d042SBarry Smith EXTERN int MatMultAdd(Mat,Vec,Vec,Vec);
206ca44d042SBarry Smith EXTERN int MatMultTranspose(Mat,Vec,Vec);
207ca44d042SBarry Smith EXTERN int MatMultTransposeAdd(Mat,Vec,Vec,Vec);
208c06d978dSMatthew Knepley EXTERN int MatMultConstrained(Mat,Vec,Vec);
2096d0dc95fSMatthew Knepley EXTERN int MatMultTransposeConstrained(Mat,Vec,Vec);
2102eac72dbSBarry Smith 
211d91e6319SBarry Smith /*E
212d91e6319SBarry Smith     MatDuplicateOption - Indicates if a duplicated sparse matrix should have
213d91e6319SBarry Smith   its numerical values copied over or just its nonzero structure.
214d91e6319SBarry Smith 
215d91e6319SBarry Smith     Level: beginner
216d91e6319SBarry Smith 
217d91e6319SBarry Smith    Any additions/changes here MUST also be made in include/finclude/petscmat.h
218d91e6319SBarry Smith 
219d91e6319SBarry Smith .seealso: MatDuplicate()
220d91e6319SBarry Smith E*/
2212e8a6d31SBarry Smith typedef enum {MAT_DO_NOT_COPY_VALUES,MAT_COPY_VALUES} MatDuplicateOption;
2222e8a6d31SBarry Smith 
223273d9f13SBarry Smith EXTERN int MatConvertRegister(char*,char*,char*,int (*)(Mat,MatType,Mat*));
224273d9f13SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
225273d9f13SBarry Smith #define MatConvertRegisterDynamic(a,b,c,d) MatConvertRegister(a,b,c,0)
226273d9f13SBarry Smith #else
227273d9f13SBarry Smith #define MatConvertRegisterDynamic(a,b,c,d) MatConvertRegister(a,b,c,d)
228273d9f13SBarry Smith #endif
229273d9f13SBarry Smith EXTERN int        MatConvertRegisterAll(char*);
230273d9f13SBarry Smith EXTERN int        MatConvertRegisterDestroy(void);
231273d9f13SBarry Smith extern PetscTruth MatConvertRegisterAllCalled;
232b0a32e0cSBarry Smith extern PetscFList MatConvertList;
233ca44d042SBarry Smith EXTERN int        MatConvert(Mat,MatType,Mat*);
234ca44d042SBarry Smith EXTERN int        MatDuplicate(Mat,MatDuplicateOption,Mat*);
23594a9d846SBarry Smith 
236d91e6319SBarry Smith /*E
237d91e6319SBarry Smith     MatStructure - Indicates if the matrix has the same nonzero structure
238d91e6319SBarry Smith 
239d91e6319SBarry Smith     Level: beginner
240d91e6319SBarry Smith 
241d91e6319SBarry Smith    Any additions/changes here MUST also be made in include/finclude/petscmat.h
242d91e6319SBarry Smith 
243d91e6319SBarry Smith .seealso: MatCopy(), SLESSetOperators(), PCSetOperators()
244d91e6319SBarry Smith E*/
245cb5b572fSBarry Smith typedef enum {SAME_NONZERO_PATTERN,DIFFERENT_NONZERO_PATTERN,SAME_PRECONDITIONER} MatStructure;
246cb5b572fSBarry Smith 
247ca44d042SBarry Smith EXTERN int MatCopy(Mat,Mat,MatStructure);
248b0a32e0cSBarry Smith EXTERN int MatView(Mat,PetscViewer);
249273d9f13SBarry Smith 
250b0a32e0cSBarry Smith EXTERN int MatLoadRegister(char*,char*,char*,int (*)(PetscViewer,MatType,Mat*));
251273d9f13SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
252273d9f13SBarry Smith #define MatLoadRegisterDynamic(a,b,c,d) MatLoadRegister(a,b,c,0)
253273d9f13SBarry Smith #else
254273d9f13SBarry Smith #define MatLoadRegisterDynamic(a,b,c,d) MatLoadRegister(a,b,c,d)
255273d9f13SBarry Smith #endif
256273d9f13SBarry Smith EXTERN int        MatLoadRegisterAll(char*);
257273d9f13SBarry Smith EXTERN int        MatLoadRegisterDestroy(void);
258273d9f13SBarry Smith extern PetscTruth MatLoadRegisterAllCalled;
259b0a32e0cSBarry Smith extern PetscFList MatLoadList;
260b0a32e0cSBarry Smith EXTERN int        MatLoad(PetscViewer,MatType,Mat*);
26151dd7536SBarry Smith EXTERN int        MatMerge(MPI_Comm,Mat,Mat*);
2627b80b807SBarry Smith 
263ca44d042SBarry Smith EXTERN int MatGetRowIJ(Mat,int,PetscTruth,int*,int **,int **,PetscTruth *);
264ca44d042SBarry Smith EXTERN int MatRestoreRowIJ(Mat,int,PetscTruth,int *,int **,int **,PetscTruth *);
265ca44d042SBarry Smith EXTERN int MatGetColumnIJ(Mat,int,PetscTruth,int*,int **,int **,PetscTruth *);
266ca44d042SBarry Smith EXTERN int MatRestoreColumnIJ(Mat,int,PetscTruth,int *,int **,int **,PetscTruth *);
267d4fbbf0eSBarry Smith 
268d91e6319SBarry Smith /*S
269d91e6319SBarry Smith      MatInfo - Context of matrix information, used with MatGetInfo()
270d91e6319SBarry Smith 
271d91e6319SBarry Smith    In Fortran this is simply a double precision array of dimension MAT_INFO_SIZE
272d91e6319SBarry Smith 
273d91e6319SBarry Smith    Level: intermediate
274d91e6319SBarry Smith 
275d91e6319SBarry Smith   Concepts: matrix^nonzero information
276d91e6319SBarry Smith 
277d9274352SBarry Smith .seealso:  MatGetInfo(), MatInfoType
278d91e6319SBarry Smith S*/
2794e220ebcSLois Curfman McInnes typedef struct {
280b0a32e0cSBarry Smith   PetscLogDouble rows_global,columns_global;         /* number of global rows and columns */
281b0a32e0cSBarry Smith   PetscLogDouble rows_local,columns_local;           /* number of local rows and columns */
282b0a32e0cSBarry Smith   PetscLogDouble block_size;                         /* block size */
283b0a32e0cSBarry Smith   PetscLogDouble nz_allocated,nz_used,nz_unneeded;   /* number of nonzeros */
284b0a32e0cSBarry Smith   PetscLogDouble memory;                             /* memory allocated */
285b0a32e0cSBarry Smith   PetscLogDouble assemblies;                         /* number of matrix assemblies called */
286b0a32e0cSBarry Smith   PetscLogDouble mallocs;                            /* number of mallocs during MatSetValues() */
287b0a32e0cSBarry Smith   PetscLogDouble fill_ratio_given,fill_ratio_needed; /* fill ratio for LU/ILU */
288b0a32e0cSBarry Smith   PetscLogDouble factor_mallocs;                     /* number of mallocs during factorization */
2894e220ebcSLois Curfman McInnes } MatInfo;
2904e220ebcSLois Curfman McInnes 
291d9274352SBarry Smith /*E
292d9274352SBarry Smith     MatInfoType - Indicates if you want information about the local part of the matrix,
293d9274352SBarry Smith      the entire parallel matrix or the maximum over all the local parts.
294d9274352SBarry Smith 
295d9274352SBarry Smith     Level: beginner
296d9274352SBarry Smith 
297d9274352SBarry Smith    Any additions/changes here MUST also be made in include/finclude/petscmat.h
298d9274352SBarry Smith 
299d9274352SBarry Smith .seealso: MatGetInfo(), MatInfo
300d9274352SBarry Smith E*/
3017b80b807SBarry Smith typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType;
302ca44d042SBarry Smith EXTERN int MatGetInfo(Mat,MatInfoType,MatInfo*);
303ca44d042SBarry Smith EXTERN int MatValid(Mat,PetscTruth*);
304ca44d042SBarry Smith EXTERN int MatGetDiagonal(Mat,Vec);
305273d9f13SBarry Smith EXTERN int MatGetRowMax(Mat,Vec);
306ca44d042SBarry Smith EXTERN int MatTranspose(Mat,Mat*);
307ca44d042SBarry Smith EXTERN int MatPermute(Mat,IS,IS,Mat *);
308bf1d55d4SSatish Balay EXTERN int MatPermuteSparsify(Mat,int,PetscReal,PetscReal,IS,IS,Mat *);
309ca44d042SBarry Smith EXTERN int MatDiagonalScale(Mat,Vec,Vec);
31006ef90c2SBarry Smith EXTERN int MatDiagonalSet(Mat,Vec,InsertMode);
311ca44d042SBarry Smith EXTERN int MatEqual(Mat,Mat,PetscTruth*);
3127b80b807SBarry Smith 
31387828ca2SBarry Smith EXTERN int MatNorm(Mat,NormType,PetscReal *);
314ca44d042SBarry Smith EXTERN int MatZeroEntries(Mat);
31587828ca2SBarry Smith EXTERN int MatZeroRows(Mat,IS,PetscScalar*);
31687828ca2SBarry Smith EXTERN int MatZeroColumns(Mat,IS,PetscScalar*);
3177b80b807SBarry Smith 
318ca44d042SBarry Smith EXTERN int MatUseScaledForm(Mat,PetscTruth);
319ca44d042SBarry Smith EXTERN int MatScaleSystem(Mat,Vec,Vec);
320ca44d042SBarry Smith EXTERN int MatUnScaleSystem(Mat,Vec,Vec);
3215ef9f2a5SBarry Smith 
322ca44d042SBarry Smith EXTERN int MatGetSize(Mat,int*,int*);
323ca44d042SBarry Smith EXTERN int MatGetLocalSize(Mat,int*,int*);
324ca44d042SBarry Smith EXTERN int MatGetOwnershipRange(Mat,int*,int*);
3257b80b807SBarry Smith 
326d91e6319SBarry Smith /*E
327d91e6319SBarry Smith     MatReuse - Indicates if matrices obtained from a previous call to MatGetSubMatrices()
328d91e6319SBarry Smith      or MatGetSubMatrix() are to be reused to store the new matrix values.
329d91e6319SBarry Smith 
330d91e6319SBarry Smith     Level: beginner
331d91e6319SBarry Smith 
332d91e6319SBarry Smith    Any additions/changes here MUST also be made in include/finclude/petscmat.h
333d91e6319SBarry Smith 
334d91e6319SBarry Smith .seealso: MatGetSubMatrices(), MatGetSubMatrix(), MatDestroyMatrices()
335d91e6319SBarry Smith E*/
3367b2a1423SBarry Smith typedef enum {MAT_INITIAL_MATRIX,MAT_REUSE_MATRIX} MatReuse;
337ca44d042SBarry Smith EXTERN int MatGetSubMatrices(Mat,int,IS *,IS *,MatReuse,Mat **);
338ca44d042SBarry Smith EXTERN int MatDestroyMatrices(int,Mat **);
339ca44d042SBarry Smith EXTERN int MatGetSubMatrix(Mat,IS,IS,int,MatReuse,Mat *);
3408efafbd8SBarry Smith 
341ca44d042SBarry Smith EXTERN int MatIncreaseOverlap(Mat,int,IS *,int);
3427b80b807SBarry Smith 
343607cd303SBarry Smith EXTERN int MatAXPY(PetscScalar *,Mat,Mat,MatStructure);
34487828ca2SBarry Smith EXTERN int MatAYPX(PetscScalar *,Mat,Mat);
345ca44d042SBarry Smith EXTERN int MatCompress(Mat);
3467b80b807SBarry Smith 
34787828ca2SBarry Smith EXTERN int MatScale(PetscScalar *,Mat);
34887828ca2SBarry Smith EXTERN int MatShift(PetscScalar *,Mat);
349052efed2SBarry Smith 
350ca44d042SBarry Smith EXTERN int MatSetLocalToGlobalMapping(Mat,ISLocalToGlobalMapping);
351ca44d042SBarry Smith EXTERN int MatSetLocalToGlobalMappingBlock(Mat,ISLocalToGlobalMapping);
35287828ca2SBarry Smith EXTERN int MatZeroRowsLocal(Mat,IS,PetscScalar*);
35387828ca2SBarry Smith EXTERN int MatSetValuesLocal(Mat,int,int*,int,int*,PetscScalar*,InsertMode);
35487828ca2SBarry Smith EXTERN int MatSetValuesBlockedLocal(Mat,int,int*,int,int*,PetscScalar*,InsertMode);
35590f02eecSBarry Smith 
356ca44d042SBarry Smith EXTERN int MatSetStashInitialSize(Mat,int,int);
357649db694SBarry Smith 
358ca44d042SBarry Smith EXTERN int MatInterpolateAdd(Mat,Vec,Vec,Vec);
359ca44d042SBarry Smith EXTERN int MatInterpolate(Mat,Vec,Vec);
360ca44d042SBarry Smith EXTERN int MatRestrict(Mat,Vec,Vec);
3617c922b88SBarry Smith 
3627c922b88SBarry Smith /*
363c4f061fbSSatish Balay       These three (or four) macros MUST be used together. The third one closes the open { of the first one
3647c922b88SBarry Smith */
365c4f061fbSSatish Balay #define MatPreallocateInitialize(comm,nrows,ncols,dnz,onz) 0; \
3667c922b88SBarry Smith { \
367ef66eb69SBarry Smith   int _4_ierr,__tmp = (nrows),__ctmp = (ncols),__rstart,__start,__end; \
368ef66eb69SBarry Smith   _4_ierr = PetscMalloc(2*__tmp*sizeof(int),&dnz);CHKERRQ(_4_ierr);onz = dnz + __tmp;\
369ef66eb69SBarry Smith   _4_ierr = PetscMemzero(dnz,2*__tmp*sizeof(int));CHKERRQ(_4_ierr);\
370ef66eb69SBarry Smith   _4_ierr = MPI_Scan(&__ctmp,&__end,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __start = __end - __ctmp;\
371ef66eb69SBarry Smith   _4_ierr = MPI_Scan(&__tmp,&__rstart,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __tmp;
3727c922b88SBarry Smith 
373222b16d4SBarry Smith #define MatPreallocateSymmetricInitialize(comm,nrows,ncols,dnz,onz) 0; \
374222b16d4SBarry Smith { \
375222b16d4SBarry Smith   int _4_ierr,__tmp = (nrows),__ctmp = (ncols),__rstart,__end; \
376222b16d4SBarry Smith   _4_ierr = PetscMalloc(2*__tmp*sizeof(int),&dnz);CHKERRQ(_4_ierr);onz = dnz + __tmp;\
377222b16d4SBarry Smith   _4_ierr = PetscMemzero(dnz,2*__tmp*sizeof(int));CHKERRQ(_4_ierr);\
378222b16d4SBarry Smith   _4_ierr = MPI_Scan(&__ctmp,&__end,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr);\
379222b16d4SBarry Smith   _4_ierr = MPI_Scan(&__tmp,&__rstart,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __tmp;
380222b16d4SBarry Smith 
381c4f061fbSSatish Balay #define MatPreallocateSetLocal(map,nrows,rows,ncols,cols,dnz,onz) 0;\
382c4f061fbSSatish Balay {\
383c4f061fbSSatish Balay   int __l;\
384ef66eb69SBarry Smith   _4_ierr = ISLocalToGlobalMappingApply(map,nrows,rows,rows);CHKERRQ(_4_ierr);\
385ef66eb69SBarry Smith   _4_ierr = ISLocalToGlobalMappingApply(map,ncols,cols,cols);CHKERRQ(_4_ierr);\
386c4f061fbSSatish Balay   for (__l=0;__l<nrows;__l++) {\
387ef66eb69SBarry Smith     _4_ierr = MatPreallocateSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\
388c4f061fbSSatish Balay   }\
389c4f061fbSSatish Balay }
390c4f061fbSSatish Balay 
391d3d32019SBarry Smith #define MatPreallocateSymmetricSetLocal(map,nrows,rows,ncols,cols,dnz,onz) 0;\
392d3d32019SBarry Smith {\
393d3d32019SBarry Smith   int __l;\
394d3d32019SBarry Smith   _4_ierr = ISLocalToGlobalMappingApply(map,nrows,rows,rows);CHKERRQ(_4_ierr);\
395d3d32019SBarry Smith   _4_ierr = ISLocalToGlobalMappingApply(map,ncols,cols,cols);CHKERRQ(_4_ierr);\
396d3d32019SBarry Smith   for (__l=0;__l<nrows;__l++) {\
397d3d32019SBarry Smith     _4_ierr = MatPreallocateSymmetricSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\
398d3d32019SBarry Smith   }\
399d3d32019SBarry Smith }
400d3d32019SBarry Smith 
401c4f061fbSSatish Balay #define MatPreallocateSet(row,nc,cols,dnz,onz) 0;\
4027c922b88SBarry Smith { int __i; \
4037c922b88SBarry Smith   for (__i=0; __i<nc; __i++) {\
4047c922b88SBarry Smith     if (cols[__i] < __start || cols[__i] >= __end) onz[row - __rstart]++; \
4057c922b88SBarry Smith   }\
4067c922b88SBarry Smith   dnz[row - __rstart] = nc - onz[row - __rstart];\
4077c922b88SBarry Smith }
4087c922b88SBarry Smith 
409d3d32019SBarry Smith #define MatPreallocateSymmetricSet(row,nc,cols,dnz,onz) 0;\
410d3d32019SBarry Smith { int __i; \
411d3d32019SBarry Smith   for (__i=0; __i<nc; __i++) {\
412d3d32019SBarry Smith     if (cols[__i] >= __end) onz[row - __rstart]++; \
413d3d32019SBarry Smith     else if (cols[__i] >= row) dnz[row - __rstart]++;\
414d3d32019SBarry Smith   }\
415d3d32019SBarry Smith }
416d3d32019SBarry Smith 
417ef66eb69SBarry Smith #define MatPreallocateFinalize(dnz,onz) 0;_4_ierr = PetscFree(dnz);CHKERRQ(_4_ierr);}
4187c922b88SBarry Smith 
4197b80b807SBarry Smith /* Routines unique to particular data structures */
420435da068SBarry Smith EXTERN int MatShellGetContext(Mat,void **);
421435da068SBarry Smith 
42287828ca2SBarry Smith EXTERN int MatBDiagGetData(Mat,int*,int*,int**,int**,PetscScalar***);
423ca44d042SBarry Smith EXTERN int MatSeqAIJSetColumnIndices(Mat,int *);
424ca44d042SBarry Smith EXTERN int MatSeqBAIJSetColumnIndices(Mat,int *);
42587828ca2SBarry Smith EXTERN int MatCreateSeqAIJWithArrays(MPI_Comm,int,int,int*,int*,PetscScalar *,Mat*);
4267b80b807SBarry Smith 
427273d9f13SBarry Smith EXTERN int MatSeqBAIJSetPreallocation(Mat,int,int,int*);
428273d9f13SBarry Smith EXTERN int MatSeqSBAIJSetPreallocation(Mat,int,int,int*);
429273d9f13SBarry Smith EXTERN int MatSeqAIJSetPreallocation(Mat,int,int*);
43087828ca2SBarry Smith EXTERN int MatSeqDensePreallocation(Mat,PetscScalar*);
43187828ca2SBarry Smith EXTERN int MatSeqBDiagSetPreallocation(Mat,int,int,int*,PetscScalar**);
43287828ca2SBarry Smith EXTERN int MatSeqDenseSetPreallocation(Mat,PetscScalar*);
433273d9f13SBarry Smith 
434273d9f13SBarry Smith EXTERN int MatMPIBAIJSetPreallocation(Mat,int,int,int*,int,int*);
435273d9f13SBarry Smith EXTERN int MatMPISBAIJSetPreallocation(Mat,int,int,int*,int,int*);
436273d9f13SBarry Smith EXTERN int MatMPIAIJSetPreallocation(Mat,int,int*,int,int*);
43787828ca2SBarry Smith EXTERN int MatMPIDensePreallocation(Mat,PetscScalar*);
43887828ca2SBarry Smith EXTERN int MatMPIBDiagSetPreallocation(Mat,int,int,int*,PetscScalar**);
439273d9f13SBarry Smith EXTERN int MatMPIAdjSetPreallocation(Mat,int*,int*,int*);
44087828ca2SBarry Smith EXTERN int MatMPIDenseSetPreallocation(Mat,PetscScalar*);
441273d9f13SBarry Smith EXTERN int MatMPIRowbsSetPreallocation(Mat,int,int*);
442435da068SBarry Smith EXTERN int MatMPIAIJGetSeqAIJ(Mat,Mat*,Mat*,int**);
443435da068SBarry Smith EXTERN int MatMPIBAIJGetSeqBAIJ(Mat,Mat*,Mat*,int**);
4443a7fca6bSBarry Smith EXTERN int MatAdicSetLocalFunction(Mat,void (*)(void));
445273d9f13SBarry Smith 
446ca44d042SBarry Smith EXTERN int MatStoreValues(Mat);
447ca44d042SBarry Smith EXTERN int MatRetrieveValues(Mat);
4482e8a6d31SBarry Smith 
4493a7fca6bSBarry Smith EXTERN int MatDAADSetCtx(Mat,void*);
4503a7fca6bSBarry Smith 
4517b80b807SBarry Smith /*
4527b80b807SBarry Smith   These routines are not usually accessed directly, rather solving is
4537b80b807SBarry Smith   done through the SLES, KSP and PC interfaces.
4547b80b807SBarry Smith */
4557b80b807SBarry Smith 
456d9274352SBarry Smith /*E
457d9274352SBarry Smith     MatOrderingType - String with the name of a PETSc matrix ordering or the creation function
458d9274352SBarry Smith        with an optional dynamic library name, for example
459d9274352SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:orderingcreate()
460d9274352SBarry Smith 
461d9274352SBarry Smith    Level: beginner
462d9274352SBarry Smith 
463d9274352SBarry Smith .seealso: MatGetOrdering()
464d9274352SBarry Smith E*/
465b12f92e5SBarry Smith typedef char* MatOrderingType;
466b12f92e5SBarry Smith #define MATORDERING_NATURAL   "natural"
467b12f92e5SBarry Smith #define MATORDERING_ND        "nd"
468b12f92e5SBarry Smith #define MATORDERING_1WD       "1wd"
469b12f92e5SBarry Smith #define MATORDERING_RCM       "rcm"
470b12f92e5SBarry Smith #define MATORDERING_QMD       "qmd"
471b12f92e5SBarry Smith #define MATORDERING_ROWLENGTH "rowlength"
47262152c8bSBarry Smith #define MATORDERING_DSC_ND    "dsc_nd"
47362152c8bSBarry Smith #define MATORDERING_DSC_MMD   "dsc_mmd"
47462152c8bSBarry Smith #define MATORDERING_DSC_MDF   "dsc_mdf"
475c06d978dSMatthew Knepley #define MATORDERING_CONSTRAINED "constrained"
476c06d978dSMatthew Knepley #define MATORDERING_IDENTITY  "identity"
477c06d978dSMatthew Knepley #define MATORDERING_REVERSE   "reverse"
478b12f92e5SBarry Smith 
479ca44d042SBarry Smith EXTERN int MatGetOrdering(Mat,MatOrderingType,IS*,IS*);
480ca44d042SBarry Smith EXTERN int MatOrderingRegister(char*,char*,char*,int(*)(Mat,MatOrderingType,IS*,IS*));
481aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
482f1af5d2fSBarry Smith #define MatOrderingRegisterDynamic(a,b,c,d) MatOrderingRegister(a,b,c,0)
483b12f92e5SBarry Smith #else
484f1af5d2fSBarry Smith #define MatOrderingRegisterDynamic(a,b,c,d) MatOrderingRegister(a,b,c,d)
485b12f92e5SBarry Smith #endif
486ca44d042SBarry Smith EXTERN int        MatOrderingRegisterDestroy(void);
487ca44d042SBarry Smith EXTERN int        MatOrderingRegisterAll(char*);
4882bad1931SBarry Smith extern PetscTruth MatOrderingRegisterAllCalled;
489b0a32e0cSBarry Smith extern PetscFList      MatOrderingList;
490d4fbbf0eSBarry Smith 
49187828ca2SBarry Smith EXTERN int MatReorderForNonzeroDiagonal(Mat,PetscReal,IS,IS);
492a2ce50c7SBarry Smith 
49387828ca2SBarry Smith EXTERN int MatCholeskyFactor(Mat,IS,PetscReal);
49487828ca2SBarry Smith EXTERN int MatCholeskyFactorSymbolic(Mat,IS,PetscReal,Mat*);
495ca44d042SBarry Smith EXTERN int MatCholeskyFactorNumeric(Mat,Mat*);
496a2ce50c7SBarry Smith 
497d91e6319SBarry Smith /*S
498d91e6319SBarry Smith    MatILUInfo - Data based into the matrix ILU factorization routines
4995ef9f2a5SBarry Smith 
500d91e6319SBarry Smith    In Fortran these are simply double precision arrays of size MAT_ILUINFO_SIZE
50114822f30SBarry Smith 
502d91e6319SBarry Smith    Notes: These are not usually directly used by users, instead use the PC type of ILU
503d91e6319SBarry Smith           All entries are double precision.
504d91e6319SBarry Smith 
505d91e6319SBarry Smith    Level: developer
506d91e6319SBarry Smith 
507d91e6319SBarry Smith .seealso: MatILUFactorSymbolic(), MatILUFactor(), MatLUInfo, MatCholeskyInfo
508d91e6319SBarry Smith 
509d91e6319SBarry Smith S*/
5105ef9f2a5SBarry Smith typedef struct {
511f6275e2eSBarry Smith   PetscReal     levels;         /* ILU(levels) */
512f6275e2eSBarry Smith   PetscReal     fill;           /* expected fill; nonzeros in factored matrix/nonzeros in original matrix*/
513f6275e2eSBarry Smith   PetscReal     diagonal_fill;  /* force diagonal to fill in if initially not filled */
514f6275e2eSBarry Smith   PetscReal     dt;             /* drop tolerance */
515f6275e2eSBarry Smith   PetscReal     dtcol;          /* tolerance for pivoting */
516f6275e2eSBarry Smith   PetscReal     dtcount;        /* maximum nonzeros to be allowed per row */
517f6275e2eSBarry Smith   PetscReal     damping;        /* scaling of identity added to matrix to prevent zero pivots */
518f6275e2eSBarry Smith   PetscReal     damp;           /* if is 1.0 and factorization fails, damp until successful */
519f6275e2eSBarry Smith   PetscReal     zeropivot; /* pivot is called zero if less than this */
520bcd9e38bSBarry Smith   PetscReal     pivotinblocks;  /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0
521bcd9e38bSBarry Smith                                    factorization may be faster if do not pivot */
5225ef9f2a5SBarry Smith } MatILUInfo;
5235ef9f2a5SBarry Smith 
524d91e6319SBarry Smith /*S
525d91e6319SBarry Smith    MatLUInfo - Data based into the matrix LU factorization routines
526d91e6319SBarry Smith 
527d91e6319SBarry Smith    In Fortran these are simply double precision arrays of size MAT_LUINFO_SIZE
528d91e6319SBarry Smith 
529d91e6319SBarry Smith    Notes: These are not usually directly used by users, instead use the PC type of LU
530d91e6319SBarry Smith           All entries are double precision.
531d91e6319SBarry Smith 
532d91e6319SBarry Smith    Level: developer
533d91e6319SBarry Smith 
534d91e6319SBarry Smith .seealso: MatLUFactorSymbolic(), MatILUInfo, MatCholeskyInfo
535d91e6319SBarry Smith 
536d91e6319SBarry Smith S*/
53714822f30SBarry Smith typedef struct {
538f6275e2eSBarry Smith   PetscReal     fill;    /* expected fill; nonzeros in factored matrix/nonzeros in original matrix */
539f6275e2eSBarry Smith   PetscReal     dtcol;   /* tolerance for pivoting; pivot if off_diagonal*dtcol > diagonal */
540f6275e2eSBarry Smith   PetscReal     damping; /* scaling of identity added to matrix to prevent zero pivots */
541f6275e2eSBarry Smith   PetscReal     zeropivot; /* pivot is called zero if less than this */
542bcd9e38bSBarry Smith   PetscReal     pivotinblocks;  /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0
543bcd9e38bSBarry Smith                                    factorization may be faster if do not pivot */
54414822f30SBarry Smith } MatLUInfo;
54514822f30SBarry Smith 
546d91e6319SBarry Smith /*S
547d91e6319SBarry Smith    MatCholeskyInfo - Data based into the matrix Cholesky factorization routines
548d91e6319SBarry Smith 
549d91e6319SBarry Smith    In Fortran these are simply double precision arrays of size MAT_CHOLESKYINFO_SIZE
550d91e6319SBarry Smith 
551d91e6319SBarry Smith    Notes: These are not usually directly used by users, instead use the PC type of Cholesky
552d91e6319SBarry Smith           All entries are double precision.
553d91e6319SBarry Smith 
554d91e6319SBarry Smith    Level: developer
555d91e6319SBarry Smith 
556d91e6319SBarry Smith .seealso: MatCholeskyFactorSymbolic(), MatLUInfo, MatILUInfo
557d91e6319SBarry Smith 
558d91e6319SBarry Smith S*/
559ffa6d0a5SLois Curfman McInnes typedef struct {
560f6275e2eSBarry Smith   PetscReal     fill;    /* expected fill; nonzeros in factored matrix/nonzeros in original matrix */
561f6275e2eSBarry Smith   PetscReal     damping; /* scaling of identity added to matrix to prevent zero pivots */
562bcd9e38bSBarry Smith   PetscReal     pivotinblocks;  /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0
563bcd9e38bSBarry Smith                                    factorization may be faster if do not pivot */
564ffa6d0a5SLois Curfman McInnes } MatCholeskyInfo;
565ffa6d0a5SLois Curfman McInnes 
56614822f30SBarry Smith EXTERN int MatLUFactor(Mat,IS,IS,MatLUInfo*);
567ca44d042SBarry Smith EXTERN int MatILUFactor(Mat,IS,IS,MatILUInfo*);
56814822f30SBarry Smith EXTERN int MatLUFactorSymbolic(Mat,IS,IS,MatLUInfo*,Mat*);
569ca44d042SBarry Smith EXTERN int MatILUFactorSymbolic(Mat,IS,IS,MatILUInfo*,Mat*);
57087828ca2SBarry Smith EXTERN int MatICCFactorSymbolic(Mat,IS,PetscReal,int,Mat*);
57187828ca2SBarry Smith EXTERN int MatICCFactor(Mat,IS,PetscReal,int);
572ca44d042SBarry Smith EXTERN int MatLUFactorNumeric(Mat,Mat*);
573ca44d042SBarry Smith EXTERN int MatILUDTFactor(Mat,MatILUInfo*,IS,IS,Mat *);
5743e0d88b5SBarry Smith EXTERN int MatGetInertia(Mat,int*,int*,int*);
575ca44d042SBarry Smith EXTERN int MatSolve(Mat,Vec,Vec);
576ca44d042SBarry Smith EXTERN int MatForwardSolve(Mat,Vec,Vec);
577ca44d042SBarry Smith EXTERN int MatBackwardSolve(Mat,Vec,Vec);
578ca44d042SBarry Smith EXTERN int MatSolveAdd(Mat,Vec,Vec,Vec);
579ca44d042SBarry Smith EXTERN int MatSolveTranspose(Mat,Vec,Vec);
580ca44d042SBarry Smith EXTERN int MatSolveTransposeAdd(Mat,Vec,Vec,Vec);
581d59c15a7SBarry Smith EXTERN int MatSolves(Mat,Vecs,Vecs);
5828ed539a5SBarry Smith 
583ca44d042SBarry Smith EXTERN int MatSetUnfactored(Mat);
584bb5a7306SBarry Smith 
585bb1eb677SSatish Balay /*  MatSORType may be bitwise ORd together, so do not change the numbers */
586d91e6319SBarry Smith /*E
587d91e6319SBarry Smith     MatSORType - What type of (S)SOR to perform
588bb1eb677SSatish Balay 
589d91e6319SBarry Smith     Level: beginner
590d91e6319SBarry Smith 
591d9274352SBarry Smith    May be bitwise ORd together
592d9274352SBarry Smith 
593d91e6319SBarry Smith    Any additions/changes here MUST also be made in include/finclude/petscmat.h
594d91e6319SBarry Smith 
595d91e6319SBarry Smith .seealso: MatRelax()
596d91e6319SBarry Smith E*/
597ee50ffe9SBarry Smith typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3,
598ee50ffe9SBarry Smith               SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8,
599ee50ffe9SBarry Smith               SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16,
60084cb2905SBarry Smith               SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128} MatSORType;
601c14dc6b6SHong Zhang EXTERN int MatRelax(Mat,Vec,PetscReal,MatSORType,PetscReal,int,int,Vec);
6028ed539a5SBarry Smith 
603d4fbbf0eSBarry Smith /*
604639f9d9dSBarry Smith     These routines are for efficiently computing Jacobians via finite differences.
605639f9d9dSBarry Smith */
606b12f92e5SBarry Smith 
607d9274352SBarry Smith /*E
608d9274352SBarry Smith     MatColoringType - String with the name of a PETSc matrix coloring or the creation function
609d9274352SBarry Smith        with an optional dynamic library name, for example
610d9274352SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:coloringcreate()
611d9274352SBarry Smith 
612d9274352SBarry Smith    Level: beginner
613d9274352SBarry Smith 
614d9274352SBarry Smith .seealso: MatGetColoring()
615d9274352SBarry Smith E*/
616b12f92e5SBarry Smith typedef char* MatColoringType;
617b12f92e5SBarry Smith #define MATCOLORING_NATURAL "natural"
618b12f92e5SBarry Smith #define MATCOLORING_SL      "sl"
619b12f92e5SBarry Smith #define MATCOLORING_LF      "lf"
620b12f92e5SBarry Smith #define MATCOLORING_ID      "id"
621b12f92e5SBarry Smith 
622ca44d042SBarry Smith EXTERN int MatGetColoring(Mat,MatColoringType,ISColoring*);
623ca44d042SBarry Smith EXTERN int MatColoringRegister(char*,char*,char*,int(*)(Mat,MatColoringType,ISColoring *));
624aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
625f1af5d2fSBarry Smith #define MatColoringRegisterDynamic(a,b,c,d) MatColoringRegister(a,b,c,0)
626b12f92e5SBarry Smith #else
627f1af5d2fSBarry Smith #define MatColoringRegisterDynamic(a,b,c,d) MatColoringRegister(a,b,c,d)
628b12f92e5SBarry Smith #endif
629ca44d042SBarry Smith EXTERN int        MatColoringRegisterAll(char *);
6302bad1931SBarry Smith extern PetscTruth MatColoringRegisterAllCalled;
631ca44d042SBarry Smith EXTERN int        MatColoringRegisterDestroy(void);
632b9617806SBarry Smith EXTERN int        MatColoringPatch(Mat,int,int,int *,ISColoring*);
633639f9d9dSBarry Smith 
634d9274352SBarry Smith /*S
635d9274352SBarry Smith      MatFDColoring - Object for computing a sparse Jacobian via finite differences
636d9274352SBarry Smith         and coloring
637639f9d9dSBarry Smith 
638d9274352SBarry Smith    Level: beginner
639d9274352SBarry Smith 
640d9274352SBarry Smith   Concepts: coloring, sparse Jacobian, finite differences
641d9274352SBarry Smith 
642d9274352SBarry Smith .seealso:  MatFDColoringCreate()
643d9274352SBarry Smith S*/
644e2a1c21fSSatish Balay typedef struct _p_MatFDColoring *MatFDColoring;
645639f9d9dSBarry Smith 
646ca44d042SBarry Smith EXTERN int MatFDColoringCreate(Mat,ISColoring,MatFDColoring *);
647ca44d042SBarry Smith EXTERN int MatFDColoringDestroy(MatFDColoring);
648b0a32e0cSBarry Smith EXTERN int MatFDColoringView(MatFDColoring,PetscViewer);
649ca44d042SBarry Smith EXTERN int MatFDColoringSetFunction(MatFDColoring,int (*)(void),void*);
65087828ca2SBarry Smith EXTERN int MatFDColoringSetParameters(MatFDColoring,PetscReal,PetscReal);
651ca44d042SBarry Smith EXTERN int MatFDColoringSetFrequency(MatFDColoring,int);
652ca44d042SBarry Smith EXTERN int MatFDColoringGetFrequency(MatFDColoring,int*);
653ca44d042SBarry Smith EXTERN int MatFDColoringSetFromOptions(MatFDColoring);
654ca44d042SBarry Smith EXTERN int MatFDColoringApply(Mat,MatFDColoring,Vec,MatStructure*,void *);
65587828ca2SBarry Smith EXTERN int MatFDColoringApplyTS(Mat,MatFDColoring,PetscReal,Vec,MatStructure*,void *);
65662152c8bSBarry Smith EXTERN int MatFDColoringSetRecompute(MatFDColoring);
6573a7fca6bSBarry Smith EXTERN int MatFDColoringSetF(MatFDColoring,Vec);
65849b058dcSBarry Smith EXTERN int MatFDColoringGetPerturbedColumns(MatFDColoring,int*,int**);
659639f9d9dSBarry Smith /*
6600752156aSBarry Smith     These routines are for partitioning matrices: currently used only
6613eda8832SBarry Smith   for adjacency matrix, MatCreateMPIAdj().
6620752156aSBarry Smith */
663ca161407SBarry Smith 
664d9274352SBarry Smith /*S
665d9274352SBarry Smith      MatPartitioning - Object for managing the partitioning of a matrix or graph
666d9274352SBarry Smith 
667d9274352SBarry Smith    Level: beginner
668d9274352SBarry Smith 
669d9274352SBarry Smith   Concepts: partitioning
670d9274352SBarry Smith 
671d9274352SBarry Smith .seealso:  MatParitioningCreate(), MatPartitioningType
672d9274352SBarry Smith S*/
67391e9ee9fSBarry Smith typedef struct _p_MatPartitioning *MatPartitioning;
674d9274352SBarry Smith 
675d9274352SBarry Smith /*E
676d9274352SBarry Smith     MatPartitioningType - String with the name of a PETSc matrix partitioing or the creation function
677d9274352SBarry Smith        with an optional dynamic library name, for example
678d9274352SBarry Smith        http://www.mcs.anl.gov/petsc/lib.a:partitioningcreate()
679d9274352SBarry Smith 
680d9274352SBarry Smith    Level: beginner
681d9274352SBarry Smith 
682d9274352SBarry Smith .seealso: MatPartitioingCreate(), MatPartitioning
683d9274352SBarry Smith E*/
6842aabb6bbSBarry Smith typedef char* MatPartitioningType;
6858ba1e511SMatthew Knepley #define MAT_PARTITIONING_CURRENT  "current"
6868ba1e511SMatthew Knepley #define MAT_PARTITIONING_PARMETIS "parmetis"
687ca161407SBarry Smith 
688ca44d042SBarry Smith EXTERN int MatPartitioningCreate(MPI_Comm,MatPartitioning*);
689ca44d042SBarry Smith EXTERN int MatPartitioningSetType(MatPartitioning,MatPartitioningType);
690ca44d042SBarry Smith EXTERN int MatPartitioningSetAdjacency(MatPartitioning,Mat);
691ca44d042SBarry Smith EXTERN int MatPartitioningSetVertexWeights(MatPartitioning,int*);
692ca44d042SBarry Smith EXTERN int MatPartitioningApply(MatPartitioning,IS*);
693ca44d042SBarry Smith EXTERN int MatPartitioningDestroy(MatPartitioning);
6942aabb6bbSBarry Smith 
695ca44d042SBarry Smith EXTERN int MatPartitioningRegister(char*,char*,char*,int(*)(MatPartitioning));
696aa482453SBarry Smith #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
697f1af5d2fSBarry Smith #define MatPartitioningRegisterDynamic(a,b,c,d) MatPartitioningRegister(a,b,c,0)
6982aabb6bbSBarry Smith #else
699f1af5d2fSBarry Smith #define MatPartitioningRegisterDynamic(a,b,c,d) MatPartitioningRegister(a,b,c,d)
7002aabb6bbSBarry Smith #endif
7012aabb6bbSBarry Smith 
702ca44d042SBarry Smith EXTERN int        MatPartitioningRegisterAll(char *);
7032bad1931SBarry Smith extern PetscTruth MatPartitioningRegisterAllCalled;
704ca44d042SBarry Smith EXTERN int        MatPartitioningRegisterDestroy(void);
7052bad1931SBarry Smith 
706b0a32e0cSBarry Smith EXTERN int MatPartitioningView(MatPartitioning,PetscViewer);
707ca44d042SBarry Smith EXTERN int MatPartitioningSetFromOptions(MatPartitioning);
708ca44d042SBarry Smith EXTERN int MatPartitioningGetType(MatPartitioning,MatPartitioningType*);
709ca161407SBarry Smith 
710ca44d042SBarry Smith EXTERN int MatPartitioningParmetisSetCoarseSequential(MatPartitioning);
7110752156aSBarry Smith 
7120752156aSBarry Smith /*
7130a835dfdSSatish Balay     If you add entries here you must also add them to finclude/petscmat.h
714d4fbbf0eSBarry Smith */
7151c1c02c0SLois Curfman McInnes typedef enum { MATOP_SET_VALUES=0,
7161c1c02c0SLois Curfman McInnes                MATOP_GET_ROW=1,
7171c1c02c0SLois Curfman McInnes                MATOP_RESTORE_ROW=2,
7181c1c02c0SLois Curfman McInnes                MATOP_MULT=3,
7191c1c02c0SLois Curfman McInnes                MATOP_MULT_ADD=4,
7207c922b88SBarry Smith                MATOP_MULT_TRANSPOSE=5,
7217c922b88SBarry Smith                MATOP_MULT_TRANSPOSE_ADD=6,
7221c1c02c0SLois Curfman McInnes                MATOP_SOLVE=7,
7231c1c02c0SLois Curfman McInnes                MATOP_SOLVE_ADD=8,
7247c922b88SBarry Smith                MATOP_SOLVE_TRANSPOSE=9,
7257c922b88SBarry Smith                MATOP_SOLVE_TRANSPOSE_ADD=10,
7261c1c02c0SLois Curfman McInnes                MATOP_LUFACTOR=11,
7271c1c02c0SLois Curfman McInnes                MATOP_CHOLESKYFACTOR=12,
7281c1c02c0SLois Curfman McInnes                MATOP_RELAX=13,
7291c1c02c0SLois Curfman McInnes                MATOP_TRANSPOSE=14,
7301c1c02c0SLois Curfman McInnes                MATOP_GETINFO=15,
7311c1c02c0SLois Curfman McInnes                MATOP_EQUAL=16,
7321c1c02c0SLois Curfman McInnes                MATOP_GET_DIAGONAL=17,
7331c1c02c0SLois Curfman McInnes                MATOP_DIAGONAL_SCALE=18,
7341c1c02c0SLois Curfman McInnes                MATOP_NORM=19,
7351c1c02c0SLois Curfman McInnes                MATOP_ASSEMBLY_BEGIN=20,
7361c1c02c0SLois Curfman McInnes                MATOP_ASSEMBLY_END=21,
7371c1c02c0SLois Curfman McInnes                MATOP_COMPRESS=22,
7381c1c02c0SLois Curfman McInnes                MATOP_SET_OPTION=23,
7391c1c02c0SLois Curfman McInnes                MATOP_ZERO_ENTRIES=24,
7401c1c02c0SLois Curfman McInnes                MATOP_ZERO_ROWS=25,
7411c1c02c0SLois Curfman McInnes                MATOP_LUFACTOR_SYMBOLIC=26,
7421c1c02c0SLois Curfman McInnes                MATOP_LUFACTOR_NUMERIC=27,
7431c1c02c0SLois Curfman McInnes                MATOP_CHOLESKY_FACTOR_SYMBOLIC=28,
7441c1c02c0SLois Curfman McInnes                MATOP_CHOLESKY_FACTOR_NUMERIC=29,
745d643ce63SMatthew Knepley                MATOP_SETUP_PREALLOCATION=30,
746d643ce63SMatthew Knepley                MATOP_ILUFACTOR_SYMBOLIC=31,
747d643ce63SMatthew Knepley                MATOP_ICCFACTOR_SYMBOLIC=32,
748d643ce63SMatthew Knepley                MATOP_GET_ARRAY=33,
749d643ce63SMatthew Knepley                MATOP_RESTORE_ARRAY=34,
750d643ce63SMatthew Knepley                MATOP_DUPLCIATE=35,
751d643ce63SMatthew Knepley                MATOP_FORWARD_SOLVE=36,
752d643ce63SMatthew Knepley                MATOP_BACKWARD_SOLVE=37,
753d643ce63SMatthew Knepley                MATOP_ILUFACTOR=38,
754d643ce63SMatthew Knepley                MATOP_ICCFACTOR=39,
755d643ce63SMatthew Knepley                MATOP_AXPY=40,
756d643ce63SMatthew Knepley                MATOP_GET_SUBMATRICES=41,
757d643ce63SMatthew Knepley                MATOP_INCREASE_OVERLAP=42,
758d643ce63SMatthew Knepley                MATOP_GET_VALUES=43,
759d643ce63SMatthew Knepley                MATOP_COPY=44,
760d643ce63SMatthew Knepley                MATOP_PRINT_HELP=45,
761d643ce63SMatthew Knepley                MATOP_SCALE=46,
762d643ce63SMatthew Knepley                MATOP_SHIFT=47,
763d643ce63SMatthew Knepley                MATOP_DIAGONAL_SHIFT=48,
764d643ce63SMatthew Knepley                MATOP_ILUDT_FACTOR=49,
765d643ce63SMatthew Knepley                MATOP_GET_BLOCK_SIZE=50,
766d643ce63SMatthew Knepley                MATOP_GET_ROW_IJ=51,
767d643ce63SMatthew Knepley                MATOP_RESTORE_ROW_IJ=52,
768d643ce63SMatthew Knepley                MATOP_GET_COLUMN_IJ=53,
769d643ce63SMatthew Knepley                MATOP_RESTORE_COLUMN_IJ=54,
770d643ce63SMatthew Knepley                MATOP_FDCOLORING_CREATE=55,
771d643ce63SMatthew Knepley                MATOP_COLORING_PATCH=56,
772d643ce63SMatthew Knepley                MATOP_SET_UNFACTORED=57,
773d643ce63SMatthew Knepley                MATOP_PERMUTE=58,
774d643ce63SMatthew Knepley                MATOP_SET_VALUES_BLOCKED=59,
775d643ce63SMatthew Knepley                MATOP_GET_SUBMATRIX=60,
776d643ce63SMatthew Knepley                MATOP_DESTROY=61,
777d643ce63SMatthew Knepley                MATOP_VIEW=62,
778d643ce63SMatthew Knepley                MATOP_GET_MAPS=63,
779d643ce63SMatthew Knepley                MATOP_USE_SCALED_FORM=64,
780d643ce63SMatthew Knepley                MATOP_SCALE_SYSTEM=65,
781d643ce63SMatthew Knepley                MATOP_UNSCALE_SYSTEM=66,
782d643ce63SMatthew Knepley                MATOP_SET_LOCAL_TO_GLOBAL_MAPPING=67,
783d643ce63SMatthew Knepley                MATOP_SET_VALUES_LOCAL=68,
784d643ce63SMatthew Knepley                MATOP_ZERO_ROWS_LOCAL=69,
785d643ce63SMatthew Knepley                MATOP_GET_ROW_MAX=70,
786d643ce63SMatthew Knepley                MATOP_CONVERT=71,
787d643ce63SMatthew Knepley                MATOP_SET_COLORING=72,
788d643ce63SMatthew Knepley                MATOP_SET_VALUES_ADIC=73,
789d643ce63SMatthew Knepley                MATOP_SET_VALUES_ADIFOR=74,
790d643ce63SMatthew Knepley                MATOP_FD_COLORING_APPLY=75,
791d643ce63SMatthew Knepley                MATOP_SET_FROM_OPTIONS=76,
792d643ce63SMatthew Knepley                MATOP_MULT_CONSTRAINED=77,
793d643ce63SMatthew Knepley                MATOP_MULT_TRANSPOSE_CONSTRAINED=78,
794d643ce63SMatthew Knepley                MATOP_ILU_FACTOR_SYMBOLIC_CONSTRAINED=79,
795d643ce63SMatthew Knepley                MATOP_PERMUTE_SPARSIFY=80,
796d643ce63SMatthew Knepley                MATOP_MULT_MULTIPLE=81,
797d643ce63SMatthew Knepley                MATOP_SOLVE_MULTIPLE=82
798fae171e0SBarry Smith              } MatOperation;
799ca44d042SBarry Smith EXTERN int MatHasOperation(Mat,MatOperation,PetscTruth*);
800ff8b7a98SSatish Balay EXTERN int MatShellSetOperation(Mat,MatOperation,void(*)(void));
801ff8b7a98SSatish Balay EXTERN int MatShellGetOperation(Mat,MatOperation,void(**)(void));
802273d9f13SBarry Smith EXTERN int MatShellSetContext(Mat,void*);
803112a2221SBarry Smith 
80490ace30eSBarry Smith /*
80590ace30eSBarry Smith    Codes for matrices stored on disk. By default they are
80690ace30eSBarry Smith  stored in a universal format. By changing the format with
807fb9695e5SSatish Balay  PetscViewerSetFormat(viewer,PETSC_VIEWER_BINARY_NATIVE); the matrices will
80890ace30eSBarry Smith  be stored in a way natural for the matrix, for example dense matrices
80990ace30eSBarry Smith  would be stored as dense. Matrices stored this way may only be
81090ace30eSBarry Smith  read into matrices of the same time.
81190ace30eSBarry Smith */
81290ace30eSBarry Smith #define MATRIX_BINARY_FORMAT_DENSE -1
81390ace30eSBarry Smith 
8143f1d51d7SBarry Smith /*
8153f1d51d7SBarry Smith      New matrix classes not yet distributed
8163f1d51d7SBarry Smith */
8173f1d51d7SBarry Smith /*
8183f1d51d7SBarry Smith     MatAIJIndices is a data structure for storing the nonzero location information
8193f1d51d7SBarry Smith   for sparse matrices. Several matrices with identical nonzero structure can share
8203f1d51d7SBarry Smith   the same MatAIJIndices.
8213f1d51d7SBarry Smith */
822e2a1c21fSSatish Balay typedef struct _p_MatAIJIndices* MatAIJIndices;
8233f1d51d7SBarry Smith 
824ca44d042SBarry Smith EXTERN int MatCreateAIJIndices(int,int,int*,int*,PetscTruth,MatAIJIndices*);
825ca44d042SBarry Smith EXTERN int MatCreateAIJIndicesEmpty(int,int,int*,PetscTruth,MatAIJIndices*);
826ca44d042SBarry Smith EXTERN int MatAttachAIJIndices(MatAIJIndices,MatAIJIndices*);
827ca44d042SBarry Smith EXTERN int MatDestroyAIJIndices(MatAIJIndices);
828ca44d042SBarry Smith EXTERN int MatCopyAIJIndices(MatAIJIndices,MatAIJIndices*);
829ca44d042SBarry Smith EXTERN int MatValidateAIJIndices(int,MatAIJIndices);
830ca44d042SBarry Smith EXTERN int MatShiftAIJIndices(MatAIJIndices);
831ca44d042SBarry Smith EXTERN int MatShrinkAIJIndices(MatAIJIndices);
832ca44d042SBarry Smith EXTERN int MatTransposeAIJIndices(MatAIJIndices,MatAIJIndices*);
8333f1d51d7SBarry Smith 
834ca44d042SBarry Smith EXTERN int MatCreateSeqCSN(MPI_Comm,int,int,int*,int,Mat*);
835ca44d042SBarry Smith EXTERN int MatCreateSeqCSN_Single(MPI_Comm,int,int,int*,int,Mat*);
83687828ca2SBarry Smith EXTERN int MatCreateSeqCSNWithPrecision(MPI_Comm,int,int,int*,int,PetscScalarPrecision,Mat*);
8373f1d51d7SBarry Smith 
838ca44d042SBarry Smith EXTERN int MatCreateSeqCSNIndices(MPI_Comm,MatAIJIndices,int,Mat *);
839ca44d042SBarry Smith EXTERN int MatCreateSeqCSNIndices_Single(MPI_Comm,MatAIJIndices,int,Mat *);
84087828ca2SBarry Smith EXTERN int MatCreateSeqCSNIndicesWithPrecision(MPI_Comm,MatAIJIndices,int,PetscScalarPrecision,Mat *);
8413f1d51d7SBarry Smith 
8426d053be9SSatish Balay EXTERN int MatMPIBAIJSetHashTableFactor(Mat,PetscReal);
843ca44d042SBarry Smith EXTERN int MatSeqAIJGetInodeSizes(Mat,int *,int *[],int *);
84408918a0eSSatish Balay EXTERN int MatMPIRowbsGetColor(Mat,ISColoring *);
845860d1616SSatish Balay 
846d9274352SBarry Smith /*S
847d9274352SBarry Smith      MatNullSpace - Object that removes a null space from a vector, i.e.
848d9274352SBarry Smith          orthogonalizes the vector to a subsapce
849d9274352SBarry Smith 
850f7a9e4ceSBarry Smith    Level: advanced
851d9274352SBarry Smith 
852d9274352SBarry Smith   Concepts: matrix; linear operator, null space
853d9274352SBarry Smith 
8546e1639daSBarry Smith   Users manual sections:
8556e1639daSBarry Smith .   sec_singular
8566e1639daSBarry Smith 
857d9274352SBarry Smith .seealso:  MatNullSpaceCreate()
858d9274352SBarry Smith S*/
85974637425SBarry Smith typedef struct _p_MatNullSpace* MatNullSpace;
860d9274352SBarry Smith 
86174637425SBarry Smith EXTERN int MatNullSpaceCreate(MPI_Comm,int,int,Vec *,MatNullSpace*);
86274637425SBarry Smith EXTERN int MatNullSpaceDestroy(MatNullSpace);
86374637425SBarry Smith EXTERN int MatNullSpaceRemove(MatNullSpace,Vec,Vec*);
86474637425SBarry Smith EXTERN int MatNullSpaceAttach(Mat,MatNullSpace);
86574637425SBarry Smith EXTERN int MatNullSpaceTest(MatNullSpace,Mat);
86674637425SBarry Smith 
867273d9f13SBarry Smith EXTERN int MatReorderingSeqSBAIJ(Mat A,IS isp);
868273d9f13SBarry Smith EXTERN int MatMPISBAIJSetHashTableFactor(Mat,PetscReal);
869273d9f13SBarry Smith EXTERN int MatSeqSBAIJSetColumnIndices(Mat,int *);
870273d9f13SBarry Smith 
8713f1d51d7SBarry Smith 
872f069c275SSatish Balay EXTERN int MatCreateMAIJ(Mat,int,Mat*);
873c4f061fbSSatish Balay EXTERN int MatMAIJRedimension(Mat,int,Mat*);
874c4f061fbSSatish Balay EXTERN int MatMAIJGetAIJ(Mat,Mat*);
875c4f061fbSSatish Balay 
876273d9f13SBarry Smith EXTERN int MatMPIAdjSetValues(Mat,int*,int*,int*);
877f069c275SSatish Balay 
878b0a32e0cSBarry Smith EXTERN int MatComputeExplicitOperator(Mat,Mat*);
879b0a32e0cSBarry Smith 
88024a595ddSBarry Smith EXTERN int MatESISetType(Mat,char*);
88124a595ddSBarry Smith EXTERN int MatESISetFromOptions(Mat);
88224a595ddSBarry Smith 
8832cd6534aSBarry Smith EXTERN int MatDiagonalScaleLocal(Mat,Vec);
88404f1ad80SBarry Smith 
8857dbadf16SMatthew Knepley EXTERN int PetscViewerMathematicaPutMatrix(PetscViewer, int, int, PetscReal *);
8867dbadf16SMatthew Knepley EXTERN int PetscViewerMathematicaPutCSRMatrix(PetscViewer, int, int, int *, int *, PetscReal *);
8877dbadf16SMatthew Knepley 
888e82a3eeeSBarry Smith EXTERN int MatUseSuperLU_DIST_MPIAIJ(Mat);
889e82a3eeeSBarry Smith EXTERN int MatUseSpooles_SeqAIJ(Mat);
890e82a3eeeSBarry Smith EXTERN int MatUseUMFPACK_SeqAIJ(Mat);
891e82a3eeeSBarry Smith EXTERN int MatUseSuperLU_SeqAIJ(Mat);
892e82a3eeeSBarry Smith EXTERN int MatUseEssl_SeqAIJ(Mat);
893e82a3eeeSBarry Smith EXTERN int MatUseLUSOL_SeqAIJ(Mat);
894e82a3eeeSBarry Smith EXTERN int MatUseMatlab_SeqAIJ(Mat);
895e82a3eeeSBarry Smith EXTERN int MatUseDXML_SeqAIJ(Mat);
896e82a3eeeSBarry Smith EXTERN int MatUseSuperLU_DIST_MPIAIJ(Mat);
897e82a3eeeSBarry Smith EXTERN int MatUseSpooles_MPIAIJ(Mat);
898e82a3eeeSBarry Smith EXTERN int MatUseSpooles_SeqSBAIJ(Mat);
899e82a3eeeSBarry Smith extern int MatUseSpooles_MPISBAIJ(Mat);
900e82a3eeeSBarry Smith 
9012eac72dbSBarry Smith #endif
9022eac72dbSBarry Smith 
9032eac72dbSBarry Smith 
9049d00d63dSBarry Smith 
905