Le 17/05/2022 à 12:03, Dave May a écrit :


On Tue 17. May 2022 at 11:56, Loic Gouarin <[email protected]> wrote:

    Hi Dave,

    could you explain what you mean by state ?


Ah - by state Matt and I mean any auxiliary data stored in the user context passed to KSPSetComputeOperators which is required to define your operator and is distributed. For example, a Vec which is used store coefficients of your PDE.

Yes, I have a context which gives the operators (mult and diagonal) and some other informations to build the matrix free on each multigrid level.

You can find the idea here: https://github.com/gouarin/cafes/blob/master/cafes/problem/stokes.hpp#L49-L91

It's the definition of the operator used inside DMKSPComputeOperators.

Loic




    Thanks,

    Loic

    Le 17/05/2022 à 11:50, Dave May a écrit :
    Hi Loic,

    Can you confirm if your problem has stored state which needs to
    be repartitioned?

    Thanks,
    Dave

    On Tue 17. May 2022 at 09:07, Loic Gouarin
    <[email protected]> wrote:


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


        On Tue, 17 May 2022 at 00:12, Matthew Knepley
        <[email protected]> wrote:

            On Mon, May 16, 2022 at 9:59 AM Loic Gouarin
            <[email protected]> wrote:

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



                On May 16, 2022, at 3:50 PM, Loic Gouarin
                <[email protected]> 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
                <[email protected]> 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