1 /* $Id: mat.h,v 1.179 1999/05/12 03:35:01 bsmith Exp balay $ */ 2 /* 3 Include file for the matrix component of PETSc 4 */ 5 #ifndef __MAT_H 6 #define __MAT_H 7 #include "vec.h" 8 9 #define MAT_COOKIE PETSC_COOKIE+5 10 11 typedef struct _p_Mat* Mat; 12 13 #define MAX_MATRIX_TYPES 14 14 /* 15 The default matrix data storage formats and routines to create them. 16 17 MATLASTTYPE is "end-of-list" marker that can be used to check that 18 MAX_MATRIX_TYPES is large enough. The rule is 19 MAX_MATRIX_TYPES >= MATLASTTYPE . 20 21 To do: add a test program that checks the consistency of these values. 22 */ 23 typedef enum { MATSAME=-1, MATSEQDENSE, MATSEQAIJ, MATMPIAIJ, MATSHELL, 24 MATMPIROWBS, MATSEQBDIAG, MATMPIBDIAG, MATMPIDENSE, MATSEQBAIJ, 25 MATMPIBAIJ, MATMPICSN, MATSEQCSN, MATSEQADJ, MATMPIADJ, 26 MATLASTTYPE } MatType; 27 28 extern int MatCreate(MPI_Comm,int,int,int,int,Mat*); 29 extern int MatCreateSeqDense(MPI_Comm,int,int,Scalar*,Mat*); 30 extern int MatCreateMPIDense(MPI_Comm,int,int,int,int,Scalar*,Mat*); 31 extern int MatCreateSeqAIJ(MPI_Comm,int,int,int,int*,Mat*); 32 extern int MatCreateMPIAIJ(MPI_Comm,int,int,int,int,int,int*,int,int*,Mat*); 33 extern int MatCreateMPIRowbs(MPI_Comm,int,int,int,int*,void*,Mat*); 34 extern int MatCreateSeqBDiag(MPI_Comm,int,int,int,int,int*,Scalar**,Mat*); 35 extern int MatCreateMPIBDiag(MPI_Comm,int,int,int,int,int,int*,Scalar**,Mat*); 36 extern int MatCreateSeqBAIJ(MPI_Comm,int,int,int,int,int*,Mat*); 37 extern int MatCreateMPIBAIJ(MPI_Comm,int,int,int,int,int,int,int*,int,int*,Mat*); 38 extern int MatCreateSeqAdj(MPI_Comm,int,int,int*,int*,Mat *); 39 extern int MatCreateMPIAdj(MPI_Comm,int,int,int*,int*,Mat*); 40 41 extern int MatDestroy(Mat); 42 43 extern int MatCreateShell(MPI_Comm,int,int,int,int,void *,Mat*); 44 extern int MatShellGetContext(Mat,void **); 45 46 extern int MatPrintHelp(Mat); 47 extern int MatGetMaps(Mat,Map*,Map*); 48 49 /* ------------------------------------------------------------*/ 50 extern int MatSetValues(Mat,int,int*,int,int*,Scalar*,InsertMode); 51 extern int MatSetValuesBlocked(Mat,int,int*,int,int*,Scalar*,InsertMode); 52 53 typedef enum {MAT_FLUSH_ASSEMBLY=1,MAT_FINAL_ASSEMBLY=0} MatAssemblyType; 54 extern int MatAssemblyBegin(Mat,MatAssemblyType); 55 extern int MatAssemblyEnd(Mat,MatAssemblyType); 56 extern int MatAssembled(Mat,PetscTruth*); 57 58 #define MatSetValue(v,i,j,va,mode) \ 59 {int _ierr,_row = i,_col = j; Scalar _va = va; \ 60 _ierr = MatSetValues(v,1,&_row,1,&_col,&_va,mode);CHKERRQ(_ierr); \ 61 } 62 #define MatGetValue(v,i,j,va) \ 63 {int _ierr,_row = i,_col = j; \ 64 _ierr = MatGetValues(v,1,&_row,1,&_col,&va);CHKERRQ(_ierr); \ 65 } 66 /* 67 Any additions/changes here MUST also be made in include/finclude/mat.h 68 */ 69 typedef enum {MAT_ROW_ORIENTED=1,MAT_COLUMN_ORIENTED=2,MAT_ROWS_SORTED=4, 70 MAT_COLUMNS_SORTED=8,MAT_NO_NEW_NONZERO_LOCATIONS=16, 71 MAT_YES_NEW_NONZERO_LOCATIONS=32,MAT_SYMMETRIC=64, 72 MAT_STRUCTURALLY_SYMMETRIC=65,MAT_NO_NEW_DIAGONALS=66, 73 MAT_YES_NEW_DIAGONALS=67,MAT_INODE_LIMIT_1=68,MAT_INODE_LIMIT_2=69, 74 MAT_INODE_LIMIT_3=70,MAT_INODE_LIMIT_4=71,MAT_INODE_LIMIT_5=72, 75 MAT_IGNORE_OFF_PROC_ENTRIES=73,MAT_ROWS_UNSORTED=74, 76 MAT_COLUMNS_UNSORTED=75,MAT_NEW_NONZERO_LOCATION_ERR=76, 77 MAT_NEW_NONZERO_ALLOCATION_ERR=77,MAT_USE_HASH_TABLE=78} MatOption; 78 extern int MatSetOption(Mat,MatOption); 79 extern int MatGetType(Mat,MatType*,char**); 80 extern int MatGetTypeFromOptions(MPI_Comm,char*,MatType*,PetscTruth*); 81 82 extern int MatGetValues(Mat,int,int*,int,int*,Scalar*); 83 extern int MatGetRow(Mat,int,int *,int **,Scalar**); 84 extern int MatRestoreRow(Mat,int,int *,int **,Scalar**); 85 extern int MatGetColumn(Mat,int,int *,int **,Scalar**); 86 extern int MatRestoreColumn(Mat,int,int *,int **,Scalar**); 87 extern int MatGetColumnVector(Mat,Vec,int); 88 extern int MatGetArray(Mat,Scalar **); 89 extern int MatRestoreArray(Mat,Scalar **); 90 extern int MatGetBlockSize(Mat,int *); 91 92 extern int MatMult(Mat,Vec,Vec); 93 extern int MatMultAdd(Mat,Vec,Vec,Vec); 94 extern int MatMultTrans(Mat,Vec,Vec); 95 extern int MatMultTransAdd(Mat,Vec,Vec,Vec); 96 97 typedef enum {MAT_DO_NOT_COPY_VALUES, MAT_COPY_VALUES} MatDuplicateOption; 98 99 extern int MatConvert(Mat,MatType,Mat*); 100 extern int MatDuplicate(Mat,MatDuplicateOption,Mat*); 101 extern int MatConvertRegister(MatType,MatType,int (*)(Mat,MatType,Mat*)); 102 extern int MatConvertRegisterAll(void); 103 104 typedef enum {SAME_NONZERO_PATTERN,DIFFERENT_NONZERO_PATTERN,SAME_PRECONDITIONER} MatStructure; 105 106 extern int MatCopy(Mat,Mat,MatStructure); 107 extern int MatView(Mat,Viewer); 108 extern int MatLoad(Viewer,MatType,Mat*); 109 extern int MatLoadRegister(MatType,int (*)(Viewer,MatType,Mat*)); 110 extern int MatLoadRegisterAll(void); 111 112 extern int MatGetRowIJ(Mat,int,PetscTruth,int*,int **,int **,PetscTruth *); 113 extern int MatRestoreRowIJ(Mat,int,PetscTruth,int *,int **,int **,PetscTruth *); 114 extern int MatGetColumnIJ(Mat,int,PetscTruth,int*,int **,int **,PetscTruth *); 115 extern int MatRestoreColumnIJ(Mat,int,PetscTruth,int *,int **,int **,PetscTruth *); 116 117 /* 118 Context of matrix information, used with MatGetInfo() 119 Note: If any entries are added to this context, be sure 120 to adjust MAT_INFO_SIZE in finclude/mat.h 121 */ 122 typedef struct { 123 PLogDouble rows_global, columns_global; /* number of global rows and columns */ 124 PLogDouble rows_local, columns_local; /* number of local rows and columns */ 125 PLogDouble block_size; /* block size */ 126 PLogDouble nz_allocated, nz_used, nz_unneeded; /* number of nonzeros */ 127 PLogDouble memory; /* memory allocated */ 128 PLogDouble assemblies; /* number of matrix assemblies */ 129 PLogDouble mallocs; /* number of mallocs during MatSetValues() */ 130 PLogDouble fill_ratio_given, fill_ratio_needed; /* fill ratio for LU/ILU */ 131 PLogDouble factor_mallocs; /* number of mallocs during factorization */ 132 } MatInfo; 133 134 typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType; 135 extern int MatGetInfo(Mat,MatInfoType,MatInfo*); 136 extern int MatValid(Mat,PetscTruth*); 137 extern int MatGetDiagonal(Mat,Vec); 138 extern int MatTranspose(Mat,Mat*); 139 extern int MatPermute(Mat,IS,IS,Mat *); 140 extern int MatDiagonalScale(Mat,Vec,Vec); 141 extern int MatDiagonalShift(Mat,Vec); 142 extern int MatEqual(Mat,Mat, PetscTruth*); 143 144 extern int MatNorm(Mat,NormType,double *); 145 extern int MatZeroEntries(Mat); 146 extern int MatZeroRows(Mat,IS,Scalar*); 147 extern int MatZeroColumns(Mat,IS,Scalar*); 148 149 extern int MatUseScaledForm(Mat,PetscTruth); 150 extern int MatScaleSystem(Mat,Vec,Vec); 151 extern int MatUnScaleSystem(Mat,Vec,Vec); 152 153 extern int MatGetSize(Mat,int*,int*); 154 extern int MatGetLocalSize(Mat,int*,int*); 155 extern int MatGetOwnershipRange(Mat,int*,int*); 156 157 typedef enum {MAT_INITIAL_MATRIX, MAT_REUSE_MATRIX} MatReuse; 158 extern int MatGetSubMatrices(Mat,int,IS *,IS *,MatReuse,Mat **); 159 extern int MatDestroyMatrices(int, Mat **); 160 extern int MatGetSubMatrix(Mat,IS,IS,int,MatReuse,Mat *); 161 162 extern int MatIncreaseOverlap(Mat,int,IS *,int); 163 164 extern int MatAXPY(Scalar *,Mat,Mat); 165 extern int MatAYPX(Scalar *,Mat,Mat); 166 extern int MatCompress(Mat); 167 168 extern int MatScale(Scalar *,Mat); 169 extern int MatShift(Scalar *,Mat); 170 171 extern int MatSetLocalToGlobalMapping(Mat, ISLocalToGlobalMapping); 172 extern int MatSetLocalToGlobalMappingBlocked(Mat, ISLocalToGlobalMapping); 173 extern int MatZeroRowsLocal(Mat,IS,Scalar*); 174 extern int MatSetValuesLocal(Mat,int,int*,int,int*,Scalar*,InsertMode); 175 extern int MatSetValuesBlockedLocal(Mat,int,int*,int,int*,Scalar*,InsertMode); 176 177 extern int MatSetStashInitialSize(Mat,int, int); 178 179 /* Routines unique to particular data structures */ 180 extern int MatBDiagGetData(Mat,int*,int*,int**,int**,Scalar***); 181 extern int MatSeqAIJSetColumnIndices(Mat,int *); 182 extern int MatSeqBAIJSetColumnIndices(Mat,int *); 183 184 extern int MatStoreValues(Mat); 185 extern int MatRetrieveValues(Mat); 186 187 /* 188 These routines are not usually accessed directly, rather solving is 189 done through the SLES, KSP and PC interfaces. 190 */ 191 192 typedef char* MatOrderingType; 193 #define MATORDERING_NATURAL "natural" 194 #define MATORDERING_ND "nd" 195 #define MATORDERING_1WD "1wd" 196 #define MATORDERING_RCM "rcm" 197 #define MATORDERING_QMD "qmd" 198 #define MATORDERING_ROWLENGTH "rowlength" 199 200 extern int MatGetOrdering(Mat,MatOrderingType,IS*,IS*); 201 extern int MatOrderingRegister_Private(char*,char*,char*,int(*)(Mat,MatOrderingType,IS*,IS*)); 202 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 203 #define MatOrderingRegister(a,b,c,d) MatOrderingRegister_Private(a,b,c,0) 204 #else 205 #define MatOrderingRegister(a,b,c,d) MatOrderingRegister_Private(a,b,c,d) 206 #endif 207 extern int MatOrderingRegisterDestroy(void); 208 extern int MatOrderingRegisterAll(char*); 209 extern int MatOrderingRegisterAllCalled; 210 211 extern int MatReorderForNonzeroDiagonal(Mat,double,IS,IS); 212 213 extern int MatCholeskyFactor(Mat,IS,double); 214 extern int MatCholeskyFactorSymbolic(Mat,IS,double,Mat*); 215 extern int MatCholeskyFactorNumeric(Mat,Mat*); 216 217 /* 218 Context of matrix information, used with MatILUFactor() and MatILUFactorSymbolic() 219 Note: If any entries are added to this context, be sure 220 to adjust MAT_ILUINFO_SIZE in finclude/mat.h 221 222 Note: The integer values below are passed in double to allow easy use from 223 Fortran 224 */ 225 typedef struct { 226 double levels; /* ILU(levels) */ 227 double fill; /* expected fill; nonzeros in factored matrix/nonzeros in original matrix*/ 228 double diagonal_fill; /* force diagonal to fill in if initially not filled */ 229 } MatILUInfo; 230 231 extern int MatLUFactor(Mat,IS,IS,double); 232 extern int MatILUFactor(Mat,IS,IS,MatILUInfo*); 233 extern int MatLUFactorSymbolic(Mat,IS,IS,double,Mat*); 234 extern int MatILUFactorSymbolic(Mat,IS,IS,MatILUInfo*,Mat*); 235 extern int MatIncompleteCholeskyFactorSymbolic(Mat,IS,double,int,Mat*); 236 extern int MatLUFactorNumeric(Mat,Mat*); 237 extern int MatILUDTFactor(Mat,double,int,IS,IS,Mat *); 238 239 extern int MatSolve(Mat,Vec,Vec); 240 extern int MatForwardSolve(Mat,Vec,Vec); 241 extern int MatBackwardSolve(Mat,Vec,Vec); 242 extern int MatSolveAdd(Mat,Vec,Vec,Vec); 243 extern int MatSolveTrans(Mat,Vec,Vec); 244 extern int MatSolveTransAdd(Mat,Vec,Vec,Vec); 245 246 extern int MatSetUnfactored(Mat); 247 248 /* MatSORType may be bitwise ORd together, so do not change the numbers */ 249 250 typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3, 251 SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8, 252 SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16, 253 SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128} MatSORType; 254 extern int MatRelax(Mat,Vec,double,MatSORType,double,int,Vec); 255 256 /* 257 These routines are for efficiently computing Jacobians via finite differences. 258 */ 259 260 typedef char* MatColoringType; 261 #define MATCOLORING_NATURAL "natural" 262 #define MATCOLORING_SL "sl" 263 #define MATCOLORING_LF "lf" 264 #define MATCOLORING_ID "id" 265 266 extern int MatGetColoring(Mat,MatColoringType,ISColoring*); 267 extern int MatColoringRegister_Private(char*,char*,char*,int(*)(Mat,MatColoringType,ISColoring *)); 268 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 269 #define MatColoringRegister(a,b,c,d) MatColoringRegister_Private(a,b,c,0) 270 #else 271 #define MatColoringRegister(a,b,c,d) MatColoringRegister_Private(a,b,c,d) 272 #endif 273 extern int MatColoringRegisterAll(char *); 274 extern int MatColoringRegisterAllCalled; 275 extern int MatColoringRegisterDestroy(void); 276 extern int MatColoringPatch(Mat,int,int *,ISColoring*); 277 278 /* 279 Data structures used to compute Jacobian vector products 280 efficiently using finite differences. 281 */ 282 #define MAT_FDCOLORING_COOKIE PETSC_COOKIE + 23 283 284 typedef struct _p_MatFDColoring *MatFDColoring; 285 286 extern int MatFDColoringCreate(Mat,ISColoring,MatFDColoring *); 287 extern int MatFDColoringDestroy(MatFDColoring); 288 extern int MatFDColoringView(MatFDColoring,Viewer); 289 extern int MatFDColoringSetFunction(MatFDColoring,int (*)(void),void*); 290 extern int MatFDColoringSetParameters(MatFDColoring,double,double); 291 extern int MatFDColoringSetFrequency(MatFDColoring,int); 292 extern int MatFDColoringGetFrequency(MatFDColoring,int*); 293 extern int MatFDColoringSetFromOptions(MatFDColoring); 294 extern int MatFDColoringPrintHelp(MatFDColoring); 295 extern int MatFDColoringApply(Mat,MatFDColoring,Vec,MatStructure*,void *); 296 extern int MatFDColoringApplyTS(Mat,MatFDColoring,double,Vec,MatStructure*,void *); 297 298 /* 299 These routines are for partitioning matrices: currently used only 300 for adjacency matrix, MatCreateSeqAdj() or MatCreateMPIAdj(). 301 */ 302 #define MATPARTITIONING_COOKIE PETSC_COOKIE + 25 303 304 typedef struct _p_MatPartitioning *MatPartitioning; 305 typedef char* MatPartitioningType; 306 #define MATPARTITIONING_CURRENT "current" 307 #define MATPARTITIONING_PARMETIS "parmetis" 308 309 extern int MatPartitioningCreate(MPI_Comm,MatPartitioning*); 310 extern int MatPartitioningSetType(MatPartitioning,MatPartitioningType); 311 extern int MatPartitioningSetAdjacency(MatPartitioning,Mat); 312 extern int MatPartitioningSetVertexWeights(MatPartitioning,double*); 313 extern int MatPartitioningApply(MatPartitioning,IS*); 314 extern int MatPartitioningDestroy(MatPartitioning); 315 316 extern int MatPartitioningRegister_Private(char*,char*,char*,int(*)(MatPartitioning)); 317 #if defined(PETSC_USE_DYNAMIC_LIBRARIES) 318 #define MatPartitioningRegister(a,b,c,d) MatPartitioningRegister_Private(a,b,c,0) 319 #else 320 #define MatPartitioningRegister(a,b,c,d) MatPartitioningRegister_Private(a,b,c,d) 321 #endif 322 323 extern int MatPartitioningRegisterAll(char *); 324 extern int MatPartitioningRegisterAllCalled; 325 extern int MatPartitioningRegisterDestroy(void); 326 extern int MatPartitioningView(MatPartitioning,Viewer); 327 extern int MatPartitioningSetFromOptions(MatPartitioning); 328 extern int MatPartitioningPrintHelp(MatPartitioning); 329 extern int MatPartitioningGetType(MatPartitioning,MatPartitioningType*); 330 331 extern int MatPartitioningParmetisSetCoarseSequential(MatPartitioning); 332 333 /* 334 If you add entries here you must also add them to finclude/mat.h 335 */ 336 typedef enum { MATOP_SET_VALUES=0, 337 MATOP_GET_ROW=1, 338 MATOP_RESTORE_ROW=2, 339 MATOP_MULT=3, 340 MATOP_MULT_ADD=4, 341 MATOP_MULT_TRANS=5, 342 MATOP_MULT_TRANS_ADD=6, 343 MATOP_SOLVE=7, 344 MATOP_SOLVE_ADD=8, 345 MATOP_SOLVE_TRANS=9, 346 MATOP_SOLVE_TRANS_ADD=10, 347 MATOP_LUFACTOR=11, 348 MATOP_CHOLESKYFACTOR=12, 349 MATOP_RELAX=13, 350 MATOP_TRANSPOSE=14, 351 MATOP_GETINFO=15, 352 MATOP_EQUAL=16, 353 MATOP_GET_DIAGONAL=17, 354 MATOP_DIAGONAL_SCALE=18, 355 MATOP_NORM=19, 356 MATOP_ASSEMBLY_BEGIN=20, 357 MATOP_ASSEMBLY_END=21, 358 MATOP_COMPRESS=22, 359 MATOP_SET_OPTION=23, 360 MATOP_ZERO_ENTRIES=24, 361 MATOP_ZERO_ROWS=25, 362 MATOP_LUFACTOR_SYMBOLIC=26, 363 MATOP_LUFACTOR_NUMERIC=27, 364 MATOP_CHOLESKY_FACTOR_SYMBOLIC=28, 365 MATOP_CHOLESKY_FACTOR_NUMERIC=29, 366 MATOP_GET_SIZE=30, 367 MATOP_GET_LOCAL_SIZE=31, 368 MATOP_GET_OWNERSHIP_RANGE=32, 369 MATOP_ILUFACTOR_SYMBOLIC=33, 370 MATOP_INCOMPLETECHOLESKYFACTOR_SYMBOLIC=34, 371 MATOP_GET_ARRAY=35, 372 MATOP_RESTORE_ARRAY=36, 373 374 MATOP_CONVERT_SAME_TYPE=37, 375 MATOP_FORWARD_SOLVE=38, 376 MATOP_BACKWARD_SOLVE=39, 377 MATOP_ILUFACTOR=40, 378 MATOP_INCOMPLETECHOLESKYFACTOR=41, 379 MATOP_AXPY=42, 380 MATOP_GET_SUBMATRICES=43, 381 MATOP_INCREASE_OVERLAP=44, 382 MATOP_GET_VALUES=45, 383 MATOP_COPY=46, 384 MATOP_PRINT_HELP=47, 385 MATOP_SCALE=48, 386 MATOP_SHIFT=49, 387 MATOP_DIAGONAL_SHIFT=50, 388 MATOP_ILUDT_FACTOR=51, 389 MATOP_GET_BLOCK_SIZE=52, 390 MATOP_GET_ROW_IJ=53, 391 MATOP_RESTORE_ROW_IJ=54, 392 MATOP_GET_COLUMN_IJ=55, 393 MATOP_RESTORE_COLUMN_IJ=56, 394 MATOP_FDCOLORING_CREATE=57, 395 MATOP_COLORING_PATCH=58, 396 MATOP_SET_UNFACTORED=59, 397 MATOP_PERMUTE=60, 398 MATOP_SET_VALUES_BLOCKED=61, 399 MATOP_DESTROY=250, 400 MATOP_VIEW=251 401 } MatOperation; 402 extern int MatHasOperation(Mat,MatOperation,PetscTruth*); 403 extern int MatShellSetOperation(Mat,MatOperation,void *); 404 extern int MatShellGetOperation(Mat,MatOperation,void **); 405 406 /* 407 Codes for matrices stored on disk. By default they are 408 stored in a universal format. By changing the format with 409 ViewerSetFormat(viewer,VIEWER_FORMAT_BINARY_NATIVE); the matrices will 410 be stored in a way natural for the matrix, for example dense matrices 411 would be stored as dense. Matrices stored this way may only be 412 read into matrices of the same time. 413 */ 414 #define MATRIX_BINARY_FORMAT_DENSE -1 415 416 /* 417 New matrix classes not yet distributed 418 */ 419 /* 420 MatAIJIndices is a data structure for storing the nonzero location information 421 for sparse matrices. Several matrices with identical nonzero structure can share 422 the same MatAIJIndices. 423 */ 424 typedef struct _p_MatAIJIndices* MatAIJIndices; 425 426 extern int MatCreateAIJIndices(int,int,int*,int*,PetscTruth,MatAIJIndices*); 427 extern int MatCreateAIJIndicesEmpty(int,int,int*,PetscTruth,MatAIJIndices*); 428 extern int MatAttachAIJIndices(MatAIJIndices,MatAIJIndices*); 429 extern int MatDestroyAIJIndices(MatAIJIndices); 430 extern int MatCopyAIJIndices(MatAIJIndices,MatAIJIndices*); 431 extern int MatValidateAIJIndices(int,MatAIJIndices); 432 extern int MatShiftAIJIndices(MatAIJIndices); 433 extern int MatShrinkAIJIndices(MatAIJIndices); 434 extern int MatTransposeAIJIndices(MatAIJIndices, MatAIJIndices*); 435 436 extern int MatCreateSeqCSN(MPI_Comm,int,int,int*,int,Mat*); 437 extern int MatCreateSeqCSN_Single(MPI_Comm,int,int,int*,int,Mat*); 438 extern int MatCreateSeqCSNWithPrecision(MPI_Comm,int,int,int*,int,ScalarPrecision,Mat*); 439 440 extern int MatCreateSeqCSNIndices(MPI_Comm,MatAIJIndices,int,Mat *); 441 extern int MatCreateSeqCSNIndices_Single(MPI_Comm,MatAIJIndices,int,Mat *); 442 extern int MatCreateSeqCSNIndicesWithPrecision(MPI_Comm,MatAIJIndices,int,ScalarPrecision,Mat *); 443 444 extern int MatMPIBAIJSetHashTableFactor(Mat,double); 445 extern int MatSeqAIJGetInodeSizes(Mat,int *,int *[],int *); 446 447 448 #endif 449 450 451 452