On 2019-11-26 10:18 a.m., Matthew Knepley wrote:
On Tue, Nov 26, 2019 at 11:43 AM Danyang Su <[email protected] <mailto:[email protected]>> wrote:

    On 2019-11-25 7:54 p.m., Matthew Knepley wrote:
    On Mon, Nov 25, 2019 at 6:25 PM Swarnava Ghosh
    <[email protected] <mailto:[email protected]>> wrote:

        Dear PETSc users and developers,

        I am working with dmplex to distribute a 3D unstructured mesh
        made of tetrahedrons in a cuboidal domain. I had a few queries:
        1) Is there any way of ensuring load balancing based on the
        number of vertices per MPI process.


    You can now call DMPlexRebalanceSharedPoints() to try and get
    better balance of vertices.

    Hi Matt,

    I just want to follow up if this new function can help to solve
    the "Strange Partition in PETSc 3.11" problem I mentioned before.
    Would you please let me know when shall I call this function?
    Right before DMPlexDistribute?

This is not the problem. I believe the problem is that you are partitioning hybrid cells, and the way we handle them internally changed, which I think screwed up the dual mesh for partitioning in your example. I have been
sick, so I have not gotten to your example yet, but I will.

Hope you are getting well soon. The mesh is not hybrid, only prism cells layer by layer. But the height of the prism varies significantly.

Thanks,

Danyang


  Sorry about that,

    Matt

    call DMPlexCreateFromCellList

    call DMPlexGetPartitioner

    call PetscPartitionerSetFromOptions

    call DMPlexDistribute

    Thanks,

    Danyang

        2) As the global domain is cuboidal, is the resulting domain
        decomposition also cuboidal on every MPI process? If not, is
        there a way to ensure this? For example in DMDA, the default
        domain decomposition for a cuboidal domain is cuboidal.


    It sounds like you do not want something that is actually
    unstructured. Rather, it seems like you want to
    take a DMDA type thing and split it into tets. You can get a
    cuboidal decomposition of a hex mesh easily.
    Call DMPlexCreateBoxMesh() with one cell for every process,
    distribute, and then uniformly refine. This
    will not quite work for tets since the mesh partitioner will tend
    to violate that constraint. You could:

      a) Prescribe the distribution yourself using the Shell
    partitioner type

    or

      b) Write a refiner that turns hexes into tets

    We already have a refiner that turns tets into hexes, but we
    never wrote the other direction because it was not clear
    that it was useful.

      Thanks,

         Matt

        Sincerely,
        SG



-- 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/>



--
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