Graphics Reference
In-Depth Information
The main reason that we don't use this method is that although A has
very few non-zeros, L can have a lot. In three dimensions the amount of
fill-in (extra non-zeros in L ) is particularly bad; direct solvers that take
this approach generally fail on 3D problems from lack of memory.
Incomplete Cholesky tackles this problem with a very simple idea:
whenever the Cholesky algorithm tries to create a new non-zero in a lo-
cation that is zero in A , cancel it—keep it as zero. On the one hand, the
resulting L is just as sparse as A , and memory is no longer an issue. On
the other hand, we deliberately made errors: A
= LL T now. However ,
hopefully the incomplete factorization is close enough to A that doing the
solves in Equation (4.13) is close enough to applying A 1 so that we have
a useful preconditioner for PCG!
Technically, performing incomplete Cholesky only allowing non-zeros
in L where there are non-zeros in A is called level zero: IC(0). There are
variations that allow a limited number of non-zeros in other locations, but
we will not broach that topic here.
To make this more precise, IC(0) constructs a lower-triangular matrix
L with the same non-zero pattern as the lower triangle of A , such that
LL T = A wherever A is non-zero. The only error is that LL T is non-zero
in some other locations where A is zero.
Assume we order our grid cells (and the corresponding rows and
columns of A ) lexicographically, say along the i -dimension first, then the
j -dimension, and finally the k -dimension. 5
Suppose we split A up into its
strict lower triangle F and diagonal D :
A = F + D + F T .
Then, it can be shown for the particular A we're solving—though we won't
show it here—that the IC(0) factor L is of the form
L = FE 1 + E,
where E is a diagonal matrix. That is, all we need to compute and store
are the diagonal entries of L , and we can infer the others just from A !
Crunching through the algebra gives the following formulas for comput-
ing the entries along the diagonal of E . In two dimensions,
E ( i,j ) = A ( i,j ) , ( i,j )
( A ( i− 1 ,j ) , ( i,j ) /E ( i− 1 ,j ) ) 2
( A ( i,j− 1) , ( i,j ) /E ( i,j− 1) ) 2 .
5 It turns out that the order in which we take the dimensions doesn't actually change
anything for IC(0) applied to our particular matrix.
Search WWH ::




Custom Search