*MMG only supports serial execution, whereas ParMMG supports parallel mode (although ParMMG is not as robust or mature as MMG).* Given this, could you please provide some guidance on how to handle this in the code?
Here are my current thoughts; please let know whether it could work as a temporary solution. We may only need to make minor modifications in the DMAdaptMetric_Mmg_Plex() subroutine. Specifically: - Allow all *collective PETSc functions* to run across all ranks as usual. - Restrict the *MMG-specific logic* to run *only on rank 0*, since MMG is serial-only. - Add a check before MMG is called to ensure that *only rank 0 holds mesh cells*, i.e., validate that cEnd - cStart > 0 only on rank 0. If more than one rank holds cells, raise a clear warning or error. On Wed, Apr 23, 2025 at 1:11 PM Stefano Zampini <stefano.zamp...@gmail.com> wrote: > If mmg does not support parallel communicators, we should handle it > internally in the code, always use commself, and raise an error if there > are two or more processes in the comm that have cEnd - cStart > 0 > > Il giorno mer 23 apr 2025 alle ore 20:05 neil liu <liufi...@gmail.com> ha > scritto: > >> Thanks a lot. Pierre. >> Do you have any suggestions to build a real serial DM from this gatherDM? >> I tried several ways, which don't work. >> DMClone? >> >> Thanks, >> >> On Wed, Apr 23, 2025 at 11:39 AM Pierre Jolivet <pie...@joliv.et> wrote: >> >>> >>> >>> On 23 Apr 2025, at 5:31 PM, neil liu <liufi...@gmail.com> wrote: >>> >>> Thanks a lot, Stefano. >>> I tried DMPlexGetGatherDM and DMPlexDistributeField. It can give what we >>> expected. >>> The final gatherDM is listed as follows, rank 0 has all information >>> (which is right) while rank 1 has nothing. >>> Then I tried to feed this gatherDM into adaptMMG on rank 0 only (it >>> seems MMG works better than ParMMG, that is why I want MMG to be tried >>> first). But it was stuck at collective petsc functions >>> in DMAdaptMetric_Mmg_Plex(). By the way, the present work can work well >>> with 1 rank. >>> >>> Do you have any suggestions ? Build a real serial DM? >>> >>> >>> Yes, you need to change the underlying MPI_Comm as well, but I’m not >>> sure if there is any user-facing API for doing this with a one-liner. >>> >>> Thanks, >>> Pierre >>> >>> Thanks a lot. >>> Xiaodong >>> >>> DM Object: Parallel Mesh 2 MPI processes >>> type: plex >>> Parallel Mesh in 3 dimensions: >>> Number of 0-cells per rank: 56 0 >>> Number of 1-cells per rank: 289 0 >>> Number of 2-cells per rank: 452 0 >>> Number of 3-cells per rank: 216 0 >>> Labels: >>> depth: 4 strata with value/size (0 (56), 1 (289), 2 (452), 3 (216)) >>> celltype: 4 strata with value/size (0 (56), 1 (289), 3 (452), 6 (216)) >>> Cell Sets: 2 strata with value/size (29 (152), 30 (64)) >>> Face Sets: 3 strata with value/size (27 (8), 28 (40), 101 (20)) >>> Edge Sets: 1 strata with value/size (10 (10)) >>> Vertex Sets: 5 strata with value/size (27 (2), 28 (6), 29 (2), 101 >>> (4), 106 (4)) >>> Field Field_0: >>> adjacency FEM >>> >>> >>> >>> On Fri, Apr 18, 2025 at 10:09 AM Stefano Zampini < >>> stefano.zamp...@gmail.com> wrote: >>> >>>> If you have a vector distributed on the original mesh, then you can use >>>> the SF returned by DMPlexGetGatherDM and use that in a call to >>>> DMPlexDistributeField >>>> >>>> Il giorno ven 18 apr 2025 alle ore 17:02 neil liu <liufi...@gmail.com> >>>> ha scritto: >>>> >>>>> Dear PETSc developers and users, >>>>> >>>>> I am currently exploring the integration of MMG3D with PETSc. Since >>>>> MMG3D supports only serial execution, I am planning to combine parallel >>>>> and >>>>> serial computing in my workflow. Specifically, after solving the linear >>>>> systems in parallel using PETSc: >>>>> >>>>> 1. >>>>> >>>>> I intend to use DMPlexGetGatherDM to collect the entire mesh on >>>>> the root process for input to MMG3D. >>>>> 2. >>>>> >>>>> Additionally, I plan to gather the error field onto the root >>>>> process using VecScatter. >>>>> >>>>> However, I am concerned that the nth value in the gathered error >>>>> vector (step 2) may not correspond to the nth element in the gathered mesh >>>>> (step 1). Is this a valid concern? >>>>> >>>>> Do you have any suggestions or recommended practices for ensuring >>>>> correct correspondence between the solution fields and the mesh when >>>>> switching from parallel to serial mode? >>>>> >>>>> Thanks, >>>>> >>>>> Xiaodong >>>>> >>>> >>>> >>>> -- >>>> Stefano >>>> >>> >>> > > -- > Stefano >