:orphan:
# PCGalerkinSetComputeSubmatrix
Provide a routine that will be called to compute the Galerkin submatrix
## Synopsis
```
#include "petscksp.h"
PetscErrorCode PCGalerkinSetComputeSubmatrix(PC pc, PetscErrorCode (*computeAsub)(PC, Mat, Mat, Mat *, void *), void *ctx)
```
Logically Collective
## Input Parameters
- ***pc -*** the preconditioner context
- ***computeAsub -*** routine that computes the submatrix from the global matrix
- ***ctx -*** context used by the routine, or `NULL`
## Calling sequence of `computeAsub`
```none
PetscErrorCode computeAsub(PC pc, Mat A, Mat Ap, Mat *cAP, void *ctx);
```
- ***PC -*** the `PCGALERKIN`
- ***A -*** the matrix in the `PCGALERKIN`
- ***Ap -*** the computed submatrix from any previous computation, if `NULL` it has not previously been computed
- ***cAp -*** the submatrix computed by this routine
- ***ctx -*** optional user-defined function context
## Notes
Instead of providing this routine you can call `PCGalerkinGetKSP()` and then `KSPSetOperators()` to provide the submatrix,
but that will not work for multiple `KSPSolve()`s with different matrices unless you call it for each solve.
This routine is called each time the outer matrix is changed. In the first call the Ap argument is `NULL` and the routine should create the
matrix and computes its values in cAp. On each subsequent call the routine should up the Ap matrix.
## Developer Note
If the user does not call this routine nor call `PCGalerkinGetKSP()` and `KSPSetOperators()` then `PCGALERKIN`
could automatically compute the submatrix via calls to `MatGalerkin()` or `MatRARt()`
## See Also
`PC`, `PCCreate()`, `PCSetType()`, `PCType`, `PCGALERKIN`,
`PCGalerkinSetRestriction()`, `PCGalerkinSetInterpolation()`, `PCGalerkinGetKSP()`
## Level
Intermediate
## Location
src/ksp/pc/impls/galerkin/galerkin.c
## Implementations
PCGalerkinSetComputeSubmatrix_Galerkin(PC pc, PetscErrorCode (*computeAsub) in src/ksp/pc/impls/galerkin/galerkin.c
---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/pc/impls/galerkin/galerkin.c)
[Index of all PC routines](index.md)
[Table of Contents for all manual pages](/manualpages/index.md)
[Index of all manual pages](/manualpages/singleindex.md)