[petsc-users] DMPlex Parallel Output and DMPlexCreateSection Crashes when DMPlexCreateGmshFromFile used

Matthew Knepley knepley at gmail.com
Tue Apr 26 17:40:01 CDT 2022


On Tue, Apr 26, 2022 at 4:48 PM Mike Michell <mi.mike1021 at gmail.com> wrote:

> Below two interesting things are found:
> - If DMPlexCreateGmshFromFile() is used, DMPlexDistribute() is not done by
> default. I should call DMPlexDistribute() to distribute DMPlex over the
> procs.
>

Here is the explanation. The default distribution comes from
DMSetFromOptions(), which I am guessing was not called after
DMPlexCreateGmshFromFile().


> - If {DMCreate(), DMSetType(), DMSetFromOptions()} in serially used with
> "-dm_plex_filename ./new.msh" option in command line, DMPlexDistribute() is
> done by default even though DMPlex object is created by reading the same
> .msh file.
>
> Thanks for the modification to the example ex1f90.F90, now it works with 2
> procs.
> But still, if I print my output to "sol.vtk", the file has only a part of
> whole mesh. However, the file is okay if I print to "sol.vtu".
> From "sol.vtu" I can see the entire field with rank. Is using .vtu format
> preferred by petsc?
>

VTK is generally for debugging, but it should work. I will take a look.

VTU and HDF5 are the preferred formats.

  Thanks,

     Matt


> 2022년 4월 26일 (화) 오후 2:26, Matthew Knepley <knepley at gmail.com>님이 작성:
>
>> On Tue, Apr 26, 2022 at 9:33 AM Mike Michell <mi.mike1021 at gmail.com>
>> wrote:
>>
>>> Thank you for the answers.
>>> For the first question, basically, I cannot
>>> run "/dm/impls/plex/ex1f90.F90" example with more than 1 proc. I removed
>>> DMPlexDistribute() following your comment and what I tried is:
>>>
>>> - no modification to ex1f90.F90 (as it is)
>>> - make "ex1f90"
>>> - mpirun -np 2 ./ex1f90
>>>
>>> It gives me "Bad termination of one of ..." for Rank 1. The code runs
>>> okay with "mpirun -np 1 ./ex1f90".
>>>
>>
>> You are correct. It evidently never worked in parallel, since those
>> checks will only work in serial.
>> I have fixed the code, and added a parallel test. I have attached the new
>> file, but it is also in this MR:
>>
>>   https://gitlab.com/petsc/petsc/-/merge_requests/5173
>>
>>   Thanks,
>>
>>      Matt
>>
>>
>>> Thanks,
>>> Mike
>>>
>>> 2022년 4월 26일 (화) 오전 3:56, Matthew Knepley <knepley at gmail.com>님이 작성:
>>>
>>>> On Mon, Apr 25, 2022 at 9:41 PM Mike Michell <mi.mike1021 at gmail.com>
>>>> wrote:
>>>>
>>>>> Dear PETSc developer team,
>>>>>
>>>>> I'm trying to learn DMPlex to build a parallel finite volume code in
>>>>> 2D & 3D. More specifically, I want to read a grid from .msh file by Gmsh.
>>>>> For practice, I modified /dm/impls/plex/ex1f90.F90 case to read &
>>>>> distribute my sample 2D grid, which is attached. I have two questions as
>>>>> below:
>>>>>
>>>>> (1) First, if I do not use my grid, but use the default box grid built
>>>>> by ex1f90.F90 and if I try "DMPlexDistribute" over mpi processors, the
>>>>> output file (sol.vtk) has only some portion of the entire mesh. How can I
>>>>> print out the entire thing into a single file? Is there any example for
>>>>> parallel output? (Related files attached to "/Question_1/") Paraview gives
>>>>> me some error messages about data size mismatching.
>>>>>
>>>>
>>>> For the last release, we made parallel distribution the default. Thus,
>>>> you do not need to call DMPlexDIstribute() explicitly here. Taking it out,
>>>> I can run your example.
>>>>
>>>>
>>>>> (2) If I create DMPlex object through "DMPlexCreateGmshFromFile",
>>>>> "DMPlexCreateSection" part is crashed. I do not understand why my example
>>>>> code does not work, because the only change was switching from "DMCreate"
>>>>> to "DMPlexCreateGmshFromFile" and providing "new.msh" file. Without the
>>>>> PetscSection object, the code works fine. Any comments about this? (Related
>>>>> files attached to "/Question_2/")
>>>>>
>>>>
>>>> If I remove DMPlexDistribute() from this code, it is clear that the
>>>> problem is with the "marker" label. We do not create this by default from
>>>> GMsh since we assume people have defined their own labels. You can pass
>>>>
>>>>   -dm_plex_gmsh_use_marker
>>>>
>>>> to your code. WHen I do this, you example runs for me.
>>>>
>>>>   Thanks,
>>>>
>>>>     Matt
>>>>
>>>>
>>>>> Thanks,
>>>>> Mike
>>>>>
>>>>
>>>>
>>>> --
>>>> 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/>
>>
>

-- 
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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220426/ab9bf32d/attachment.html>


More information about the petsc-users mailing list