GMRES implementations

I am looking for simple GMRES implementations. Unfortunately, I have a few requirements:

• should be C or Fortran, Fortran preferred
• needs a license that permits inclusion in an MIT/BSD licensed package
• needs to deal with complex data

So far, the "templates" code on netlib seemed to fit well. However, it doesn't deal with complex data (although I think changing a few declarations from real to complex could fix that), and also it obviously implements operations better left to BLAS (I think e.g. this code's Givens rotations that'd probably better be drot() calls). Another alternative, PETSc, seems overkill.

I am looking forward to your suggestions. Thank you!

• What sort of problem are you solving? Do you already have effective preconditioners or is that something you'll need to experiment with? (A GMRES implementation is not a big deal, but usually preconditioning is a lot more subtle and most people would benefit a library.) – Jed Brown Aug 23 '13 at 12:55
• Actually I'm not yet at the point of really needing GMRES (so far, I'm using a completely different method for my computations). It's mostly playing around so far. I can't really say anything about the matrices I'll have to deal with. With my current method, the matrices are very well conditioned, I don't really see why this would change with a different method applied to larger problems (meaning larger matrices which made GMRES attractive). Do you think it's worth having a shot at GMRES myself? – AlexE Aug 23 '13 at 13:01
• I am biased (PETSc developer), but I would use PETSc for your experiments, especially if you don't already have a lot of experience with which methods are most effective for your problem. The range of Krylov methods, monitoring in different norms, eigenvalue estimation, and a suite of preconditioning choices takes orders of magnitude more effort than just a GMRES implementation, but is tremendously useful to find the most effective methods for your problem. – Jed Brown Aug 23 '13 at 13:51