From: Jed B. <je...@59...> - 2010-04-22 10:56:40
|
On Tue, 20 Apr 2010 22:37:17 -0400, Boyce Griffith <gri...@ci...> wrote: > Hi, Folks -- > > I have a system involving two variables for which I would like to use a > preconditioner which involves solvers for the two variables separately. > (E.g., block Jacobi or block Gauss-Seidel using one subdomain per > variable.) Is there a recommended way to do this other than making a > new system for each of the variables and copying data between the systems? You can do this with PCFieldSplit, if you define index sets for each variable, then -pc_type fieldsplit \ -pc_fieldsplit_type <additive,multiplicative,symmetric-multiplicative> # Jacobi, GS, SGS This gives you a KSP and PC under -fieldsplit_0_ and -fieldsplit_1_. This support is more complete with 3.1 than 3.0. You can define a composite matrix to define the action of the full operator if you never assemble the truly coupled thing, then implement MatGetSubMatrix() to extract the blocks the preconditioner will need (this is better if memory is tight, assembling the coupled thing is slightly quicker to get going). Jed |