Accordingly, we introduce the use of templates. A template is a description of a general algorithm rather than the executable object code or the source code more commonly found in a conventional software library. Nevertheless, although templates are general descriptions of key data structures, they offer whatever degree of customization the user may desire. For example, they can be configured for the specific data structure of a problem or for the specific computing system on which the problem is to run. The type of problem we focus on is large sparse systems of linear equations.
Many methods exist for solving such problems.
The trick is to find the most effective method for the problem at hand. Unfortunately, a method that works well for one problem type may not work as well for another. Indeed, it may not work at all. Thus, besides providing templates, we also present suggestions for choosing and implementing an effective method and ways to extend a method to more specific matrix types. We are particularly interested in iterative methods, which work by continually refining an initial approximate solution so that it becomes closer and closer to the correct solution.