PC_FieldSplitLink
Jed Brown
jed at 59A2.org
Fri Jul 10 06:32:41 CDT 2009
What is the use case where the linked list, as opposed to array storage is
important?
I want to extend the factorization part to support an arbitrary number
of fields with pivoting and possibly dropping coupling. Suppose we have
a matrix with block form:
A_00 A_01 A_02 A_03
A_10 A_11 A_12 A_13
A_20 A_21 A_22 A_23
A_30 A_31 A_32 A_33
Introduce the notation
S^{i,j}_{k,l} = A_{k,l} - A_{k,j} inv(A_{i,j}) A_{i,l}
which is the Schur complement obtained by eliminating the ij block in kl.
The matrix A factors as LU where
L =
1
A_10 inv(A_00) 1
A_20 inv(A_00) S^00_21 inv(S^00_11) 1
A_30 inv(A_00) S^00_31 inv(S^00_11) S^{01,01}_32 inv(S^{01,01}_22) 1
U =
A_00 A_01 A_02 A_03
S^00_11 S^00_12 S^00_13
S^{01,01}_22 S^{01,01}_23
S^{012,012}_33
Evidently we need to be able to apply several Schur complements and
solve with those on the diagonal of U. In many cases, the user will
want to drop some or all of L and possibly off-diagonal elements in U.
As an implementation detail, consider
S^{01,01}_22 = [A_20 A_21] inv([A_00 A_01]) [A_02]
([A_10 A_11]) [A_12]
The whole point of using factorization is that we don't have a good
preconditioner for the entire block
[A_00 A_01]
[A_10 A_11]
so this would be applied using factorization. But, the user will likely
have used some physical argument to provide a preconditioner for
S^{01,01}_22 so we'll get that using MatGetSchurComplement().
Anyway, I'm having some trouble making this fit nicely into
PC_FieldSplitLink when pivoting is used. I'm considering using a CSR format
to hold the factors that the user wants to have. Note that with support for
factoring 3x3 systems with pivoting, we can make all the LNKS
preconditioning variants available as runtime options.
We could unify relaxation and factorization by providing the option to just
use the diagonal block instead of the Schur complement. That is, choosing
submatrices instead of Schur complements and using a diagonal factorization
matrix is Jacobi. The upper-triangular piece is Gauss-Seidel (equivalent to
the lower-triangular version after a permutation). Suppose the user
specified the nonzero pattern of the factored matrix with the convention
that a 0 represents a dropped block, 1 is just a submatrix, and 2 uses the
Schur complement. Then
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
is Jacobi (pure relaxation),
1 1 1 1
0 1 1 1
0 0 1 1
0 0 0 1
is Gauss-Seidel (also pure relaxation),
2 2 2 2
2 2 2 2
2 2 2 2
2 2 2 2
is the full factorization,
2 2 2 2
0 2 2 2
0 0 2 2
0 0 0 2
drops the lower factor (which is often desired for right-preconditioned
GMRES),
2 2 1 1
0 2 1 1
0 0 1 1
0 0 0 1
relaxes fields 2 and 3 multiplicatively, then solves for fields 0 and 1
using factorization. We would expect this hybrid to work well when stepping
over a stiff wave coupling fields 0 and 1, but fields 2 and 3 interact on a
longer time scale. To use this final variant efficiently, the user would
only need to provide a preconditioner for S^00_11.
Does this unification sound sensible? It would be an overhaul of
PC_FieldSplit, although I think I can make it almost transparent to the user
and it should simplify some aspects.
A complication is that when the Jacobian is not assembled, it is easier to
apply an entire block-row of the Jacobian (Afield) than a single block. The
current implementation of multiplicative relaxation is designed with this in
mind, but that means that the diagonal terms are needlessly applied. It
seems to me that any matrix format that can provide the rows could also
provide the off-diagonal block (even if only by scattering the subvector to
a full vector and applying full rows).
As a related issue, do you think an implementation of MatGetSubMatrix_MFFD
would be a good thing? It would simplify PC_FieldSplit, but might not be
worthwhile unless it would be useful elsewhere.
Jed
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 260 bytes
Desc: OpenPGP digital signature
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20090710/fc68b839/attachment.sig>
More information about the petsc-dev
mailing list