Algorithm 575: Permutations for a Zero-Free Diagonal [F1]

where the parameters are described in the listing given here. Given the pattern of nonzeros of a sparse matrix, this subroutine attempts to find a row permutation that makes the matrix have no zeros on its diagonal. It is possible that the user may input a matrix for which there is no permutation that makes the diagonal zero-free. An example of this is 0) In such instances the algorithm will produce a permutation that will put as m a n y nonzeros on the diagonal as possible (1 in the above example). This number will be output in NUMNZ. The array I P E R M will still hold a permutation of the integers 1, 2. .. . , N, but in this case N-N U M N Z of the elements (IPERM(I), I) will be zero. It is envisaged that a common use of the subroutine will be as the first part of a two-stage process for the determination of the block triangular form of a sparse matrix (see, for example, [1]). T h e second stage could be performed by Harwell subroutine MC13D [4], and the two stages are combined by using subroutine MC23A in the Harwell package MA28 [2]. The subroutine is based on a depth first search with look-ahead technique and is described in detail in [3]. There, numerical results from using this subroutine, Permission to copy without fee all or part of this material is granted provided that the copies are not made or distributed for dLrect commercial advantage, the ACM copyright notice and the title of the pubhcation and its date appear, and notice 18 given that copying is by permission of the Assomatlon for Computing Machinery. To copy otherwise, or to republish, requires a fee and/or specific permission.