Actual source code: petscmat.h
1: /*
2: Include file for the matrix component of PETSc
3: */
4: #ifndef __PETSCMAT_H
6: #include petscvec.h
9: /*S
10: Mat - Abstract PETSc matrix object
12: Level: beginner
14: Concepts: matrix; linear operator
16: .seealso: MatCreate(), MatType, MatSetType()
17: S*/
18: typedef struct _p_Mat* Mat;
20: /*E
21: MatType - String with the name of a PETSc matrix or the creation function
22: with an optional dynamic library name, for example
23: http://www.mcs.anl.gov/petsc/lib.a:mymatcreate()
25: Level: beginner
27: .seealso: MatSetType(), Mat
28: E*/
29: #define MATSAME "same"
30: #define MATSEQMAIJ "seqmaij"
31: #define MATMPIMAIJ "mpimaij"
32: #define MATMAIJ "maij"
33: #define MATIS "is"
34: #define MATMPIROWBS "mpirowbs"
35: #define MATSEQAIJ "seqaij"
36: #define MATMPIAIJ "mpiaij"
37: #define MATAIJ "aij"
38: #define MATSHELL "shell"
39: #define MATSEQBDIAG "seqbdiag"
40: #define MATMPIBDIAG "mpibdiag"
41: #define MATBDIAG "bdiag"
42: #define MATSEQDENSE "seqdense"
43: #define MATMPIDENSE "mpidense"
44: #define MATDENSE "dense"
45: #define MATSEQBAIJ "seqbaij"
46: #define MATMPIBAIJ "mpibaij"
47: #define MATBAIJ "baij"
48: #define MATMPIADJ "mpiadj"
49: #define MATSEQSBAIJ "seqsbaij"
50: #define MATMPISBAIJ "mpisbaij"
51: #define MATSBAIJ "sbaij"
52: #define MATDAAD "daad"
53: #define MATMFFD "mffd"
54: #define MATNORMAL "normal"
55: #define MATSEQAIJSPOOLES "seqaijspooles"
56: #define MATMPIAIJSPOOLES "mpiaijspooles"
57: #define MATSEQSBAIJSPOOLES "seqsbaijspooles"
58: #define MATMPISBAIJSPOOLES "mpisbaijspooles"
59: #define MATAIJSPOOLES "aijspooles"
60: #define MATSBAIJSPOOLES "sbaijspooles"
61: #define MATSUPERLU "superlu"
62: #define MATSUPERLU_DIST "superlu_dist"
63: #define MATUMFPACK "umfpack"
64: #define MATESSL "essl"
65: #define MATLUSOL "lusol"
66: #define MATAIJMUMPS "aijmumps"
67: #define MATSBAIJMUMPS "sbaijmumps"
68: #define MATDSCPACK "dscpack"
69: #define MATMATLAB "matlab"
70: #define MATSEQCSRPERM "seqcsrperm"
71: #define MATMPICSRPERM "mpicsrperm"
72: #define MatType const char*
74: /* Logging support */
75: #define MAT_FILE_COOKIE 1211216 /* used to indicate matrices in binary files */
92: /*E
93: MatReuse - Indicates if matrices obtained from a previous call to MatGetSubMatrices()
94: or MatGetSubMatrix() are to be reused to store the new matrix values.
96: Level: beginner
98: Any additions/changes here MUST also be made in include/finclude/petscmat.h
100: .seealso: MatGetSubMatrices(), MatGetSubMatrix(), MatDestroyMatrices(), MatConvert()
101: E*/
102: typedef enum {MAT_INITIAL_MATRIX,MAT_REUSE_MATRIX} MatReuse;
104: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatInitializePackage(char *);
106: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreate(MPI_Comm,Mat*);
107: PetscPolymorphicFunction(MatCreate,(MPI_Comm comm,void *ctx),(comm,&A),Mat,A)
108: PetscPolymorphicFunction(MatCreate,(void *ctx),(PETSC_COMM_WORLD,&A),Mat,A)
109: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetSizes(Mat,PetscInt,PetscInt,PetscInt,PetscInt);
110: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetType(Mat,MatType);
111: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetFromOptions(Mat);
112: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetUpPreallocation(Mat);
113: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRegisterAll(const char[]);
114: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRegister(const char[],const char[],const char[],PetscErrorCode(*)(Mat));
116: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetOptionsPrefix(Mat,const char[]);
117: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAppendOptionsPrefix(Mat,const char[]);
118: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetOptionsPrefix(Mat,const char*[]);
120: /*MC
121: MatRegisterDynamic - Adds a new matrix type
123: Synopsis:
124: PetscErrorCode MatRegisterDynamic(char *name,char *path,char *name_create,PetscErrorCode (*routine_create)(Mat))
126: Not Collective
128: Input Parameters:
129: + name - name of a new user-defined matrix type
130: . path - path (either absolute or relative) the library containing this solver
131: . name_create - name of routine to create method context
132: - routine_create - routine to create method context
134: Notes:
135: MatRegisterDynamic() may be called multiple times to add several user-defined solvers.
137: If dynamic libraries are used, then the fourth input argument (routine_create)
138: is ignored.
140: Sample usage:
141: .vb
142: MatRegisterDynamic("my_mat",/home/username/my_lib/lib/libO/solaris/mylib.a,
143: "MyMatCreate",MyMatCreate);
144: .ve
146: Then, your solver can be chosen with the procedural interface via
147: $ MatSetType(Mat,"my_mat")
148: or at runtime via the option
149: $ -mat_type my_mat
151: Level: advanced
153: Notes: ${PETSC_ARCH} occuring in pathname will be replaced with appropriate values.
154: If your function is not being put into a shared library then use VecRegister() instead
156: .keywords: Mat, register
158: .seealso: MatRegisterAll(), MatRegisterDestroy()
160: M*/
161: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
162: #define MatRegisterDynamic(a,b,c,d) MatRegister(a,b,c,0)
163: #else
164: #define MatRegisterDynamic(a,b,c,d) MatRegister(a,b,c,d)
165: #endif
170: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqDense(MPI_Comm,PetscInt,PetscInt,PetscScalar[],Mat*);
171: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPIDense(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar[],Mat*);
172: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*);
173: PetscPolymorphicFunction(MatCreateSeqAIJ,(PetscInt m,PetscInt n,PetscInt nz,const PetscInt nnz[]),(PETSC_COMM_SELF,m,n,nz,nnz,&A),Mat,A)
174: PetscPolymorphicFunction(MatCreateSeqAIJ,(PetscInt m,PetscInt n,PetscInt nz),(PETSC_COMM_SELF,m,n,nz,PETSC_NULL,&A),Mat,A)
175: PetscPolymorphicFunction(MatCreateSeqAIJ,(PetscInt m,PetscInt n,const PetscInt nnz[]),(PETSC_COMM_SELF,m,n,0,nnz,&A),Mat,A)
176: PetscPolymorphicFunction(MatCreateSeqAIJ,(PetscInt m,PetscInt n),(PETSC_COMM_SELF,m,n,0,PETSC_NULL,&A),Mat,A)
177: PetscPolymorphicSubroutine(MatCreateSeqAIJ,(PetscInt m,PetscInt n,PetscInt nz,Mat *A),(PETSC_COMM_SELF,m,n,nz,PETSC_NULL,A))
178: PetscPolymorphicSubroutine(MatCreateSeqAIJ,(PetscInt m,PetscInt n,const PetscInt nnz[],Mat *A),(PETSC_COMM_SELF,m,n,0,nnz,A))
179: PetscPolymorphicSubroutine(MatCreateSeqAIJ,(PetscInt m,PetscInt n,Mat *A),(PETSC_COMM_SELF,m,n,0,PETSC_NULL,A))
180: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPIAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*);
181: PetscPolymorphicFunction(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,const PetscInt nnz[],PetscInt onz,const PetscInt onnz[]),(comm,m,n,M,N,nz,nnz,onz,onnz,&A),Mat,A)
182: PetscPolymorphicFunction(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz),(comm,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,&A),Mat,A)
183: PetscPolymorphicFunction(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[]),(comm,m,n,M,N,0,nnz,0,onz,&A),Mat,A)
184: PetscPolymorphicFunction(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N),(comm,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,&A),Mat,A)
185: PetscPolymorphicSubroutine(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz,Mat *A),(comm,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,A))
186: PetscPolymorphicSubroutine(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[],Mat *A),(comm,m,n,M,N,0,nnz,0,onz,A))
187: PetscPolymorphicSubroutine(MatCreateMPIAIJ,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,Mat *A),(comm,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,A))
188: PetscPolymorphicFunction(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,const PetscInt nnz[],PetscInt onz,const PetscInt onnz[]),(PETSC_COMM_WORLD,m,n,M,N,nz,nnz,onz,onnz,&A),Mat,A)
189: PetscPolymorphicFunction(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz),(PETSC_COMM_WORLD,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,&A),Mat,A)
190: PetscPolymorphicFunction(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[]),(PETSC_COMM_WORLD,m,n,M,N,0,nnz,0,onz,&A),Mat,A)
191: PetscPolymorphicFunction(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N),(PETSC_COMM_WORLD,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,&A),Mat,A)
192: PetscPolymorphicSubroutine(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz,Mat *A),(PETSC_COMM_WORLD,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,A))
193: PetscPolymorphicSubroutine(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[],Mat *A),(PETSC_COMM_WORLD,m,n,M,N,0,nnz,0,onz,A))
194: PetscPolymorphicSubroutine(MatCreateMPIAIJ,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,Mat *A),(PETSC_COMM_WORLD,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,A))
195: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPIRowbs(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*);
196: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqBDiag(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscScalar*[],Mat*);
197: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPIBDiag(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscScalar*[],Mat*);
198: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*);
199: PetscPolymorphicFunction(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt nz,const PetscInt nnz[]),(PETSC_COMM_SELF,bs,m,n,nz,nnz,&A),Mat,A)
200: PetscPolymorphicFunction(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt nz),(PETSC_COMM_SELF,bs,m,n,nz,PETSC_NULL,&A),Mat,A)
201: PetscPolymorphicFunction(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n,const PetscInt nnz[]),(PETSC_COMM_SELF,bs,m,n,0,nnz,&A),Mat,A)
202: PetscPolymorphicFunction(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n),(PETSC_COMM_SELF,bs,m,n,0,PETSC_NULL,&A),Mat,A)
203: PetscPolymorphicSubroutine(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt nz,Mat *A),(PETSC_COMM_SELF,bs,m,n,nz,PETSC_NULL,A))
204: PetscPolymorphicSubroutine(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n,const PetscInt nnz[],Mat *A),(PETSC_COMM_SELF,bs,m,n,0,nnz,A))
205: PetscPolymorphicSubroutine(MatCreateSeqBAIJ,(PetscInt bs,PetscInt m,PetscInt n,Mat *A),(PETSC_COMM_SELF,bs,m,n,0,PETSC_NULL,A))
206: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPIBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*);
207: PetscPolymorphicFunction(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,const PetscInt nnz[],PetscInt onz,const PetscInt onnz[]),(comm,bs,m,n,M,N,nz,nnz,onz,onnz,&A),Mat,A)
208: PetscPolymorphicFunction(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz),(comm,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,&A),Mat,A)
209: PetscPolymorphicFunction(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[]),(comm,bs,m,n,M,N,0,nnz,0,onz,&A),Mat,A)
210: PetscPolymorphicFunction(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N),(comm,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,&A),Mat,A)
211: PetscPolymorphicSubroutine(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz,Mat *A),(comm,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,A))
212: PetscPolymorphicSubroutine(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[],Mat *A),(comm,bs,m,n,M,N,0,nnz,0,onz,A))
213: PetscPolymorphicSubroutine(MatCreateMPIBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,Mat *A),(comm,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,A))
214: PetscPolymorphicFunction(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,const PetscInt nnz[],PetscInt onz,const PetscInt onnz[]),(PETSC_COMM_WORLD,bs,m,n,M,N,nz,nnz,onz,onnz,&A),Mat,A)
215: PetscPolymorphicFunction(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz),(PETSC_COMM_WORLD,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,&A),Mat,A)
216: PetscPolymorphicFunction(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[]),(PETSC_COMM_WORLD,bs,m,n,M,N,0,nnz,0,onz,&A),Mat,A)
217: PetscPolymorphicFunction(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N),(PETSC_COMM_WORLD,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,&A),Mat,A)
218: PetscPolymorphicSubroutine(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz,Mat *A),(PETSC_COMM_WORLD,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,A))
219: PetscPolymorphicSubroutine(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[],Mat *A),(PETSC_COMM_WORLD,bs,m,n,M,N,0,nnz,0,onz,A))
220: PetscPolymorphicSubroutine(MatCreateMPIBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,Mat *A),(PETSC_COMM_WORLD,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,A))
221: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPIAdj(MPI_Comm,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscInt[],Mat*);
222: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqSBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*);
223: PetscPolymorphicFunction(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt nz,const PetscInt nnz[]),(PETSC_COMM_SELF,bs,m,n,nz,nnz,&A),Mat,A)
224: PetscPolymorphicFunction(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt nz),(PETSC_COMM_SELF,bs,m,n,nz,PETSC_NULL,&A),Mat,A)
225: PetscPolymorphicFunction(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n,const PetscInt nnz[]),(PETSC_COMM_SELF,bs,m,n,0,nnz,&A),Mat,A)
226: PetscPolymorphicFunction(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n),(PETSC_COMM_SELF,bs,m,n,0,PETSC_NULL,&A),Mat,A)
227: PetscPolymorphicSubroutine(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt nz,Mat *A),(PETSC_COMM_SELF,bs,m,n,nz,PETSC_NULL,A))
228: PetscPolymorphicSubroutine(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n,const PetscInt nnz[],Mat *A),(PETSC_COMM_SELF,bs,m,n,0,nnz,A))
229: PetscPolymorphicSubroutine(MatCreateSeqSBAIJ,(PetscInt bs,PetscInt m,PetscInt n,Mat *A),(PETSC_COMM_SELF,bs,m,n,0,PETSC_NULL,A))
230: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMPISBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*);
231: PetscPolymorphicFunction(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,const PetscInt nnz[],PetscInt onz,const PetscInt onnz[]),(comm,bs,m,n,M,N,nz,nnz,onz,onnz,&A),Mat,A)
232: PetscPolymorphicFunction(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz),(comm,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,&A),Mat,A)
233: PetscPolymorphicFunction(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[]),(comm,bs,m,n,M,N,0,nnz,0,onz,&A),Mat,A)
234: PetscPolymorphicFunction(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N),(comm,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,&A),Mat,A)
235: PetscPolymorphicSubroutine(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz,Mat *A),(comm,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,A))
236: PetscPolymorphicSubroutine(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[],Mat *A),(comm,bs,m,n,M,N,0,nnz,0,onz,A))
237: PetscPolymorphicSubroutine(MatCreateMPISBAIJ,(MPI_Comm comm,PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,Mat *A),(comm,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,A))
238: PetscPolymorphicFunction(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,const PetscInt nnz[],PetscInt onz,const PetscInt onnz[]),(PETSC_COMM_WORLD,bs,m,n,M,N,nz,nnz,onz,onnz,&A),Mat,A)
239: PetscPolymorphicFunction(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz),(PETSC_COMM_WORLD,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,&A),Mat,A)
240: PetscPolymorphicFunction(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[]),(PETSC_COMM_WORLD,bs,m,n,M,N,0,nnz,0,onz,&A),Mat,A)
241: PetscPolymorphicFunction(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N),(PETSC_COMM_WORLD,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,&A),Mat,A)
242: PetscPolymorphicSubroutine(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt nz,PetscInt nnz,Mat *A),(PETSC_COMM_WORLD,bs,m,n,M,N,nz,PETSC_NULL,nnz,PETSC_NULL,A))
243: PetscPolymorphicSubroutine(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,const PetscInt nnz[],const PetscInt onz[],Mat *A),(PETSC_COMM_WORLD,bs,m,n,M,N,0,nnz,0,onz,A))
244: PetscPolymorphicSubroutine(MatCreateMPISBAIJ,(PetscInt bs,PetscInt m,PetscInt n,PetscInt M,PetscInt N,Mat *A),(PETSC_COMM_WORLD,bs,m,n,M,N,0,PETSC_NULL,0,PETSC_NULL,A))
245: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateShell(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,void *,Mat*);
246: PetscPolymorphicFunction(MatCreateShell,(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,void *ctx),(comm,m,n,M,N,ctx,&A),Mat,A)
247: PetscPolymorphicFunction(MatCreateShell,(PetscInt m,PetscInt n,PetscInt M,PetscInt N,void *ctx),(PETSC_COMM_WORLD,m,n,M,N,ctx,&A),Mat,A)
248: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateAdic(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,void (*)(void),Mat*);
249: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateNormal(Mat,Mat*);
250: PetscPolymorphicFunction(MatCreateNormal,(Mat mat),(mat,&A),Mat,A)
251: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetUp(Mat);
252: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDestroy(Mat);
254: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPrintHelp(Mat);
255: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetPetscMaps(Mat,PetscMap*,PetscMap*);
257: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConjugate(Mat);
258: /* ------------------------------------------------------------*/
259: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValues(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
260: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesBlocked(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
262: /*S
263: MatStencil - Data structure (C struct) for storing information about a single row or
264: column of a matrix as index on an associated grid.
266: Level: beginner
268: Concepts: matrix; linear operator
270: .seealso: MatSetValuesStencil(), MatSetStencil(), MatSetValuesBlockStencil()
271: S*/
272: typedef struct {
273: PetscInt k,j,i,c;
274: } MatStencil;
276: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesStencil(Mat,PetscInt,const MatStencil[],PetscInt,const MatStencil[],const PetscScalar[],InsertMode);
277: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesBlockedStencil(Mat,PetscInt,const MatStencil[],PetscInt,const MatStencil[],const PetscScalar[],InsertMode);
278: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetStencil(Mat,PetscInt,const PetscInt[],const PetscInt[],PetscInt);
280: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetColoring(Mat,ISColoring);
281: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesAdic(Mat,void*);
282: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesAdifor(Mat,PetscInt,void*);
284: /*E
285: MatAssemblyType - Indicates if the matrix is now to be used, or if you plan
286: to continue to add values to it
288: Level: beginner
290: .seealso: MatAssemblyBegin(), MatAssemblyEnd()
291: E*/
292: typedef enum {MAT_FLUSH_ASSEMBLY=1,MAT_FINAL_ASSEMBLY=0} MatAssemblyType;
293: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAssemblyBegin(Mat,MatAssemblyType);
294: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAssemblyEnd(Mat,MatAssemblyType);
295: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAssembled(Mat,PetscTruth*);
301: /*MC
302: MatSetValue - Set a single entry into a matrix.
304: Synopsis:
305: PetscErrorCode MatSetValue(Mat m,PetscInt row,PetscInt col,PetscScalar value,InsertMode mode);
307: Not collective
309: Input Parameters:
310: + m - the matrix
311: . row - the row location of the entry
312: . col - the column location of the entry
313: . value - the value to insert
314: - mode - either INSERT_VALUES or ADD_VALUES
316: Notes:
317: For efficiency one should use MatSetValues() and set several or many
318: values simultaneously if possible.
320: Level: beginner
322: .seealso: MatSetValues(), MatSetValueLocal()
323: M*/
324: #define MatSetValue(v,i,j,va,mode) \
325: ((MatSetValue_Row = i,MatSetValue_Column = j,MatSetValue_Value = va,0) || \
326: MatSetValues(v,1,&MatSetValue_Row,1,&MatSetValue_Column,&MatSetValue_Value,mode))
328: #define MatGetValue(v,i,j,va) \
329: ((MatSetValue_Row = i,MatSetValue_Column = j,0) || \
330: MatGetValues(v,1,&MatSetValue_Row,1,&MatSetValue_Column,&va))
332: #define MatSetValueLocal(v,i,j,va,mode) \
333: ((MatSetValue_Row = i,MatSetValue_Column = j,MatSetValue_Value = va,0) || \
334: MatSetValuesLocal(v,1,&MatSetValue_Row,1,&MatSetValue_Column,&MatSetValue_Value,mode))
336: /*E
337: MatOption - Options that may be set for a matrix and its behavior or storage
339: Level: beginner
341: Any additions/changes here MUST also be made in include/finclude/petscmat.h
343: .seealso: MatSetOption()
344: E*/
345: typedef enum {MAT_ROW_ORIENTED=1,MAT_COLUMN_ORIENTED=2,MAT_ROWS_SORTED=4,
346: MAT_COLUMNS_SORTED=8,MAT_NO_NEW_NONZERO_LOCATIONS=16,
347: MAT_YES_NEW_NONZERO_LOCATIONS=32,MAT_SYMMETRIC=64,
348: MAT_STRUCTURALLY_SYMMETRIC=65,MAT_NO_NEW_DIAGONALS=66,
349: MAT_YES_NEW_DIAGONALS=67,MAT_INODE_LIMIT_1=68,MAT_INODE_LIMIT_2=69,
350: MAT_INODE_LIMIT_3=70,MAT_INODE_LIMIT_4=71,MAT_INODE_LIMIT_5=72,
351: MAT_IGNORE_OFF_PROC_ENTRIES=73,MAT_ROWS_UNSORTED=74,
352: MAT_COLUMNS_UNSORTED=75,MAT_NEW_NONZERO_LOCATION_ERR=76,
353: MAT_NEW_NONZERO_ALLOCATION_ERR=77,MAT_USE_HASH_TABLE=78,
354: MAT_KEEP_ZEROED_ROWS=79,MAT_IGNORE_ZERO_ENTRIES=80,MAT_USE_INODES=81,
355: MAT_DO_NOT_USE_INODES=82,MAT_NOT_SYMMETRIC=83,MAT_HERMITIAN=84,
356: MAT_NOT_STRUCTURALLY_SYMMETRIC=85,MAT_NOT_HERMITIAN=86,
357: MAT_SYMMETRY_ETERNAL=87,MAT_NOT_SYMMETRY_ETERNAL=88,
358: MAT_USE_COMPRESSEDROW=89,MAT_DO_NOT_USE_COMPRESSEDROW=90,
359: MAT_IGNORE_LOWER_TRIANGULAR=91,MAT_ERROR_LOWER_TRIANGULAR=92} MatOption;
360: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetOption(Mat,MatOption);
361: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetType(Mat,MatType*);
362: PetscPolymorphicFunction(MatGetType,(Mat mat),(mat,&t),MatType,t)
364: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetValues(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],PetscScalar[]);
365: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetRow(Mat,PetscInt,PetscInt *,const PetscInt *[],const PetscScalar*[]);
366: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRestoreRow(Mat,PetscInt,PetscInt *,const PetscInt *[],const PetscScalar*[]);
367: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetColumn(Mat,PetscInt,PetscInt *,const PetscInt *[],const PetscScalar*[]);
368: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRestoreColumn(Mat,PetscInt,PetscInt *,const PetscInt *[],const PetscScalar*[]);
369: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetColumnVector(Mat,Vec,PetscInt);
370: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetArray(Mat,PetscScalar *[]);
371: PetscPolymorphicFunction(MatGetArray,(Mat mat),(mat,&a),PetscScalar*,a)
372: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRestoreArray(Mat,PetscScalar *[]);
373: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetBlockSize(Mat,PetscInt *);
374: PetscPolymorphicFunction(MatGetBlockSize,(Mat mat),(mat,&a),PetscInt,a)
375: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetBlockSize(Mat,PetscInt);
377: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMult(Mat,Vec,Vec);
378: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultAdd(Mat,Vec,Vec,Vec);
379: PetscPolymorphicSubroutine(MatMultAdd,(Mat A,Vec x,Vec y),(A,x,y,y))
380: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultTranspose(Mat,Vec,Vec);
381: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIsTranspose(Mat,Mat,PetscReal,PetscTruth*);
382: PetscPolymorphicFunction(MatIsTranspose,(Mat A,Mat B,PetscReal tol),(A,B,tol,&t),PetscTruth,t)
383: PetscPolymorphicFunction(MatIsTranspose,(Mat A,Mat B),(A,B,0.0,&t),PetscTruth,t)
384: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultTransposeAdd(Mat,Vec,Vec,Vec);
385: PetscPolymorphicSubroutine(MatMultTransposeAdd,(Mat A,Vec x,Vec y),(A,x,y,y))
386: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultConstrained(Mat,Vec,Vec);
387: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultTransposeConstrained(Mat,Vec,Vec);
389: /*E
390: MatDuplicateOption - Indicates if a duplicated sparse matrix should have
391: its numerical values copied over or just its nonzero structure.
393: Level: beginner
395: Any additions/changes here MUST also be made in include/finclude/petscmat.h
397: .seealso: MatDuplicate()
398: E*/
399: typedef enum {MAT_DO_NOT_COPY_VALUES,MAT_COPY_VALUES} MatDuplicateOption;
401: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConvertRegister(const char[],const char[],const char[],PetscErrorCode (*)(Mat,MatType,MatReuse,Mat*));
402: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
403: #define MatConvertRegisterDynamic(a,b,c,d) MatConvertRegister(a,b,c,0)
404: #else
405: #define MatConvertRegisterDynamic(a,b,c,d) MatConvertRegister(a,b,c,d)
406: #endif
407: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConvertRegisterAll(const char[]);
408: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConvertRegisterDestroy(void);
411: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatConvert(Mat,MatType,MatReuse,Mat*);
412: PetscPolymorphicFunction(MatConvert,(Mat A,MatType t),(A,t,MAT_INITIAL_MATRIX,&a),Mat,a)
413: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDuplicate(Mat,MatDuplicateOption,Mat*);
414: PetscPolymorphicFunction(MatDuplicate,(Mat A,MatDuplicateOption o),(A,o,&a),Mat,a)
415: PetscPolymorphicFunction(MatDuplicate,(Mat A),(A,MAT_COPY_VALUES,&a),Mat,a)
417: /*E
418: MatStructure - Indicates if the matrix has the same nonzero structure
420: Level: beginner
422: Any additions/changes here MUST also be made in include/finclude/petscmat.h
424: .seealso: MatCopy(), KSPSetOperators(), PCSetOperators()
425: E*/
426: typedef enum {SAME_NONZERO_PATTERN,DIFFERENT_NONZERO_PATTERN,SAME_PRECONDITIONER,SUBSET_NONZERO_PATTERN} MatStructure;
428: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCopy(Mat,Mat,MatStructure);
429: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatView(Mat,PetscViewer);
430: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIsSymmetric(Mat,PetscReal,PetscTruth*);
431: PetscPolymorphicFunction(MatIsSymmetric,(Mat A,PetscReal tol),(A,tol,&t),PetscTruth,t)
432: PetscPolymorphicFunction(MatIsSymmetric,(Mat A),(A,0.0,&t),PetscTruth,t)
433: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIsStructurallySymmetric(Mat,PetscTruth*);
434: PetscPolymorphicFunction(MatIsStructurallySymmetric,(Mat A),(A,&t),PetscTruth,t)
435: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIsHermitian(Mat,PetscTruth*);
436: PetscPolymorphicFunction(MatIsHermitian,(Mat A),(A,&t),PetscTruth,t)
437: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIsSymmetricKnown(Mat,PetscTruth*,PetscTruth*);
438: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIsHermitianKnown(Mat,PetscTruth*,PetscTruth*);
439: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatLoad(PetscViewer,MatType,Mat*);
440: PetscPolymorphicFunction(MatLoad,(PetscViewer v,MatType t),(v,t,&a),Mat,a)
442: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetRowIJ(Mat,PetscInt,PetscTruth,PetscInt*,PetscInt *[],PetscInt *[],PetscTruth *);
443: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRestoreRowIJ(Mat,PetscInt,PetscTruth,PetscInt *,PetscInt *[],PetscInt *[],PetscTruth *);
444: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetColumnIJ(Mat,PetscInt,PetscTruth,PetscInt*,PetscInt *[],PetscInt *[],PetscTruth *);
445: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRestoreColumnIJ(Mat,PetscInt,PetscTruth,PetscInt *,PetscInt *[],PetscInt *[],PetscTruth *);
447: /*S
448: MatInfo - Context of matrix information, used with MatGetInfo()
450: In Fortran this is simply a double precision array of dimension MAT_INFO_SIZE
452: Level: intermediate
454: Concepts: matrix^nonzero information
456: .seealso: MatGetInfo(), MatInfoType
457: S*/
458: typedef struct {
459: PetscLogDouble rows_global,columns_global; /* number of global rows and columns */
460: PetscLogDouble rows_local,columns_local; /* number of local rows and columns */
461: PetscLogDouble block_size; /* block size */
462: PetscLogDouble nz_allocated,nz_used,nz_unneeded; /* number of nonzeros */
463: PetscLogDouble memory; /* memory allocated */
464: PetscLogDouble assemblies; /* number of matrix assemblies called */
465: PetscLogDouble mallocs; /* number of mallocs during MatSetValues() */
466: PetscLogDouble fill_ratio_given,fill_ratio_needed; /* fill ratio for LU/ILU */
467: PetscLogDouble factor_mallocs; /* number of mallocs during factorization */
468: } MatInfo;
470: /*E
471: MatInfoType - Indicates if you want information about the local part of the matrix,
472: the entire parallel matrix or the maximum over all the local parts.
474: Level: beginner
476: Any additions/changes here MUST also be made in include/finclude/petscmat.h
478: .seealso: MatGetInfo(), MatInfo
479: E*/
480: typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType;
481: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetInfo(Mat,MatInfoType,MatInfo*);
482: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatValid(Mat,PetscTruth*);
483: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetDiagonal(Mat,Vec);
484: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetRowMax(Mat,Vec);
485: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatTranspose(Mat,Mat*);
486: PetscPolymorphicFunction(MatTranspose,(Mat A),(A,&t),Mat,t)
487: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPermute(Mat,IS,IS,Mat *);
488: PetscPolymorphicFunction(MatPermute,(Mat A,IS is1,IS is2),(A,is1,is2,&t),Mat,t)
489: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPermuteSparsify(Mat,PetscInt,PetscReal,PetscReal,IS,IS,Mat *);
490: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDiagonalScale(Mat,Vec,Vec);
491: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDiagonalSet(Mat,Vec,InsertMode);
492: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatEqual(Mat,Mat,PetscTruth*);
493: PetscPolymorphicFunction(MatEqual,(Mat A,Mat B),(A,B,&t),PetscTruth,t)
494: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultEqual(Mat,Mat,PetscInt,PetscTruth*);
495: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultAddEqual(Mat,Mat,PetscInt,PetscTruth*);
496: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultTransposeEqual(Mat,Mat,PetscInt,PetscTruth*);
497: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMultTransposeAddEqual(Mat,Mat,PetscInt,PetscTruth*);
499: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatNorm(Mat,NormType,PetscReal *);
500: PetscPolymorphicFunction(MatNorm,(Mat A,NormType t),(A,t,&n),PetscReal,n)
501: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroEntries(Mat);
502: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroRows(Mat,PetscInt,const PetscInt [],PetscScalar);
503: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroRowsIS(Mat,IS,PetscScalar);
504: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroColumns(Mat,PetscInt,const PetscInt [],const PetscScalar*);
505: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroColumnsIS(Mat,IS,const PetscScalar*);
507: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatUseScaledForm(Mat,PetscTruth);
508: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatScaleSystem(Mat,Vec,Vec);
509: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatUnScaleSystem(Mat,Vec,Vec);
511: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetSize(Mat,PetscInt*,PetscInt*);
512: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetLocalSize(Mat,PetscInt*,PetscInt*);
513: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetOwnershipRange(Mat,PetscInt*,PetscInt*);
515: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetSubMatrices(Mat,PetscInt,const IS[],const IS[],MatReuse,Mat *[]);
516: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDestroyMatrices(PetscInt,Mat *[]);
517: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetSubMatrix(Mat,IS,IS,PetscInt,MatReuse,Mat *);
518: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMerge(MPI_Comm,Mat,PetscInt,MatReuse,Mat*);
519: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMerge_SeqsToMPI(MPI_Comm,Mat,PetscInt,PetscInt,MatReuse,Mat*);
520: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMerge_SeqsToMPISymbolic(MPI_Comm,Mat,PetscInt,PetscInt,Mat*);
521: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMerge_SeqsToMPINumeric(Mat,Mat);
522: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDestroy_MPIAIJ_SeqsToMPI(Mat);
523: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetLocalMat(Mat,MatReuse,Mat*);
524: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetLocalMatCondensed(Mat,MatReuse,IS*,IS*,Mat*);
525: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetBrowsOfAcols(Mat,Mat,MatReuse,IS*,IS*,PetscInt*,Mat*);
526: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetBrowsOfAoCols(Mat,Mat,MatReuse,PetscInt**,PetscScalar**,Mat*);
528: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatIncreaseOverlap(Mat,PetscInt,IS[],PetscInt);
530: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMatMult(Mat,Mat,MatReuse,PetscReal,Mat*);
531: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMatMultSymbolic(Mat,Mat,PetscReal,Mat*);
532: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMatMultNumeric(Mat,Mat,Mat);
534: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPtAP(Mat,Mat,MatReuse,PetscReal,Mat*);
535: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPtAPSymbolic(Mat,Mat,PetscReal,Mat*);
536: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPtAPNumeric(Mat,Mat,Mat);
538: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMatMultTranspose(Mat,Mat,MatReuse,PetscReal,Mat*);
539: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMatMultTransposeSymbolic(Mat,Mat,PetscReal,Mat*);
540: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMatMultTransposeNumeric(Mat,Mat,Mat);
542: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAXPY(Mat,PetscScalar,Mat,MatStructure);
543: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAYPX(Mat,PetscScalar,Mat);
544: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCompress(Mat);
546: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatScale(Mat,PetscScalar);
547: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatShift(Mat,PetscScalar);
549: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetLocalToGlobalMapping(Mat,ISLocalToGlobalMapping);
550: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetLocalToGlobalMappingBlock(Mat,ISLocalToGlobalMapping);
551: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroRowsLocal(Mat,PetscInt,const PetscInt [],PetscScalar);
552: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatZeroRowsLocalIS(Mat,IS,PetscScalar);
553: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesLocal(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
554: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetValuesBlockedLocal(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode);
556: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatStashSetInitialSize(Mat,PetscInt,PetscInt);
557: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatStashGetInfo(Mat,PetscInt*,PetscInt*,PetscInt*,PetscInt*);
559: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatInterpolate(Mat,Vec,Vec);
560: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatInterpolateAdd(Mat,Vec,Vec,Vec);
561: PetscPolymorphicSubroutine(MatInterpolateAdd,(Mat A,Vec x,Vec y),(A,x,y,y))
562: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRestrict(Mat,Vec,Vec);
563: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetVecs(Mat,Vec*,Vec*);
565: /*MC
566: MatPreallocInitialize - Begins the block of code that will count the number of nonzeros per
567: row in a matrix providing the data that one can use to correctly preallocate the matrix.
569: Synopsis:
570: PetscErrorCode MatPreallocateInitialize(MPI_Comm comm, PetscInt nrows, PetscInt ncols, PetscInt *dnz, PetscInt *onz)
572: Collective on MPI_Comm
574: Input Parameters:
575: + comm - the communicator that will share the eventually allocated matrix
576: . nrows - the number of LOCAL rows in the matrix
577: - ncols - the number of LOCAL columns in the matrix
579: Output Parameters:
580: + dnz - the array that will be passed to the matrix preallocation routines
581: - ozn - the other array passed to the matrix preallocation routines
584: Level: intermediate
586: Notes:
587: See the chapter in the users manual on performance for more details
589: Do not malloc or free dnz and onz, that is handled internally by these routines
591: Use MatPreallocateInitializeSymmetric() for symmetric matrices (MPISBAIJ matrices)
593: Concepts: preallocation^Matrix
595: .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateSetLocal(),
596: MatPreallocateInitializeSymmetric(), MatPreallocateSymmetricSetLocal()
597: M*/
598: #define MatPreallocateInitialize(comm,nrows,ncols,dnz,onz) 0; \
599: { \
600: PetscErrorCode _4_ierr; PetscInt __tmp = (nrows),__ctmp = (ncols),__rstart,__start,__end; \
601: _4_PetscMalloc(2*__tmp*sizeof(PetscInt),&dnz);CHKERRQ(_4_ierr);onz = dnz + __tmp;\
602: _4_PetscMemzero(dnz,2*__tmp*sizeof(PetscInt));CHKERRQ(_4_ierr);\
603: _4_MPI_Scan(&__ctmp,&__end,1,MPIU_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __start = __end - __ctmp;\
604: _4_MPI_Scan(&__tmp,&__rstart,1,MPIU_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __tmp;
606: /*MC
607: MatPreallocSymmetricInitialize - Begins the block of code that will count the number of nonzeros per
608: row in a matrix providing the data that one can use to correctly preallocate the matrix.
610: Synopsis:
611: PetscErrorCode MatPreallocateSymmetricInitialize(MPI_Comm comm, PetscInt nrows, PetscInt ncols, PetscInt *dnz, PetscInt *onz)
613: Collective on MPI_Comm
615: Input Parameters:
616: + comm - the communicator that will share the eventually allocated matrix
617: . nrows - the number of LOCAL rows in the matrix
618: - ncols - the number of LOCAL columns in the matrix
620: Output Parameters:
621: + dnz - the array that will be passed to the matrix preallocation routines
622: - ozn - the other array passed to the matrix preallocation routines
625: Level: intermediate
627: Notes:
628: See the chapter in the users manual on performance for more details
630: Do not malloc or free dnz and onz, that is handled internally by these routines
632: Concepts: preallocation^Matrix
634: .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateSetLocal(),
635: MatPreallocateInitialize(), MatPreallocateSymmetricSetLocal()
636: M*/
637: #define MatPreallocateSymmetricInitialize(comm,nrows,ncols,dnz,onz) 0; \
638: { \
639: PetscErrorCode _4_ierr; PetscInt __tmp = (nrows),__ctmp = (ncols),__rstart,__end; \
640: _4_PetscMalloc(2*__tmp*sizeof(PetscInt),&dnz);CHKERRQ(_4_ierr);onz = dnz + __tmp;\
641: _4_PetscMemzero(dnz,2*__tmp*sizeof(PetscInt));CHKERRQ(_4_ierr);\
642: _4_MPI_Scan(&__ctmp,&__end,1,MPIU_INT,MPI_SUM,comm);CHKERRQ(_4_ierr);\
643: _4_MPI_Scan(&__tmp,&__rstart,1,MPIU_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __tmp;
645: /*MC
646: MatPreallocateSetLocal - Indicates the locations (rows and columns) in the matrix where nonzeros will be
647: inserted using a local number of the rows and columns
649: Synopsis:
650: PetscErrorCode MatPreallocateSetLocal(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz)
652: Not Collective
654: Input Parameters:
655: + map - the mapping between local numbering and global numbering
656: . nrows - the number of rows indicated
657: . rows - the indices of the rows
658: . ncols - the number of columns in the matrix
659: . cols - the columns indicated
660: . dnz - the array that will be passed to the matrix preallocation routines
661: - ozn - the other array passed to the matrix preallocation routines
664: Level: intermediate
666: Notes:
667: See the chapter in the users manual on performance for more details
669: Do not malloc or free dnz and onz, that is handled internally by these routines
671: Concepts: preallocation^Matrix
673: .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateInitialize(),
674: MatPreallocateInitialize(), MatPreallocateSymmetricSetLocal()
675: M*/
676: #define MatPreallocateSetLocal(map,nrows,rows,ncols,cols,dnz,onz) 0;\
677: {\
678: PetscInt __l;\
679: _4_ISLocalToGlobalMappingApply(map,nrows,rows,rows);CHKERRQ(_4_ierr);\
680: _4_ISLocalToGlobalMappingApply(map,ncols,cols,cols);CHKERRQ(_4_ierr);\
681: for (__l=0;__l<nrows;__l++) {\
682: _4_MatPreallocateSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\
683: }\
684: }
685:
686: /*MC
687: MatPreallocateSymmetricSetLocal - Indicates the locations (rows and columns) in the matrix where nonzeros will be
688: inserted using a local number of the rows and columns
690: Synopsis:
691: PetscErrorCode MatPreallocateSymmetricSetLocal(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz)
693: Not Collective
695: Input Parameters:
696: + map - the mapping between local numbering and global numbering
697: . nrows - the number of rows indicated
698: . rows - the indices of the rows
699: . ncols - the number of columns in the matrix
700: . cols - the columns indicated
701: . dnz - the array that will be passed to the matrix preallocation routines
702: - ozn - the other array passed to the matrix preallocation routines
705: Level: intermediate
707: Notes:
708: See the chapter in the users manual on performance for more details
710: Do not malloc or free dnz and onz that is handled internally by these routines
712: Concepts: preallocation^Matrix
714: .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateInitialize(),
715: MatPreallocateInitialize(), MatPreallocateSymmetricSetLocal(), MatPreallocateSetLocal()
716: M*/
717: #define MatPreallocateSymmetricSetLocal(map,nrows,rows,ncols,cols,dnz,onz) 0;\
718: {\
719: PetscInt __l;\
720: _4_ISLocalToGlobalMappingApply(map,nrows,rows,rows);CHKERRQ(_4_ierr);\
721: _4_ISLocalToGlobalMappingApply(map,ncols,cols,cols);CHKERRQ(_4_ierr);\
722: for (__l=0;__l<nrows;__l++) {\
723: _4_MatPreallocateSymmetricSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\
724: }\
725: }
727: /*MC
728: MatPreallocateSet - Indicates the locations (rows and columns) in the matrix where nonzeros will be
729: inserted using a local number of the rows and columns
731: Synopsis:
732: PetscErrorCode MatPreallocateSet(PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz)
734: Not Collective
736: Input Parameters:
737: + nrows - the number of rows indicated
738: . rows - the indices of the rows
739: . ncols - the number of columns in the matrix
740: - cols - the columns indicated
742: Output Parameters:
743: + dnz - the array that will be passed to the matrix preallocation routines
744: - ozn - the other array passed to the matrix preallocation routines
747: Level: intermediate
749: Notes:
750: See the chapter in the users manual on performance for more details
752: Do not malloc or free dnz and onz that is handled internally by these routines
754: Concepts: preallocation^Matrix
756: .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateInitialize(),
757: MatPreallocateInitialize(), MatPreallocateSymmetricSetLocal(), MatPreallocateSetLocal()
758: M*/
759: #define MatPreallocateSet(row,nc,cols,dnz,onz) 0;\
760: { PetscInt __i; \
761: for (__i=0; __i<nc; __i++) {\
762: if (cols[__i] < __start || cols[__i] >= __end) onz[row - __rstart]++; \
763: }\
764: dnz[row - __rstart] = nc - onz[row - __rstart];\
765: }
767: /*MC
768: MatPreallocateSymmetricSet - Indicates the locations (rows and columns) in the matrix where nonzeros will be
769: inserted using a local number of the rows and columns
771: Synopsis:
772: PetscErrorCode MatPreallocateSymmetricSet(PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz)
774: Not Collective
776: Input Parameters:
777: + nrows - the number of rows indicated
778: . rows - the indices of the rows
779: . ncols - the number of columns in the matrix
780: . cols - the columns indicated
781: . dnz - the array that will be passed to the matrix preallocation routines
782: - ozn - the other array passed to the matrix preallocation routines
785: Level: intermediate
787: Notes:
788: See the chapter in the users manual on performance for more details
790: Do not malloc or free dnz and onz that is handled internally by these routines
792: Concepts: preallocation^Matrix
794: .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateInitialize(),
795: MatPreallocateInitialize(), MatPreallocateSymmetricSetLocal(), MatPreallocateSetLocal()
796: M*/
797: #define MatPreallocateSymmetricSet(row,nc,cols,dnz,onz) 0;\
798: { PetscInt __i; \
799: for (__i=0; __i<nc; __i++) {\
800: if (cols[__i] >= __end) onz[row - __rstart]++; \
801: else if (cols[__i] >= row) dnz[row - __rstart]++;\
802: }\
803: }
805: /*MC
806: MatPreallocFinalize - Ends the block of code that will count the number of nonzeros per
807: row in a matrix providing the data that one can use to correctly preallocate the matrix.
809: Synopsis:
810: PetscErrorCode MatPreallocateFinalize(PetscInt *dnz, PetscInt *onz)
812: Collective on MPI_Comm
814: Input Parameters:
815: + dnz - the array that will be passed to the matrix preallocation routines
816: - ozn - the other array passed to the matrix preallocation routines
819: Level: intermediate
821: Notes:
822: See the chapter in the users manual on performance for more details
824: Do not malloc or free dnz and onz that is handled internally by these routines
826: Concepts: preallocation^Matrix
828: .seealso: MatPreallocateInitialize(), MatPreallocateSet(), MatPreallocateSymmetricSet(), MatPreallocateSetLocal(),
829: MatPreallocateSymmetricInitialize(), MatPreallocateSymmetricSetLocal()
830: M*/
831: #define MatPreallocateFinalize(dnz,onz) 0;_4_PetscFree(dnz);CHKERRQ(_4_ierr);}
835: /* Routines unique to particular data structures */
836: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatShellGetContext(Mat,void **);
837: PetscPolymorphicFunction(MatShellGetContext,(Mat A),(A,&t),void*,t)
838: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatBDiagGetData(Mat,PetscInt*,PetscInt*,PetscInt*[],PetscInt*[],PetscScalar***);
840: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatInodeAdjustForInodes(Mat,IS*,IS*);
841: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatInodeGetInodeSizes(Mat,PetscInt *,PetscInt *[],PetscInt *);
843: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqAIJSetColumnIndices(Mat,PetscInt[]);
844: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqBAIJSetColumnIndices(Mat,PetscInt[]);
845: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateSeqAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscScalar[],Mat*);
847: #define MAT_SKIP_ALLOCATION -4
849: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[]);
850: PetscPolymorphicSubroutine(MatSeqBAIJSetPreallocation,(Mat A,PetscInt bs,const PetscInt nnz[]),(A,bs,0,nnz))
851: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqSBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[]);
852: PetscPolymorphicSubroutine(MatSeqSBAIJSetPreallocation,(Mat A,PetscInt bs,const PetscInt nnz[]),(A,bs,0,nnz))
853: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqAIJSetPreallocation(Mat,PetscInt,const PetscInt[]);
854: PetscPolymorphicSubroutine(MatSeqAIJSetPreallocation,(Mat A,const PetscInt nnz[]),(A,0,nnz))
855: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqDensePreallocation(Mat,PetscScalar[]);
856: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqBDiagSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[],PetscScalar*[]);
857: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqDenseSetPreallocation(Mat,PetscScalar[]);
859: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[]);
860: PetscPolymorphicSubroutine(MatMPIBAIJSetPreallocation,(Mat A,PetscInt bs,const PetscInt nnz[],const PetscInt onz[]),(A,bs,0,nnz,0,onz))
861: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPISBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[]);
862: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIAIJSetPreallocation(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[]);
863: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIAIJSetPreallocationCSR(Mat,const PetscInt[],const PetscInt[],const PetscScalar[]);
864: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]);
865: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIDensePreallocation(Mat,PetscScalar[]);
866: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIBDiagSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[],PetscScalar*[]);
867: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIAdjSetPreallocation(Mat,PetscInt[],PetscInt[],PetscInt[]);
868: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIDenseSetPreallocation(Mat,PetscScalar[]);
869: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIRowbsSetPreallocation(Mat,PetscInt,const PetscInt[]);
870: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIAIJGetSeqAIJ(Mat,Mat*,Mat*,PetscInt*[]);
871: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIBAIJGetSeqBAIJ(Mat,Mat*,Mat*,PetscInt*[]);
872: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatAdicSetLocalFunction(Mat,void (*)(void));
874: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqDenseSetLDA(Mat,PetscInt);
876: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatStoreValues(Mat);
877: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRetrieveValues(Mat);
879: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDAADSetCtx(Mat,void*);
881: /*
882: These routines are not usually accessed directly, rather solving is
883: done through the KSP and PC interfaces.
884: */
886: /*E
887: MatOrderingType - String with the name of a PETSc matrix ordering or the creation function
888: with an optional dynamic library name, for example
889: http://www.mcs.anl.gov/petsc/lib.a:orderingcreate()
891: Level: beginner
893: .seealso: MatGetOrdering()
894: E*/
895: #define MatOrderingType char*
896: #define MATORDERING_NATURAL "natural"
897: #define MATORDERING_ND "nd"
898: #define MATORDERING_1WD "1wd"
899: #define MATORDERING_RCM "rcm"
900: #define MATORDERING_QMD "qmd"
901: #define MATORDERING_ROWLENGTH "rowlength"
902: #define MATORDERING_DSC_ND "dsc_nd"
903: #define MATORDERING_DSC_MMD "dsc_mmd"
904: #define MATORDERING_DSC_MDF "dsc_mdf"
905: #define MATORDERING_CONSTRAINED "constrained"
906: #define MATORDERING_IDENTITY "identity"
907: #define MATORDERING_REVERSE "reverse"
909: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetOrdering(Mat,const MatOrderingType,IS*,IS*);
910: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetOrderingList(PetscFList *list);
911: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatOrderingRegister(const char[],const char[],const char[],PetscErrorCode(*)(Mat,const MatOrderingType,IS*,IS*));
913: /*MC
914: MatOrderingRegisterDynamic - Adds a new sparse matrix ordering to the
915: matrix package.
917: Synopsis:
918: PetscErrorCode MatOrderingRegisterDynamic(char *name_ordering,char *path,char *name_create,PetscErrorCode (*routine_create)(MatOrdering))
920: Not Collective
922: Input Parameters:
923: + sname - name of ordering (for example MATORDERING_ND)
924: . path - location of library where creation routine is
925: . name - name of function that creates the ordering type,a string
926: - function - function pointer that creates the ordering
928: Level: developer
930: If dynamic libraries are used, then the fourth input argument (function)
931: is ignored.
933: Sample usage:
934: .vb
935: MatOrderingRegisterDynamic("my_order",/home/username/my_lib/lib/libO/solaris/mylib.a,
936: "MyOrder",MyOrder);
937: .ve
939: Then, your partitioner can be chosen with the procedural interface via
940: $ MatOrderingSetType(part,"my_order)
941: or at runtime via the option
942: $ -pc_ilu_mat_ordering_type my_order
943: $ -pc_lu_mat_ordering_type my_order
945: ${PETSC_ARCH} occuring in pathname will be replaced with appropriate values.
947: .keywords: matrix, ordering, register
949: .seealso: MatOrderingRegisterDestroy(), MatOrderingRegisterAll()
950: M*/
951: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
952: #define MatOrderingRegisterDynamic(a,b,c,d) MatOrderingRegister(a,b,c,0)
953: #else
954: #define MatOrderingRegisterDynamic(a,b,c,d) MatOrderingRegister(a,b,c,d)
955: #endif
957: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatOrderingRegisterDestroy(void);
958: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatOrderingRegisterAll(const char[]);
962: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatReorderForNonzeroDiagonal(Mat,PetscReal,IS,IS);
964: /*S
965: MatFactorInfo - Data based into the matrix factorization routines
967: In Fortran these are simply double precision arrays of size MAT_FACTORINFO_SIZE
969: Notes: These are not usually directly used by users, instead use PC type of LU, ILU, CHOLESKY or ICC.
971: Level: developer
973: .seealso: MatLUFactorSymbolic(), MatILUFactorSymbolic(), MatCholeskyFactorSymbolic(), MatICCFactorSymbolic(), MatICCFactor(),
974: MatFactorInfoInitialize()
976: S*/
977: typedef struct {
978: PetscReal shiftnz; /* scaling of identity added to matrix to prevent zero pivots */
979: PetscTruth shiftpd; /* if true, shift until positive pivots */
980: PetscReal shift_fraction; /* record shift fraction taken */
981: PetscReal diagonal_fill; /* force diagonal to fill in if initially not filled */
982: PetscReal dt; /* drop tolerance */
983: PetscReal dtcol; /* tolerance for pivoting */
984: PetscReal dtcount; /* maximum nonzeros to be allowed per row */
985: PetscReal fill; /* expected fill; nonzeros in factored matrix/nonzeros in original matrix*/
986: PetscReal levels; /* ICC/ILU(levels) */
987: PetscReal pivotinblocks; /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0
988: factorization may be faster if do not pivot */
989: PetscReal zeropivot; /* pivot is called zero if less than this */
990: } MatFactorInfo;
992: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFactorInfoInitialize(MatFactorInfo*);
993: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCholeskyFactor(Mat,IS,MatFactorInfo*);
994: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCholeskyFactorSymbolic(Mat,IS,MatFactorInfo*,Mat*);
995: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCholeskyFactorNumeric(Mat,MatFactorInfo*,Mat*);
996: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatLUFactor(Mat,IS,IS,MatFactorInfo*);
997: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatILUFactor(Mat,IS,IS,MatFactorInfo*);
998: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatLUFactorSymbolic(Mat,IS,IS,MatFactorInfo*,Mat*);
999: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatILUFactorSymbolic(Mat,IS,IS,MatFactorInfo*,Mat*);
1000: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatICCFactorSymbolic(Mat,IS,MatFactorInfo*,Mat*);
1001: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatICCFactor(Mat,IS,MatFactorInfo*);
1002: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatLUFactorNumeric(Mat,MatFactorInfo*,Mat*);
1003: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatILUDTFactor(Mat,IS,IS,MatFactorInfo*,Mat *);
1004: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetInertia(Mat,PetscInt*,PetscInt*,PetscInt*);
1005: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSolve(Mat,Vec,Vec);
1006: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatForwardSolve(Mat,Vec,Vec);
1007: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatBackwardSolve(Mat,Vec,Vec);
1008: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSolveAdd(Mat,Vec,Vec,Vec);
1009: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSolveTranspose(Mat,Vec,Vec);
1010: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSolveTransposeAdd(Mat,Vec,Vec,Vec);
1011: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSolves(Mat,Vecs,Vecs);
1013: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSetUnfactored(Mat);
1015: /*E
1016: MatSORType - What type of (S)SOR to perform
1018: Level: beginner
1020: May be bitwise ORd together
1022: Any additions/changes here MUST also be made in include/finclude/petscmat.h
1024: MatSORType may be bitwise ORd together, so do not change the numbers
1026: .seealso: MatRelax(), MatPBRelax()
1027: E*/
1028: typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3,
1029: SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8,
1030: SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16,
1031: SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128} MatSORType;
1032: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatRelax(Mat,Vec,PetscReal,MatSORType,PetscReal,PetscInt,PetscInt,Vec);
1033: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPBRelax(Mat,Vec,PetscReal,MatSORType,PetscReal,PetscInt,PetscInt,Vec);
1035: /*
1036: These routines are for efficiently computing Jacobians via finite differences.
1037: */
1039: /*E
1040: MatColoringType - String with the name of a PETSc matrix coloring or the creation function
1041: with an optional dynamic library name, for example
1042: http://www.mcs.anl.gov/petsc/lib.a:coloringcreate()
1044: Level: beginner
1046: .seealso: MatGetColoring()
1047: E*/
1048: #define MatColoringType char*
1049: #define MATCOLORING_NATURAL "natural"
1050: #define MATCOLORING_SL "sl"
1051: #define MATCOLORING_LF "lf"
1052: #define MATCOLORING_ID "id"
1054: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatGetColoring(Mat,const MatColoringType,ISColoring*);
1055: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatColoringRegister(const char[],const char[],const char[],PetscErrorCode(*)(Mat,const MatColoringType,ISColoring *));
1057: /*MC
1058: MatColoringRegisterDynamic - Adds a new sparse matrix coloring to the
1059: matrix package.
1061: Synopsis:
1062: PetscErrorCode MatColoringRegisterDynamic(char *name_coloring,char *path,char *name_create,PetscErrorCode (*routine_create)(MatColoring))
1064: Not Collective
1066: Input Parameters:
1067: + sname - name of Coloring (for example MATCOLORING_SL)
1068: . path - location of library where creation routine is
1069: . name - name of function that creates the Coloring type, a string
1070: - function - function pointer that creates the coloring
1072: Level: developer
1074: If dynamic libraries are used, then the fourth input argument (function)
1075: is ignored.
1077: Sample usage:
1078: .vb
1079: MatColoringRegisterDynamic("my_color",/home/username/my_lib/lib/libO/solaris/mylib.a,
1080: "MyColor",MyColor);
1081: .ve
1083: Then, your partitioner can be chosen with the procedural interface via
1084: $ MatColoringSetType(part,"my_color")
1085: or at runtime via the option
1086: $ -mat_coloring_type my_color
1088: $PETSC_ARCH occuring in pathname will be replaced with appropriate values.
1090: .keywords: matrix, Coloring, register
1092: .seealso: MatColoringRegisterDestroy(), MatColoringRegisterAll()
1093: M*/
1094: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
1095: #define MatColoringRegisterDynamic(a,b,c,d) MatColoringRegister(a,b,c,0)
1096: #else
1097: #define MatColoringRegisterDynamic(a,b,c,d) MatColoringRegister(a,b,c,d)
1098: #endif
1102: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatColoringRegisterAll(const char[]);
1103: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatColoringRegisterDestroy(void);
1104: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatColoringPatch(Mat,PetscInt,PetscInt,ISColoringValue[],ISColoring*);
1106: /*S
1107: MatFDColoring - Object for computing a sparse Jacobian via finite differences
1108: and coloring
1110: Level: beginner
1112: Concepts: coloring, sparse Jacobian, finite differences
1114: .seealso: MatFDColoringCreate()
1115: S*/
1116: typedef struct _p_MatFDColoring *MatFDColoring;
1118: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringCreate(Mat,ISColoring,MatFDColoring *);
1119: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringDestroy(MatFDColoring);
1120: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringView(MatFDColoring,PetscViewer);
1121: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringSetFunction(MatFDColoring,PetscErrorCode (*)(void),void*);
1122: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringSetParameters(MatFDColoring,PetscReal,PetscReal);
1123: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringSetFrequency(MatFDColoring,PetscInt);
1124: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringGetFrequency(MatFDColoring,PetscInt*);
1125: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringSetFromOptions(MatFDColoring);
1126: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringApply(Mat,MatFDColoring,Vec,MatStructure*,void *);
1127: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringApplyTS(Mat,MatFDColoring,PetscReal,Vec,MatStructure*,void *);
1128: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringSetRecompute(MatFDColoring);
1129: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringSetF(MatFDColoring,Vec);
1130: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatFDColoringGetPerturbedColumns(MatFDColoring,PetscInt*,PetscInt*[]);
1131: /*
1132: These routines are for partitioning matrices: currently used only
1133: for adjacency matrix, MatCreateMPIAdj().
1134: */
1136: /*S
1137: MatPartitioning - Object for managing the partitioning of a matrix or graph
1139: Level: beginner
1141: Concepts: partitioning
1143: .seealso: MatPartitioningCreate(), MatPartitioningType
1144: S*/
1145: typedef struct _p_MatPartitioning *MatPartitioning;
1147: /*E
1148: MatPartitioningType - String with the name of a PETSc matrix partitioning or the creation function
1149: with an optional dynamic library name, for example
1150: http://www.mcs.anl.gov/petsc/lib.a:partitioningcreate()
1152: Level: beginner
1154: .seealso: MatPartitioningCreate(), MatPartitioning
1155: E*/
1156: #define MatPartitioningType char*
1157: #define MAT_PARTITIONING_CURRENT "current"
1158: #define MAT_PARTITIONING_SQUARE "square"
1159: #define MAT_PARTITIONING_PARMETIS "parmetis"
1160: #define MAT_PARTITIONING_CHACO "chaco"
1161: #define MAT_PARTITIONING_JOSTLE "jostle"
1162: #define MAT_PARTITIONING_PARTY "party"
1163: #define MAT_PARTITIONING_SCOTCH "scotch"
1166: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningCreate(MPI_Comm,MatPartitioning*);
1167: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningSetType(MatPartitioning,const MatPartitioningType);
1168: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningSetNParts(MatPartitioning,PetscInt);
1169: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningSetAdjacency(MatPartitioning,Mat);
1170: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningSetVertexWeights(MatPartitioning,const PetscInt[]);
1171: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningSetPartitionWeights(MatPartitioning,const PetscReal []);
1172: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningApply(MatPartitioning,IS*);
1173: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningDestroy(MatPartitioning);
1175: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningRegister(const char[],const char[],const char[],PetscErrorCode (*)(MatPartitioning));
1177: /*MC
1178: MatPartitioningRegisterDynamic - Adds a new sparse matrix partitioning to the
1179: matrix package.
1181: Synopsis:
1182: PetscErrorCode MatPartitioningRegisterDynamic(char *name_partitioning,char *path,char *name_create,PetscErrorCode (*routine_create)(MatPartitioning))
1184: Not Collective
1186: Input Parameters:
1187: + sname - name of partitioning (for example MAT_PARTITIONING_CURRENT) or parmetis
1188: . path - location of library where creation routine is
1189: . name - name of function that creates the partitioning type, a string
1190: - function - function pointer that creates the partitioning type
1192: Level: developer
1194: If dynamic libraries are used, then the fourth input argument (function)
1195: is ignored.
1197: Sample usage:
1198: .vb
1199: MatPartitioningRegisterDynamic("my_part",/home/username/my_lib/lib/libO/solaris/mylib.a,
1200: "MyPartCreate",MyPartCreate);
1201: .ve
1203: Then, your partitioner can be chosen with the procedural interface via
1204: $ MatPartitioningSetType(part,"my_part")
1205: or at runtime via the option
1206: $ -mat_partitioning_type my_part
1208: $PETSC_ARCH occuring in pathname will be replaced with appropriate values.
1210: .keywords: matrix, partitioning, register
1212: .seealso: MatPartitioningRegisterDestroy(), MatPartitioningRegisterAll()
1213: M*/
1214: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
1215: #define MatPartitioningRegisterDynamic(a,b,c,d) MatPartitioningRegister(a,b,c,0)
1216: #else
1217: #define MatPartitioningRegisterDynamic(a,b,c,d) MatPartitioningRegister(a,b,c,d)
1218: #endif
1222: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningRegisterAll(const char[]);
1223: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningRegisterDestroy(void);
1225: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningView(MatPartitioning,PetscViewer);
1226: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningSetFromOptions(MatPartitioning);
1227: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningGetType(MatPartitioning,MatPartitioningType*);
1229: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningParmetisSetCoarseSequential(MatPartitioning);
1231: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningJostleSetCoarseLevel(MatPartitioning,PetscReal);
1232: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningJostleSetCoarseSequential(MatPartitioning);
1234: typedef enum { MP_CHACO_MULTILEVEL_KL, MP_CHACO_SPECTRAL, MP_CHACO_LINEAR,
1235: MP_CHACO_RANDOM, MP_CHACO_SCATTERED } MPChacoGlobalType;
1236: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningChacoSetGlobal(MatPartitioning, MPChacoGlobalType);
1237: typedef enum { MP_CHACO_KERNIGHAN_LIN, MP_CHACO_NONE } MPChacoLocalType;
1238: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningChacoSetLocal(MatPartitioning, MPChacoLocalType);
1239: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningChacoSetCoarseLevel(MatPartitioning,PetscReal);
1240: typedef enum { MP_CHACO_LANCZOS, MP_CHACO_RQI_SYMMLQ } MPChacoEigenType;
1241: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningChacoSetEigenSolver(MatPartitioning,MPChacoEigenType);
1242: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningChacoSetEigenTol(MatPartitioning, PetscReal);
1243: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningChacoSetEigenNumber(MatPartitioning, PetscInt);
1245: #define MP_PARTY_OPT "opt"
1246: #define MP_PARTY_LIN "lin"
1247: #define MP_PARTY_SCA "sca"
1248: #define MP_PARTY_RAN "ran"
1249: #define MP_PARTY_GBF "gbf"
1250: #define MP_PARTY_GCF "gcf"
1251: #define MP_PARTY_BUB "bub"
1252: #define MP_PARTY_DEF "def"
1253: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningPartySetGlobal(MatPartitioning, const char*);
1254: #define MP_PARTY_HELPFUL_SETS "hs"
1255: #define MP_PARTY_KERNIGHAN_LIN "kl"
1256: #define MP_PARTY_NONE "no"
1257: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningPartySetLocal(MatPartitioning, const char*);
1258: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningPartySetCoarseLevel(MatPartitioning,PetscReal);
1259: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningPartySetBipart(MatPartitioning,PetscTruth);
1260: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningPartySetMatchOptimization(MatPartitioning,PetscTruth);
1262: typedef enum { MP_SCOTCH_GREEDY, MP_SCOTCH_GPS, MP_SCOTCH_GR_GPS } MPScotchGlobalType;
1263: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetArch(MatPartitioning,const char*);
1264: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetMultilevel(MatPartitioning);
1265: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetGlobal(MatPartitioning,MPScotchGlobalType);
1266: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetCoarseLevel(MatPartitioning,PetscReal);
1267: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetHostList(MatPartitioning,const char*);
1268: typedef enum { MP_SCOTCH_KERNIGHAN_LIN, MP_SCOTCH_NONE } MPScotchLocalType;
1269: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetLocal(MatPartitioning,MPScotchLocalType);
1270: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetMapping(MatPartitioning);
1271: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatPartitioningScotchSetStrategy(MatPartitioning,char*);
1273: /*
1274: If you add entries here you must also add them to finclude/petscmat.h
1275: */
1276: typedef enum { MATOP_SET_VALUES=0,
1277: MATOP_GET_ROW=1,
1278: MATOP_RESTORE_ROW=2,
1279: MATOP_MULT=3,
1280: MATOP_MULT_ADD=4,
1281: MATOP_MULT_TRANSPOSE=5,
1282: MATOP_MULT_TRANSPOSE_ADD=6,
1283: MATOP_SOLVE=7,
1284: MATOP_SOLVE_ADD=8,
1285: MATOP_SOLVE_TRANSPOSE=9,
1286: MATOP_SOLVE_TRANSPOSE_ADD=10,
1287: MATOP_LUFACTOR=11,
1288: MATOP_CHOLESKYFACTOR=12,
1289: MATOP_RELAX=13,
1290: MATOP_TRANSPOSE=14,
1291: MATOP_GETINFO=15,
1292: MATOP_EQUAL=16,
1293: MATOP_GET_DIAGONAL=17,
1294: MATOP_DIAGONAL_SCALE=18,
1295: MATOP_NORM=19,
1296: MATOP_ASSEMBLY_BEGIN=20,
1297: MATOP_ASSEMBLY_END=21,
1298: MATOP_COMPRESS=22,
1299: MATOP_SET_OPTION=23,
1300: MATOP_ZERO_ENTRIES=24,
1301: MATOP_ZERO_ROWS=25,
1302: MATOP_LUFACTOR_SYMBOLIC=26,
1303: MATOP_LUFACTOR_NUMERIC=27,
1304: MATOP_CHOLESKY_FACTOR_SYMBOLIC=28,
1305: MATOP_CHOLESKY_FACTOR_NUMERIC=29,
1306: MATOP_SETUP_PREALLOCATION=30,
1307: MATOP_ILUFACTOR_SYMBOLIC=31,
1308: MATOP_ICCFACTOR_SYMBOLIC=32,
1309: MATOP_GET_ARRAY=33,
1310: MATOP_RESTORE_ARRAY=34,
1311: MATOP_DUPLCIATE=35,
1312: MATOP_FORWARD_SOLVE=36,
1313: MATOP_BACKWARD_SOLVE=37,
1314: MATOP_ILUFACTOR=38,
1315: MATOP_ICCFACTOR=39,
1316: MATOP_AXPY=40,
1317: MATOP_GET_SUBMATRICES=41,
1318: MATOP_INCREASE_OVERLAP=42,
1319: MATOP_GET_VALUES=43,
1320: MATOP_COPY=44,
1321: MATOP_PRINT_HELP=45,
1322: MATOP_SCALE=46,
1323: MATOP_SHIFT=47,
1324: MATOP_DIAGONAL_SHIFT=48,
1325: MATOP_ILUDT_FACTOR=49,
1326: MATOP_GET_BLOCK_SIZE=50,
1327: MATOP_GET_ROW_IJ=51,
1328: MATOP_RESTORE_ROW_IJ=52,
1329: MATOP_GET_COLUMN_IJ=53,
1330: MATOP_RESTORE_COLUMN_IJ=54,
1331: MATOP_FDCOLORING_CREATE=55,
1332: MATOP_COLORING_PATCH=56,
1333: MATOP_SET_UNFACTORED=57,
1334: MATOP_PERMUTE=58,
1335: MATOP_SET_VALUES_BLOCKED=59,
1336: MATOP_GET_SUBMATRIX=60,
1337: MATOP_DESTROY=61,
1338: MATOP_VIEW=62,
1339: MATOP_GET_MAPS=63,
1340: MATOP_USE_SCALED_FORM=64,
1341: MATOP_SCALE_SYSTEM=65,
1342: MATOP_UNSCALE_SYSTEM=66,
1343: MATOP_SET_LOCAL_TO_GLOBAL_MAP=67,
1344: MATOP_SET_VALUES_LOCAL=68,
1345: MATOP_ZERO_ROWS_LOCAL=69,
1346: MATOP_GET_ROW_MAX=70,
1347: MATOP_CONVERT=71,
1348: MATOP_SET_COLORING=72,
1349: MATOP_SET_VALUES_ADIC=73,
1350: MATOP_SET_VALUES_ADIFOR=74,
1351: MATOP_FD_COLORING_APPLY=75,
1352: MATOP_SET_FROM_OPTIONS=76,
1353: MATOP_MULT_CON=77,
1354: MATOP_MULT_TRANSPOSE_CON=78,
1355: MATOP_ILU_FACTOR_SYMBOLIC_CON=79,
1356: MATOP_PERMUTE_SPARSIFY=80,
1357: MATOP_MULT_MULTIPLE=81,
1358: MATOP_SOLVE_MULTIPLE=82,
1359: MATOP_GET_INERTIA=83,
1360: MATOP_LOAD=84,
1361: MATOP_IS_SYMMETRIC=85,
1362: MATOP_IS_HERMITIAN=86,
1363: MATOP_IS_STRUCTURALLY_SYMMETRIC=87,
1364: MATOP_PB_RELAX=88,
1365: MATOP_GET_VECS=89,
1366: MATOP_MAT_MULT=90,
1367: MATOP_MAT_MULT_SYMBOLIC=91,
1368: MATOP_MAT_MULT_NUMERIC=92,
1369: MATOP_PTAP=93,
1370: MATOP_PTAP_SYMBOLIC=94,
1371: MATOP_PTAP_NUMERIC=95,
1372: MATOP_MAT_MULTTRANSPOSE=96,
1373: MATOP_MAT_MULTTRANSPOSE_SYMBOLIC=97,
1374: MATOP_MAT_MULTTRANSPOSE_NUMERIC=98,
1375: MATOP_PTAP_SYMBOLIC_SEQAIJ=99,
1376: MATOP_PTAP_NUMERIC_SEQAIJ=100,
1377: MATOP_PTAP_SYMBOLIC_MPIAIJ=101,
1378: MATOP_PTAP_NUMERIC_MPIAIJ=102
1379: } MatOperation;
1380: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatHasOperation(Mat,MatOperation,PetscTruth*);
1381: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatShellSetOperation(Mat,MatOperation,void(*)(void));
1382: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatShellGetOperation(Mat,MatOperation,void(**)(void));
1383: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatShellSetContext(Mat,void*);
1385: /*
1386: Codes for matrices stored on disk. By default they are
1387: stored in a universal format. By changing the format with
1388: PetscViewerSetFormat(viewer,PETSC_VIEWER_BINARY_NATIVE); the matrices will
1389: be stored in a way natural for the matrix, for example dense matrices
1390: would be stored as dense. Matrices stored this way may only be
1391: read into matrices of the same time.
1392: */
1393: #define MATRIX_BINARY_FORMAT_DENSE -1
1395: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIBAIJSetHashTableFactor(Mat,PetscReal);
1396: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPIRowbsGetColor(Mat,ISColoring *);
1398: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatISGetLocalMat(Mat,Mat*);
1400: /*S
1401: MatNullSpace - Object that removes a null space from a vector, i.e.
1402: orthogonalizes the vector to a subsapce
1404: Level: advanced
1406: Concepts: matrix; linear operator, null space
1408: Users manual sections:
1409: . Section 4.15 Solving Singular Systems
1411: .seealso: MatNullSpaceCreate()
1412: S*/
1413: typedef struct _p_MatNullSpace* MatNullSpace;
1415: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatNullSpaceCreate(MPI_Comm,PetscTruth,PetscInt,const Vec[],MatNullSpace*);
1416: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatNullSpaceDestroy(MatNullSpace);
1417: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatNullSpaceRemove(MatNullSpace,Vec,Vec*);
1418: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatNullSpaceAttach(Mat,MatNullSpace);
1419: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatNullSpaceTest(MatNullSpace,Mat);
1421: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatReorderingSeqSBAIJ(Mat,IS);
1422: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMPISBAIJSetHashTableFactor(Mat,PetscReal);
1423: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqSBAIJSetColumnIndices(Mat,PetscInt *);
1424: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatSeqBAIJInvertBlockDiagonal(Mat);
1426: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatCreateMAIJ(Mat,PetscInt,Mat*);
1427: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMAIJRedimension(Mat,PetscInt,Mat*);
1428: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatMAIJGetAIJ(Mat,Mat*);
1430: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatComputeExplicitOperator(Mat,Mat*);
1432: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT MatDiagonalScaleLocal(Mat,Vec);
1434: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT PetscViewerMathematicaPutMatrix(PetscViewer, PetscInt, PetscInt, PetscReal *);
1435: EXTERN PetscErrorCode PETSCMAT_DLLEXPORT PetscViewerMathematicaPutCSRMatrix(PetscViewer, PetscInt, PetscInt, PetscInt *, PetscInt *, PetscReal *);
1438: #endif