Skip to main content
`Ctrl`+`K`

# PCASM

Use the (restricted) additive Schwarz method, each block is (approximately) solved with its own `KSP` object, [DW87] and [SBjorstadG96]

## Options Database Keys

- -pc_asm_blocks <blks> - Sets total blocks. Defaults to one block per MPI process.

- -pc_asm_overlap <ovl> - Sets overlap

- -pc_asm_type [basic,restrict,interpolate,none] - Sets `PCASMType`, default is restrict. See `PCASMSetType()`

- -pc_asm_dm_subdomains <bool> - use subdomains defined by the `DM` with `DMCreateDomainDecomposition()`

- -pc_asm_local_type [additive, multiplicative] - Sets `PCCompositeType`, default is additive. See `PCASMSetLocalType()`

## Notes

If you run with, for example, 3 blocks on 1 processor or 3 blocks on 3 processors you will get a different convergence rate due to the default option of `-pc_asm_type restrict`. Use `-pc_asm_type basic` to get the same convergence behavior

Each processor can have one or more blocks, but a block cannot be shared by more than one processor. Use `PCGASM` for subdomains shared by multiple processes.

To set options on the solvers for each block append `-sub_` to all the `KSP`, and `PC` options database keys. For example, `-sub_pc_type ilu -sub_pc_factor_levels 1 -sub_ksp_type preonly`

To set the options on the solvers separate for each block call `PCASMGetSubKSP()` and set the options directly on the resulting `KSP` object (you can access its `PC` with `KSPGetPC()`)

If the `PC` has an associated `DM`, then, by default, `DMCreateDomainDecomposition()` is used to create the subdomains

## References

[DW87]

Maksymilian Dryja and Olof Widlund. An additive variant of the Schwarz alternating method for the case of many subregions. Ultracomputer Research Laboratory, Univ., Courant Inst. of Mathematical …, 1987.

[SBjorstadG96]

Barry F. Smith, Petter Bjørstad, and William D. Gropp. Domain Decomposition: Parallel Multilevel Methods for Elliptic Partial Differential Equations. Cambridge University Press, 1996. URL: http://www.mcs.anl.gov/~bsmith/ddbook.html.

## See Also

KSP: Linear System Solvers, `PCCreate()`, `PCSetType()`, `PCType`, `PC`, `PCASMType`, `PCCompositeType`, `PCBJACOBI`, `PCASMGetSubKSP()`, `PCASMSetLocalSubdomains()`, `PCASMType`, `PCASMGetType()`, `PCASMSetLocalType()`, `PCASMGetLocalType()` `PCASMSetTotalSubdomains()`, `PCSetModifySubMatrices()`, `PCASMSetOverlap()`, `PCASMSetType()`, `PCCompositeType`

## Level

beginner

## Location

src/ksp/pc/impls/asm/asm.c

## Examples

src/ksp/ksp/tutorials/ex8.c
src/ksp/ksp/tutorials/ex19.c
src/ksp/ksp/tutorials/ex87.c
src/ksp/ksp/tutorials/ex76.c

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