[petsc-dev] wheres the manual page for PCBFBT?
jed at 59A2.org
Thu Mar 4 02:52:46 CST 2010
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
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.
More information about the petsc-dev