#include "petscmat.h" PetscErrorCode MatCreateMPIAIJWithSplitArrays(MPI_Comm comm,PetscInt m,PetscInt n,PetscInt M,PetscInt N,PetscInt i[],PetscInt j[],PetscScalar a[],PetscInt oi[], PetscInt oj[],PetscScalar oa[],Mat *mat)Collective
comm | - MPI communicator | |
m | - number of local rows (Cannot be PETSC_DECIDE) | |
n | - This value should be the same as the local size used in creating the x vector for the matrix-vector product y = Ax. (or PETSC_DECIDE to have calculated if N is given) For square matrices n is almost always m. | |
M | - number of global rows (or PETSC_DETERMINE to have calculated if m is given) | |
N | - number of global columns (or PETSC_DETERMINE to have calculated if n is given) | |
i | - row indices for "diagonal" portion of matrix; that is i[0] = 0, i[row] = i[row-1] + number of elements in that row of the matrix | |
j | - column indices | |
a | - matrix values | |
oi | - row indices for "off-diagonal" portion of matrix; that is oi[0] = 0, oi[row] = oi[row-1] + number of elements in that row of the matrix | |
oj | - column indices | |
oa | - matrix values |
The i and j indices are 0 based
See MatCreateAIJ() for the definition of "diagonal" and "off-diagonal" portion of the matrix
This sets local rows and cannot be used to set off-processor values.
Use of this routine is discouraged because it is inflexible and cumbersome to use. It is extremely rare that a legacy Section 1.5 Writing Application Codes with PETSc natively assembles into exactly this split format. The code to do so is nontrivial and does not easily support in-place reassembly. It is recommended to use MatSetValues() (or a variant thereof) because the resulting assembly is easier to implement, will work with any matrix format, and the user does not have to keep track of the underlying array. Use MatSetOption(A,MAT_NO_OFF_PROC_ENTRIES,PETSC_TRUE) to disable all communication if it is known that only local entries will be set.