¢

®s„D¬BB% G H

%¬ ¬

1. For Do:

5S £

2.

E

¨™„¬D¬BB%

%¬ ¢

3. For and when Do:

G £ G

4.

5. Apply a dropping rule to

E

¢

6. If then

´

5 § ¨

7.

8. EndIf

9. EndDo

10. Apply a dropping rule to row

C S ´ ™„DBD% G m¥

¨ %¬¬¬

11. for

G

E C S s®„DBD% m¥

%¬¬¬

12. for

13.

14. EndDo

Now consider the operations involved in the above algorithm. Line 7 is a sparse update

operation. A common implementation of this is to use a full vector for and a companion

pointer which points to the positions of its nonzero elements. Similarly, lines 11 and 12 are

sparse-vector copy operations. The vector is ¬lled with a few nonzero elements after the

completion of each outer loop , and therefore it is necessary to zero out those elements at

the end of the Gaussian elimination loop as is done in line 13. This is a sparse set-to-zero

operation.

ILU(0) can be viewed as a particular case of the above algorithm. The dropping rule

for ILU(0) is to drop elements that are in positions not belonging to the original structure

of the matrix.

In the factorization ILUT( ), the following rule is used. ¡%

¨

In line 5, an element is dropped (i.e., replaced by zero) if it is less than the

relative tolerance obtained by multiplying by the original norm of the -th row

S

(e.g., the 2-norm).

!

In line 10, a dropping rule of a different type is applied. First, drop again any

element in the row with a magnitude that is below the relative tolerance . Then, S

¥¥¶ 8˜ H ˜ ¤ ¨°¡ $ H&’ ”8 ” &’ ¤ ©¦§

©8 $ $

¡¨ ¨¦ ¤

© §¥ c#&) $

©1

¢

¡

keep only the largest elements in the part of the row and the largest elements

¦

in the part of the row in addition to the diagonal element, which is always kept.

The goal of the second dropping step is to control the number of elements per row. Roughly

speaking, can be viewed as a parameter that helps control memory usage, while helps

to reduce computational cost. There are several possible variations on the implementation

´® w

of dropping step 2. For example we can keep a number of elements equal to in a`

´®

w

® ®

the upper part and in the lower part of the row, where and are the

a` a` a 7`

¦

number of nonzero elements in the part and the part of the -th row of , respectively.

This variant is adopted in the ILUT code used in the examples.

Note that no pivoting is performed. Partial (column) pivoting may be incorporated at

little extra cost and will be discussed later. It is also possible to combine ILUT with one of

the many standard reorderings, such as the ordering and the nested dissection ordering, or

the reverse Cuthill-McKee ordering. Reordering in the context of incomplete factorizations

can also be helpful for improving robustness, provided enough accuracy is used. For ex-

ample, when a red-black ordering is used, ILU(0) may lead to poor performance compared

with the natural ordering ILU(0). On the other hand, if ILUT is used by allowing gradually

more ¬ll-in, then the performance starts improving again. In fact, in some examples, the

performance of ILUT for the red-black ordering eventually outperforms that of ILUT for

the natural ordering using the same parameters and .

©S9¤W

4 2 ¡3¡¢6

2 9 T rQB

BP

Existence theorems for the ILUT factorization are similar to those of other incomplete

factorizations. If the diagonal elements of the original matrix are positive while the off-

diagonal elements are negative, then under certain conditions of diagonal dominance the

matrices generated during the elimination will have the same property. If the original ma-

trix is diagonally dominant, then the transformed matrices will also have the property of

being diagonally dominant under certain conditions. These properties are analyzed in detail

in this section.

´ f 5 S

The row vector resulting from line 4 of Algorithm 10.6 will be denoted by .

´ C

f S

E

Note that for . Lines 3 to 10 in the algorithm involve a sequence of

3¥

C

operations of the form

GG v0¥ £

¦ ‘)

´ S ´ S

E

| S

if small enough set

¡ S ¡

else: GG v0¥ £

¦µ ‘)

´ ¨ C ´ S ¢¨ C S ´

C