Belos/Tpetra: Add Pipelined CG
Created by: mhoemmen
@trilinos/belos @trilinos/tpetra
Epic: #767.
Add a Pipelined CG implementation (see e.g., work by Pieter Ghysels and Paul Eller). I'm calling this a "story" because it has a few steps:
-
#752 (closed): Implement a generic interface to MPI_Iallreduce -
#753 (closed), #1013 (closed): Implement Tpetra functions for nonblocking dot products -
Implement a "native" Tpetra implementation of Pipelined CG (see #734 (closed) for a standard CG example) -
#754 (closed), #953: Make it possible to extend Belos::SolverFactory with custom Tpetra solvers -
Wrap the native solver in a Belos::SolverManager subclass (extending #734 (closed); include stubs for making the subclass throw if given a non-Tpetra linear algebra implementation) -
Actually make Pipelined CG available, using the previous steps.
Step 5 (wrapping the native Tpetra-based solver) requires a partial specialization of Belos::SolverFactory for Tpetra objects, since BelosTpetra lives downstream of Belos proper. To avoid redundant code, it would be nicer to add a internal factory for Belos' generic implementations, and then have a hook for adding a factory of implementations native to the linear algebra.