Hi Dave,
could you explain what you mean by state ?
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
<loic.goua...@polytechnique.edu> wrote:
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/>