[petsc-dev] Telescope usage

Loic Gouarin loic.gouarin at polytechnique.edu
Mon May 16 14:50:03 CDT 2022

Thanks Barry for your quick reply.

Le 16/05/2022 à 21:41, Barry Smith a écrit :
>   Loic,
>     From your code it looks like you are using a DM. Is it a DMDA or a 
> shell DM? If it is a DMDA then the process is intended to be pretty 
> straightforward. PCTELESCOPE should create a new DMDA that has the 
> same properties as the coarse grid DMDA but lives on a smaller number 
> of ranks. From this you can just provide multiple levels of coarsening 
> of the DMDA to produce the smaller multigrid problems.
It's a DMDA. So what you mean is to take the KSP of PCTELESCOPE, get the 
DM which is the same of the coarse grid and build all the levels as 
previously for the levels of PCTELESCOPE ?
>    Can you let us know more details of what exactly goes wrong with 
> attempts? It is likely straightforward to get things working, perhaps 
> due to our unclear documentation.

I essentially have wrong state or NULL matrices into the PCTELESCOPE.


>   Barry
>> On May 16, 2022, at 3:28 PM, Loic Gouarin 
>> <loic.gouarin at polytechnique.edu> wrote:
>> Hello,
>> I could have posted my message on the user list but it seems to me 
>> that it's more in the petsc development part. Don't hesitate to tell 
>> me if I'm wrong.
>> I am developing a code called cafes that studies fluid-particle 
>> interactions in a Stokes fluid. For that, we implemented the whole 
>> solver in matrix free on a cartesian grid. The preconditioner is 
>> naturally a geometrical multigrid for the velocity. The set of matrix 
>> free for each level is set by hand (I worked with Matthew on this a 
>> long time ago now!).
>> I would have liked to implement telescope on this part. I started it 
>> but I didn't get out of it. So I would like to have your help.
>> What I tried to do was to describe my classical multigrid up to a 
>> level N1 and then take the coarse solver and apply the telescope 
>> preconditioner to it up to a level N2. I don't know if this is the 
>> best way but it seemed the most intuitive. The problem is that I 
>> could not get the coarse matrix because the setup is not done yet (I 
>> use a DMKSPSetComputeOperators for the matrices).
>> The construction of the matrix free for each level is here: 
>> https://github.com/gouarin/cafes/blob/master/cafes/problem/stokes.hpp#L59-L88
>> The description of the Stokes preconditioner is described here : 
>> https://github.com/gouarin/cafes/blob/master/cafes/problem/stokes.hpp#L109-L162
>> I have tried multiple implementations without success. For me, the 
>> start is to add at line 105 something like
>> KSP coarse;
>> ierr = PCMGGetCoarseSolve(pc_i, &coarse);CHKERRQ(ierr);
>> PC pc_coarse;
>> ierr = KSPGetPC(coarse, &pc_coarse);CHKERRQ(ierr);
>> ierr = PCSetType(pc_coarse, PCTELESCOPE);CHKERRQ(ierr);
>> Then, to create the several matrices of the levels of TELESCOPE, I 
>> thought using the same process as before with 
>> DMKSPSetComputeOperators. But it doesn't work...
>> Could you tell me how I can make it work ?
>> Thanks,
>> Loic
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20220516/cf6b1b3d/attachment-0001.html>

More information about the petsc-dev mailing list