MatCreateMPIAIJWithSplitArrays#
creates a MATMPIAIJ
matrix using arrays that contain the “diagonal” and “off-diagonal” part of the matrix in CSR format.
Synopsis#
#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
Input Parameters#
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 ifN
is given) For square matricesn
is almost alwaysm
.M - number of global rows (or
PETSC_DETERMINE
to have calculated ifm
is given)N - number of global columns (or
PETSC_DETERMINE
to have calculated ifn
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, which must be local, i.e., based off the start column of the diagonal portion
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, which must be global, representing global columns in the
MATMPIAIJ
matrixoa - matrix values
Output Parameter#
mat - the matrix
Notes#
The i
, j
, and a
arrays ARE NOT copied by this routine into the internal format used by PETSc (even in Fortran). The user
must free the arrays once the matrix has been destroyed and not before.
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 application 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.
See Also#
Matrices, Mat
, MatCreate()
, MatCreateSeqAIJ()
, MatSetValues()
, MatMPIAIJSetPreallocation()
, MatMPIAIJSetPreallocationCSR()
,
MATMPIAIJ
, MatCreateAIJ()
, MatCreateMPIAIJWithArrays()
Level#
advanced
Location#
src/mat/impls/aij/mpi/mpiaij.c
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages