MatCreateKAIJ#
Creates a matrix of type MATKAIJ
.
Synopsis#
#include "petscmat.h"
PetscErrorCode MatCreateKAIJ(Mat A, PetscInt p, PetscInt q, const PetscScalar S[], const PetscScalar T[], Mat *kaij)
Collective
Input Parameters#
A - the
MATAIJ
matrixp - number of rows in
S
andT
q - number of columns in
S
andT
S - the
S
matrix (can beNULL
), stored as aPetscScalar
array (column-major)T - the
T
matrix (can beNULL
), stored as aPetscScalar
array (column-major)
Output Parameter#
kaij - the new
MATKAIJ
matrix
Notes#
The created matrix is of the following form:
[I \otimes S + A \otimes T]
where
S is a dense (p \times q) matrix
T is a dense (p \times q) matrix
A is a `MATAIJ` (n \times n) matrix
I is the identity matrix
The resulting matrix is (np \times nq)
S
and T
are always stored independently on all processes as PetscScalar
arrays in
column-major format.
This function increases the reference count on the MATAIJ
matrix, so the user is free to destroy the matrix if it is not needed.
Changes to the entries of the MATAIJ
matrix will immediately affect the MATKAIJ
matrix.
Developer Notes#
In the MATMPIKAIJ
case, the internal ‘AIJ’ and ‘OAIJ’ sequential KAIJ matrices are kept up to date by tracking the object state
of the AIJ matrix ‘A’ that describes the blockwise action of the MATMPIKAIJ
matrix and, if the object state has changed, lazily
rebuilding ‘AIJ’ and ‘OAIJ’ just before executing operations with the MATMPIKAIJ
matrix. If new types of operations are added,
routines implementing those must also ensure these are rebuilt when needed (by calling the internal MatKAIJ_build_AIJ_OAIJ() routine).
See Also#
Matrices, Mat
, MatKAIJSetAIJ()
, MatKAIJSetS()
, MatKAIJSetT()
, MatKAIJGetAIJ()
, MatKAIJGetS()
, MatKAIJGetT()
, MATKAIJ
Level#
advanced
Location#
Examples#
src/ksp/ksp/tutorials/ex74.c
src/ksp/ksp/tutorials/ex77.c
Index of all Mat routines
Table of Contents for all manual pages
Index of all manual pages