On Thu, 4 Mar 2010 14:32:39 +1100, Matthew Knepley <knepley at gmail.com> wrote: > Yep, I have already setup a meeting with Dave next week to remedy > this and told Paul I would help him use it.
For what it's worth, BFBt is really a preconditioner for the Schur complement. Once a plumbing problem gets fixed, -pc_type fieldsplit -pc_fieldsplit_type schur -pc_fieldsplit_1_pc_type lsc will be equivalent to BFBt, but with the added flexibility that the user can provide the "Laplacian" (discretization of the appropriate continuum interpretation of BB^T, BFBt hard codes the computation of BB^T using MatPtAP) to operate in the Schur complement space (pressure). BFBt was the original name used specifically for Navier-Stokes, the more general analysis (by the same authors) came later and used the term "least squares commutator" which I find more descriptive. I think PCFieldSplit is a better interface for this class of methods (and Dmitry's work will make it so the user doesn't have to implement MatGetSubMatrices themselves to avoid assembling the useless coupled thing). Unfortunately, the plumbing problem is tricky because we want the user to "send" a matrix in to the PCLSC. They need to be able to do this the first time they are assembling a matrix, so the MatSchurComplement (which is what PCLSC operates on) can't be created until after control has left the user. I manage to wire this together because I use a lot of MatShell and implement MatGetSubMatrix, and I have a patch locally that just PetscObjectQuerys for a magic string to pick up this matrix, but that's crap. It looks like I never pushed PCFieldSplit updates to use MatGetSchurComplement (that was part of a broader revamp to allow hybrid schemes and factorization (Schur-type) schemes on more than just 2x2, but it's not finished), which at least simplifies life for the user (this has a fine default implementation, and it's easier for a user to implement themselves). Unfortunately, the default implementation, when used inside PCFieldSplit, would extract the same matrix twice (via MatGetSubMatrix), so perhaps we'd like memoization for MatGetSubMatrix. tl;dr: The current functionality of PCBFBT can be implemented in PCLSC, with better composability, but there is still a difficult plumbing problem to be fully general. Jed
