Dear Matt,
I have now written a code to transform a DMPlex coming from a DMForest
to a DMPlex of type DM_POLY, by removing the double faces and edges.
Also, I can successfully write this transformed DMPlex of type DM_POLY
to a file.
However, the code to perform the transformation only works on a single
process. Therefore, I distribute the original DMForest to process 0,
perform the transformation to obtain a DMPlex of type DM_POLY.
Is there a way, I can redistribute the transformed DMPlex back to the
original distribution based on the cells' distribution of the original
DMPlex? Can I somehow "store" the distribution of a DMPlex based on how
the cells are divided over the processes, and distribute back to this
original distribution?
Thanks, best regards,
Berend.
p.s. If someone is interested in the code to transform a DMForest to a
DMPlex of type DM_POLY, I am more than happy to share.
On 1/22/24 20:30, Matthew Knepley wrote:
On Mon, Jan 22, 2024 at 2:26 PM Berend van Wachem
<berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>> wrote:
Dear Matt,
The problem is that I haven't figured out how to write a polyhedral
DMplex in parallel. So, currently, I can write the Vec data
in parallel, but the cones for the cells/faces/edges/nodes for the
mesh from just one process to a file (after gathering the
DMplex to a single process).
Ah shoot. Can you send me a polyhedral mesh (or code to generate one) so
I can fix the parallel write problem? Or maybe it is already an issue
and I forgot?
From the restart, I can then read the cone information from one
process from the file, recreate the DMPlex, and then
redistribute it. In this scenario, the Vec data I read in (in
parallel) will not match the correct cells of the DMplex. Hence, I
need to put it in the right place afterwards.
Yes, then searching makes sense. You could call DMLocatePoints(), but
maybe you are doing that.
Thanks,
Matt
Best, Berend.
On 1/22/24 20:03, Matthew Knepley wrote:
> On Mon, Jan 22, 2024 at 1:57 PM Berend van Wachem
<berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>
<mailto:berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>>>
wrote:
>
> Dear Matt,
>
> Thanks for your quick response.
> I have a DMPlex with a polyhedral mesh, and have defined a
number of vectors with data at the cell center. I have generated
> data
> for a number of timesteps, and I write the data for each
point to a file together with the (x,y,z) co-ordinate of the cell
> center.
>
> When I want to do a restart from the DMPlex, I recreate the
DMplex with the polyhedral mesh, redistribute it, and for each cell
> center find the corresponding (x,y,z) co-ordinate and insert
the data that corresponds to it. This is quite expensive, as it
> means I need to compare doubles very often.
>
> But reading your response, this may not be a bad way of doing it?
>
>
> It always seems to be a game of "what do you want to assume?". I
tend to assume that I wrote the DM and Vec in the same order,
> so when I load them they match. This is how Firedrake I/O works,
so that you can load up on a different number of processes
> (https://arxiv.org/abs/2401.05868
<https://arxiv.org/abs/2401.05868> <https://arxiv.org/abs/2401.05868
<https://arxiv.org/abs/2401.05868>>).
>
> So, are you writing a Vec, and then redistributing and writing
another Vec? In the scheme above, you would have to write both
> DMs. Are you trying to avoid this?
>
> Thanks,
>
> Matt
>
> Thanks,
>
> Berend.
>
> On 1/22/24 18:58, Matthew Knepley wrote:
> > On Mon, Jan 22, 2024 at 10:49 AM Berend van Wachem
<berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>
<mailto:berend.vanwac...@ovgu.de <mailto:berend.vanwac...@ovgu.de>>
> <mailto:berend.vanwac...@ovgu.de
<mailto:berend.vanwac...@ovgu.de> <mailto:berend.vanwac...@ovgu.de
<mailto:berend.vanwac...@ovgu.de>>>> wrote:
> >
> > Dear Petsc-Team,
> >
> > Is there a good way to define a unique integer number
in each element
> > (e.g. a cell) of a DMPlex mesh, which is in the same
location,
> > regardless of the number of processors or the
distribution of the mesh
> > over the processors?
> >
> > So, for instance, if I have a DMPlex box mesh, the
top-right-front
> > corner element (e.g. cell) will always have the same
unique number,
> > regardless of the number of processors the mesh is
distributed over?
> >
> > I want to be able to link the results I have achieved
with a mesh from
> > DMPlex on a certain number of cores to the same mesh
from a DMPlex on a
> > different number of cores.
> >
> > Of course, I could make a tree based on the distance
of each element to
> > a certain point (based on the X,Y,Z co-ordinates of
the element), and go
> > through this tree in the same way and define an
integer based on this,
> > but that seems rather cumbersome.
> >
> >
> > I think this is harder than it sounds. The distance will
not work because it can be very degenerate.
> > You could lexicographically sort the coordinates, but this
is hard in parallel. It is fine if you are willing
> > to gather everything on one process. You could put down a
p4est, use the Morton order to number them since this is stable
> for a
> > given refinement. And then within each box
lexicographically sort the centroids. This is definitely cumbersome,
but I cannot
> > think of anything else. This also might have parallel
problems since you need to know how much overlap you need to fill
> each box.
> >
> > Thanks,
> >
> > Matt
> >
> > Thanks and best regards, Berend.
> >
> > --
> > 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/
<https://www.cse.buffalo.edu/~knepley/>
<https://www.cse.buffalo.edu/~knepley/
<https://www.cse.buffalo.edu/~knepley/>>
<http://www.cse.buffalo.edu/~knepley/
<http://www.cse.buffalo.edu/~knepley/>
> <http://www.cse.buffalo.edu/~knepley/
<http://www.cse.buffalo.edu/~knepley/>>>
>
>
>
> --
> 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/
<https://www.cse.buffalo.edu/~knepley/>
<http://www.cse.buffalo.edu/~knepley/
<http://www.cse.buffalo.edu/~knepley/>>
--
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/>