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

Reply via email to