:orphan:
# KSPPIPEFCG
Implements a Pipelined, Flexible Conjugate Gradient method. [](sec_pipelineksp). [](sec_flexibleksp) 
## Options Database Keys

- ***-ksp_pipefcg_mmax <N> -*** The number of previous search directions to store
- ***-ksp_pipefcg_nprealloc <N> -*** The number of previous search directions to preallocate
- ***-ksp_pipefcg_truncation_type <standard,notay> -*** which stored search directions to orthogonalize against



## Notes
Supports left preconditioning only.

The natural "norm" for this method is (u,Au), where u is the preconditioned residual. As with standard `KSPCG`, this norm is available at no additional computational cost.
Choosing preconditioned or unpreconditioned norms involve an extra blocking global reduction, thus removing any benefit from pipelining.

MPI configuration may be necessary for reductions to make asynchronous progress, which is important for performance of pipelined methods.
See [](doc_faq_pipelined)


## Contributed by
Patrick Sanan and Sascha M. Schnepp


## Reference

- **** -*** P. Sanan, S.M. Schnepp, and D.A. May, "Pipelined, Flexible Krylov Subspace Methods", SIAM Journal on Scientific Computing 2016 38:5, C441-C470,
DOI: 10.1137/15M1049130





## See Also
 [](ch_ksp), [](doc_faq_pipelined), [](sec_pipelineksp), [](sec_flexibleksp), `KSPFCG`, `KSPPIPECG`, `KSPPIPECR`, `KSPGCR`, `KSPPIPEGCR`, `KSPFGMRES`, `KSPCG`, `KSPPIPEFCGSetMmax()`, `KSPPIPEFCGGetMmax()`, `KSPPIPEFCGSetNprealloc()`,
`KSPPIPEFCGGetNprealloc()`, `KSPPIPEFCGSetTruncationType()`, `KSPPIPEFCGGetTruncationType()`

## Level
intermediate

## Location
<A HREF="PETSC_DOC_OUT_ROOT_PLACEHOLDER/src/ksp/ksp/impls/fcg/pipefcg/pipefcg.c.html#KSPPIPEFCG">src/ksp/ksp/impls/fcg/pipefcg/pipefcg.c</A>


---
[Edit on GitLab](https://gitlab.com/petsc/petsc/-/edit/release/src/ksp/ksp/impls/fcg/pipefcg/pipefcg.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)  
