On Thu, Feb 23, 2012 at 13:05, Jungho Lee
<julee@mcs.anl.gov> wrote:
[C D;A B][x;y] = [v;w] (to be able to explore different
preconditioning strategies), which currently doesn't seem to be
supported. At first glance it seems like this can be easily solved by
adding extra IS (is) and PetscInt* (fields) objects in
_PC_FieldSplitLink, read in integer arrays for rows and columns (the
symmetric case where the rows and columns have the same indices is
already handled by -pc_fieldsplit_%d_fields), fill in the extra IS
object, and allow the user to use these two different IS's in the
MatGetSubMatrix calls in PCSetUp_FieldSplit. Is it really as simple as
that, or am I missing something here?
I suggest leaving the original field ordering. Add a new function PCFieldSplitSetPermutation(PC,const PetscInt *rowperm,const PetscInt *colperm). Then your desired permutation is
-pc_fieldsplit_permutation_row 1,0
-pc_fieldsplit_permutation_col 0,1
When we refactor this, we have to get rid of the goofy restriction that Schur only works directly on 2x2 block systems, and we should really get rid of the distinction between Schur and relaxation. I think we should be able to select on a block-entry basis whether to use the entry that appears in a relaxation-based method (just that entry of the original matrix) or whether to use the block that appears in a factorization method (most blocks involve a solve or a Schur complement).