1 /* 2 Include file for the matrix component of PETSc 3 */ 4 #ifndef __PETSCMAT_H 5 #define __PETSCMAT_H 6 #include <petscvec.h> 7 8 /*S 9 Mat - Abstract PETSc matrix object used to manage all linear operators in PETSc, even those without 10 an explicit sparse representation (such as matrix-free operators) 11 12 Level: beginner 13 14 Concepts: matrix; linear operator 15 16 .seealso: MatCreate(), MatType, MatSetType(), MatDestroy() 17 S*/ 18 typedef struct _p_Mat* Mat; 19 20 /*J 21 MatType - String with the name of a PETSc matrix type 22 23 Level: beginner 24 25 .seealso: MatSetType(), Mat, MatSolverPackage, MatRegister() 26 J*/ 27 typedef const char* MatType; 28 #define MATSAME "same" 29 #define MATMAIJ "maij" 30 #define MATSEQMAIJ "seqmaij" 31 #define MATMPIMAIJ "mpimaij" 32 #define MATIS "is" 33 #define MATAIJ "aij" 34 #define MATSEQAIJ "seqaij" 35 #define MATMPIAIJ "mpiaij" 36 #define MATAIJCRL "aijcrl" 37 #define MATSEQAIJCRL "seqaijcrl" 38 #define MATMPIAIJCRL "mpiaijcrl" 39 #define MATAIJCUSP "aijcusp" 40 #define MATSEQAIJCUSP "seqaijcusp" 41 #define MATMPIAIJCUSP "mpiaijcusp" 42 #define MATAIJCUSPARSE "aijcusparse" 43 #define MATSEQAIJCUSPARSE "seqaijcusparse" 44 #define MATMPIAIJCUSPARSE "mpiaijcusparse" 45 #define MATAIJVIENNACL "aijviennacl" 46 #define MATSEQAIJVIENNACL "seqaijviennacl" 47 #define MATMPIAIJVIENNACL "mpiaijviennacl" 48 #define MATAIJPERM "aijperm" 49 #define MATSEQAIJPERM "seqaijperm" 50 #define MATMPIAIJPERM "mpiaijperm" 51 #define MATSHELL "shell" 52 #define MATDENSE "dense" 53 #define MATSEQDENSE "seqdense" 54 #define MATMPIDENSE "mpidense" 55 #define MATELEMENTAL "elemental" 56 #define MATBAIJ "baij" 57 #define MATSEQBAIJ "seqbaij" 58 #define MATMPIBAIJ "mpibaij" 59 #define MATMPIADJ "mpiadj" 60 #define MATSBAIJ "sbaij" 61 #define MATSEQSBAIJ "seqsbaij" 62 #define MATMPISBAIJ "mpisbaij" 63 #define MATDAAD "daad" 64 #define MATMFFD "mffd" 65 #define MATNORMAL "normal" 66 #define MATNORMALHERMITIAN "normalh" 67 #define MATLRC "lrc" 68 #define MATSCATTER "scatter" 69 #define MATBLOCKMAT "blockmat" 70 #define MATCOMPOSITE "composite" 71 #define MATFFT "fft" 72 #define MATFFTW "fftw" 73 #define MATSEQCUFFT "seqcufft" 74 #define MATTRANSPOSEMAT "transpose" 75 #define MATSCHURCOMPLEMENT "schurcomplement" 76 #define MATPYTHON "python" 77 #define MATHYPRE "hypre" 78 #define MATHYPRESTRUCT "hyprestruct" 79 #define MATHYPRESSTRUCT "hypresstruct" 80 #define MATSUBMATRIX "submatrix" 81 #define MATLOCALREF "localref" 82 #define MATNEST "nest" 83 #define MATPREALLOCATOR "preallocator" 84 #define MATDUMMY "dummy" 85 86 /*J 87 MatSolverPackage - String with the name of a PETSc matrix solver type. 88 89 For example: "petsc" indicates what PETSc provides, "superlu_dist" the parallel SuperLU_DIST package etc 90 91 Level: beginner 92 93 .seealso: MatGetFactor(), Mat, MatSetType(), MatType 94 J*/ 95 #define MatSolverPackage char* 96 #define MATSOLVERSUPERLU "superlu" 97 #define MATSOLVERSUPERLU_DIST "superlu_dist" 98 #define MATSOLVERSTRUMPACK "strumpack" 99 #define MATSOLVERUMFPACK "umfpack" 100 #define MATSOLVERCHOLMOD "cholmod" 101 #define MATSOLVERKLU "klu" 102 #define MATSOLVERSPARSEELEMENTAL "sparseelemental" 103 #define MATSOLVERELEMENTAL "elemental" 104 #define MATSOLVERESSL "essl" 105 #define MATSOLVERLUSOL "lusol" 106 #define MATSOLVERMUMPS "mumps" 107 #define MATSOLVERMKL_PARDISO "mkl_pardiso" 108 #define MATSOLVERMKL_CPARDISO "mkl_cpardiso" 109 #define MATSOLVERPASTIX "pastix" 110 #define MATSOLVERMATLAB "matlab" 111 #define MATSOLVERPETSC "petsc" 112 #define MATSOLVERBAS "bas" 113 #define MATSOLVERCUSPARSE "cusparse" 114 115 /*E 116 MatFactorType - indicates what type of factorization is requested 117 118 Level: beginner 119 120 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 121 122 .seealso: MatSolverPackage, MatGetFactor() 123 E*/ 124 typedef enum {MAT_FACTOR_NONE, MAT_FACTOR_LU, MAT_FACTOR_CHOLESKY, MAT_FACTOR_ILU, MAT_FACTOR_ICC,MAT_FACTOR_ILUDT} MatFactorType; 125 PETSC_EXTERN const char *const MatFactorTypes[]; 126 127 PETSC_EXTERN PetscErrorCode MatGetFactor(Mat,const MatSolverPackage,MatFactorType,Mat*); 128 PETSC_EXTERN PetscErrorCode MatGetFactorAvailable(Mat,const MatSolverPackage,MatFactorType,PetscBool *); 129 PETSC_EXTERN PetscErrorCode MatFactorGetSolverPackage(Mat,const MatSolverPackage*); 130 PETSC_EXTERN PetscErrorCode MatGetFactorType(Mat,MatFactorType*); 131 PETSC_EXTERN PetscErrorCode MatSolverPackageRegister(const MatSolverPackage,const MatType,MatFactorType,PetscErrorCode(*)(Mat,MatFactorType,Mat*)); 132 PETSC_EXTERN PetscErrorCode MatSolverPackageGet(const MatSolverPackage,const MatType,MatFactorType,PetscBool*,PetscBool*,PetscErrorCode (**)(Mat,MatFactorType,Mat*)); 133 134 /* Logging support */ 135 #define MAT_FILE_CLASSID 1211216 /* used to indicate matrices in binary files */ 136 PETSC_EXTERN PetscClassId MAT_CLASSID; 137 PETSC_EXTERN PetscClassId MAT_COLORING_CLASSID; 138 PETSC_EXTERN PetscClassId MAT_FDCOLORING_CLASSID; 139 PETSC_EXTERN PetscClassId MAT_TRANSPOSECOLORING_CLASSID; 140 PETSC_EXTERN PetscClassId MAT_PARTITIONING_CLASSID; 141 PETSC_EXTERN PetscClassId MAT_COARSEN_CLASSID; 142 PETSC_EXTERN PetscClassId MAT_NULLSPACE_CLASSID; 143 PETSC_EXTERN PetscClassId MATMFFD_CLASSID; 144 145 /*E 146 MatReuse - Indicates if matrices obtained from a previous call to MatCreateSubMatrices(), MatCreateSubMatrix(), MatConvert() or several other functions 147 are to be reused to store the new matrix values. 148 149 $ MAT_INITIAL_MATRIX - create a new matrix 150 $ MAT_REUSE_MATRIX - reuse the matrix created with a previous call that used MAT_INITIAL_MATRIX 151 $ MAT_INPLACE_MATRIX - replace the first input matrix with the new matrix (not applicable to all functions) 152 $ MAT_IGNORE_MATRIX - do not create a new matrix or reuse a give matrix, just ignore that matrix argument (not applicable to all functions) 153 154 Level: beginner 155 156 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 157 158 .seealso: MatCreateSubMatrices(), MatCreateSubMatrix(), MatDestroyMatrices(), MatConvert() 159 E*/ 160 typedef enum {MAT_INITIAL_MATRIX,MAT_REUSE_MATRIX,MAT_IGNORE_MATRIX,MAT_INPLACE_MATRIX} MatReuse; 161 162 /*E 163 MatCreateSubMatrixOption - Indicates if matrices obtained from a call to MatCreateSubMatrices() 164 include the matrix values. Currently it is only used by MatGetSeqNonzerostructure(). 165 166 Level: beginner 167 168 .seealso: MatGetSeqNonzerostructure() 169 E*/ 170 typedef enum {MAT_DO_NOT_GET_VALUES,MAT_GET_VALUES} MatCreateSubMatrixOption; 171 172 PETSC_EXTERN PetscErrorCode MatInitializePackage(void); 173 174 PETSC_EXTERN PetscErrorCode MatCreate(MPI_Comm,Mat*); 175 PETSC_EXTERN PetscErrorCode MatSetSizes(Mat,PetscInt,PetscInt,PetscInt,PetscInt); 176 PETSC_EXTERN PetscErrorCode MatSetType(Mat,MatType); 177 PETSC_EXTERN PetscErrorCode MatSetFromOptions(Mat); 178 PETSC_STATIC_INLINE PetscErrorCode MatViewFromOptions(Mat A,PetscObject obj,const char name[]) {return PetscObjectViewFromOptions((PetscObject)A,obj,name);} 179 PETSC_EXTERN PetscErrorCode MatRegister(const char[],PetscErrorCode(*)(Mat)); 180 PETSC_EXTERN PetscErrorCode MatRegisterBaseName(const char[],const char[],const char[]); 181 PETSC_EXTERN PetscErrorCode MatSetOptionsPrefix(Mat,const char[]); 182 PETSC_EXTERN PetscErrorCode MatAppendOptionsPrefix(Mat,const char[]); 183 PETSC_EXTERN PetscErrorCode MatGetOptionsPrefix(Mat,const char*[]); 184 PETSC_EXTERN PetscErrorCode MatSetErrorIfFailure(Mat,PetscBool); 185 186 PETSC_EXTERN PetscFunctionList MatList; 187 PETSC_EXTERN PetscFunctionList MatColoringList; 188 PETSC_EXTERN PetscFunctionList MatPartitioningList; 189 190 /*E 191 MatStructure - Indicates if two matrices have the same nonzero structure 192 193 Level: beginner 194 195 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 196 197 .seealso: MatCopy(), MatAXPY() 198 E*/ 199 typedef enum {DIFFERENT_NONZERO_PATTERN,SUBSET_NONZERO_PATTERN,SAME_NONZERO_PATTERN} MatStructure; 200 201 PETSC_EXTERN PetscErrorCode MatCreateSeqDense(MPI_Comm,PetscInt,PetscInt,PetscScalar[],Mat*); 202 PETSC_EXTERN PetscErrorCode MatCreateDense(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscScalar[],Mat*); 203 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 204 PETSC_EXTERN PetscErrorCode MatCreateAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 205 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[],Mat *); 206 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJWithSplitArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscScalar[],PetscInt[],PetscInt[],PetscScalar[],Mat*); 207 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJWithSeqAIJ(MPI_Comm,Mat,Mat,const PetscInt[],Mat*); 208 209 PETSC_EXTERN PetscErrorCode MatCreateSeqBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 210 PETSC_EXTERN PetscErrorCode MatCreateBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 211 PETSC_EXTERN PetscErrorCode MatCreateMPIBAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[],Mat*); 212 213 PETSC_EXTERN PetscErrorCode MatCreateMPIAdj(MPI_Comm,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscInt[],Mat*); 214 PETSC_EXTERN PetscErrorCode MatCreateSeqSBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 215 216 PETSC_EXTERN PetscErrorCode MatCreateSBAIJ(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 217 PETSC_EXTERN PetscErrorCode MatCreateMPISBAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[],Mat *); 218 PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); 219 PETSC_EXTERN PetscErrorCode MatMPISBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); 220 PETSC_EXTERN PetscErrorCode MatXAIJSetPreallocation(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscInt[],const PetscInt[]); 221 222 PETSC_EXTERN PetscErrorCode MatCreateShell(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,void *,Mat*); 223 PETSC_EXTERN PetscErrorCode MatCreateNormal(Mat,Mat*); 224 PETSC_EXTERN PetscErrorCode MatCreateNormalHermitian(Mat,Mat*); 225 PETSC_EXTERN PetscErrorCode MatCreateLRC(Mat,Mat,Vec,Mat,Mat*); 226 PETSC_EXTERN PetscErrorCode MatLRCGetMats(Mat,Mat*,Mat*,Vec*,Mat*); 227 PETSC_EXTERN PetscErrorCode MatCreateIS(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,ISLocalToGlobalMapping,ISLocalToGlobalMapping,Mat*); 228 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJCRL(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 229 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJCRL(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 230 231 PETSC_EXTERN PetscErrorCode MatCreateScatter(MPI_Comm,VecScatter,Mat*); 232 PETSC_EXTERN PetscErrorCode MatScatterSetVecScatter(Mat,VecScatter); 233 PETSC_EXTERN PetscErrorCode MatScatterGetVecScatter(Mat,VecScatter*); 234 PETSC_EXTERN PetscErrorCode MatCreateBlockMat(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt*,Mat*); 235 PETSC_EXTERN PetscErrorCode MatCompositeAddMat(Mat,Mat); 236 PETSC_EXTERN PetscErrorCode MatCompositeMerge(Mat); 237 PETSC_EXTERN PetscErrorCode MatCreateComposite(MPI_Comm,PetscInt,const Mat*,Mat*); 238 typedef enum {MAT_COMPOSITE_ADDITIVE,MAT_COMPOSITE_MULTIPLICATIVE} MatCompositeType; 239 PETSC_EXTERN PetscErrorCode MatCompositeSetType(Mat,MatCompositeType); 240 241 PETSC_EXTERN PetscErrorCode MatCreateFFT(MPI_Comm,PetscInt,const PetscInt[],MatType,Mat*); 242 PETSC_EXTERN PetscErrorCode MatCreateSeqCUFFT(MPI_Comm,PetscInt,const PetscInt[],Mat*); 243 244 PETSC_EXTERN PetscErrorCode MatCreateTranspose(Mat,Mat*); 245 PETSC_EXTERN PetscErrorCode MatTransposeGetMat(Mat,Mat*); 246 PETSC_EXTERN PetscErrorCode MatCreateHermitianTranspose(Mat,Mat*); 247 PETSC_EXTERN PetscErrorCode MatCreateSubMatrixVirtual(Mat,IS,IS,Mat*); 248 PETSC_EXTERN PetscErrorCode MatSubMatrixVirtualUpdate(Mat,Mat,IS,IS); 249 PETSC_EXTERN PetscErrorCode MatCreateLocalRef(Mat,IS,IS,Mat*); 250 251 #if defined(PETSC_HAVE_HYPRE) 252 PETSC_EXTERN PetscErrorCode MatHYPRESetPreallocation(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[]); 253 #endif 254 255 PETSC_EXTERN PetscErrorCode MatPythonSetType(Mat,const char[]); 256 257 PETSC_EXTERN PetscErrorCode MatSetUp(Mat); 258 PETSC_EXTERN PetscErrorCode MatDestroy(Mat*); 259 PETSC_EXTERN PetscErrorCode MatGetNonzeroState(Mat,PetscObjectState*); 260 261 PETSC_EXTERN PetscErrorCode MatConjugate(Mat); 262 PETSC_EXTERN PetscErrorCode MatRealPart(Mat); 263 PETSC_EXTERN PetscErrorCode MatImaginaryPart(Mat); 264 PETSC_EXTERN PetscErrorCode MatGetDiagonalBlock(Mat,Mat*); 265 PETSC_EXTERN PetscErrorCode MatGetTrace(Mat,PetscScalar*); 266 PETSC_EXTERN PetscErrorCode MatInvertBlockDiagonal(Mat,const PetscScalar **); 267 268 /* ------------------------------------------------------------*/ 269 PETSC_EXTERN PetscErrorCode MatSetValues(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 270 PETSC_EXTERN PetscErrorCode MatSetValuesBlocked(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 271 PETSC_EXTERN PetscErrorCode MatSetValuesRow(Mat,PetscInt,const PetscScalar[]); 272 PETSC_EXTERN PetscErrorCode MatSetValuesRowLocal(Mat,PetscInt,const PetscScalar[]); 273 PETSC_EXTERN PetscErrorCode MatSetValuesBatch(Mat,PetscInt,PetscInt,PetscInt[],const PetscScalar[]); 274 PETSC_EXTERN PetscErrorCode MatSetRandom(Mat,PetscRandom); 275 276 /*S 277 MatStencil - Data structure (C struct) for storing information about a single row or 278 column of a matrix as indexed on an associated grid. These are arguments to MatSetStencil() and MatSetBlockStencil() 279 280 The i,j, and k represent the logical coordinates over the entire grid (for 2 and 1 dimensional problems the k and j entries are ignored). 281 The c represents the the degrees of freedom at each grid point (the dof argument to DMDASetDOF()). If dof is 1 then this entry is ignored. 282 283 For stencil access to vectors see DMDAVecGetArray(), DMDAVecGetArrayF90(). 284 285 Fortran usage is different, see MatSetValuesStencil() for details. 286 287 Level: beginner 288 289 Concepts: matrix; linear operator 290 291 .seealso: MatSetValuesStencil(), MatSetStencil(), MatSetValuesBlockedStencil(), DMDAVecGetArray(), DMDAVecGetArrayF90() 292 S*/ 293 typedef struct { 294 PetscInt k,j,i,c; 295 } MatStencil; 296 297 PETSC_EXTERN PetscErrorCode MatSetValuesStencil(Mat,PetscInt,const MatStencil[],PetscInt,const MatStencil[],const PetscScalar[],InsertMode); 298 PETSC_EXTERN PetscErrorCode MatSetValuesBlockedStencil(Mat,PetscInt,const MatStencil[],PetscInt,const MatStencil[],const PetscScalar[],InsertMode); 299 PETSC_EXTERN PetscErrorCode MatSetStencil(Mat,PetscInt,const PetscInt[],const PetscInt[],PetscInt); 300 301 /*E 302 MatAssemblyType - Indicates if the matrix is now to be used, or if you plan 303 to continue to add or insert values to it 304 305 Level: beginner 306 307 .seealso: MatAssemblyBegin(), MatAssemblyEnd() 308 E*/ 309 typedef enum {MAT_FLUSH_ASSEMBLY=1,MAT_FINAL_ASSEMBLY=0} MatAssemblyType; 310 PETSC_EXTERN PetscErrorCode MatAssemblyBegin(Mat,MatAssemblyType); 311 PETSC_EXTERN PetscErrorCode MatAssemblyEnd(Mat,MatAssemblyType); 312 PETSC_EXTERN PetscErrorCode MatAssembled(Mat,PetscBool *); 313 314 315 316 /*E 317 MatOption - Options that may be set for a matrix and its behavior or storage 318 319 Level: beginner 320 321 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 322 Any additions/changes here must also be made in src/mat/interface/dlregismat.c in MatOptions[] 323 324 Developer Notes: Entries that are negative need not be called collectively by all processes. 325 326 .seealso: MatSetOption() 327 E*/ 328 typedef enum {MAT_OPTION_MIN = -3, 329 MAT_UNUSED_NONZERO_LOCATION_ERR = -2, 330 MAT_ROW_ORIENTED = -1, 331 MAT_SYMMETRIC = 1, 332 MAT_STRUCTURALLY_SYMMETRIC = 2, 333 MAT_NEW_DIAGONALS = 3, 334 MAT_IGNORE_OFF_PROC_ENTRIES = 4, 335 MAT_USE_HASH_TABLE = 5, 336 MAT_KEEP_NONZERO_PATTERN = 6, 337 MAT_IGNORE_ZERO_ENTRIES = 7, 338 MAT_USE_INODES = 8, 339 MAT_HERMITIAN = 9, 340 MAT_SYMMETRY_ETERNAL = 10, 341 MAT_NEW_NONZERO_LOCATION_ERR = 11, 342 MAT_IGNORE_LOWER_TRIANGULAR = 12, 343 MAT_ERROR_LOWER_TRIANGULAR = 13, 344 MAT_GETROW_UPPERTRIANGULAR = 14, 345 MAT_SPD = 15, 346 MAT_NO_OFF_PROC_ZERO_ROWS = 16, 347 MAT_NO_OFF_PROC_ENTRIES = 17, 348 MAT_NEW_NONZERO_LOCATIONS = 18, 349 MAT_NEW_NONZERO_ALLOCATION_ERR = 19, 350 MAT_SUBSET_OFF_PROC_ENTRIES = 20, 351 MAT_SUBMAT_SINGLEIS = 21, 352 MAT_STRUCTURE_ONLY = 22, 353 MAT_OPTION_MAX = 23} MatOption; 354 355 PETSC_EXTERN const char *const *MatOptions; 356 PETSC_EXTERN PetscErrorCode MatSetOption(Mat,MatOption,PetscBool); 357 PETSC_EXTERN PetscErrorCode MatGetOption(Mat,MatOption,PetscBool*); 358 PETSC_EXTERN PetscErrorCode MatGetType(Mat,MatType*); 359 360 PETSC_EXTERN PetscErrorCode MatGetValues(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],PetscScalar[]); 361 PETSC_EXTERN PetscErrorCode MatGetRow(Mat,PetscInt,PetscInt *,const PetscInt *[],const PetscScalar*[]); 362 PETSC_EXTERN PetscErrorCode MatRestoreRow(Mat,PetscInt,PetscInt *,const PetscInt *[],const PetscScalar*[]); 363 PETSC_EXTERN PetscErrorCode MatGetRowUpperTriangular(Mat); 364 PETSC_EXTERN PetscErrorCode MatRestoreRowUpperTriangular(Mat); 365 PETSC_EXTERN PetscErrorCode MatGetColumnVector(Mat,Vec,PetscInt); 366 PETSC_EXTERN PetscErrorCode MatSeqAIJGetArray(Mat,PetscScalar *[]); 367 PETSC_EXTERN PetscErrorCode MatSeqAIJRestoreArray(Mat,PetscScalar *[]); 368 PETSC_EXTERN PetscErrorCode MatSeqAIJGetMaxRowNonzeros(Mat,PetscInt*); 369 PETSC_EXTERN PetscErrorCode MatSeqAIJSetValuesLocalFast(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 370 PETSC_EXTERN PetscErrorCode MatSeqAIJSetType(Mat,MatType); 371 PETSC_EXTERN PetscErrorCode MatSeqAIJRegister(const char[],PetscErrorCode (*)(Mat,const MatType,MatReuse,Mat *)); 372 PETSC_EXTERN PetscFunctionList MatSeqAIJList; 373 PETSC_EXTERN PetscErrorCode MatSeqSBAIJGetArray(Mat,PetscScalar *[]); 374 PETSC_EXTERN PetscErrorCode MatSeqSBAIJRestoreArray(Mat,PetscScalar *[]); 375 PETSC_EXTERN PetscErrorCode MatDenseGetArray(Mat,PetscScalar *[]); 376 PETSC_EXTERN PetscErrorCode MatDenseRestoreArray(Mat,PetscScalar *[]); 377 PETSC_EXTERN PetscErrorCode MatDensePlaceArray(Mat,const PetscScalar[]); 378 PETSC_EXTERN PetscErrorCode MatDenseResetArray(Mat); 379 PETSC_EXTERN PetscErrorCode MatGetBlockSize(Mat,PetscInt *); 380 PETSC_EXTERN PetscErrorCode MatSetBlockSize(Mat,PetscInt); 381 PETSC_EXTERN PetscErrorCode MatGetBlockSizes(Mat,PetscInt *,PetscInt *); 382 PETSC_EXTERN PetscErrorCode MatSetBlockSizes(Mat,PetscInt,PetscInt); 383 PETSC_EXTERN PetscErrorCode MatSetBlockSizesFromMats(Mat,Mat,Mat); 384 385 PETSC_EXTERN PetscErrorCode MatMult(Mat,Vec,Vec); 386 PETSC_EXTERN PetscErrorCode MatMultDiagonalBlock(Mat,Vec,Vec); 387 PETSC_EXTERN PetscErrorCode MatMultAdd(Mat,Vec,Vec,Vec); 388 PETSC_EXTERN PetscErrorCode MatMultTranspose(Mat,Vec,Vec); 389 PETSC_EXTERN PetscErrorCode MatMultHermitianTranspose(Mat,Vec,Vec); 390 PETSC_EXTERN PetscErrorCode MatIsTranspose(Mat,Mat,PetscReal,PetscBool *); 391 PETSC_EXTERN PetscErrorCode MatIsHermitianTranspose(Mat,Mat,PetscReal,PetscBool *); 392 PETSC_EXTERN PetscErrorCode MatMultTransposeAdd(Mat,Vec,Vec,Vec); 393 PETSC_EXTERN PetscErrorCode MatMultHermitianTransposeAdd(Mat,Vec,Vec,Vec); 394 PETSC_EXTERN PetscErrorCode MatMultConstrained(Mat,Vec,Vec); 395 PETSC_EXTERN PetscErrorCode MatMultTransposeConstrained(Mat,Vec,Vec); 396 PETSC_EXTERN PetscErrorCode MatMatSolve(Mat,Mat,Mat); 397 PETSC_EXTERN PetscErrorCode MatMatSolveTranspose(Mat,Mat,Mat); 398 PETSC_EXTERN PetscErrorCode MatResidual(Mat,Vec,Vec,Vec); 399 400 /*E 401 MatDuplicateOption - Indicates if a duplicated sparse matrix should have 402 its numerical values copied over or just its nonzero structure. 403 404 Level: beginner 405 406 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 407 408 $ MAT_SHARE_NONZERO_PATTERN - the i and j arrays in the new matrix will be shared with the original matrix 409 $ this also triggers the MAT_DO_NOT_COPY_VALUES option. This is used when you 410 $ have several matrices with the same nonzero pattern. 411 412 .seealso: MatDuplicate() 413 E*/ 414 typedef enum {MAT_DO_NOT_COPY_VALUES,MAT_COPY_VALUES,MAT_SHARE_NONZERO_PATTERN} MatDuplicateOption; 415 416 PETSC_EXTERN PetscErrorCode MatConvert(Mat,MatType,MatReuse,Mat*); 417 PETSC_EXTERN PetscErrorCode MatDuplicate(Mat,MatDuplicateOption,Mat*); 418 419 420 PETSC_EXTERN PetscErrorCode MatCopy(Mat,Mat,MatStructure); 421 PETSC_EXTERN PetscErrorCode MatView(Mat,PetscViewer); 422 PETSC_EXTERN PetscErrorCode MatIsSymmetric(Mat,PetscReal,PetscBool *); 423 PETSC_EXTERN PetscErrorCode MatIsStructurallySymmetric(Mat,PetscBool *); 424 PETSC_EXTERN PetscErrorCode MatIsHermitian(Mat,PetscReal,PetscBool *); 425 PETSC_EXTERN PetscErrorCode MatIsSymmetricKnown(Mat,PetscBool *,PetscBool *); 426 PETSC_EXTERN PetscErrorCode MatIsHermitianKnown(Mat,PetscBool *,PetscBool *); 427 PETSC_EXTERN PetscErrorCode MatMissingDiagonal(Mat,PetscBool *,PetscInt *); 428 PETSC_EXTERN PetscErrorCode MatLoad(Mat, PetscViewer); 429 430 PETSC_EXTERN PetscErrorCode MatGetRowIJ(Mat,PetscInt,PetscBool ,PetscBool ,PetscInt*,const PetscInt *[],const PetscInt *[],PetscBool *); 431 PETSC_EXTERN PetscErrorCode MatRestoreRowIJ(Mat,PetscInt,PetscBool ,PetscBool ,PetscInt *,const PetscInt *[],const PetscInt *[],PetscBool *); 432 PETSC_EXTERN PetscErrorCode MatGetColumnIJ(Mat,PetscInt,PetscBool ,PetscBool ,PetscInt*,const PetscInt *[],const PetscInt *[],PetscBool *); 433 PETSC_EXTERN PetscErrorCode MatRestoreColumnIJ(Mat,PetscInt,PetscBool ,PetscBool ,PetscInt *,const PetscInt *[],const PetscInt *[],PetscBool *); 434 435 /*S 436 MatInfo - Context of matrix information, used with MatGetInfo() 437 438 In Fortran this is simply a double precision array of dimension MAT_INFO_SIZE 439 440 Level: intermediate 441 442 Concepts: matrix^nonzero information 443 444 .seealso: MatGetInfo(), MatInfoType 445 S*/ 446 typedef struct { 447 PetscLogDouble block_size; /* block size */ 448 PetscLogDouble nz_allocated,nz_used,nz_unneeded; /* number of nonzeros */ 449 PetscLogDouble memory; /* memory allocated */ 450 PetscLogDouble assemblies; /* number of matrix assemblies called */ 451 PetscLogDouble mallocs; /* number of mallocs during MatSetValues() */ 452 PetscLogDouble fill_ratio_given,fill_ratio_needed; /* fill ratio for LU/ILU */ 453 PetscLogDouble factor_mallocs; /* number of mallocs during factorization */ 454 } MatInfo; 455 456 /*E 457 MatInfoType - Indicates if you want information about the local part of the matrix, 458 the entire parallel matrix or the maximum over all the local parts. 459 460 Level: beginner 461 462 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 463 464 .seealso: MatGetInfo(), MatInfo 465 E*/ 466 typedef enum {MAT_LOCAL=1,MAT_GLOBAL_MAX=2,MAT_GLOBAL_SUM=3} MatInfoType; 467 PETSC_EXTERN PetscErrorCode MatGetInfo(Mat,MatInfoType,MatInfo*); 468 PETSC_EXTERN PetscErrorCode MatGetDiagonal(Mat,Vec); 469 PETSC_EXTERN PetscErrorCode MatGetRowMax(Mat,Vec,PetscInt[]); 470 PETSC_EXTERN PetscErrorCode MatGetRowMin(Mat,Vec,PetscInt[]); 471 PETSC_EXTERN PetscErrorCode MatGetRowMaxAbs(Mat,Vec,PetscInt[]); 472 PETSC_EXTERN PetscErrorCode MatGetRowMinAbs(Mat,Vec,PetscInt[]); 473 PETSC_EXTERN PetscErrorCode MatGetRowSum(Mat,Vec); 474 PETSC_EXTERN PetscErrorCode MatTranspose(Mat,MatReuse,Mat*); 475 PETSC_EXTERN PetscErrorCode MatHermitianTranspose(Mat,MatReuse,Mat*); 476 PETSC_EXTERN PetscErrorCode MatPermute(Mat,IS,IS,Mat*); 477 PETSC_EXTERN PetscErrorCode MatDiagonalScale(Mat,Vec,Vec); 478 PETSC_EXTERN PetscErrorCode MatDiagonalSet(Mat,Vec,InsertMode); 479 480 PETSC_EXTERN PetscErrorCode MatEqual(Mat,Mat,PetscBool*); 481 PETSC_EXTERN PetscErrorCode MatMultEqual(Mat,Mat,PetscInt,PetscBool*); 482 PETSC_EXTERN PetscErrorCode MatMultAddEqual(Mat,Mat,PetscInt,PetscBool*); 483 PETSC_EXTERN PetscErrorCode MatMultTransposeEqual(Mat,Mat,PetscInt,PetscBool*); 484 PETSC_EXTERN PetscErrorCode MatMultTransposeAddEqual(Mat,Mat,PetscInt,PetscBool*); 485 PETSC_EXTERN PetscErrorCode MatMatMultEqual(Mat,Mat,Mat,PetscInt,PetscBool*); 486 PETSC_EXTERN PetscErrorCode MatTransposeMatMultEqual(Mat,Mat,Mat,PetscInt,PetscBool*); 487 488 PETSC_EXTERN PetscErrorCode MatNorm(Mat,NormType,PetscReal*); 489 PETSC_EXTERN PetscErrorCode MatGetColumnNorms(Mat,NormType,PetscReal*); 490 PETSC_EXTERN PetscErrorCode MatZeroEntries(Mat); 491 PETSC_EXTERN PetscErrorCode MatZeroRows(Mat,PetscInt,const PetscInt [],PetscScalar,Vec,Vec); 492 PETSC_EXTERN PetscErrorCode MatZeroRowsIS(Mat,IS,PetscScalar,Vec,Vec); 493 PETSC_EXTERN PetscErrorCode MatZeroRowsStencil(Mat,PetscInt,const MatStencil [],PetscScalar,Vec,Vec); 494 PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsStencil(Mat,PetscInt,const MatStencil[],PetscScalar,Vec,Vec); 495 PETSC_EXTERN PetscErrorCode MatZeroRowsColumns(Mat,PetscInt,const PetscInt [],PetscScalar,Vec,Vec); 496 PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsIS(Mat,IS,PetscScalar,Vec,Vec); 497 498 PETSC_EXTERN PetscErrorCode MatGetSize(Mat,PetscInt*,PetscInt*); 499 PETSC_EXTERN PetscErrorCode MatGetLocalSize(Mat,PetscInt*,PetscInt*); 500 PETSC_EXTERN PetscErrorCode MatGetOwnershipRange(Mat,PetscInt*,PetscInt*); 501 PETSC_EXTERN PetscErrorCode MatGetOwnershipRanges(Mat,const PetscInt**); 502 PETSC_EXTERN PetscErrorCode MatGetOwnershipRangeColumn(Mat,PetscInt*,PetscInt*); 503 PETSC_EXTERN PetscErrorCode MatGetOwnershipRangesColumn(Mat,const PetscInt**); 504 PETSC_EXTERN PetscErrorCode MatGetOwnershipIS(Mat,IS*,IS*); 505 506 PETSC_EXTERN PetscErrorCode MatCreateSubMatrices(Mat,PetscInt,const IS[],const IS[],MatReuse,Mat *[]); 507 PETSC_DEPRECATED("Use MatCreateSubMatrices()") PETSC_STATIC_INLINE PetscErrorCode MatGetSubMatrices(Mat mat,PetscInt n,const IS irow[],const IS icol[],MatReuse scall,Mat *submat[]) {return MatCreateSubMatrices(mat,n,irow,icol,scall,submat);} 508 PETSC_EXTERN PetscErrorCode MatCreateSubMatricesMPI(Mat,PetscInt,const IS[],const IS[],MatReuse,Mat *[]); 509 PETSC_DEPRECATED("Use MatCreateSubMatricesMPI()") PETSC_STATIC_INLINE PetscErrorCode MatGetSubMatricesMPI(Mat mat,PetscInt n,const IS irow[],const IS icol[],MatReuse scall,Mat *submat[]) {return MatCreateSubMatricesMPI(mat,n,irow,icol,scall,submat);} 510 PETSC_EXTERN PetscErrorCode MatDestroyMatrices(PetscInt,Mat *[]); 511 PETSC_EXTERN PetscErrorCode MatDestroySubMatrices(PetscInt,Mat *[]); 512 PETSC_EXTERN PetscErrorCode MatCreateSubMatrix(Mat,IS,IS,MatReuse,Mat *); 513 PETSC_DEPRECATED("Use MatCreateSubMatrix()") PETSC_STATIC_INLINE PetscErrorCode MatGetSubMatrix(Mat mat,IS isrow,IS iscol,MatReuse cll,Mat *newmat) {return MatCreateSubMatrix(mat,isrow,iscol,cll,newmat);} 514 PETSC_EXTERN PetscErrorCode MatGetLocalSubMatrix(Mat,IS,IS,Mat*); 515 PETSC_EXTERN PetscErrorCode MatRestoreLocalSubMatrix(Mat,IS,IS,Mat*); 516 PETSC_EXTERN PetscErrorCode MatGetSeqNonzeroStructure(Mat,Mat*); 517 PETSC_EXTERN PetscErrorCode MatDestroySeqNonzeroStructure(Mat*); 518 519 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJSumSeqAIJ(MPI_Comm,Mat,PetscInt,PetscInt,MatReuse,Mat*); 520 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJSumSeqAIJSymbolic(MPI_Comm,Mat,PetscInt,PetscInt,Mat*); 521 PETSC_EXTERN PetscErrorCode MatCreateMPIAIJSumSeqAIJNumeric(Mat,Mat); 522 PETSC_EXTERN PetscErrorCode MatMPIAIJGetLocalMat(Mat,MatReuse,Mat*); 523 PETSC_EXTERN PetscErrorCode MatMPIAIJGetLocalMatCondensed(Mat,MatReuse,IS*,IS*,Mat*); 524 PETSC_EXTERN PetscErrorCode MatGetBrowsOfAcols(Mat,Mat,MatReuse,IS*,IS*,Mat*); 525 PETSC_EXTERN PetscErrorCode MatGetGhosts(Mat, PetscInt *,const PetscInt *[]); 526 527 PETSC_EXTERN PetscErrorCode MatIncreaseOverlap(Mat,PetscInt,IS[],PetscInt); 528 PETSC_EXTERN PetscErrorCode MatIncreaseOverlapSplit(Mat mat,PetscInt n,IS is[],PetscInt ov); 529 PETSC_EXTERN PetscErrorCode MatMPIAIJSetUseScalableIncreaseOverlap(Mat,PetscBool); 530 531 PETSC_EXTERN PetscErrorCode MatMatMult(Mat,Mat,MatReuse,PetscReal,Mat*); 532 PETSC_EXTERN PetscErrorCode MatMatMultSymbolic(Mat,Mat,PetscReal,Mat*); 533 PETSC_EXTERN PetscErrorCode MatMatMultNumeric(Mat,Mat,Mat); 534 535 PETSC_EXTERN PetscErrorCode MatMatMatMult(Mat,Mat,Mat,MatReuse,PetscReal,Mat*); 536 PETSC_EXTERN PetscErrorCode MatGalerkin(Mat,Mat,Mat,MatReuse,PetscReal,Mat*); 537 538 PETSC_EXTERN PetscErrorCode MatPtAP(Mat,Mat,MatReuse,PetscReal,Mat*); 539 PETSC_EXTERN PetscErrorCode MatPtAPSymbolic(Mat,Mat,PetscReal,Mat*); 540 PETSC_EXTERN PetscErrorCode MatPtAPNumeric(Mat,Mat,Mat); 541 PETSC_EXTERN PetscErrorCode MatRARt(Mat,Mat,MatReuse,PetscReal,Mat*); 542 PETSC_EXTERN PetscErrorCode MatRARtSymbolic(Mat,Mat,PetscReal,Mat*); 543 PETSC_EXTERN PetscErrorCode MatRARtNumeric(Mat,Mat,Mat); 544 545 PETSC_EXTERN PetscErrorCode MatTransposeMatMult(Mat,Mat,MatReuse,PetscReal,Mat*); 546 PETSC_EXTERN PetscErrorCode MatTransposetMatMultSymbolic(Mat,Mat,PetscReal,Mat*); 547 PETSC_EXTERN PetscErrorCode MatTransposetMatMultNumeric(Mat,Mat,Mat); 548 PETSC_EXTERN PetscErrorCode MatMatTransposeMult(Mat,Mat,MatReuse,PetscReal,Mat*); 549 PETSC_EXTERN PetscErrorCode MatMatTransposeMultSymbolic(Mat,Mat,PetscReal,Mat*); 550 PETSC_EXTERN PetscErrorCode MatMatTransposeMultNumeric(Mat,Mat,Mat); 551 552 PETSC_EXTERN PetscErrorCode MatAXPY(Mat,PetscScalar,Mat,MatStructure); 553 PETSC_EXTERN PetscErrorCode MatAYPX(Mat,PetscScalar,Mat,MatStructure); 554 555 PETSC_EXTERN PetscErrorCode MatScale(Mat,PetscScalar); 556 PETSC_EXTERN PetscErrorCode MatShift(Mat,PetscScalar); 557 558 PETSC_EXTERN PetscErrorCode MatSetLocalToGlobalMapping(Mat,ISLocalToGlobalMapping,ISLocalToGlobalMapping); 559 PETSC_EXTERN PetscErrorCode MatGetLocalToGlobalMapping(Mat,ISLocalToGlobalMapping*,ISLocalToGlobalMapping*); 560 PETSC_EXTERN PetscErrorCode MatGetLayouts(Mat,PetscLayout*,PetscLayout*); 561 PETSC_EXTERN PetscErrorCode MatZeroRowsLocal(Mat,PetscInt,const PetscInt [],PetscScalar,Vec,Vec); 562 PETSC_EXTERN PetscErrorCode MatZeroRowsLocalIS(Mat,IS,PetscScalar,Vec,Vec); 563 PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsLocal(Mat,PetscInt,const PetscInt [],PetscScalar,Vec,Vec); 564 PETSC_EXTERN PetscErrorCode MatZeroRowsColumnsLocalIS(Mat,IS,PetscScalar,Vec,Vec); 565 PETSC_EXTERN PetscErrorCode MatSetValuesLocal(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 566 PETSC_EXTERN PetscErrorCode MatSetValuesBlockedLocal(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[],const PetscScalar[],InsertMode); 567 568 PETSC_EXTERN PetscErrorCode MatStashSetInitialSize(Mat,PetscInt,PetscInt); 569 PETSC_EXTERN PetscErrorCode MatStashGetInfo(Mat,PetscInt*,PetscInt*,PetscInt*,PetscInt*); 570 571 PETSC_EXTERN PetscErrorCode MatInterpolate(Mat,Vec,Vec); 572 PETSC_EXTERN PetscErrorCode MatInterpolateAdd(Mat,Vec,Vec,Vec); 573 PETSC_EXTERN PetscErrorCode MatRestrict(Mat,Vec,Vec); 574 PETSC_EXTERN PetscErrorCode MatCreateVecs(Mat,Vec*,Vec*); 575 PETSC_DEPRECATED("Use MatCreateVecs()") PETSC_STATIC_INLINE PetscErrorCode MatGetVecs(Mat mat,Vec *x,Vec *y) {return MatCreateVecs(mat,x,y);} 576 PETSC_EXTERN PetscErrorCode MatCreateRedundantMatrix(Mat,PetscInt,MPI_Comm,MatReuse,Mat*); 577 PETSC_EXTERN PetscErrorCode MatGetMultiProcBlock(Mat,MPI_Comm,MatReuse,Mat*); 578 PETSC_EXTERN PetscErrorCode MatFindZeroDiagonals(Mat,IS*); 579 PETSC_EXTERN PetscErrorCode MatFindOffBlockDiagonalEntries(Mat,IS*); 580 PETSC_EXTERN PetscErrorCode MatCreateMPIMatConcatenateSeqMat(MPI_Comm,Mat,PetscInt,MatReuse,Mat*); 581 582 /*MC 583 MatSetValue - Set a single entry into a matrix. 584 585 Not collective 586 587 Synopsis: 588 #include <petscmat.h> 589 PetscErrorCode MatSetValue(Mat m,PetscInt row,PetscInt col,PetscScalar value,InsertMode mode) 590 591 Input Parameters: 592 + m - the matrix 593 . row - the row location of the entry 594 . col - the column location of the entry 595 . value - the value to insert 596 - mode - either INSERT_VALUES or ADD_VALUES 597 598 Notes: 599 For efficiency one should use MatSetValues() and set several or many 600 values simultaneously if possible. 601 602 Level: beginner 603 604 .seealso: MatSetValues(), MatSetValueLocal() 605 M*/ 606 PETSC_STATIC_INLINE PetscErrorCode MatSetValue(Mat v,PetscInt i,PetscInt j,PetscScalar va,InsertMode mode) {return MatSetValues(v,1,&i,1,&j,&va,mode);} 607 608 PETSC_STATIC_INLINE PetscErrorCode MatGetValue(Mat v,PetscInt i,PetscInt j,PetscScalar *va) {return MatGetValues(v,1,&i,1,&j,va);} 609 610 PETSC_STATIC_INLINE PetscErrorCode MatSetValueLocal(Mat v,PetscInt i,PetscInt j,PetscScalar va,InsertMode mode) {return MatSetValuesLocal(v,1,&i,1,&j,&va,mode);} 611 612 /*MC 613 MatPreallocateInitialize - Begins the block of code that will count the number of nonzeros per 614 row in a matrix providing the data that one can use to correctly preallocate the matrix. 615 616 Synopsis: 617 #include <petscmat.h> 618 PetscErrorCode MatPreallocateInitialize(MPI_Comm comm, PetscInt nrows, PetscInt ncols, PetscInt *dnz, PetscInt *onz) 619 620 Collective on MPI_Comm 621 622 Input Parameters: 623 + comm - the communicator that will share the eventually allocated matrix 624 . nrows - the number of LOCAL rows in the matrix 625 - ncols - the number of LOCAL columns in the matrix 626 627 Output Parameters: 628 + dnz - the array that will be passed to the matrix preallocation routines 629 - ozn - the other array passed to the matrix preallocation routines 630 631 Level: intermediate 632 633 Notes: 634 See Users-Manual: ch_performance for more details. 635 636 Do not malloc or free dnz and onz, that is handled internally by these routines 637 638 Use MatPreallocateInitializeSymmetric() for symmetric matrices (MPISBAIJ matrices) 639 640 This is a MACRO not a function because it has a leading { that is closed by PetscPreallocateFinalize(). 641 642 Concepts: preallocation^Matrix 643 644 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateSetLocal(), 645 MatPreallocateInitializeSymmetric(), MatPreallocateSymmetricSetLocalBlock() 646 M*/ 647 #define MatPreallocateInitialize(comm,nrows,ncols,dnz,onz) 0; \ 648 { \ 649 PetscErrorCode _4_ierr; PetscInt __nrows = (nrows),__ctmp = (ncols),__rstart,__start,__end; \ 650 _4_ierr = PetscCalloc2(__nrows,&dnz,__nrows,&onz);CHKERRQ(_4_ierr); \ 651 __start = 0; __end = __start; \ 652 _4_ierr = MPI_Scan(&__ctmp,&__end,1,MPIU_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __start = __end - __ctmp;\ 653 _4_ierr = MPI_Scan(&__nrows,&__rstart,1,MPIU_INT,MPI_SUM,comm);CHKERRQ(_4_ierr); __rstart = __rstart - __nrows; 654 655 /*MC 656 MatPreallocateSetLocal - Indicates the locations (rows and columns) in the matrix where nonzeros will be 657 inserted using a local number of the rows and columns 658 659 Synopsis: 660 #include <petscmat.h> 661 PetscErrorCode MatPreallocateSetLocal(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 662 663 Not Collective 664 665 Input Parameters: 666 + map - the row mapping from local numbering to global numbering 667 . nrows - the number of rows indicated 668 . rows - the indices of the rows 669 . cmap - the column mapping from local to global numbering 670 . ncols - the number of columns in the matrix 671 . cols - the columns indicated 672 . dnz - the array that will be passed to the matrix preallocation routines 673 - ozn - the other array passed to the matrix preallocation routines 674 675 Level: intermediate 676 677 Notes: 678 See Users-Manual: ch_performance for more details. 679 680 Do not malloc or free dnz and onz, that is handled internally by these routines 681 682 Concepts: preallocation^Matrix 683 684 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateInitialize(), 685 MatPreallocateInitialize(), MatPreallocateSymmetricSetLocalBlock(), MatPreallocateSetLocalRemoveDups() 686 M*/ 687 #define MatPreallocateSetLocal(rmap,nrows,rows,cmap,ncols,cols,dnz,onz) 0; \ 688 {\ 689 PetscInt __l;\ 690 _4_ierr = ISLocalToGlobalMappingApply(rmap,nrows,rows,rows);CHKERRQ(_4_ierr);\ 691 _4_ierr = ISLocalToGlobalMappingApply(cmap,ncols,cols,cols);CHKERRQ(_4_ierr);\ 692 for (__l=0;__l<nrows;__l++) {\ 693 _4_ierr = MatPreallocateSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\ 694 }\ 695 } 696 697 /*MC 698 MatPreallocateSetLocalRemoveDups - Indicates the locations (rows and columns) in the matrix where nonzeros will be 699 inserted using a local number of the rows and columns. This version removes any duplicate columns in cols 700 701 Synopsis: 702 #include <petscmat.h> 703 PetscErrorCode MatPreallocateSetLocalRemoveDups(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 704 705 Not Collective 706 707 Input Parameters: 708 + map - the row mapping from local numbering to global numbering 709 . nrows - the number of rows indicated 710 . rows - the indices of the rows (these values are mapped to the global values) 711 . cmap - the column mapping from local to global numbering 712 . ncols - the number of columns in the matrix (this value will be changed if duplicate columns are found) 713 . cols - the columns indicated (these values are mapped to the global values, they are then sorted and duplicates removed) 714 . dnz - the array that will be passed to the matrix preallocation routines 715 - ozn - the other array passed to the matrix preallocation routines 716 717 Level: intermediate 718 719 Notes: 720 See Users-Manual: ch_performance for more details. 721 722 Do not malloc or free dnz and onz, that is handled internally by these routines 723 724 Concepts: preallocation^Matrix 725 726 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateInitialize(), 727 MatPreallocateInitialize(), MatPreallocateSymmetricSetLocalBlock(), MatPreallocateSetLocal() 728 M*/ 729 #define MatPreallocateSetLocalRemoveDups(rmap,nrows,rows,cmap,ncols,cols,dnz,onz) 0; \ 730 {\ 731 PetscInt __l;\ 732 _4_ierr = ISLocalToGlobalMappingApply(rmap,nrows,rows,rows);CHKERRQ(_4_ierr);\ 733 _4_ierr = ISLocalToGlobalMappingApply(cmap,ncols,cols,cols);CHKERRQ(_4_ierr);\ 734 _4_ierr = PetscSortRemoveDupsInt(&ncols,cols);CHKERRQ(_4_ierr);\ 735 for (__l=0;__l<nrows;__l++) {\ 736 _4_ierr = MatPreallocateSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\ 737 }\ 738 } 739 740 /*MC 741 MatPreallocateSetLocalBlock - Indicates the locations (rows and columns) in the matrix where nonzeros will be 742 inserted using a local number of the rows and columns 743 744 Synopsis: 745 #include <petscmat.h> 746 PetscErrorCode MatPreallocateSetLocalBlock(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 747 748 Not Collective 749 750 Input Parameters: 751 + map - the row mapping from local numbering to global numbering 752 . nrows - the number of rows indicated 753 . rows - the indices of the rows 754 . cmap - the column mapping from local to global numbering 755 . ncols - the number of columns in the matrix 756 . cols - the columns indicated 757 . dnz - the array that will be passed to the matrix preallocation routines 758 - ozn - the other array passed to the matrix preallocation routines 759 760 Level: intermediate 761 762 Notes: 763 See Users-Manual: ch_performance for more details. 764 765 Do not malloc or free dnz and onz, that is handled internally by these routines 766 767 Concepts: preallocation^Matrix 768 769 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateInitialize(), 770 MatPreallocateInitialize(), MatPreallocateSymmetricSetLocalBlock() 771 M*/ 772 #define MatPreallocateSetLocalBlock(rmap,nrows,rows,cmap,ncols,cols,dnz,onz) 0; \ 773 {\ 774 PetscInt __l;\ 775 _4_ierr = ISLocalToGlobalMappingApplyBlock(rmap,nrows,rows,rows);CHKERRQ(_4_ierr);\ 776 _4_ierr = ISLocalToGlobalMappingApplyBlock(cmap,ncols,cols,cols);CHKERRQ(_4_ierr);\ 777 for (__l=0;__l<nrows;__l++) {\ 778 _4_ierr = MatPreallocateSet((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\ 779 }\ 780 } 781 782 /*MC 783 MatPreallocateSymmetricSetLocalBlock - Indicates the locations (rows and columns) in the matrix where nonzeros will be 784 inserted using a local number of the rows and columns 785 786 Synopsis: 787 #include <petscmat.h> 788 PetscErrorCode MatPreallocateSymmetricSetLocalBlock(ISLocalToGlobalMappping map,PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 789 790 Not Collective 791 792 Input Parameters: 793 + map - the mapping between local numbering and global numbering 794 . nrows - the number of rows indicated 795 . rows - the indices of the rows 796 . ncols - the number of columns in the matrix 797 . cols - the columns indicated 798 . dnz - the array that will be passed to the matrix preallocation routines 799 - ozn - the other array passed to the matrix preallocation routines 800 801 Level: intermediate 802 803 Notes: 804 See Users-Manual: ch_performance for more details. 805 806 Do not malloc or free dnz and onz that is handled internally by these routines 807 808 Concepts: preallocation^Matrix 809 810 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateInitialize(), 811 MatPreallocateInitialize(), MatPreallocateSetLocal() 812 M*/ 813 #define MatPreallocateSymmetricSetLocalBlock(map,nrows,rows,ncols,cols,dnz,onz) 0;\ 814 {\ 815 PetscInt __l;\ 816 _4_ierr = ISLocalToGlobalMappingApplyBlock(map,nrows,rows,rows);CHKERRQ(_4_ierr);\ 817 _4_ierr = ISLocalToGlobalMappingApplyBlock(map,ncols,cols,cols);CHKERRQ(_4_ierr);\ 818 for (__l=0;__l<nrows;__l++) {\ 819 _4_ierr = MatPreallocateSymmetricSetBlock((rows)[__l],ncols,cols,dnz,onz);CHKERRQ(_4_ierr);\ 820 }\ 821 } 822 /*MC 823 MatPreallocateSet - Indicates the locations (rows and columns) in the matrix where nonzeros will be 824 inserted using a local number of the rows and columns 825 826 Synopsis: 827 #include <petscmat.h> 828 PetscErrorCode MatPreallocateSet(PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 829 830 Not Collective 831 832 Input Parameters: 833 + row - the row 834 . ncols - the number of columns in the matrix 835 - cols - the columns indicated 836 837 Output Parameters: 838 + dnz - the array that will be passed to the matrix preallocation routines 839 - ozn - the other array passed to the matrix preallocation routines 840 841 Level: intermediate 842 843 Notes: 844 See Users-Manual: ch_performance for more details. 845 846 Do not malloc or free dnz and onz that is handled internally by these routines 847 848 This is a MACRO not a function because it uses variables declared in MatPreallocateInitialize(). 849 850 Concepts: preallocation^Matrix 851 852 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateInitialize(), 853 MatPreallocateInitialize(), MatPreallocateSetLocal() 854 M*/ 855 #define MatPreallocateSet(row,nc,cols,dnz,onz) 0;\ 856 { PetscInt __i; \ 857 if (row < __rstart) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Trying to set preallocation for row %D less than first local row %D",row,__rstart);\ 858 if (row >= __rstart+__nrows) SETERRQ2(PETSC_COMM_SELF,PETSC_ERR_ARG_OUTOFRANGE,"Trying to set preallocation for row %D greater than last local row %D",row,__rstart+__nrows-1);\ 859 for (__i=0; __i<nc; __i++) {\ 860 if ((cols)[__i] < __start || (cols)[__i] >= __end) onz[row - __rstart]++; \ 861 else dnz[row - __rstart]++;\ 862 }\ 863 } 864 865 /*MC 866 MatPreallocateSymmetricSetBlock - Indicates the locations (rows and columns) in the matrix where nonzeros will be 867 inserted using a local number of the rows and columns 868 869 Synopsis: 870 #include <petscmat.h> 871 PetscErrorCode MatPreallocateSymmetricSetBlock(PetscInt nrows, PetscInt *rows,PetscInt ncols, PetscInt *cols,PetscInt *dnz, PetscInt *onz) 872 873 Not Collective 874 875 Input Parameters: 876 + nrows - the number of rows indicated 877 . rows - the indices of the rows 878 . ncols - the number of columns in the matrix 879 . cols - the columns indicated 880 . dnz - the array that will be passed to the matrix preallocation routines 881 - ozn - the other array passed to the matrix preallocation routines 882 883 Level: intermediate 884 885 Notes: 886 See Users-Manual: ch_performance for more details. 887 888 Do not malloc or free dnz and onz that is handled internally by these routines 889 890 This is a MACRO not a function because it uses variables declared in MatPreallocateInitialize(). 891 892 Concepts: preallocation^Matrix 893 894 .seealso: MatPreallocateFinalize(), MatPreallocateSet(), MatPreallocateInitialize(), 895 MatPreallocateInitialize(), MatPreallocateSymmetricSetLocalBlock(), MatPreallocateSetLocal() 896 M*/ 897 #define MatPreallocateSymmetricSetBlock(row,nc,cols,dnz,onz) 0;\ 898 { PetscInt __i; \ 899 for (__i=0; __i<nc; __i++) {\ 900 if (cols[__i] >= __end) onz[row - __rstart]++; \ 901 else if (cols[__i] >= row) dnz[row - __rstart]++;\ 902 }\ 903 } 904 905 /*MC 906 MatPreallocateLocation - An alternative to MatPreallocationSet() that puts the nonzero locations into the matrix if it exists 907 908 Synopsis: 909 #include <petscmat.h> 910 PetscErrorCode MatPreallocateLocations(Mat A,PetscInt row,PetscInt ncols,PetscInt *cols,PetscInt *dnz,PetscInt *onz) 911 912 Not Collective 913 914 Input Parameters: 915 . A - matrix 916 . row - row where values exist (must be local to this process) 917 . ncols - number of columns 918 . cols - columns with nonzeros 919 . dnz - the array that will be passed to the matrix preallocation routines 920 - ozn - the other array passed to the matrix preallocation routines 921 922 Level: intermediate 923 924 Notes: 925 See Users-Manual: ch_performance for more details. 926 927 Do not malloc or free dnz and onz that is handled internally by these routines 928 929 This is a MACRO not a function because it uses a bunch of variables private to the MatPreallocation.... routines. 930 931 Concepts: preallocation^Matrix 932 933 .seealso: MatPreallocateInitialize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateSetLocal(), 934 MatPreallocateSymmetricSetLocalBlock() 935 M*/ 936 #define MatPreallocateLocation(A,row,ncols,cols,dnz,onz) 0;if (A) {ierr = MatSetValues(A,1,&row,ncols,cols,NULL,INSERT_VALUES);CHKERRQ(ierr);} else {ierr = MatPreallocateSet(row,ncols,cols,dnz,onz);CHKERRQ(ierr);} 937 938 939 /*MC 940 MatPreallocateFinalize - Ends the block of code that will count the number of nonzeros per 941 row in a matrix providing the data that one can use to correctly preallocate the matrix. 942 943 Synopsis: 944 #include <petscmat.h> 945 PetscErrorCode MatPreallocateFinalize(PetscInt *dnz, PetscInt *onz) 946 947 Collective on MPI_Comm 948 949 Input Parameters: 950 + dnz - the array that was be passed to the matrix preallocation routines 951 - ozn - the other array passed to the matrix preallocation routines 952 953 Level: intermediate 954 955 Notes: 956 See Users-Manual: ch_performance for more details. 957 958 Do not malloc or free dnz and onz that is handled internally by these routines 959 960 This is a MACRO not a function because it closes the { started in MatPreallocateInitialize(). 961 962 Concepts: preallocation^Matrix 963 964 .seealso: MatPreallocateInitialize(), MatPreallocateSet(), MatPreallocateSymmetricSetBlock(), MatPreallocateSetLocal(), 965 MatPreallocateSymmetricSetLocalBlock() 966 M*/ 967 #define MatPreallocateFinalize(dnz,onz) 0;_4_ierr = PetscFree2(dnz,onz);CHKERRQ(_4_ierr);} 968 969 /* Routines unique to particular data structures */ 970 PETSC_EXTERN PetscErrorCode MatShellGetContext(Mat,void *); 971 972 PETSC_EXTERN PetscErrorCode MatInodeAdjustForInodes(Mat,IS*,IS*); 973 PETSC_EXTERN PetscErrorCode MatInodeGetInodeSizes(Mat,PetscInt *,PetscInt *[],PetscInt *); 974 975 PETSC_EXTERN PetscErrorCode MatSeqAIJSetColumnIndices(Mat,PetscInt[]); 976 PETSC_EXTERN PetscErrorCode MatSeqBAIJSetColumnIndices(Mat,PetscInt[]); 977 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscScalar[],Mat*); 978 PETSC_EXTERN PetscErrorCode MatCreateSeqBAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscScalar[],Mat*); 979 PETSC_EXTERN PetscErrorCode MatCreateSeqSBAIJWithArrays(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscScalar[],Mat*); 980 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJFromTriple(MPI_Comm,PetscInt,PetscInt,PetscInt[],PetscInt[],PetscScalar[],Mat*,PetscInt,PetscBool); 981 982 #define MAT_SKIP_ALLOCATION -4 983 984 PETSC_EXTERN PetscErrorCode MatSeqBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[]); 985 PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[]); 986 PETSC_EXTERN PetscErrorCode MatSeqAIJSetPreallocation(Mat,PetscInt,const PetscInt[]); 987 988 PETSC_EXTERN PetscErrorCode MatMPIBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[]); 989 PETSC_EXTERN PetscErrorCode MatMPISBAIJSetPreallocation(Mat,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[]); 990 PETSC_EXTERN PetscErrorCode MatMPIAIJSetPreallocation(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[]); 991 PETSC_EXTERN PetscErrorCode MatSeqAIJSetPreallocationCSR(Mat,const PetscInt [],const PetscInt [],const PetscScalar []); 992 PETSC_EXTERN PetscErrorCode MatSeqBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); 993 PETSC_EXTERN PetscErrorCode MatMPIAIJSetPreallocationCSR(Mat,const PetscInt[],const PetscInt[],const PetscScalar[]); 994 PETSC_EXTERN PetscErrorCode MatMPIBAIJSetPreallocationCSR(Mat,PetscInt,const PetscInt[],const PetscInt[],const PetscScalar[]); 995 PETSC_EXTERN PetscErrorCode MatMPIAdjSetPreallocation(Mat,PetscInt[],PetscInt[],PetscInt[]); 996 PETSC_EXTERN PetscErrorCode MatMPIDenseSetPreallocation(Mat,PetscScalar[]); 997 PETSC_EXTERN PetscErrorCode MatSeqDenseSetPreallocation(Mat,PetscScalar[]); 998 PETSC_EXTERN PetscErrorCode MatMPIAIJGetSeqAIJ(Mat,Mat*,Mat*,const PetscInt*[]); 999 PETSC_EXTERN PetscErrorCode MatMPIBAIJGetSeqBAIJ(Mat,Mat*,Mat*,const PetscInt*[]); 1000 PETSC_EXTERN PetscErrorCode MatMPIAdjCreateNonemptySubcommMat(Mat,Mat*); 1001 1002 PETSC_EXTERN PetscErrorCode MatISSetPreallocation(Mat,PetscInt,const PetscInt[],PetscInt,const PetscInt[]); 1003 PETSC_EXTERN PetscErrorCode MatISSetUpSF(Mat); 1004 PETSC_EXTERN PetscErrorCode MatSeqDenseSetLDA(Mat,PetscInt); 1005 PETSC_EXTERN PetscErrorCode MatDenseGetLocalMatrix(Mat,Mat*); 1006 1007 PETSC_EXTERN PetscErrorCode MatStoreValues(Mat); 1008 PETSC_EXTERN PetscErrorCode MatRetrieveValues(Mat); 1009 1010 PETSC_EXTERN PetscErrorCode MatDAADSetCtx(Mat,void*); 1011 1012 PETSC_EXTERN PetscErrorCode MatFindNonzeroRows(Mat,IS*); 1013 PETSC_EXTERN PetscErrorCode MatFindZeroRows(Mat,IS*); 1014 /* 1015 These routines are not usually accessed directly, rather solving is 1016 done through the KSP and PC interfaces. 1017 */ 1018 1019 /*J 1020 MatOrderingType - String with the name of a PETSc matrix ordering 1021 1022 Level: beginner 1023 1024 .seealso: MatGetOrdering() 1025 J*/ 1026 typedef const char* MatOrderingType; 1027 #define MATORDERINGNATURAL "natural" 1028 #define MATORDERINGND "nd" 1029 #define MATORDERING1WD "1wd" 1030 #define MATORDERINGRCM "rcm" 1031 #define MATORDERINGQMD "qmd" 1032 #define MATORDERINGROWLENGTH "rowlength" 1033 #define MATORDERINGWBM "wbm" 1034 #define MATORDERINGSPECTRAL "spectral" 1035 #define MATORDERINGAMD "amd" /* only works if UMFPACK is installed with PETSc */ 1036 1037 PETSC_EXTERN PetscErrorCode MatGetOrdering(Mat,MatOrderingType,IS*,IS*); 1038 PETSC_EXTERN PetscErrorCode MatGetOrderingList(PetscFunctionList*); 1039 PETSC_EXTERN PetscErrorCode MatOrderingRegister(const char[],PetscErrorCode(*)(Mat,MatOrderingType,IS*,IS*)); 1040 PETSC_EXTERN PetscFunctionList MatOrderingList; 1041 1042 PETSC_EXTERN PetscErrorCode MatReorderForNonzeroDiagonal(Mat,PetscReal,IS,IS); 1043 PETSC_EXTERN PetscErrorCode MatCreateLaplacian(Mat,PetscReal,PetscBool,Mat*); 1044 1045 /*S 1046 MatFactorShiftType - Numeric Shift. 1047 1048 Level: beginner 1049 1050 S*/ 1051 typedef enum {MAT_SHIFT_NONE,MAT_SHIFT_NONZERO,MAT_SHIFT_POSITIVE_DEFINITE,MAT_SHIFT_INBLOCKS} MatFactorShiftType; 1052 PETSC_EXTERN const char *const MatFactorShiftTypes[]; 1053 PETSC_EXTERN const char *const MatFactorShiftTypesDetail[]; 1054 1055 /*S 1056 MatFactorError - indicates what type of error in matrix factor 1057 1058 Level: beginner 1059 1060 Developer Notes: Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1061 1062 .seealso: MatGetFactor() 1063 S*/ 1064 typedef enum {MAT_FACTOR_NOERROR,MAT_FACTOR_STRUCT_ZEROPIVOT,MAT_FACTOR_NUMERIC_ZEROPIVOT,MAT_FACTOR_OUTMEMORY,MAT_FACTOR_OTHER} MatFactorError; 1065 1066 PETSC_EXTERN PetscErrorCode MatFactorGetError(Mat,MatFactorError*); 1067 PETSC_EXTERN PetscErrorCode MatFactorClearError(Mat); 1068 PETSC_EXTERN PetscErrorCode MatFactorGetErrorZeroPivot(Mat,PetscReal*,PetscInt*); 1069 1070 /*S 1071 MatFactorInfo - Data passed into the matrix factorization routines, and information about the resulting factorization 1072 1073 In Fortran these are simply double precision arrays of size MAT_FACTORINFO_SIZE, that is use 1074 $ MatFactorInfo info(MAT_FACTORINFO_SIZE) 1075 1076 Notes: These are not usually directly used by users, instead use PC type of LU, ILU, CHOLESKY or ICC. 1077 1078 You can use MatFactorInfoInitialize() to set default values. 1079 1080 Level: developer 1081 1082 .seealso: MatLUFactorSymbolic(), MatILUFactorSymbolic(), MatCholeskyFactorSymbolic(), MatICCFactorSymbolic(), MatICCFactor(), 1083 MatFactorInfoInitialize() 1084 1085 S*/ 1086 typedef struct { 1087 PetscReal diagonal_fill; /* force diagonal to fill in if initially not filled */ 1088 PetscReal usedt; 1089 PetscReal dt; /* drop tolerance */ 1090 PetscReal dtcol; /* tolerance for pivoting */ 1091 PetscReal dtcount; /* maximum nonzeros to be allowed per row */ 1092 PetscReal fill; /* expected fill, nonzeros in factored matrix/nonzeros in original matrix */ 1093 PetscReal levels; /* ICC/ILU(levels) */ 1094 PetscReal pivotinblocks; /* for BAIJ and SBAIJ matrices pivot in factorization on blocks, default 1.0 1095 factorization may be faster if do not pivot */ 1096 PetscReal zeropivot; /* pivot is called zero if less than this */ 1097 PetscReal shifttype; /* type of shift added to matrix factor to prevent zero pivots */ 1098 PetscReal shiftamount; /* how large the shift is */ 1099 } MatFactorInfo; 1100 1101 PETSC_EXTERN PetscErrorCode MatFactorInfoInitialize(MatFactorInfo*); 1102 PETSC_EXTERN PetscErrorCode MatCholeskyFactor(Mat,IS,const MatFactorInfo*); 1103 PETSC_EXTERN PetscErrorCode MatCholeskyFactorSymbolic(Mat,Mat,IS,const MatFactorInfo*); 1104 PETSC_EXTERN PetscErrorCode MatCholeskyFactorNumeric(Mat,Mat,const MatFactorInfo*); 1105 PETSC_EXTERN PetscErrorCode MatLUFactor(Mat,IS,IS,const MatFactorInfo*); 1106 PETSC_EXTERN PetscErrorCode MatILUFactor(Mat,IS,IS,const MatFactorInfo*); 1107 PETSC_EXTERN PetscErrorCode MatLUFactorSymbolic(Mat,Mat,IS,IS,const MatFactorInfo*); 1108 PETSC_EXTERN PetscErrorCode MatILUFactorSymbolic(Mat,Mat,IS,IS,const MatFactorInfo*); 1109 PETSC_EXTERN PetscErrorCode MatICCFactorSymbolic(Mat,Mat,IS,const MatFactorInfo*); 1110 PETSC_EXTERN PetscErrorCode MatICCFactor(Mat,IS,const MatFactorInfo*); 1111 PETSC_EXTERN PetscErrorCode MatLUFactorNumeric(Mat,Mat,const MatFactorInfo*); 1112 PETSC_EXTERN PetscErrorCode MatGetInertia(Mat,PetscInt*,PetscInt*,PetscInt*); 1113 PETSC_EXTERN PetscErrorCode MatSolve(Mat,Vec,Vec); 1114 PETSC_EXTERN PetscErrorCode MatForwardSolve(Mat,Vec,Vec); 1115 PETSC_EXTERN PetscErrorCode MatBackwardSolve(Mat,Vec,Vec); 1116 PETSC_EXTERN PetscErrorCode MatSolveAdd(Mat,Vec,Vec,Vec); 1117 PETSC_EXTERN PetscErrorCode MatSolveTranspose(Mat,Vec,Vec); 1118 PETSC_EXTERN PetscErrorCode MatSolveTransposeAdd(Mat,Vec,Vec,Vec); 1119 PETSC_EXTERN PetscErrorCode MatSolves(Mat,Vecs,Vecs); 1120 PETSC_EXTERN PetscErrorCode MatSetUnfactored(Mat); 1121 1122 typedef enum {MAT_FACTOR_SCHUR_UNFACTORED, MAT_FACTOR_SCHUR_FACTORED, MAT_FACTOR_SCHUR_INVERTED} MatFactorSchurStatus; 1123 PETSC_EXTERN PetscErrorCode MatFactorSetSchurIS(Mat,IS); 1124 PETSC_EXTERN PetscErrorCode MatFactorGetSchurComplement(Mat,Mat*,MatFactorSchurStatus*); 1125 PETSC_EXTERN PetscErrorCode MatFactorRestoreSchurComplement(Mat,Mat*,MatFactorSchurStatus); 1126 PETSC_EXTERN PetscErrorCode MatFactorInvertSchurComplement(Mat); 1127 PETSC_EXTERN PetscErrorCode MatFactorCreateSchurComplement(Mat,Mat*,MatFactorSchurStatus*); 1128 PETSC_EXTERN PetscErrorCode MatFactorSolveSchurComplement(Mat,Vec,Vec); 1129 PETSC_EXTERN PetscErrorCode MatFactorSolveSchurComplementTranspose(Mat,Vec,Vec); 1130 PETSC_EXTERN PetscErrorCode MatFactorFactorizeSchurComplement(Mat); 1131 1132 /*E 1133 MatSORType - What type of (S)SOR to perform 1134 1135 Level: beginner 1136 1137 May be bitwise ORd together 1138 1139 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1140 1141 MatSORType may be bitwise ORd together, so do not change the numbers 1142 1143 .seealso: MatSOR() 1144 E*/ 1145 typedef enum {SOR_FORWARD_SWEEP=1,SOR_BACKWARD_SWEEP=2,SOR_SYMMETRIC_SWEEP=3, 1146 SOR_LOCAL_FORWARD_SWEEP=4,SOR_LOCAL_BACKWARD_SWEEP=8, 1147 SOR_LOCAL_SYMMETRIC_SWEEP=12,SOR_ZERO_INITIAL_GUESS=16, 1148 SOR_EISENSTAT=32,SOR_APPLY_UPPER=64,SOR_APPLY_LOWER=128} MatSORType; 1149 PETSC_EXTERN PetscErrorCode MatSOR(Mat,Vec,PetscReal,MatSORType,PetscReal,PetscInt,PetscInt,Vec); 1150 1151 /* 1152 These routines are for efficiently computing Jacobians via finite differences. 1153 */ 1154 1155 /*S 1156 MatColoring - Object for managing the coloring of matrices. 1157 1158 Level: beginner 1159 1160 Concepts: matrix, coloring 1161 1162 .seealso: MatFDColoringCreate() ISColoring MatFDColoring 1163 S*/ 1164 typedef struct _p_MatColoring* MatColoring; 1165 /*J 1166 MatColoringType - String with the name of a PETSc matrix coloring 1167 1168 Level: beginner 1169 1170 .seealso: MatColoringSetType(), MatColoring 1171 J*/ 1172 1173 typedef const char* MatColoringType; 1174 #define MATCOLORINGJP "jp" 1175 #define MATCOLORINGPOWER "power" 1176 #define MATCOLORINGNATURAL "natural" 1177 #define MATCOLORINGSL "sl" 1178 #define MATCOLORINGLF "lf" 1179 #define MATCOLORINGID "id" 1180 #define MATCOLORINGGREEDY "greedy" 1181 1182 /*E 1183 MatColoringWeightType - Type of weight scheme 1184 1185 Not Collective 1186 1187 + MAT_COLORING_RANDOM - Random weights 1188 . MAT_COLORING_LEXICAL - Lexical weighting based upon global numbering. 1189 - MAT_COLORING_LF - Last-first weighting. 1190 1191 Level: intermediate 1192 1193 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1194 1195 .seealso: MatCUSPSetFormat(), MatCUSPFormatOperation 1196 E*/ 1197 typedef enum {MAT_COLORING_WEIGHT_RANDOM,MAT_COLORING_WEIGHT_LEXICAL,MAT_COLORING_WEIGHT_LF,MAT_COLORING_WEIGHT_SL} MatColoringWeightType; 1198 1199 PETSC_EXTERN PetscErrorCode MatColoringCreate(Mat,MatColoring*); 1200 PETSC_EXTERN PetscErrorCode MatColoringGetDegrees(Mat,PetscInt,PetscInt*); 1201 PETSC_EXTERN PetscErrorCode MatColoringDestroy(MatColoring*); 1202 PETSC_EXTERN PetscErrorCode MatColoringView(MatColoring,PetscViewer); 1203 PETSC_EXTERN PetscErrorCode MatColoringSetType(MatColoring,MatColoringType); 1204 PETSC_EXTERN PetscErrorCode MatColoringSetFromOptions(MatColoring); 1205 PETSC_EXTERN PetscErrorCode MatColoringSetDistance(MatColoring,PetscInt); 1206 PETSC_EXTERN PetscErrorCode MatColoringGetDistance(MatColoring,PetscInt*); 1207 PETSC_EXTERN PetscErrorCode MatColoringSetMaxColors(MatColoring,PetscInt); 1208 PETSC_EXTERN PetscErrorCode MatColoringGetMaxColors(MatColoring,PetscInt*); 1209 PETSC_EXTERN PetscErrorCode MatColoringApply(MatColoring,ISColoring*); 1210 PETSC_EXTERN PetscErrorCode MatColoringRegister(const char[],PetscErrorCode(*)(MatColoring)); 1211 PETSC_EXTERN PetscErrorCode MatColoringPatch(Mat,PetscInt,PetscInt,ISColoringValue[],ISColoring*); 1212 PETSC_EXTERN PetscErrorCode MatColoringSetWeightType(MatColoring,MatColoringWeightType); 1213 PETSC_EXTERN PetscErrorCode MatColoringSetWeights(MatColoring,PetscReal*,PetscInt*); 1214 PETSC_EXTERN PetscErrorCode MatColoringCreateWeights(MatColoring,PetscReal **,PetscInt **lperm); 1215 PETSC_EXTERN PetscErrorCode MatColoringTestValid(MatColoring,ISColoring); 1216 1217 /*S 1218 MatFDColoring - Object for computing a sparse Jacobian via finite differences 1219 and coloring 1220 1221 Level: beginner 1222 1223 Concepts: coloring, sparse Jacobian, finite differences 1224 1225 .seealso: MatFDColoringCreate() 1226 S*/ 1227 typedef struct _p_MatFDColoring* MatFDColoring; 1228 1229 PETSC_EXTERN PetscErrorCode MatFDColoringCreate(Mat,ISColoring,MatFDColoring *); 1230 PETSC_EXTERN PetscErrorCode MatFDColoringDestroy(MatFDColoring*); 1231 PETSC_EXTERN PetscErrorCode MatFDColoringView(MatFDColoring,PetscViewer); 1232 PETSC_EXTERN PetscErrorCode MatFDColoringSetFunction(MatFDColoring,PetscErrorCode (*)(void),void*); 1233 PETSC_EXTERN PetscErrorCode MatFDColoringGetFunction(MatFDColoring,PetscErrorCode (**)(void),void**); 1234 PETSC_EXTERN PetscErrorCode MatFDColoringSetParameters(MatFDColoring,PetscReal,PetscReal); 1235 PETSC_EXTERN PetscErrorCode MatFDColoringSetFromOptions(MatFDColoring); 1236 PETSC_EXTERN PetscErrorCode MatFDColoringApply(Mat,MatFDColoring,Vec,void *); 1237 PETSC_EXTERN PetscErrorCode MatFDColoringSetF(MatFDColoring,Vec); 1238 PETSC_EXTERN PetscErrorCode MatFDColoringGetPerturbedColumns(MatFDColoring,PetscInt*,const PetscInt*[]); 1239 PETSC_EXTERN PetscErrorCode MatFDColoringSetUp(Mat,ISColoring,MatFDColoring); 1240 PETSC_EXTERN PetscErrorCode MatFDColoringSetBlockSize(MatFDColoring,PetscInt,PetscInt); 1241 1242 1243 /*S 1244 MatTransposeColoring - Object for computing a sparse matrix product C=A*B^T via coloring 1245 1246 Level: beginner 1247 1248 Concepts: coloring, sparse matrix product 1249 1250 .seealso: MatTransposeColoringCreate() 1251 S*/ 1252 typedef struct _p_MatTransposeColoring* MatTransposeColoring; 1253 1254 PETSC_EXTERN PetscErrorCode MatTransposeColoringCreate(Mat,ISColoring,MatTransposeColoring *); 1255 PETSC_EXTERN PetscErrorCode MatTransColoringApplySpToDen(MatTransposeColoring,Mat,Mat); 1256 PETSC_EXTERN PetscErrorCode MatTransColoringApplyDenToSp(MatTransposeColoring,Mat,Mat); 1257 PETSC_EXTERN PetscErrorCode MatTransposeColoringDestroy(MatTransposeColoring*); 1258 1259 /* 1260 These routines are for partitioning matrices: currently used only 1261 for adjacency matrix, MatCreateMPIAdj(). 1262 */ 1263 1264 /*S 1265 MatPartitioning - Object for managing the partitioning of a matrix or graph 1266 1267 Level: beginner 1268 1269 Concepts: partitioning 1270 1271 .seealso: MatPartitioningCreate(), MatPartitioningType 1272 S*/ 1273 typedef struct _p_MatPartitioning* MatPartitioning; 1274 1275 /*J 1276 MatPartitioningType - String with the name of a PETSc matrix partitioning 1277 1278 Level: beginner 1279 dm 1280 .seealso: MatPartitioningCreate(), MatPartitioning 1281 J*/ 1282 typedef const char* MatPartitioningType; 1283 #define MATPARTITIONINGCURRENT "current" 1284 #define MATPARTITIONINGAVERAGE "average" 1285 #define MATPARTITIONINGSQUARE "square" 1286 #define MATPARTITIONINGPARMETIS "parmetis" 1287 #define MATPARTITIONINGCHACO "chaco" 1288 #define MATPARTITIONINGPARTY "party" 1289 #define MATPARTITIONINGPTSCOTCH "ptscotch" 1290 #define MATPARTITIONINGHIERARCH "hierarch" 1291 1292 1293 PETSC_EXTERN PetscErrorCode MatPartitioningCreate(MPI_Comm,MatPartitioning*); 1294 PETSC_EXTERN PetscErrorCode MatPartitioningSetType(MatPartitioning,MatPartitioningType); 1295 PETSC_EXTERN PetscErrorCode MatPartitioningSetNParts(MatPartitioning,PetscInt); 1296 PETSC_EXTERN PetscErrorCode MatPartitioningSetAdjacency(MatPartitioning,Mat); 1297 PETSC_EXTERN PetscErrorCode MatPartitioningSetVertexWeights(MatPartitioning,const PetscInt[]); 1298 PETSC_EXTERN PetscErrorCode MatPartitioningSetPartitionWeights(MatPartitioning,const PetscReal []); 1299 PETSC_EXTERN PetscErrorCode MatPartitioningApply(MatPartitioning,IS*); 1300 PETSC_EXTERN PetscErrorCode MatPartitioningDestroy(MatPartitioning*); 1301 1302 PETSC_EXTERN PetscErrorCode MatPartitioningRegister(const char[],PetscErrorCode (*)(MatPartitioning)); 1303 1304 1305 1306 PETSC_EXTERN PetscErrorCode MatPartitioningView(MatPartitioning,PetscViewer); 1307 PETSC_EXTERN PetscErrorCode MatPartitioningSetFromOptions(MatPartitioning); 1308 PETSC_EXTERN PetscErrorCode MatPartitioningGetType(MatPartitioning,MatPartitioningType*); 1309 1310 PETSC_EXTERN PetscErrorCode MatPartitioningParmetisSetRepartition(MatPartitioning part); 1311 PETSC_EXTERN PetscErrorCode MatPartitioningParmetisSetCoarseSequential(MatPartitioning); 1312 PETSC_EXTERN PetscErrorCode MatPartitioningParmetisGetEdgeCut(MatPartitioning, PetscInt *); 1313 1314 typedef enum { MP_CHACO_MULTILEVEL=1,MP_CHACO_SPECTRAL=2,MP_CHACO_LINEAR=4,MP_CHACO_RANDOM=5,MP_CHACO_SCATTERED=6 } MPChacoGlobalType; 1315 PETSC_EXTERN const char *const MPChacoGlobalTypes[]; 1316 typedef enum { MP_CHACO_KERNIGHAN=1,MP_CHACO_NONE=2 } MPChacoLocalType; 1317 PETSC_EXTERN const char *const MPChacoLocalTypes[]; 1318 typedef enum { MP_CHACO_LANCZOS=0,MP_CHACO_RQI=1 } MPChacoEigenType; 1319 PETSC_EXTERN const char *const MPChacoEigenTypes[]; 1320 1321 PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetGlobal(MatPartitioning,MPChacoGlobalType); 1322 PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetGlobal(MatPartitioning,MPChacoGlobalType*); 1323 PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetLocal(MatPartitioning,MPChacoLocalType); 1324 PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetLocal(MatPartitioning,MPChacoLocalType*); 1325 PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetCoarseLevel(MatPartitioning,PetscReal); 1326 PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetEigenSolver(MatPartitioning,MPChacoEigenType); 1327 PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetEigenSolver(MatPartitioning,MPChacoEigenType*); 1328 PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetEigenTol(MatPartitioning,PetscReal); 1329 PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetEigenTol(MatPartitioning,PetscReal*); 1330 PETSC_EXTERN PetscErrorCode MatPartitioningChacoSetEigenNumber(MatPartitioning,PetscInt); 1331 PETSC_EXTERN PetscErrorCode MatPartitioningChacoGetEigenNumber(MatPartitioning,PetscInt*); 1332 1333 #define MP_PARTY_OPT "opt" 1334 #define MP_PARTY_LIN "lin" 1335 #define MP_PARTY_SCA "sca" 1336 #define MP_PARTY_RAN "ran" 1337 #define MP_PARTY_GBF "gbf" 1338 #define MP_PARTY_GCF "gcf" 1339 #define MP_PARTY_BUB "bub" 1340 #define MP_PARTY_DEF "def" 1341 PETSC_EXTERN PetscErrorCode MatPartitioningPartySetGlobal(MatPartitioning,const char*); 1342 #define MP_PARTY_HELPFUL_SETS "hs" 1343 #define MP_PARTY_KERNIGHAN_LIN "kl" 1344 #define MP_PARTY_NONE "no" 1345 PETSC_EXTERN PetscErrorCode MatPartitioningPartySetLocal(MatPartitioning,const char*); 1346 PETSC_EXTERN PetscErrorCode MatPartitioningPartySetCoarseLevel(MatPartitioning,PetscReal); 1347 PETSC_EXTERN PetscErrorCode MatPartitioningPartySetBipart(MatPartitioning,PetscBool); 1348 PETSC_EXTERN PetscErrorCode MatPartitioningPartySetMatchOptimization(MatPartitioning,PetscBool); 1349 1350 typedef enum { MP_PTSCOTCH_QUALITY,MP_PTSCOTCH_SPEED,MP_PTSCOTCH_BALANCE,MP_PTSCOTCH_SAFETY,MP_PTSCOTCH_SCALABILITY } MPPTScotchStrategyType; 1351 PETSC_EXTERN const char *const MPPTScotchStrategyTypes[]; 1352 1353 PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchSetImbalance(MatPartitioning,PetscReal); 1354 PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchGetImbalance(MatPartitioning,PetscReal*); 1355 PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchSetStrategy(MatPartitioning,MPPTScotchStrategyType); 1356 PETSC_EXTERN PetscErrorCode MatPartitioningPTScotchGetStrategy(MatPartitioning,MPPTScotchStrategyType*); 1357 1358 /* 1359 * hierarchical partitioning 1360 */ 1361 PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalGetFineparts(MatPartitioning,IS*); 1362 PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalGetCoarseparts(MatPartitioning,IS*); 1363 PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalSetNcoarseparts(MatPartitioning,PetscInt); 1364 PETSC_EXTERN PetscErrorCode MatPartitioningHierarchicalSetNfineparts(MatPartitioning, PetscInt); 1365 1366 PETSC_EXTERN PetscErrorCode MatMeshToVertexGraph(Mat,PetscInt,Mat*); 1367 PETSC_EXTERN PetscErrorCode MatMeshToCellGraph(Mat,PetscInt,Mat*); 1368 1369 /* 1370 If you add entries here you must also add them to petsc/finclude/petscmat.h 1371 */ 1372 typedef enum { MATOP_SET_VALUES=0, 1373 MATOP_GET_ROW=1, 1374 MATOP_RESTORE_ROW=2, 1375 MATOP_MULT=3, 1376 MATOP_MULT_ADD=4, 1377 MATOP_MULT_TRANSPOSE=5, 1378 MATOP_MULT_TRANSPOSE_ADD=6, 1379 MATOP_SOLVE=7, 1380 MATOP_SOLVE_ADD=8, 1381 MATOP_SOLVE_TRANSPOSE=9, 1382 MATOP_SOLVE_TRANSPOSE_ADD=10, 1383 MATOP_LUFACTOR=11, 1384 MATOP_CHOLESKYFACTOR=12, 1385 MATOP_SOR=13, 1386 MATOP_TRANSPOSE=14, 1387 MATOP_GETINFO=15, 1388 MATOP_EQUAL=16, 1389 MATOP_GET_DIAGONAL=17, 1390 MATOP_DIAGONAL_SCALE=18, 1391 MATOP_NORM=19, 1392 MATOP_ASSEMBLY_BEGIN=20, 1393 MATOP_ASSEMBLY_END=21, 1394 MATOP_SET_OPTION=22, 1395 MATOP_ZERO_ENTRIES=23, 1396 MATOP_ZERO_ROWS=24, 1397 MATOP_LUFACTOR_SYMBOLIC=25, 1398 MATOP_LUFACTOR_NUMERIC=26, 1399 MATOP_CHOLESKY_FACTOR_SYMBOLIC=27, 1400 MATOP_CHOLESKY_FACTOR_NUMERIC=28, 1401 MATOP_SETUP_PREALLOCATION=29, 1402 MATOP_ILUFACTOR_SYMBOLIC=30, 1403 MATOP_ICCFACTOR_SYMBOLIC=31, 1404 MATOP_GET_DIAGONAL_BLOCK=32, 1405 /* MATOP_PLACEHOLDER_33=33, */ 1406 MATOP_DUPLICATE=34, 1407 MATOP_FORWARD_SOLVE=35, 1408 MATOP_BACKWARD_SOLVE=36, 1409 MATOP_ILUFACTOR=37, 1410 MATOP_ICCFACTOR=38, 1411 MATOP_AXPY=39, 1412 MATOP_CREATE_SUBMATRICES=40, 1413 MATOP_INCREASE_OVERLAP=41, 1414 MATOP_GET_VALUES=42, 1415 MATOP_COPY=43, 1416 MATOP_GET_ROW_MAX=44, 1417 MATOP_SCALE=45, 1418 MATOP_SHIFT=46, 1419 MATOP_DIAGONAL_SET=47, 1420 MATOP_ZERO_ROWS_COLUMNS=48, 1421 MATOP_SET_RANDOM=49, 1422 MATOP_GET_ROW_IJ=50, 1423 MATOP_RESTORE_ROW_IJ=51, 1424 MATOP_GET_COLUMN_IJ=52, 1425 MATOP_RESTORE_COLUMN_IJ=53, 1426 MATOP_FDCOLORING_CREATE=54, 1427 MATOP_COLORING_PATCH=55, 1428 MATOP_SET_UNFACTORED=56, 1429 MATOP_PERMUTE=57, 1430 MATOP_SET_VALUES_BLOCKED=58, 1431 MATOP_CREATE_SUBMATRIX=59, 1432 MATOP_DESTROY=60, 1433 MATOP_VIEW=61, 1434 MATOP_CONVERT_FROM=62, 1435 MATOP_MATMAT_MULT=63, 1436 MATOP_MATMAT_MULT_SYMBOLIC=64, 1437 MATOP_MATMAT_MULT_NUMERIC=65, 1438 MATOP_SET_LOCAL_TO_GLOBAL_MAP=66, 1439 MATOP_SET_VALUES_LOCAL=67, 1440 MATOP_ZERO_ROWS_LOCAL=68, 1441 MATOP_GET_ROW_MAX_ABS=69, 1442 MATOP_GET_ROW_MIN_ABS=70, 1443 MATOP_CONVERT=71, 1444 MATOP_SET_COLORING=72, 1445 /* MATOP_PLACEHOLDER_73=73, */ 1446 MATOP_SET_VALUES_ADIFOR=74, 1447 MATOP_FD_COLORING_APPLY=75, 1448 MATOP_SET_FROM_OPTIONS=76, 1449 MATOP_MULT_CONSTRAINED=77, 1450 MATOP_MULT_TRANSPOSE_CONSTRAIN=78, 1451 MATOP_FIND_ZERO_DIAGONALS=79, 1452 MATOP_MULT_MULTIPLE=80, 1453 MATOP_SOLVE_MULTIPLE=81, 1454 MATOP_GET_INERTIA=82, 1455 MATOP_LOAD=83, 1456 MATOP_IS_SYMMETRIC=84, 1457 MATOP_IS_HERMITIAN=85, 1458 MATOP_IS_STRUCTURALLY_SYMMETRIC=86, 1459 MATOP_SET_VALUES_BLOCKEDLOCAL=87, 1460 MATOP_GET_VECS=88, 1461 MATOP_MAT_MULT=89, 1462 MATOP_MAT_MULT_SYMBOLIC=90, 1463 MATOP_MAT_MULT_NUMERIC=91, 1464 MATOP_PTAP=92, 1465 MATOP_PTAP_SYMBOLIC=93, 1466 MATOP_PTAP_NUMERIC=94, 1467 MATOP_MAT_TRANSPOSE_MULT=95, 1468 MATOP_MAT_TRANSPOSE_MULT_SYMBO=96, 1469 MATOP_MAT_TRANSPOSE_MULT_NUMER=97, 1470 /* MATOP_PLACEHOLDER_98=98, */ 1471 /* MATOP_PLACEHOLDER_99=99, */ 1472 /* MATOP_PLACEHOLDER_100=100, */ 1473 /* MATOP_PLACEHOLDER_101=101, */ 1474 MATOP_CONJUGATE=102, 1475 /* MATOP_PLACEHOLDER_103=103, */ 1476 MATOP_SET_VALUES_ROW=104, 1477 MATOP_REAL_PART=105, 1478 MATOP_IMAGINARY_PART=106, 1479 MATOP_GET_ROW_UPPER_TRIANGULAR=107, 1480 MATOP_RESTORE_ROW_UPPER_TRIANG=108, 1481 MATOP_MAT_SOLVE=109, 1482 MATOP_MAT_SOLVE_TRANSPOSE=110, 1483 MATOP_GET_ROW_MIN=111, 1484 MATOP_GET_COLUMN_VECTOR=112, 1485 MATOP_MISSING_DIAGONAL=113, 1486 MATOP_GET_SEQ_NONZERO_STRUCTUR=114, 1487 MATOP_CREATE=115, 1488 MATOP_GET_GHOSTS=116, 1489 MATOP_GET_LOCAL_SUB_MATRIX=117, 1490 MATOP_RESTORE_LOCALSUB_MATRIX=118, 1491 MATOP_MULT_DIAGONAL_BLOCK=119, 1492 MATOP_HERMITIAN_TRANSPOSE=120, 1493 MATOP_MULT_HERMITIAN_TRANSPOSE=121, 1494 MATOP_MULT_HERMITIAN_TRANS_ADD=122, 1495 MATOP_GET_MULTI_PROC_BLOCK=123, 1496 MATOP_FIND_NONZERO_ROWS=124, 1497 MATOP_GET_COLUMN_NORMS=125, 1498 MATOP_INVERT_BLOCK_DIAGONAL=126, 1499 /* MATOP_PLACEHOLDER_127=127, */ 1500 MATOP_GET_SUB_MATRICES_PARALLE=128, 1501 MATOP_SET_VALUES_BATCH=129, 1502 MATOP_TRANSPOSE_MAT_MULT=130, 1503 MATOP_TRANSPOSE_MAT_MULT_SYMBO=131, 1504 MATOP_TRANSPOSE_MAT_MULT_NUMER=132, 1505 MATOP_TRANSPOSE_COLORING_CREAT=133, 1506 MATOP_TRANS_COLORING_APPLY_SPT=134, 1507 MATOP_TRANS_COLORING_APPLY_DEN=135, 1508 MATOP_RART=136, 1509 MATOP_RART_SYMBOLIC=137, 1510 MATOP_RART_NUMERIC=138, 1511 MATOP_SET_BLOCK_SIZES=139, 1512 MATOP_AYPX=140, 1513 MATOP_RESIDUAL=141, 1514 MATOP_FDCOLORING_SETUP=142, 1515 MATOP_MPICONCATENATESEQ=144 1516 } MatOperation; 1517 PETSC_EXTERN PetscErrorCode MatHasOperation(Mat,MatOperation,PetscBool *); 1518 PETSC_EXTERN PetscErrorCode MatShellSetOperation(Mat,MatOperation,void(*)(void)); 1519 PETSC_EXTERN PetscErrorCode MatShellGetOperation(Mat,MatOperation,void(**)(void)); 1520 PETSC_EXTERN PetscErrorCode MatShellSetContext(Mat,void*); 1521 1522 /* 1523 Codes for matrices stored on disk. By default they are 1524 stored in a universal format. By changing the format with 1525 PetscViewerPushFormat(viewer,PETSC_VIEWER_NATIVE); the matrices will 1526 be stored in a way natural for the matrix, for example dense matrices 1527 would be stored as dense. Matrices stored this way may only be 1528 read into matrices of the same type. 1529 */ 1530 #define MATRIX_BINARY_FORMAT_DENSE -1 1531 1532 PETSC_EXTERN PetscErrorCode MatMPIBAIJSetHashTableFactor(Mat,PetscReal); 1533 PETSC_EXTERN PetscErrorCode MatISGetLocalMat(Mat,Mat*); 1534 PETSC_EXTERN PetscErrorCode MatISRestoreLocalMat(Mat,Mat*); 1535 PETSC_EXTERN PetscErrorCode MatISSetLocalMat(Mat,Mat); 1536 PETSC_EXTERN PetscErrorCode MatISGetMPIXAIJ(Mat,MatReuse,Mat*); 1537 1538 /*S 1539 MatNullSpace - Object that removes a null space from a vector, i.e. 1540 orthogonalizes the vector to a subsapce 1541 1542 Level: advanced 1543 1544 Concepts: matrix; linear operator, null space 1545 1546 Users manual sections: 1547 . sec_singular 1548 1549 .seealso: MatNullSpaceCreate() 1550 S*/ 1551 typedef struct _p_MatNullSpace* MatNullSpace; 1552 1553 PETSC_EXTERN PetscErrorCode MatNullSpaceCreate(MPI_Comm,PetscBool ,PetscInt,const Vec[],MatNullSpace*); 1554 PETSC_EXTERN PetscErrorCode MatNullSpaceSetFunction(MatNullSpace,PetscErrorCode (*)(MatNullSpace,Vec,void*),void*); 1555 PETSC_EXTERN PetscErrorCode MatNullSpaceDestroy(MatNullSpace*); 1556 PETSC_EXTERN PetscErrorCode MatNullSpaceRemove(MatNullSpace,Vec); 1557 PETSC_EXTERN PetscErrorCode MatGetNullSpace(Mat, MatNullSpace *); 1558 PETSC_EXTERN PetscErrorCode MatGetTransposeNullSpace(Mat, MatNullSpace *); 1559 PETSC_EXTERN PetscErrorCode MatSetTransposeNullSpace(Mat,MatNullSpace); 1560 PETSC_EXTERN PetscErrorCode MatSetNullSpace(Mat,MatNullSpace); 1561 PETSC_EXTERN PetscErrorCode MatSetNearNullSpace(Mat,MatNullSpace); 1562 PETSC_EXTERN PetscErrorCode MatGetNearNullSpace(Mat,MatNullSpace*); 1563 PETSC_EXTERN PetscErrorCode MatNullSpaceTest(MatNullSpace,Mat,PetscBool *); 1564 PETSC_EXTERN PetscErrorCode MatNullSpaceView(MatNullSpace,PetscViewer); 1565 PETSC_EXTERN PetscErrorCode MatNullSpaceGetVecs(MatNullSpace,PetscBool*,PetscInt*,const Vec**); 1566 PETSC_EXTERN PetscErrorCode MatNullSpaceCreateRigidBody(Vec,MatNullSpace*); 1567 1568 PETSC_EXTERN PetscErrorCode MatReorderingSeqSBAIJ(Mat,IS); 1569 PETSC_EXTERN PetscErrorCode MatMPISBAIJSetHashTableFactor(Mat,PetscReal); 1570 PETSC_EXTERN PetscErrorCode MatSeqSBAIJSetColumnIndices(Mat,PetscInt *); 1571 PETSC_EXTERN PetscErrorCode MatSeqBAIJInvertBlockDiagonal(Mat); 1572 1573 PETSC_EXTERN PetscErrorCode MatCreateMAIJ(Mat,PetscInt,Mat*); 1574 PETSC_EXTERN PetscErrorCode MatMAIJRedimension(Mat,PetscInt,Mat*); 1575 PETSC_EXTERN PetscErrorCode MatMAIJGetAIJ(Mat,Mat*); 1576 1577 PETSC_EXTERN PetscErrorCode MatComputeExplicitOperator(Mat,Mat*); 1578 1579 PETSC_EXTERN PetscErrorCode MatDiagonalScaleLocal(Mat,Vec); 1580 1581 PETSC_EXTERN PetscErrorCode MatCreateMFFD(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,Mat*); 1582 PETSC_EXTERN PetscErrorCode MatMFFDSetBase(Mat,Vec,Vec); 1583 PETSC_EXTERN PetscErrorCode MatMFFDSetFunction(Mat,PetscErrorCode(*)(void*,Vec,Vec),void*); 1584 PETSC_EXTERN PetscErrorCode MatMFFDSetFunctioni(Mat,PetscErrorCode (*)(void*,PetscInt,Vec,PetscScalar*)); 1585 PETSC_EXTERN PetscErrorCode MatMFFDSetFunctioniBase(Mat,PetscErrorCode (*)(void*,Vec)); 1586 PETSC_EXTERN PetscErrorCode MatMFFDSetHHistory(Mat,PetscScalar[],PetscInt); 1587 PETSC_EXTERN PetscErrorCode MatMFFDResetHHistory(Mat); 1588 PETSC_EXTERN PetscErrorCode MatMFFDSetFunctionError(Mat,PetscReal); 1589 PETSC_EXTERN PetscErrorCode MatMFFDSetPeriod(Mat,PetscInt); 1590 PETSC_EXTERN PetscErrorCode MatMFFDGetH(Mat,PetscScalar *); 1591 PETSC_EXTERN PetscErrorCode MatMFFDSetOptionsPrefix(Mat,const char[]); 1592 PETSC_EXTERN PetscErrorCode MatMFFDCheckPositivity(void*,Vec,Vec,PetscScalar*); 1593 PETSC_EXTERN PetscErrorCode MatMFFDSetCheckh(Mat,PetscErrorCode (*)(void*,Vec,Vec,PetscScalar*),void*); 1594 1595 /*S 1596 MatMFFD - A data structured used to manage the computation of the h differencing parameter for matrix-free 1597 Jacobian vector products 1598 1599 Notes: MATMFFD is a specific MatType which uses the MatMFFD data structure 1600 1601 MatMFFD*() methods actually take the Mat as their first argument. Not a MatMFFD data structure 1602 1603 Level: developer 1604 1605 .seealso: MATMFFD, MatCreateMFFD(), MatMFFDSetFuction(), MatMFFDSetType(), MatMFFDRegister() 1606 S*/ 1607 typedef struct _p_MatMFFD* MatMFFD; 1608 1609 /*J 1610 MatMFFDType - algorithm used to compute the h used in computing matrix-vector products via differencing of the function 1611 1612 Level: beginner 1613 1614 .seealso: MatMFFDSetType(), MatMFFDRegister() 1615 J*/ 1616 typedef const char* MatMFFDType; 1617 #define MATMFFD_DS "ds" 1618 #define MATMFFD_WP "wp" 1619 1620 PETSC_EXTERN PetscErrorCode MatMFFDSetType(Mat,MatMFFDType); 1621 PETSC_EXTERN PetscErrorCode MatMFFDRegister(const char[],PetscErrorCode (*)(MatMFFD)); 1622 1623 PETSC_EXTERN PetscErrorCode MatMFFDDSSetUmin(Mat,PetscReal); 1624 PETSC_EXTERN PetscErrorCode MatMFFDWPSetComputeNormU(Mat,PetscBool ); 1625 1626 PETSC_EXTERN PetscErrorCode MatFDColoringSetType(MatFDColoring,MatMFFDType); 1627 1628 PETSC_EXTERN PetscErrorCode PetscViewerMathematicaPutMatrix(PetscViewer, PetscInt, PetscInt, PetscReal *); 1629 PETSC_EXTERN PetscErrorCode PetscViewerMathematicaPutCSRMatrix(PetscViewer, PetscInt, PetscInt, PetscInt *, PetscInt *, PetscReal *); 1630 1631 /* 1632 PETSc interface to MUMPS 1633 */ 1634 #ifdef PETSC_HAVE_MUMPS 1635 PETSC_EXTERN PetscErrorCode MatMumpsSetIcntl(Mat,PetscInt,PetscInt); 1636 PETSC_EXTERN PetscErrorCode MatMumpsGetIcntl(Mat,PetscInt,PetscInt*); 1637 PETSC_EXTERN PetscErrorCode MatMumpsSetCntl(Mat,PetscInt,PetscReal); 1638 PETSC_EXTERN PetscErrorCode MatMumpsGetCntl(Mat,PetscInt,PetscReal*); 1639 1640 PETSC_EXTERN PetscErrorCode MatMumpsGetInfo(Mat,PetscInt,PetscInt*); 1641 PETSC_EXTERN PetscErrorCode MatMumpsGetInfog(Mat,PetscInt,PetscInt*); 1642 PETSC_EXTERN PetscErrorCode MatMumpsGetRinfo(Mat,PetscInt,PetscReal*); 1643 PETSC_EXTERN PetscErrorCode MatMumpsGetRinfog(Mat,PetscInt,PetscReal*); 1644 #endif 1645 1646 /* 1647 PETSc interface to Mkl_Pardiso 1648 */ 1649 #ifdef PETSC_HAVE_MKL_PARDISO 1650 PETSC_EXTERN PetscErrorCode MatMkl_PardisoSetCntl(Mat,PetscInt,PetscInt); 1651 #endif 1652 1653 /* 1654 PETSc interface to Mkl_CPardiso 1655 */ 1656 #ifdef PETSC_HAVE_MKL_CPARDISO 1657 PETSC_EXTERN PetscErrorCode MatMkl_CPardisoSetCntl(Mat,PetscInt,PetscInt); 1658 #endif 1659 1660 /* 1661 PETSc interface to SUPERLU 1662 */ 1663 #ifdef PETSC_HAVE_SUPERLU 1664 PETSC_EXTERN PetscErrorCode MatSuperluSetILUDropTol(Mat,PetscReal); 1665 #endif 1666 1667 /* 1668 PETSc interface to SUPERLU_DIST 1669 */ 1670 #ifdef PETSC_HAVE_SUPERLU_DIST 1671 PETSC_EXTERN PetscErrorCode MatSuperluDistGetDiagU(Mat,PetscScalar*); 1672 #endif 1673 1674 /* 1675 PETSc interface to STRUMPACK 1676 */ 1677 #ifdef PETSC_HAVE_STRUMPACK 1678 PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSRelCompTol(Mat,PetscReal); 1679 PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetHSSMinSize(Mat,PetscInt); 1680 PETSC_EXTERN PetscErrorCode MatSTRUMPACKSetColPerm(Mat,PetscBool); 1681 #endif 1682 1683 1684 #ifdef PETSC_HAVE_CUDA 1685 /*E 1686 MatCUSPARSEStorageFormat - indicates the storage format for CUSPARSE (GPU) 1687 matrices. 1688 1689 Not Collective 1690 1691 + MAT_CUSPARSE_CSR - Compressed Sparse Row 1692 . MAT_CUSPARSE_ELL - Ellpack (requires CUDA 4.2 or later). 1693 - MAT_CUSPARSE_HYB - Hybrid, a combination of Ellpack and Coordinate format (requires CUDA 4.2 or later). 1694 1695 Level: intermediate 1696 1697 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1698 1699 .seealso: MatCUSPARSESetFormat(), MatCUSPARSEFormatOperation 1700 E*/ 1701 1702 typedef enum {MAT_CUSPARSE_CSR, MAT_CUSPARSE_ELL, MAT_CUSPARSE_HYB} MatCUSPARSEStorageFormat; 1703 1704 /* these will be strings associated with enumerated type defined above */ 1705 PETSC_EXTERN const char *const MatCUSPARSEStorageFormats[]; 1706 1707 /*E 1708 MatCUSPARSEFormatOperation - indicates the operation of CUSPARSE (GPU) 1709 matrices whose operation should use a particular storage format. 1710 1711 Not Collective 1712 1713 + MAT_CUSPARSE_MULT_DIAG - sets the storage format for the diagonal matrix in the parallel MatMult 1714 . MAT_CUSPARSE_MULT_OFFDIAG - sets the storage format for the offdiagonal matrix in the parallel MatMult 1715 . MAT_CUSPARSE_MULT - sets the storage format for the entire matrix in the serial (single GPU) MatMult 1716 - MAT_CUSPARSE_ALL - sets the storage format for all CUSPARSE (GPU) matrices 1717 1718 Level: intermediate 1719 1720 .seealso: MatCUSPARSESetFormat(), MatCUSPARSEStorageFormat 1721 E*/ 1722 typedef enum {MAT_CUSPARSE_MULT_DIAG, MAT_CUSPARSE_MULT_OFFDIAG, MAT_CUSPARSE_MULT, MAT_CUSPARSE_ALL} MatCUSPARSEFormatOperation; 1723 1724 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJCUSPARSE(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 1725 PETSC_EXTERN PetscErrorCode MatCreateAIJCUSPARSE(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 1726 PETSC_EXTERN PetscErrorCode MatCUSPARSESetFormat(Mat,MatCUSPARSEFormatOperation,MatCUSPARSEStorageFormat); 1727 #endif 1728 1729 #if defined(PETSC_HAVE_CUSP) 1730 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJCUSP(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 1731 PETSC_EXTERN PetscErrorCode MatCreateAIJCUSP(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 1732 1733 /*E 1734 MatCUSPStorageFormat - indicates the storage format for CUSP (GPU) 1735 matrices. 1736 1737 Not Collective 1738 1739 + MAT_CUSP_CSR - Compressed Sparse Row 1740 . MAT_CUSP_DIA - Diagonal 1741 - MAT_CUSP_ELL - Ellpack 1742 1743 Level: intermediate 1744 1745 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1746 1747 .seealso: MatCUSPSetFormat(), MatCUSPFormatOperation 1748 E*/ 1749 typedef enum {MAT_CUSP_CSR, MAT_CUSP_DIA, MAT_CUSP_ELL} MatCUSPStorageFormat; 1750 1751 /* these will be strings associated with enumerated type defined above */ 1752 PETSC_EXTERN const char *const MatCUSPStorageFormats[]; 1753 1754 /*E 1755 MatCUSPFormatOperation - indicates the operation of CUSP (GPU) 1756 matrices whose operation should use a particular storage format. 1757 1758 Not Collective 1759 1760 + MAT_CUSP_MULT_DIAG - sets the storage format for the diagonal matrix in the parallel MatMult 1761 . MAT_CUSP_MULT_OFFDIAG - sets the storage format for the offdiagonal matrix in the parallel MatMult 1762 . MAT_CUSP_MULT - sets the storage format for the entire matrix in the serial (single GPU) MatMult 1763 - MAT_CUSP_ALL - sets the storage format for all CUSP (GPU) matrices 1764 1765 Level: intermediate 1766 1767 Any additions/changes here MUST also be made in include/petsc/finclude/petscmat.h 1768 1769 .seealso: MatCUSPSetFormat(), MatCUSPStorageFormat 1770 E*/ 1771 typedef enum {MAT_CUSP_MULT_DIAG, MAT_CUSP_MULT_OFFDIAG, MAT_CUSP_MULT, MAT_CUSP_ALL} MatCUSPFormatOperation; 1772 1773 PETSC_EXTERN PetscErrorCode MatCUSPSetFormat(Mat,MatCUSPFormatOperation,MatCUSPStorageFormat); 1774 #endif 1775 1776 #if defined(PETSC_HAVE_VIENNACL) 1777 PETSC_EXTERN PetscErrorCode MatCreateSeqAIJViennaCL(MPI_Comm,PetscInt,PetscInt,PetscInt,const PetscInt[],Mat*); 1778 PETSC_EXTERN PetscErrorCode MatCreateAIJViennaCL(MPI_Comm,PetscInt,PetscInt,PetscInt,PetscInt,PetscInt,const PetscInt[],PetscInt,const PetscInt[],Mat*); 1779 #endif 1780 1781 /* 1782 PETSc interface to FFTW 1783 */ 1784 #if defined(PETSC_HAVE_FFTW) 1785 PETSC_EXTERN PetscErrorCode VecScatterPetscToFFTW(Mat,Vec,Vec); 1786 PETSC_EXTERN PetscErrorCode VecScatterFFTWToPetsc(Mat,Vec,Vec); 1787 PETSC_EXTERN PetscErrorCode MatCreateVecsFFTW(Mat,Vec*,Vec*,Vec*); 1788 #endif 1789 1790 PETSC_EXTERN PetscErrorCode MatCreateNest(MPI_Comm,PetscInt,const IS[],PetscInt,const IS[],const Mat[],Mat*); 1791 PETSC_EXTERN PetscErrorCode MatNestGetSize(Mat,PetscInt*,PetscInt*); 1792 PETSC_EXTERN PetscErrorCode MatNestGetISs(Mat,IS[],IS[]); 1793 PETSC_EXTERN PetscErrorCode MatNestGetLocalISs(Mat,IS[],IS[]); 1794 PETSC_EXTERN PetscErrorCode MatNestGetSubMats(Mat,PetscInt*,PetscInt*,Mat***); 1795 PETSC_EXTERN PetscErrorCode MatNestGetSubMat(Mat,PetscInt,PetscInt,Mat*); 1796 PETSC_EXTERN PetscErrorCode MatNestSetVecType(Mat,VecType); 1797 PETSC_EXTERN PetscErrorCode MatNestSetSubMats(Mat,PetscInt,const IS[],PetscInt,const IS[],const Mat[]); 1798 PETSC_EXTERN PetscErrorCode MatNestSetSubMat(Mat,PetscInt,PetscInt,Mat); 1799 1800 PETSC_EXTERN PetscErrorCode MatChop(Mat,PetscReal); 1801 PETSC_EXTERN PetscErrorCode MatComputeBandwidth(Mat,PetscReal,PetscInt*); 1802 1803 PETSC_EXTERN PetscErrorCode MatSubdomainsCreateCoalesce(Mat,PetscInt,PetscInt*,IS**); 1804 1805 PETSC_EXTERN PetscErrorCode MatPreallocatorPreallocate(Mat,PetscBool,Mat); 1806 1807 PETSC_INTERN PetscErrorCode MatHeaderMerge(Mat,Mat*); 1808 PETSC_EXTERN PetscErrorCode MatHeaderReplace(Mat,Mat*); 1809 1810 #endif 1811