Belos: BiCGSTAB is broken
Created by: mhoemmen
@trilinos/belos @vbrunini @jclause
We noticed that Belos' BiCGSTAB implementation was failing to converge for a small (32 x 32) unpreconditioned nonsymmetric (but not badly so) linear system. The linear system has real eigenvalues and RCOND about 1.0e9. Both Belos' GMRES and AztecOO's BiCGSTAB handle it just fine.
I wrote my own Tpetra-only BiCGSTAB implementation based on the "Templates" book, in particular the Matlab code here. It converged just fine, in a number of iterations comparable to Belos' GMRES.
Motivation and Context
Many users of our application specify BiCGSTAB as a default solver in their input decks. Its memory use does not depend on the number of iterations / restart length, but it can handle nonsymmetric linear systems. This makes it a good compromise between CG and GMRES.
We would like BiCGSTAB to work to achieve our goal of replacing use of AztecOO with the Tpetra-based solver stack.
Possible Solution
- As a temporary fix, use the framework in
belos/tpetra/src/solvers
to inject my Tpetra-only solver into Belos::SolverFactory. - Fix
Belos::BiCGStab{Iter,SolMgr}
. (It's not clear which class is causing the problem.) It may be easier just to use the known working Tpetra-only implementation as a guide to rewrite the existing implementation.