On 4/22/10 6:56 AM, Jed Brown wrote: > On Tue, 20 Apr 2010 22:37:17 -0400, Boyce Griffith<[email protected]> > wrote: >> 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).
How should one setup the index set? Is it just a mapping from Vec index to field index? E.g., each Vec entry is assigned to field 0 or 1 (or 2 or ...)? For now, I am just assembling the whole system. I am also using bi-/trilinear elements --- I recall you sending some emails to the list about getting better performance with unassembled systems, but that this was mainly for higher order elements. Am I remembering correctly? Thanks! -- Boyce ------------------------------------------------------------------------------ _______________________________________________ Libmesh-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/libmesh-users
