[petsc-users] FieldSplit, multigrid and blocksize
Barry Smith
bsmith at mcs.anl.gov
Wed Dec 7 07:22:57 CST 2016
> On Dec 7, 2016, at 7:06 AM, Karin&NiKo <niko.karin at gmail.com> wrote:
>
> Dear PETSc gurus,
>
> I am using FieldSplit to solve a poro-mechanics problem. Thus, I am dealing with 3 displacement DOF and 1 pressure DOF.
> In order to precondition the 00 block (aka the displacement block), I am using a multigrid method (ml or gamg). Nevertheless, I have the feeling that the multigrids performance is much lower than in the case where they are used on pure displacement problems (say elasticity). Indeed, I do not know how to set the block size of the 00 block when using FieldSplit!
> Could you please give me some hint on that?
In your case you can use a block size of 4. The first field is defined by "components" 0, 1, and 2 and the second field (the pressure) is defined by component 3. Use PCFieldSplitSetFields() to set the fields and set the matrix block size to 4 (use AIJ matrix).
If the displacement block corresponds to a true displacement problem then one should expect similar convergence of the multigrid. BUT note that usually with PCFIELDSPLIT one just does a single V-cycle of multigrid (KSP type of preonly) on the 00 block in each iteration. Run with -ksp_view to see what the solve is actually doing.
> (the phrase "The fieldsplit preconditioner cannot currently be used with the BAIJ or SBAIJ data formats if the blocksize is larger than 1." is not clear enough for me...).
To use fieldsplit you should use AIJ matrix, not BAIJ or SBAIJ (don't worry about impacting performance the fieldsplit pulls apart the blocks anyways so there would be no advantage to BAIJ or SBAIJ).
>
> Thanks in advance,
> Nicolas
More information about the petsc-users
mailing list