1 /* $Id: petscmat.h,v 1.228 2001/09/07 20:09:08 bsmith Exp $ */ 2 /* 3 Include file for the matrix component of PETSc 4 */ 5 #ifndef __PETSCMAT_H 6 #define __PETSCMAT_H 7 #include "petscvec.h" 8 9 /*S 10 Mat - Abstract PETSc matrix object 11 12 Level: beginner 13 14 Concepts: matrix; linear operator 15 16 .seealso: MatCreate(), MatType, MatSetType() 17 S*/ 18 typedef struct _p_Mat* Mat; 19 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() 24 25 Level: beginner 26 27 .seealso: MatSetType(), Mat 28 E*/ 29 #define MATSAME "same" 30 #define MATSEQMAIJ "seqmaij" 31 #define MATMPIMAIJ "mpimaij" 32 #define MATIS "is" 33 #define MATMPIROWBS "mpirowbs" 34 #define MATSEQDENSE "seqdense" 35 #define MATSEQAIJ "seqaij" 36 #define MATMPIAIJ "mpiaij" 37 #define MATSHELL "shell" 38 #define MATSEQBDIAG "seqbdiag" 39 #define MATMPIBDIAG "mpibdiag" 40 #define MATMPIDENSE "mpidense" 41 #define MATSEQBAIJ "seqbaij" 42 #define MATMPIBAIJ "mpibaij" 43 #define MATMPIADJ "mpiadj" 44 #define MATSEQSBAIJ "seqsbaij" 45 #define MATMPISBAIJ "mpisbaij" 46 #define MATDAAD "daad" 47 #define MATMFFD "mffd" 48 #define MATESI "esi" 49 #define MATPETSCESI "petscesi" 50 #define MATNORMAL "normal" 51 typedef char* MatType; 52 53 #define MAT_SER_SEQAIJ_BINARY "seqaij_binary" 54 #define MAT_SER_MPIAIJ_BINARY "mpiaij_binary" 55 typedef char *MatSerializeType; 56 57 /* Logging support */ 58 #define MAT_FILE_COOKIE 1211216 /* used to indicate matrices in binary files */ 59 extern int MAT_COOKIE; 60 extern int MATSNESMFCTX_COOKIE; 61 extern int MAT_FDCOLORING_COOKIE; 62 extern int MAT_PARTITIONING_COOKIE; 63 extern int MAT_NULLSPACE_COOKIE; 64 extern int MAT_Mult, MAT_MultMatrixFree, MAT_Mults, MAT_MultConstrained, MAT_MultAdd, MAT_MultTranspose; 65 extern int MAT_MultTransposeConstrained, MAT_MultTransposeAdd, MAT_Solve, MAT_Solves, MAT_SolveAdd, MAT_SolveTranspose; 66 extern int MAT_SolveTransposeAdd, MAT_Relax, MAT_ForwardSolve, MAT_BackwardSolve, MAT_LUFactor, MAT_LUFactorSymbolic; 67 extern int MAT_LUFactorNumeric, MAT_CholeskyFactor, MAT_CholeskyFactorSymbolic, MAT_CholeskyFactorNumeric, MAT_ILUFactor; 68 extern int MAT_ILUFactorSymbolic, MAT_ICCFactorSymbolic, MAT_Copy, MAT_Convert, MAT_Scale, MAT_AssemblyBegin; 69 extern int MAT_AssemblyEnd, MAT_SetValues, MAT_GetValues, MAT_GetRow, MAT_GetSubMatrices, MAT_GetColoring, MAT_GetOrdering; 70 extern int MAT_IncreaseOverlap, MAT_Partitioning, MAT_ZeroEntries, MAT_Load, MAT_View, MAT_AXPY, MAT_FDColoringCreate; 71 extern int MAT_FDColoringApply, MAT_Transpose, MAT_FDColoringFunction; 72 73 EXTERN int MatInitializePackage(char *); 74 75 EXTERN int MatCreate(MPI_Comm,int,int,int,int,Mat*); 76 EXTERN int MatSetType(Mat,MatType); 77 EXTERN int MatSetFromOptions(Mat); 78 EXTERN int MatSetUpPreallocation(Mat); 79 EXTERN int MatRegisterAll(char*); 80 EXTERN int MatRegister(char*,char*,char*,int(*)(Mat)); 81 EXTERN int MatSerializeRegister(const char [], const char [], const char [], int (*)(MPI_Comm, Mat *, PetscViewer, PetscTruth)); 82 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 83 #define MatRegisterDynamic(a,b,c,d) MatRegister(a,b,c,0) 84 #define MatSerializeRegisterDynamic(a,b,c,d) MatSerializeRegister(a,b,c,0) 85 #else 86 #define MatRegisterDynamic(a,b,c,d) MatRegister(a,b,c,d) 87 #define MatSerializeRegisterDynamic(a,b,c,d) MatSerializeRegister(a,b,c,d) 88 #endif 89 extern PetscTruth MatRegisterAllCalled; 90 extern PetscFList MatList; 91 92 EXTERN PetscFList MatSerializeList; 93 EXTERN int MatSerializeRegisterAll(const char []); 94 EXTERN int MatSerializeRegisterDestroy(void); 95 EXTERN int MatSerializeRegisterAllCalled; 96 EXTERN int MatSerialize(MPI_Comm, Mat *, PetscViewer, PetscTruth); 97 EXTERN int MatSetSerializeType(Mat, MatSerializeType); 98 99 EXTERN int MatCreateSeqDense(MPI_Comm,int,int,PetscScalar*,Mat*); 100 EXTERN int MatCreateMPIDense(MPI_Comm,int,int,int,int,PetscScalar*,Mat*); 101 EXTERN int MatCreateSeqAIJ(MPI_Comm,int,int,int,int*,Mat*); 102 EXTERN int MatCreateMPIAIJ(MPI_Comm,int,int,int,int,int,int*,int,int*,Mat*); 103 EXTERN int MatCreateMPIRowbs(MPI_Comm,int,int,int,int*,Mat*); 104 EXTERN int MatCreateSeqBDiag(MPI_Comm,int,int,int,int,int*,PetscScalar**,Mat*); 105 EXTERN int MatCreateMPIBDiag(MPI_Comm,int,int,int,int,int,int*,PetscScalar**,Mat*); 106 EXTERN int MatCreateSeqBAIJ(MPI_Comm,int,int,int,int,int*,Mat*); 107 EXTERN int MatCreateMPIBAIJ(MPI_Comm,int,int,int,int,int,int,int*,int,int*,Mat*); 108 EXTERN int MatCreateMPIAdj(MPI_Comm,int,int,int*,int*,int *,Mat*); 109 EXTERN int MatCreateSeqSBAIJ(MPI_Comm,int,int,int,int,int*,Mat*); 110 EXTERN int MatCreateMPISBAIJ(MPI_Comm,int,int,int,int,int,int,int*,int,int*,Mat*); 111 EXTERN int MatCreateShell(MPI_Comm,int,int,int,int,void *,Mat*); 112 EXTERN int MatCreateAdic(MPI_Comm,int,int,int,int,int,void (*)(void),Mat*); 113 EXTERN int MatCreateNormal(Mat,Mat*); 114 EXTERN int MatDestroy(Mat); 115 116 EXTERN int MatPrintHelp(Mat); 117 EXTERN int MatGetPetscMaps(Mat,PetscMap*,PetscMap*); 118 119 /* ------------------------------------------------------------*/ 120 EXTERN int MatSetValues(Mat,int,int*,int,int*,PetscScalar*,InsertMode); 121 EXTERN int MatSetValuesBlocked(Mat,int,int*,int,int*,PetscScalar*,InsertMode); 122 123 /*S 124 MatStencil - Data structure (C struct) for storing information about a single row or 125 column of a matrix as index on an associated grid. 126 127 Level: beginner 128 129 Concepts: matrix; linear operator 130 131 .seealso: MatSetValuesStencil(), MatSetStencil() 132 S*/ 133 typedef struct { 134 int k,j,i,c; 135 } MatStencil; 136 137 EXTERN int MatSetValuesStencil(Mat,int,MatStencil*,int,MatStencil*,PetscScalar*,InsertMode); 138 EXTERN int MatSetValuesBlockedStencil(Mat,int,MatStencil*,int,MatStencil*,PetscScalar*,InsertMode); 139 EXTERN int MatSetStencil(Mat,int,int*,int*,int); 140 141 EXTERN int MatSetColoring(Mat,ISColoring); 142 EXTERN int MatSetValuesAdic(Mat,void*); 143 EXTERN int MatSetValuesAdifor(Mat,int,void*); 144 145 /*E 146 MatAssemblyType - Indicates if the matrix is now to be used, or if you plan 147 to continue to add values to it 148 149 Level: beginner 150 151 .seealso: MatAssemblyBegin(), MatAssemblyEnd() 152 E*/ 153 typedef enum {MAT_FLUSH_ASSEMBLY=1,MAT_FINAL_ASSEMBLY=0} MatAssemblyType; 154 EXTERN int MatAssemblyBegin(Mat,MatAssemblyType); 155 EXTERN int MatAssemblyEnd(Mat,MatAssemblyType); 156 EXTERN int MatAssembled(Mat,PetscTruth*); 157 158 #define MatSetValue(v,i,j,va,mode) \ 159 0; {int _ierr,_row = i,_col = j; PetscScalar _va = va; \ 160 _ierr = MatSetValues(v,1,&_row,1,&_col,&_va,mode);CHKERRQ(_ierr); \ 161 } 162 #define MatGetValue(v,i,j,va) \ 163 0; {int _ierr,_row = i,_col = j; \ 164 _ierr = MatGetValues(v,1,&_row,1,&_col,&va);CHKERRQ(_ierr); \ 165 } 166 #define MatSetValueLocal(v,i,j,va,mode) \ 167 0; {int _ierr,_row = i,_col = j; PetscScalar _va = va; \ 168 _ierr = MatSetValuesLocal(v,1,&_row,1,&_col,&_va,mode);CHKERRQ(_ierr); \ 169 } 170 /*E 171 MatOption - Options that may be set for a matrix and its behavior or storage 172 173 Level: beginner 174 175 Any additions/changes here MUST also be made in include/finclude/petscmat.h 176 177 .seealso: MatSetOption() 178 E*/ 179 typedef enum {MAT_ROW_ORIENTED=1,MAT_COLUMN_ORIENTED=2,MAT_ROWS_SORTED=4, 180 MAT_COLUMNS_SORTED=8,MAT_NO_NEW_NONZERO_LOCATIONS=16, 181 MAT_YES_NEW_NONZERO_LOCATIONS=32,MAT_SYMMETRIC=64, 182 MAT_STRUCTURALLY_SYMMETRIC=65,MAT_NO_NEW_DIAGONALS=66, 183 MAT_YES_NEW_DIAGONALS=67,MAT_INODE_LIMIT_1=68,MAT_INODE_LIMIT_2=69, 184 MAT_INODE_LIMIT_3=70,MAT_INODE_LIMIT_4=71,MAT_INODE_LIMIT_5=72, 185 MAT_IGNORE_OFF_PROC_ENTRIES=73,MAT_ROWS_UNSORTED=74, 186 MAT_COLUMNS_UNSORTED=75,MAT_NEW_NONZERO_LOCATION_ERR=76, 187 MAT_NEW_NONZERO_ALLOCATION_ERR=77,MAT_USE_HASH_TABLE=78, 188 MAT_KEEP_ZEROED_ROWS=79,MAT_IGNORE_ZERO_ENTRIES=80,MAT_USE_INODES=81, 189 MAT_DO_NOT_USE_INODES=82} MatOption; 190 EXTERN int MatSetOption(Mat,MatOption); 191 EXTERN int MatGetType(Mat,MatType*); 192 193 EXTERN int MatGetValues(Mat,int,int*,int,int*,PetscScalar*); 194 EXTERN int MatGetRow(Mat,int,int *,int **,PetscScalar**); 195 EXTERN int MatRestoreRow(Mat,int,int *,int **,PetscScalar**); 196 EXTERN int MatGetColumn(Mat,int,int *,int **,PetscScalar**); 197 EXTERN int MatRestoreColumn(Mat,int,int *,int **,PetscScalar**); 198 EXTERN int MatGetColumnVector(Mat,Vec,int); 199 EXTERN int MatGetArray(Mat,PetscScalar **); 200 EXTERN int MatRestoreArray(Mat,PetscScalar **); 201 EXTERN int MatGetBlockSize(Mat,int *); 202 203 EXTERN int MatMult(Mat,Vec,Vec); 204 EXTERN int MatMultAdd(Mat,Vec,Vec,Vec); 205 EXTERN int MatMultTranspose(Mat,Vec,Vec); 206 EXTERN int MatMultTransposeAdd(Mat,Vec,Vec,Vec); 207 EXTERN int MatMultConstrained(Mat,Vec,Vec); 208 EXTERN int MatMultTransposeConstrained(Mat,Vec,Vec); 209 210 /*E 211 MatDuplicateOption - Indicates if a duplicated sparse matrix should have 212 its numerical values copied over or just its nonzero structure. 213 214 Level: beginner 215 216 Any additions/changes here MUST also be made in include/finclude/petscmat.h 217 218 .seealso: MatDuplicate() 219 E*/ 220 typedef enum {MAT_DO_NOT_COPY_VALUES,MAT_COPY_VALUES} MatDuplicateOption; 221 222 EXTERN int MatConvertRegister(char*,char*,char*,int (*)(Mat,MatType,Mat*)); 223 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 224 #define MatConvertRegisterDynamic(a,b,c,d) MatConvertRegister(a,b,c,0) 225 #else 226 #define MatConvertRegisterDynamic(a,b,c,d) MatConvertRegister(a,b,c,d) 227 #endif 228 EXTERN int MatConvertRegisterAll(char*); 229 EXTERN int MatConvertRegisterDestroy(void); 230 extern PetscTruth MatConvertRegisterAllCalled; 231 extern PetscFList MatConvertList; 232 EXTERN int MatConvert(Mat,MatType,Mat*); 233 EXTERN int MatDuplicate(Mat,MatDuplicateOption,Mat*); 234 235 /*E 236 MatStructure - Indicates if the matrix has the same nonzero structure 237 238 Level: beginner 239 240 Any additions/changes here MUST also be made in include/finclude/petscmat.h 241 242 .seealso: MatCopy(), SLESSetOperators(), PCSetOperators() 243 E*/ 244 typedef enum {SAME_NONZERO_PATTERN,DIFFERENT_NONZERO_PATTERN,SAME_PRECONDITIONER} MatStructure; 245 246 EXTERN int MatCopy(Mat,Mat,MatStructure); 247 EXTERN int MatView(Mat,PetscViewer); 248 249 EXTERN int MatLoadRegister(char*,char*,char*,int (*)(PetscViewer,MatType,Mat*)); 250 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 251 #define MatLoadRegisterDynamic(a,b,c,d) MatLoadRegister(a,b,c,0) 252 #else 253 #define MatLoadRegisterDynamic(a,b,c,d) MatLoadRegister(a,b,c,d) 254 #endif 255 EXTERN int MatLoadRegisterAll(char*); 256 EXTERN int MatLoadRegisterDestroy(void); 257 extern PetscTruth MatLoadRegisterAllCalled; 258 extern PetscFList MatLoadList; 259 EXTERN int MatLoad(PetscViewer,MatType,Mat*); 260 EXTERN int MatMerge(MPI_Comm,Mat,Mat*); 261 262 EXTERN int MatGetRowIJ(Mat,int,PetscTruth,int*,int **,int **,PetscTruth *); 263 EXTERN int MatRestoreRowIJ(Mat,int,PetscTruth,int *,int **,int **,PetscTruth *); 264 EXTERN int MatGetColumnIJ(Mat,int,PetscTruth,int*,int **,int **,PetscTruth *); 265 EXTERN int MatRestoreColumnIJ(Mat,int,PetscTruth,int *,int **,int **,PetscTruth *); 266 267 /*S 268 MatInfo - Context of matrix information, used with MatGetInfo() 269 270 In Fortran this is simply a double precision array of dimension MAT_INFO_SIZE 271 272 Level: intermediate 273 274 Concepts: matrix^nonzero information 275 276 .seealso: MatGetInfo(), MatInfoType 277 S*/ 278 typedef struct { 279 PetscLogDouble rows_global,columns_global; /* number of global rows and columns */ 280 PetscLogDouble rows_local,columns_local; /* number of local rows and columns */ 281 PetscLogDouble block_size; /* block size */ 282 PetscLogDouble nz_allocated,nz_used,nz_unneeded; /* number of nonzeros */ 283 PetscLogDouble memory; /* memory allocated */ 284 PetscLogDouble assemblies; /* number of matrix assemblies called */ 285 PetscLogDouble mallocs; /* number of mallocs during MatSetValues() */ 286 PetscLogDouble fill_ratio_given,fill_ratio_needed; /* fill ratio for LU/ILU */ 287 PetscLogDouble factor_mallocs; /* number of mallocs during factorization */ 288 } MatInfo; 289 290 /*E 291 MatInfoType - Indicates if you want information about the local part of the matrix, 292 the entire parallel matrix or the maximum over all the local parts. 293 294 Level: beginner 295 296 Any additions/changes here MUST also be made in include/finclude/petscmat.h 297 298 .seealso: MatGetInfo(), MatInfo 299 E*/ 300 typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType; 301 EXTERN int MatGetInfo(Mat,MatInfoType,MatInfo*); 302 EXTERN int MatValid(Mat,PetscTruth*); 303 EXTERN int MatGetDiagonal(Mat,Vec); 304 EXTERN int MatGetRowMax(Mat,Vec); 305 EXTERN int MatTranspose(Mat,Mat*); 306 EXTERN int MatPermute(Mat,IS,IS,Mat *); 307 EXTERN int MatPermuteSparsify(Mat,int,PetscReal,PetscReal,IS,IS,Mat *); 308 EXTERN int MatDiagonalScale(Mat,Vec,Vec); 309 EXTERN int MatDiagonalSet(Mat,Vec,InsertMode); 310 EXTERN int MatEqual(Mat,Mat,PetscTruth*); 311 312 EXTERN int MatNorm(Mat,NormType,PetscReal *); 313 EXTERN int MatZeroEntries(Mat); 314 EXTERN int MatZeroRows(Mat,IS,PetscScalar*); 315 EXTERN int MatZeroColumns(Mat,IS,PetscScalar*); 316 317 EXTERN int MatUseScaledForm(Mat,PetscTruth); 318 EXTERN int MatScaleSystem(Mat,Vec,Vec); 319 EXTERN int MatUnScaleSystem(Mat,Vec,Vec); 320 321 EXTERN int MatGetSize(Mat,int*,int*); 322 EXTERN int MatGetLocalSize(Mat,int*,int*); 323 EXTERN int MatGetOwnershipRange(Mat,int*,int*); 324 325 /*E 326 MatReuse - Indicates if matrices obtained from a previous call to MatGetSubMatrices() 327 or MatGetSubMatrix() are to be reused to store the new matrix values. 328 329 Level: beginner 330 331 Any additions/changes here MUST also be made in include/finclude/petscmat.h 332 333 .seealso: MatGetSubMatrices(), MatGetSubMatrix(), MatDestroyMatrices() 334 E*/ 335 typedef enum {MAT_INITIAL_MATRIX,MAT_REUSE_MATRIX} MatReuse; 336 EXTERN int MatGetSubMatrices(Mat,int,IS *,IS *,MatReuse,Mat **); 337 EXTERN int MatDestroyMatrices(int,Mat **); 338 EXTERN int MatGetSubMatrix(Mat,IS,IS,int,MatReuse,Mat *); 339 340 EXTERN int MatIncreaseOverlap(Mat,int,IS *,int); 341 342 EXTERN int MatAXPY(PetscScalar *,Mat,Mat,MatStructure); 343 EXTERN int MatAYPX(PetscScalar *,Mat,Mat); 344 EXTERN int MatCompress(Mat); 345 346 EXTERN int MatScale(PetscScalar *,Mat); 347 EXTERN int MatShift(PetscScalar *,Mat); 348 349 EXTERN int MatSetLocalToGlobalMapping(Mat,ISLocalToGlobalMapping); 350 EXTERN int MatSetLocalToGlobalMappingBlock(Mat,ISLocalToGlobalMapping); 351 EXTERN int MatZeroRowsLocal(Mat,IS,PetscScalar*); 352 EXTERN int MatSetValuesLocal(Mat,int,int*,int,int*,PetscScalar*,InsertMode); 353 EXTERN int MatSetValuesBlockedLocal(Mat,int,int*,int,int*,PetscScalar*,InsertMode); 354 355 EXTERN int MatSetStashInitialSize(Mat,int,int); 356 357 EXTERN int MatInterpolateAdd(Mat,Vec,Vec,Vec); 358 EXTERN int MatInterpolate(Mat,Vec,Vec); 359 EXTERN int MatRestrict(Mat,Vec,Vec); 360 361 /* 362 These three (or four) macros MUST be used together. The third one closes the open { of the first one 363 */ 364 #define MatPreallocateInitialize(comm,nrows,ncols,dnz,onz) 0; \ 365 { \ 366 int _4_ierr,__tmp = (nrows),__ctmp = (ncols),__rstart,__start,__end; \ 367 _4_ierr = PetscMalloc(2*__tmp*sizeof(int),&dnz);CHKERRQ(_4_ierr);onz = dnz + __tmp;\ 368 _4_ierr = PetscMemzero(dnz,2*__tmp*sizeof(int));CHKERRQ(_4_ierr);\ 369 _4_ierr = MPI_Scan(&__ctmp,&__end,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __start = __end - __ctmp;\ 370 _4_ierr = MPI_Scan(&__tmp,&__rstart,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __tmp; 371 372 #define MatPreallocateSymmetricInitialize(comm,nrows,ncols,dnz,onz) 0; \ 373 { \ 374 int _4_ierr,__tmp = (nrows),__ctmp = (ncols),__rstart,__end; \ 375 _4_ierr = PetscMalloc(2*__tmp*sizeof(int),&dnz);CHKERRQ(_4_ierr);onz = dnz + __tmp;\ 376 _4_ierr = PetscMemzero(dnz,2*__tmp*sizeof(int));CHKERRQ(_4_ierr);\ 377 _4_ierr = MPI_Scan(&__ctmp,&__end,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr);\ 378 _4_ierr = MPI_Scan(&__tmp,&__rstart,1,MPI_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __tmp; 379 380 #define MatPreallocateSetLocal(map,nrows,rows,ncols,cols,dnz,onz) 0;\ 381 {\ 382 int __l;\ 383 _4_ierr = ISLocalToGlobalMappingApply(map,nrows,rows,rows);CHKERRQ(_4_ierr);\ 384 _4_ierr = ISLocalToGlobalMappingApply(map,ncols,cols,cols);CHKERRQ(_4_ierr);\ 385 for (__l=0;__l<nrows;__l++) {\ 386 _4_ierr = MatPreallocateSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\ 387 }\ 388 } 389 390 #define MatPreallocateSymmetricSetLocal(map,nrows,rows,ncols,cols,dnz,onz) 0;\ 391 {\ 392 int __l;\ 393 _4_ierr = ISLocalToGlobalMappingApply(map,nrows,rows,rows);CHKERRQ(_4_ierr);\ 394 _4_ierr = ISLocalToGlobalMappingApply(map,ncols,cols,cols);CHKERRQ(_4_ierr);\ 395 for (__l=0;__l<nrows;__l++) {\ 396 _4_ierr = MatPreallocateSymmetricSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\ 397 }\ 398 } 399 400 #define MatPreallocateSet(row,nc,cols,dnz,onz) 0;\ 401 { int __i; \ 402 for (__i=0; __i<nc; __i++) {\ 403 if (cols[__i] < __start || cols[__i] >= __end) onz[row - __rstart]++; \ 404 }\ 405 dnz[row - __rstart] = nc - onz[row - __rstart];\ 406 } 407 408 #define MatPreallocateSymmetricSet(row,nc,cols,dnz,onz) 0;\ 409 { int __i; \ 410 for (__i=0; __i<nc; __i++) {\ 411 if (cols[__i] >= __end) onz[row - __rstart]++; \ 412 else if (cols[__i] >= row) dnz[row - __rstart]++;\ 413 }\ 414 } 415 416 #define MatPreallocateFinalize(dnz,onz) 0;_4_ierr = PetscFree(dnz);CHKERRQ(_4_ierr);} 417 418 /* Routines unique to particular data structures */ 419 EXTERN int MatShellGetContext(Mat,void **); 420 421 EXTERN int MatBDiagGetData(Mat,int*,int*,int**,int**,PetscScalar***); 422 EXTERN int MatSeqAIJSetColumnIndices(Mat,int *); 423 EXTERN int MatSeqBAIJSetColumnIndices(Mat,int *); 424 EXTERN int MatCreateSeqAIJWithArrays(MPI_Comm,int,int,int*,int*,PetscScalar *,Mat*); 425 426 EXTERN int MatSeqBAIJSetPreallocation(Mat,int,int,int*); 427 EXTERN int MatSeqSBAIJSetPreallocation(Mat,int,int,int*); 428 EXTERN int MatSeqAIJSetPreallocation(Mat,int,int*); 429 EXTERN int MatSeqDensePreallocation(Mat,PetscScalar*); 430 EXTERN int MatSeqBDiagSetPreallocation(Mat,int,int,int*,PetscScalar**); 431 EXTERN int MatSeqDenseSetPreallocation(Mat,PetscScalar*); 432 433 EXTERN int MatMPIBAIJSetPreallocation(Mat,int,int,int*,int,int*); 434 EXTERN int MatMPISBAIJSetPreallocation(Mat,int,int,int*,int,int*); 435 EXTERN int MatMPIAIJSetPreallocation(Mat,int,int*,int,int*); 436 EXTERN int MatMPIDensePreallocation(Mat,PetscScalar*); 437 EXTERN int MatMPIBDiagSetPreallocation(Mat,int,int,int*,PetscScalar**); 438 EXTERN int MatMPIAdjSetPreallocation(Mat,int*,int*,int*); 439 EXTERN int MatMPIDenseSetPreallocation(Mat,PetscScalar*); 440 EXTERN int MatMPIRowbsSetPreallocation(Mat,int,int*); 441 EXTERN int MatMPIAIJGetSeqAIJ(Mat,Mat*,Mat*,int**); 442 EXTERN int MatMPIBAIJGetSeqBAIJ(Mat,Mat*,Mat*,int**); 443 EXTERN int MatAdicSetLocalFunction(Mat,void (*)(void)); 444 445 EXTERN int MatStoreValues(Mat); 446 EXTERN int MatRetrieveValues(Mat); 447 448 EXTERN int MatDAADSetCtx(Mat,void*); 449 450 /* 451 These routines are not usually accessed directly, rather solving is 452 done through the SLES, KSP and PC interfaces. 453 */ 454 455 /*E 456 MatOrderingType - String with the name of a PETSc matrix ordering or the creation function 457 with an optional dynamic library name, for example 458 http://www.mcs.anl.gov/petsc/lib.a:orderingcreate() 459 460 Level: beginner 461 462 .seealso: MatGetOrdering() 463 E*/ 464 typedef char* MatOrderingType; 465 #define MATORDERING_NATURAL "natural" 466 #define MATORDERING_ND "nd" 467 #define MATORDERING_1WD "1wd" 468 #define MATORDERING_RCM "rcm" 469 #define MATORDERING_QMD "qmd" 470 #define MATORDERING_ROWLENGTH "rowlength" 471 #define MATORDERING_DSC_ND "dsc_nd" 472 #define MATORDERING_DSC_MMD "dsc_mmd" 473 #define MATORDERING_DSC_MDF "dsc_mdf" 474 #define MATORDERING_CONSTRAINED "constrained" 475 #define MATORDERING_IDENTITY "identity" 476 #define MATORDERING_REVERSE "reverse" 477 478 EXTERN int MatGetOrdering(Mat,MatOrderingType,IS*,IS*); 479 EXTERN int MatOrderingRegister(char*,char*,char*,int(*)(Mat,MatOrderingType,IS*,IS*)); 480 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 481 #define MatOrderingRegisterDynamic(a,b,c,d) MatOrderingRegister(a,b,c,0) 482 #else 483 #define MatOrderingRegisterDynamic(a,b,c,d) MatOrderingRegister(a,b,c,d) 484 #endif 485 EXTERN int MatOrderingRegisterDestroy(void); 486 EXTERN int MatOrderingRegisterAll(char*); 487 extern PetscTruth MatOrderingRegisterAllCalled; 488 extern PetscFList MatOrderingList; 489 490 EXTERN int MatReorderForNonzeroDiagonal(Mat,PetscReal,IS,IS); 491 492 EXTERN int MatCholeskyFactor(Mat,IS,PetscReal); 493 EXTERN int MatCholeskyFactorSymbolic(Mat,IS,PetscReal,Mat*); 494 EXTERN int MatCholeskyFactorNumeric(Mat,Mat*); 495 496 /*S 497 MatILUInfo - Data based into the matrix ILU factorization routines 498 499 In Fortran these are simply double precision arrays of size MAT_ILUINFO_SIZE 500 501 Notes: These are not usually directly used by users, instead use the PC type of ILU 502 All entries are double precision. 503 504 Level: developer 505 506 .seealso: MatILUFactorSymbolic(), MatILUFactor(), MatLUInfo, MatCholeskyInfo 507 508 S*/ 509 typedef struct { 510 PetscReal levels; /* ILU(levels) */ 511 PetscReal fill; /* expected fill; nonzeros in factored matrix/nonzeros in original matrix*/ 512 PetscReal diagonal_fill; /* force diagonal to fill in if initially not filled */ 513 PetscReal dt; /* drop tolerance */ 514 PetscReal dtcol; /* tolerance for pivoting */ 515 PetscReal dtcount; /* maximum nonzeros to be allowed per row */ 516 PetscReal damping; /* scaling of identity added to matrix to prevent zero pivots */ 517 PetscReal damp; /* if is 1.0 and factorization fails, damp until successful */ 518 PetscReal zeropivot; /* pivot is called zero if less than this */ 519 PetscReal pivotinblocks; /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0 520 factorization may be faster if do not pivot */ 521 } MatILUInfo; 522 523 /*S 524 MatLUInfo - Data based into the matrix LU factorization routines 525 526 In Fortran these are simply double precision arrays of size MAT_LUINFO_SIZE 527 528 Notes: These are not usually directly used by users, instead use the PC type of LU 529 All entries are double precision. 530 531 Level: developer 532 533 .seealso: MatLUFactorSymbolic(), MatILUInfo, MatCholeskyInfo 534 535 S*/ 536 typedef struct { 537 PetscReal fill; /* expected fill; nonzeros in factored matrix/nonzeros in original matrix */ 538 PetscReal dtcol; /* tolerance for pivoting; pivot if off_diagonal*dtcol > diagonal */ 539 PetscReal damping; /* scaling of identity added to matrix to prevent zero pivots */ 540 PetscReal zeropivot; /* pivot is called zero if less than this */ 541 PetscReal pivotinblocks; /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0 542 factorization may be faster if do not pivot */ 543 } MatLUInfo; 544 545 /*S 546 MatICCInfo - Data based into the matrix ICC factorization routines 547 548 In Fortran these are simply double precision arrays of size MAT_ICCINFO_SIZE 549 550 Notes: These are not usually directly used by users, instead use the PC type of ICC 551 All entries are double precision. 552 553 Level: developer 554 555 .seealso: MatICCFactorSymbolic(), MatICCFactor(), MatILUInfo, MatLUInfo, MatCholeskyInfo 556 557 S*/ 558 typedef struct { 559 int levels; /* ICC(levels) */ 560 PetscReal fill; /* expected fill; nonzeros in factored matrix/nonzeros in original matrix*/ 561 PetscReal dtcol; /* tolerance for pivoting */ 562 PetscReal damping; /* scaling of identity added to matrix to prevent zero pivots */ 563 PetscTruth damp; /* if is PETSC_TRUE, apply damping until successful */ 564 PetscReal zeropivot; /* pivot is called zero if less than this */ 565 } MatICCInfo; 566 567 /*S 568 MatCholeskyInfo - Data based into the matrix Cholesky factorization routines 569 570 In Fortran these are simply double precision arrays of size MAT_CHOLESKYINFO_SIZE 571 572 Notes: These are not usually directly used by users, instead use the PC type of Cholesky 573 All entries are double precision. 574 575 Level: developer 576 577 .seealso: MatCholeskyFactorSymbolic(), MatLUInfo, MatILUInfo 578 579 S*/ 580 typedef struct { 581 PetscReal fill; /* expected fill; nonzeros in factored matrix/nonzeros in original matrix */ 582 PetscReal damping; /* scaling of identity added to matrix to prevent zero pivots */ 583 PetscReal pivotinblocks; /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0 584 factorization may be faster if do not pivot */ 585 } MatCholeskyInfo; 586 587 EXTERN int MatLUFactor(Mat,IS,IS,MatLUInfo*); 588 EXTERN int MatILUFactor(Mat,IS,IS,MatILUInfo*); 589 EXTERN int MatLUFactorSymbolic(Mat,IS,IS,MatLUInfo*,Mat*); 590 EXTERN int MatILUFactorSymbolic(Mat,IS,IS,MatILUInfo*,Mat*); 591 EXTERN int MatICCFactorSymbolic(Mat,IS,MatICCInfo*,Mat*); 592 EXTERN int MatICCFactor(Mat,IS,MatICCInfo*); 593 EXTERN int MatLUFactorNumeric(Mat,Mat*); 594 EXTERN int MatILUDTFactor(Mat,MatILUInfo*,IS,IS,Mat *); 595 EXTERN int MatGetInertia(Mat,int*,int*,int*); 596 EXTERN int MatSolve(Mat,Vec,Vec); 597 EXTERN int MatForwardSolve(Mat,Vec,Vec); 598 EXTERN int MatBackwardSolve(Mat,Vec,Vec); 599 EXTERN int MatSolveAdd(Mat,Vec,Vec,Vec); 600 EXTERN int MatSolveTranspose(Mat,Vec,Vec); 601 EXTERN int MatSolveTransposeAdd(Mat,Vec,Vec,Vec); 602 EXTERN int MatSolves(Mat,Vecs,Vecs); 603 604 EXTERN int MatSetUnfactored(Mat); 605 606 /* MatSORType may be bitwise ORd together, so do not change the numbers */ 607 /*E 608 MatSORType - What type of (S)SOR to perform 609 610 Level: beginner 611 612 May be bitwise ORd together 613 614 Any additions/changes here MUST also be made in include/finclude/petscmat.h 615 616 .seealso: MatRelax() 617 E*/ 618 typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3, 619 SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8, 620 SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16, 621 SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128} MatSORType; 622 EXTERN int MatRelax(Mat,Vec,PetscReal,MatSORType,PetscReal,int,int,Vec); 623 624 /* 625 These routines are for efficiently computing Jacobians via finite differences. 626 */ 627 628 /*E 629 MatColoringType - String with the name of a PETSc matrix coloring or the creation function 630 with an optional dynamic library name, for example 631 http://www.mcs.anl.gov/petsc/lib.a:coloringcreate() 632 633 Level: beginner 634 635 .seealso: MatGetColoring() 636 E*/ 637 typedef char* MatColoringType; 638 #define MATCOLORING_NATURAL "natural" 639 #define MATCOLORING_SL "sl" 640 #define MATCOLORING_LF "lf" 641 #define MATCOLORING_ID "id" 642 643 EXTERN int MatGetColoring(Mat,MatColoringType,ISColoring*); 644 EXTERN int MatColoringRegister(char*,char*,char*,int(*)(Mat,MatColoringType,ISColoring *)); 645 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 646 #define MatColoringRegisterDynamic(a,b,c,d) MatColoringRegister(a,b,c,0) 647 #else 648 #define MatColoringRegisterDynamic(a,b,c,d) MatColoringRegister(a,b,c,d) 649 #endif 650 EXTERN int MatColoringRegisterAll(char *); 651 extern PetscTruth MatColoringRegisterAllCalled; 652 EXTERN int MatColoringRegisterDestroy(void); 653 EXTERN int MatColoringPatch(Mat,int,int,ISColoringValue *,ISColoring*); 654 655 /*S 656 MatFDColoring - Object for computing a sparse Jacobian via finite differences 657 and coloring 658 659 Level: beginner 660 661 Concepts: coloring, sparse Jacobian, finite differences 662 663 .seealso: MatFDColoringCreate() 664 S*/ 665 typedef struct _p_MatFDColoring *MatFDColoring; 666 667 EXTERN int MatFDColoringCreate(Mat,ISColoring,MatFDColoring *); 668 EXTERN int MatFDColoringDestroy(MatFDColoring); 669 EXTERN int MatFDColoringView(MatFDColoring,PetscViewer); 670 EXTERN int MatFDColoringSetFunction(MatFDColoring,int (*)(void),void*); 671 EXTERN int MatFDColoringSetParameters(MatFDColoring,PetscReal,PetscReal); 672 EXTERN int MatFDColoringSetFrequency(MatFDColoring,int); 673 EXTERN int MatFDColoringGetFrequency(MatFDColoring,int*); 674 EXTERN int MatFDColoringSetFromOptions(MatFDColoring); 675 EXTERN int MatFDColoringApply(Mat,MatFDColoring,Vec,MatStructure*,void *); 676 EXTERN int MatFDColoringApplyTS(Mat,MatFDColoring,PetscReal,Vec,MatStructure*,void *); 677 EXTERN int MatFDColoringSetRecompute(MatFDColoring); 678 EXTERN int MatFDColoringSetF(MatFDColoring,Vec); 679 EXTERN int MatFDColoringGetPerturbedColumns(MatFDColoring,int*,int**); 680 /* 681 These routines are for partitioning matrices: currently used only 682 for adjacency matrix, MatCreateMPIAdj(). 683 */ 684 685 /*S 686 MatPartitioning - Object for managing the partitioning of a matrix or graph 687 688 Level: beginner 689 690 Concepts: partitioning 691 692 .seealso: MatParitioningCreate(), MatPartitioningType 693 S*/ 694 typedef struct _p_MatPartitioning *MatPartitioning; 695 696 /*E 697 MatPartitioningType - String with the name of a PETSc matrix partitioing or the creation function 698 with an optional dynamic library name, for example 699 http://www.mcs.anl.gov/petsc/lib.a:partitioningcreate() 700 701 Level: beginner 702 703 .seealso: MatPartitioingCreate(), MatPartitioning 704 E*/ 705 typedef char* MatPartitioningType; 706 #define MAT_PARTITIONING_CURRENT "current" 707 #define MAT_PARTITIONING_PARMETIS "parmetis" 708 709 EXTERN int MatPartitioningCreate(MPI_Comm,MatPartitioning*); 710 EXTERN int MatPartitioningSetType(MatPartitioning,MatPartitioningType); 711 EXTERN int MatPartitioningSetAdjacency(MatPartitioning,Mat); 712 EXTERN int MatPartitioningSetVertexWeights(MatPartitioning,int*); 713 EXTERN int MatPartitioningApply(MatPartitioning,IS*); 714 EXTERN int MatPartitioningDestroy(MatPartitioning); 715 716 EXTERN int MatPartitioningRegister(char*,char*,char*,int(*)(MatPartitioning)); 717 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 718 #define MatPartitioningRegisterDynamic(a,b,c,d) MatPartitioningRegister(a,b,c,0) 719 #else 720 #define MatPartitioningRegisterDynamic(a,b,c,d) MatPartitioningRegister(a,b,c,d) 721 #endif 722 723 EXTERN int MatPartitioningRegisterAll(char *); 724 extern PetscTruth MatPartitioningRegisterAllCalled; 725 EXTERN int MatPartitioningRegisterDestroy(void); 726 727 EXTERN int MatPartitioningView(MatPartitioning,PetscViewer); 728 EXTERN int MatPartitioningSetFromOptions(MatPartitioning); 729 EXTERN int MatPartitioningGetType(MatPartitioning,MatPartitioningType*); 730 731 EXTERN int MatPartitioningParmetisSetCoarseSequential(MatPartitioning); 732 733 /* 734 If you add entries here you must also add them to finclude/petscmat.h 735 */ 736 typedef enum { MATOP_SET_VALUES=0, 737 MATOP_GET_ROW=1, 738 MATOP_RESTORE_ROW=2, 739 MATOP_MULT=3, 740 MATOP_MULT_ADD=4, 741 MATOP_MULT_TRANSPOSE=5, 742 MATOP_MULT_TRANSPOSE_ADD=6, 743 MATOP_SOLVE=7, 744 MATOP_SOLVE_ADD=8, 745 MATOP_SOLVE_TRANSPOSE=9, 746 MATOP_SOLVE_TRANSPOSE_ADD=10, 747 MATOP_LUFACTOR=11, 748 MATOP_CHOLESKYFACTOR=12, 749 MATOP_RELAX=13, 750 MATOP_TRANSPOSE=14, 751 MATOP_GETINFO=15, 752 MATOP_EQUAL=16, 753 MATOP_GET_DIAGONAL=17, 754 MATOP_DIAGONAL_SCALE=18, 755 MATOP_NORM=19, 756 MATOP_ASSEMBLY_BEGIN=20, 757 MATOP_ASSEMBLY_END=21, 758 MATOP_COMPRESS=22, 759 MATOP_SET_OPTION=23, 760 MATOP_ZERO_ENTRIES=24, 761 MATOP_ZERO_ROWS=25, 762 MATOP_LUFACTOR_SYMBOLIC=26, 763 MATOP_LUFACTOR_NUMERIC=27, 764 MATOP_CHOLESKY_FACTOR_SYMBOLIC=28, 765 MATOP_CHOLESKY_FACTOR_NUMERIC=29, 766 MATOP_SETUP_PREALLOCATION=30, 767 MATOP_ILUFACTOR_SYMBOLIC=31, 768 MATOP_ICCFACTOR_SYMBOLIC=32, 769 MATOP_GET_ARRAY=33, 770 MATOP_RESTORE_ARRAY=34, 771 MATOP_DUPLCIATE=35, 772 MATOP_FORWARD_SOLVE=36, 773 MATOP_BACKWARD_SOLVE=37, 774 MATOP_ILUFACTOR=38, 775 MATOP_ICCFACTOR=39, 776 MATOP_AXPY=40, 777 MATOP_GET_SUBMATRICES=41, 778 MATOP_INCREASE_OVERLAP=42, 779 MATOP_GET_VALUES=43, 780 MATOP_COPY=44, 781 MATOP_PRINT_HELP=45, 782 MATOP_SCALE=46, 783 MATOP_SHIFT=47, 784 MATOP_DIAGONAL_SHIFT=48, 785 MATOP_ILUDT_FACTOR=49, 786 MATOP_GET_BLOCK_SIZE=50, 787 MATOP_GET_ROW_IJ=51, 788 MATOP_RESTORE_ROW_IJ=52, 789 MATOP_GET_COLUMN_IJ=53, 790 MATOP_RESTORE_COLUMN_IJ=54, 791 MATOP_FDCOLORING_CREATE=55, 792 MATOP_COLORING_PATCH=56, 793 MATOP_SET_UNFACTORED=57, 794 MATOP_PERMUTE=58, 795 MATOP_SET_VALUES_BLOCKED=59, 796 MATOP_GET_SUBMATRIX=60, 797 MATOP_DESTROY=61, 798 MATOP_VIEW=62, 799 MATOP_GET_MAPS=63, 800 MATOP_USE_SCALED_FORM=64, 801 MATOP_SCALE_SYSTEM=65, 802 MATOP_UNSCALE_SYSTEM=66, 803 MATOP_SET_LOCAL_TO_GLOBAL_MAPPING=67, 804 MATOP_SET_VALUES_LOCAL=68, 805 MATOP_ZERO_ROWS_LOCAL=69, 806 MATOP_GET_ROW_MAX=70, 807 MATOP_CONVERT=71, 808 MATOP_SET_COLORING=72, 809 MATOP_SET_VALUES_ADIC=73, 810 MATOP_SET_VALUES_ADIFOR=74, 811 MATOP_FD_COLORING_APPLY=75, 812 MATOP_SET_FROM_OPTIONS=76, 813 MATOP_MULT_CONSTRAINED=77, 814 MATOP_MULT_TRANSPOSE_CONSTRAINED=78, 815 MATOP_ILU_FACTOR_SYMBOLIC_CONSTRAINED=79, 816 MATOP_PERMUTE_SPARSIFY=80, 817 MATOP_MULT_MULTIPLE=81, 818 MATOP_SOLVE_MULTIPLE=82 819 } MatOperation; 820 EXTERN int MatHasOperation(Mat,MatOperation,PetscTruth*); 821 EXTERN int MatShellSetOperation(Mat,MatOperation,void(*)(void)); 822 EXTERN int MatShellGetOperation(Mat,MatOperation,void(**)(void)); 823 EXTERN int MatShellSetContext(Mat,void*); 824 825 /* 826 Codes for matrices stored on disk. By default they are 827 stored in a universal format. By changing the format with 828 PetscViewerSetFormat(viewer,PETSC_VIEWER_BINARY_NATIVE); the matrices will 829 be stored in a way natural for the matrix, for example dense matrices 830 would be stored as dense. Matrices stored this way may only be 831 read into matrices of the same time. 832 */ 833 #define MATRIX_BINARY_FORMAT_DENSE -1 834 835 /* 836 New matrix classes not yet distributed 837 */ 838 /* 839 MatAIJIndices is a data structure for storing the nonzero location information 840 for sparse matrices. Several matrices with identical nonzero structure can share 841 the same MatAIJIndices. 842 */ 843 typedef struct _p_MatAIJIndices* MatAIJIndices; 844 845 EXTERN int MatCreateAIJIndices(int,int,int*,int*,PetscTruth,MatAIJIndices*); 846 EXTERN int MatCreateAIJIndicesEmpty(int,int,int*,PetscTruth,MatAIJIndices*); 847 EXTERN int MatAttachAIJIndices(MatAIJIndices,MatAIJIndices*); 848 EXTERN int MatDestroyAIJIndices(MatAIJIndices); 849 EXTERN int MatCopyAIJIndices(MatAIJIndices,MatAIJIndices*); 850 EXTERN int MatValidateAIJIndices(int,MatAIJIndices); 851 EXTERN int MatShiftAIJIndices(MatAIJIndices); 852 EXTERN int MatShrinkAIJIndices(MatAIJIndices); 853 EXTERN int MatTransposeAIJIndices(MatAIJIndices,MatAIJIndices*); 854 855 EXTERN int MatCreateSeqCSN(MPI_Comm,int,int,int*,int,Mat*); 856 EXTERN int MatCreateSeqCSN_Single(MPI_Comm,int,int,int*,int,Mat*); 857 EXTERN int MatCreateSeqCSNWithPrecision(MPI_Comm,int,int,int*,int,PetscScalarPrecision,Mat*); 858 859 EXTERN int MatCreateSeqCSNIndices(MPI_Comm,MatAIJIndices,int,Mat *); 860 EXTERN int MatCreateSeqCSNIndices_Single(MPI_Comm,MatAIJIndices,int,Mat *); 861 EXTERN int MatCreateSeqCSNIndicesWithPrecision(MPI_Comm,MatAIJIndices,int,PetscScalarPrecision,Mat *); 862 863 EXTERN int MatMPIBAIJSetHashTableFactor(Mat,PetscReal); 864 EXTERN int MatSeqAIJGetInodeSizes(Mat,int *,int *[],int *); 865 EXTERN int MatMPIRowbsGetColor(Mat,ISColoring *); 866 867 /*S 868 MatNullSpace - Object that removes a null space from a vector, i.e. 869 orthogonalizes the vector to a subsapce 870 871 Level: advanced 872 873 Concepts: matrix; linear operator, null space 874 875 Users manual sections: 876 . sec_singular 877 878 .seealso: MatNullSpaceCreate() 879 S*/ 880 typedef struct _p_MatNullSpace* MatNullSpace; 881 882 EXTERN int MatNullSpaceCreate(MPI_Comm,int,int,Vec *,MatNullSpace*); 883 EXTERN int MatNullSpaceDestroy(MatNullSpace); 884 EXTERN int MatNullSpaceRemove(MatNullSpace,Vec,Vec*); 885 EXTERN int MatNullSpaceAttach(Mat,MatNullSpace); 886 EXTERN int MatNullSpaceTest(MatNullSpace,Mat); 887 888 EXTERN int MatReorderingSeqSBAIJ(Mat A,IS isp); 889 EXTERN int MatMPISBAIJSetHashTableFactor(Mat,PetscReal); 890 EXTERN int MatSeqSBAIJSetColumnIndices(Mat,int *); 891 892 893 EXTERN int MatCreateMAIJ(Mat,int,Mat*); 894 EXTERN int MatMAIJRedimension(Mat,int,Mat*); 895 EXTERN int MatMAIJGetAIJ(Mat,Mat*); 896 897 EXTERN int MatMPIAdjSetValues(Mat,int*,int*,int*); 898 899 EXTERN int MatComputeExplicitOperator(Mat,Mat*); 900 901 EXTERN int MatESISetType(Mat,char*); 902 EXTERN int MatESISetFromOptions(Mat); 903 904 EXTERN int MatDiagonalScaleLocal(Mat,Vec); 905 906 EXTERN int PetscViewerMathematicaPutMatrix(PetscViewer, int, int, PetscReal *); 907 EXTERN int PetscViewerMathematicaPutCSRMatrix(PetscViewer, int, int, int *, int *, PetscReal *); 908 909 EXTERN int MatUseSuperLU_DIST_MPIAIJ(Mat); 910 EXTERN int MatUseSpooles_SeqAIJ(Mat); 911 EXTERN int MatUseUMFPACK_SeqAIJ(Mat); 912 EXTERN int MatUseSuperLU_SeqAIJ(Mat); 913 EXTERN int MatUseEssl_SeqAIJ(Mat); 914 EXTERN int MatUseLUSOL_SeqAIJ(Mat); 915 EXTERN int MatUseMatlab_SeqAIJ(Mat); 916 EXTERN int MatUseDXML_SeqAIJ(Mat); 917 EXTERN int MatUseSuperLU_DIST_MPIAIJ(Mat); 918 EXTERN int MatUseSpooles_MPIAIJ(Mat); 919 EXTERN int MatUseSpooles_SeqSBAIJ(Mat); 920 extern int MatUseSpooles_MPISBAIJ(Mat); 921 922 #endif 923 924 925 926