:orphan: # MatCreateSchurComplement Creates a new `Mat` that behaves like the Schur complement of a matrix ## Synopsis ``` #include "petscksp.h" PetscErrorCode MatCreateSchurComplement(Mat A00, Mat Ap00, Mat A01, Mat A10, Mat A11, Mat *S) ``` Collective ## Input Parameters - ***A00 -*** the upper-left block of the original matrix A = [A00 A01; A10 A11] - ***Ap00 -*** preconditioning matrix for use in ksp(A00,Ap00) to approximate the action of A00^{-1} - ***A01 -*** the upper-right block of the original matrix A = [A00 A01; A10 A11] - ***A10 -*** the lower-left block of the original matrix A = [A00 A01; A10 A11] - ***A11 -*** (optional) the lower-right block of the original matrix A = [A00 A01; A10 A11] ## Output Parameter - ***S -*** the matrix that behaves as the Schur complement S = A11 - A10 ksp(A00,Ap00) A01 ## Notes The Schur complement is NOT explicitly formed! Rather, this function returns a virtual Schur complement that can compute the matrix-vector product by using formula S = A11 - A10 A^{-1} A01 for Schur complement S and a `KSP` solver to approximate the action of A^{-1}. All four matrices must have the same MPI communicator. `A00` and `A11` must be square matrices. `MatGetSchurComplement()` takes as arguments the index sets for the submatrices and returns both the virtual Schur complement (what this returns) plus a sparse approximation to the Schur complement (useful for building a preconditioner for the Schur complement) which can be obtained from this matrix with `MatSchurComplementGetPmat()` ## Developer Note The API that includes `MatGetSchurComplement()`, `MatCreateSchurComplement()`, `MatSchurComplementGetPmat()` should be refactored to remove redundancy and be clearer and simpler. ## See Also [](ch_ksp), `MatCreateNormal()`, `MatMult()`, `MatCreate()`, `MatSchurComplementGetKSP()`, `MatSchurComplementUpdateSubMatrices()`, `MatCreateTranspose()`, `MatGetSchurComplement()`, `MatSchurComplementGetPmat()`, `MatSchurComplementSetSubMatrices()` ## Level intermediate ## Location src/ksp/ksp/utils/schurm/schurm.c --- [Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/ksp/utils/schurm/schurm.c) [Index of all KSP routines](index.md) [Table of Contents for all manual pages](/manualpages/index.md) [Index of all manual pages](/manualpages/singleindex.md)