Although JTPACK90 is a tool driven by the needs of a particular application, we nevertheless wanted to design an infrastructure that would be general enough and flexible enough to allow JTPACK90 to be used by other codes as well. So some of the design goals of JTPACK90 were to provide
The last two items are particularly important for TELLURIDE, since explicit construction of the coefficient is difficult if not impossible for some of the operators in TELLURIDE, and since in most cases custom preconditioners based on knowledge of the underlying physics or numerics are far superior to general preconditioners.
JTPACK90 currently provides several basic Krylov subspace iterative solvers (e.g. CG, GMRES, TFQMR, etc.), along with a number of preconditioners (e.g. IC, ILU, multistep weighted Jacobi and SSOR, etc.). These are unremarkable, and descriptions can be found elsewhere (e.g. [9]). More interesting is the object-based infrastructure within which these methods and preconditioners are embedded, and which allows easy implementation of new storage formats, methods, and preconditioners.
A great deal of effort has not been expended on general preconditioners, since we knew that we would be using JTPACK90 primarily in matrix-free mode with TELLURIDE and would be using preconditioners customized for the physics / numerics at hand.