We describe our experience in designing object-oriented software for a sparse direct solver. We discuss , a library of sparse matrix ordering codes and Oblio, a code implementing the remaining steps in a direct solver. EEciencies comparable to procedural codes are obtained by careful implementations of eecient algorithms. We discuss the other goals of our design: managing complexity, simplicity of interface, exibil-ity, extensibility, and safety. Several trade-oos had to be made to balance eeciency and good software design. Some of the missteps that we made in the course of this work are also described. 1.1 Introduction We design and implement object-oriented software for solving large, sparse systems of linear equations by direct methods. Direct methods solve systems of linear equations by factoring the coeecient matrix, employing graph models to control the storage and work required. Sophisticated algorithms and data structures are needed to obtain eecient direct solvers. This is an active area of research, and new algorithms are being developed continually. There has been signiicant eeort in applying object-oriented techniques to iterative solvers such as those found in Diipack Lan99, Dif] and PETSc BGMS97, PET]. However, the application of object-oriented design to direct methods has not received the attention it deserves. Ashcraft and Liu have reported the design of an object-oriented code called SMOOTH to compute ll-reducing orderings, and George and Liu have designed object-oriented user interfaces for the SPARSPAK library. Ashcraft has also created an object-oriented package called SPOOLESSAPWW99, Spo]. Both SMOOTH and
[1]
Alan George,et al.
A Fast Implementation of the Minimum Degree Algorithm Using Quotient Graphs
,
1980,
TOMS.
[2]
William Gropp,et al.
Efficient Management of Parallelism in Object-Oriented Numerical Software Libraries
,
1997,
SciTools.
[3]
Richard F. Barrett,et al.
Matrix Market: a web resource for test matrix collections
,
1996,
Quality of Numerical Software.
[4]
Jason Wu,et al.
The Reference Manual for SPOOLES, Release 2.2: An Object Oriented Software Library for Solving Sparse Linear Systems of Equations
,
1999
.
[5]
Patrick R. Amestoy,et al.
An Approximate Minimum Degree Ordering Algorithm
,
1996,
SIAM J. Matrix Anal. Appl..
[6]
Ralph Johnson,et al.
design patterns elements of reusable object oriented software
,
2019
.
[7]
A. M. Bruaset.
Object-oriented design of preconditioned iterative methods
,
1994
.
[8]
A. Pothen,et al.
Two improved algorithms for envelope and wavefront reduction
,
1997
.
[9]
Iain S. Duff,et al.
Users' guide for the Harwell-Boeing sparse matrix collection (Release 1)
,
1992
.
[10]
Todd L. Veldhuizen.
Blitz++: The Library that Thinks it is a Compiler
,
2000
.
[11]
S. Eisenstat,et al.
Node Selection Strategies for Bottom-Up Sparse Matrix Ordering
,
1998,
SIAM J. Matrix Anal. Appl..
[12]
Magnus Bruaset,et al.
Object-oriented Design of Preconditioned Iterative Methods in Diipack
,
1996
.