[petsc-users] Galerkin multigrid coarsening

Torquil Macdonald Sørensen torquil at gmail.com
Thu Jan 30 13:51:04 CST 2014


On 30/01/14 17:45, Jed Brown wrote:
> Boris Kaus <kaus at uni-mainz.de> writes:
>
>> While doing multigrid it is possible to explicitly set restriction and
>> prolongation/interpolation operators in PETSC using PCMGSetRestriction
>> and PCMGSetInterpolation.  In many cases, the restriction (R) and
>> prolongation (P) operators are simply the transpose of each other
>> (R=P’).
>>
>> Yet, in certain cases, for example variable viscosity Stokes with a
>> staggered finite difference discretization, it is advantageous if they
>> are different (see http://arxiv.org/pdf/1308.4605.pdf).
>>
>> Accordding to the Wesseling textbook, Galerkin coarsening of the fine
>> grid matrix is defined as:
>>
>> Acoarse = R*A*P
>>
>> Yet, as far as I can tell, PETSc seems to implement this as:
>>
>> Acoarse = R*A*R’
> Certainly, the code just had an outdated assumption.  I think I have
> added support for this (it does R*A*P when R!=P), but I don't have a
> test case readily available.  Could you try branch
> 'jed/pcmg-galerkin-rap' (if you were using v3.4/maint) or 'next' if
> you've been tracking petsc-dev?

This question was similar to my recent unanswered one:

http://lists.mcs.anl.gov/pipermail/petsc-users/2014-January/020382.html

I just tried jed/pcmg-galerkin-rap, and it seems to work fineI verified
that the coarse system matrix is R*A*P, for a two-level PCMG. I'm first
calling PCMGSetInterpolation() with a matrix P, and then
PCMGSetInterpolation() with a matrix R. Previously R was ignored, and I got

A_c = P^T*A*P

With jed/pcmg-galerkin-rap, I'm getting:

A_c = R*A*P

So now I can experiment with using R or P^T, which is very nice!

I did not have an opportunity to test what happens if I don't set any
restriction, but I'm hoping it will then use P^T, as before.

Best regards
Torquil Sørensen



More information about the petsc-users mailing list