Skip to main content
`Ctrl`+`K`

# PCSetModifySubMatrices

Sets a user-defined routine for modifying the submatrices that arise within certain subdomain-based preconditioners such as `PCASM`

## Synopsis

    #include "petscksp.h"
    PetscErrorCode PCSetModifySubMatrices(PC pc, PetscErrorCode (*func)(PC pc, PetscInt nsub, const IS row[], const IS col[], Mat submat[], void *ctx), void *ctx)

Logically Collective

## Input Parameters

- pc - the `PC` preconditioner context

- func - routine for modifying the submatrices

- ctx - optional user-defined context (may be `NULL`)

## Calling sequence of `func`

- pc - the `PC` preconditioner context

- nsub - number of index sets

- row - an array of index sets that contain the global row numbers that comprise each local submatrix

- col - an array of index sets that contain the global column numbers that comprise each local submatrix

- submat - array of local submatrices

- ctx - optional user-defined context for private data for the user-defined func routine (may be `NULL`)

## Notes

The basic submatrices are extracted from the preconditioner matrix as usual; the user can then alter these (for example, to set different boundary conditions for each submatrix) before they are used for the local solves.

`PCSetModifySubMatrices()` MUST be called before `KSPSetUp()` and `KSPSolve()`.

A routine set by `PCSetModifySubMatrices()` is currently called within the block Jacobi (`PCBJACOBI`) and additive Schwarz (`PCASM`) preconditioners. All other preconditioners ignore this routine.

## See Also

KSP: Linear System Solvers, `PC`, `PCBJACOBI`, `PCASM`, `PCModifySubMatrices()`

## Level

advanced

## Location

src/ksp/pc/interface/precon.c

Index of all PC routines
Table of Contents for all manual pages
Index of all manual pages