Le 17/05/2022 à 01:43, Dave May a écrit :


On Tue, 17 May 2022 at 00:12, Matthew Knepley <knep...@gmail.com> wrote:

    On Mon, May 16, 2022 at 9:59 AM Loic Gouarin
    <loic.goua...@polytechnique.edu> wrote:

        Le 16/05/2022 à 21:54, Barry Smith a écrit :



        On May 16, 2022, at 3:50 PM, Loic Gouarin
        <loic.goua...@polytechnique.edu> wrote:

        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 ?

          Yes, I think you should be able to pull out of the coarse
        level PC (on the subset of ranks) a DM that and then setup
        coarse levels from that. But you need to look at an example
        that that uses telescope and probably even the telescope code
        itself to see all the details. I don't know them anymore.

        I looked at the source code but It didn't help. I will try to
        explain more clearly my experiments to understand what I make
        wrong and you can help more easily.

    Hi Loic!

    Here is my guess. When TELESCOPE redistributes the coarse grid
    DMDA, it creates a new DMDA and copies over all the information it
    can see. However, I think you may have state that is attached to
    the old DMDA that is not getting redistributed. If this is true, I
    can help you write a hook that redistributes that state when
    TELESCOPE maps between distributions.


If you have state you need to propagate between different communicators, you will have to use the telescope type which is internally is referred to as
TELESCOPE_COARSEDM

To activate this type you need the option
-pc_telescope_use_coarse_dm
Or to call PCTelescopeSetUseCoarseDM()
The assumptions of usng this options are described here
https://petsc.org/main/docs/manualpages/PC/PCTelescopeSetUseCoarseDM

and source associated with the COARSEDM
https://petsc.org/main/src/ksp/pc/impls/telescope/telescope_coarsedm.c.html

Using TELESCOPE_COARSEDM you will have access to the hooks Matt is referring to.

Thanks Matthew and Dave.

I used TELESCOPE_COARSEDM in my previous tests but it tells me that "Zero instances of a coarse DM were found". And indeed, my coarse solver only has the DM on the coarse mesh and not on the fine level with a coarse DM atttached. I think it's because I use DMKSPSetComputeOperators to create the KSP on each level.

So for now, I just added

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);
ierr=PCTelescopeSetUseCoarseDM(pc_coarse, PETSC_TRUE);CHKERRQ(ierr);

but it's not enough.

Cheers,

Loic


Cheers,
Dave



       Thanks,

         Matt

        Thanks,

        Loic


          Barry


           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.

        Loic


          Barry


        On May 16, 2022, at 3:28 PM, Loic Gouarin
        <loic.goua...@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





-- What most experimenters take for granted before they begin their
    experiments is infinitely more interesting than any results to
    which their experiments lead.
    -- Norbert Wiener

    https://www.cse.buffalo.edu/~knepley/
    <http://www.cse.buffalo.edu/~knepley/>

Reply via email to