[petsc-dev] Inquiry about contributing to MMG interface
neil liu
liufield at gmail.com
Sat Feb 15 22:05:23 CST 2025
Hi, Matt,
I just finished testing the 3D cases. Currently, the internal boundary is
enabled through hardcoding in the code. It might be a good idea for you to
review the implementation before I proceed with the 2D case and incorporate
the internal boundary feature into dmplex->metricCtx. Please let me know
what do you prefer.
Test it with Valgrind. There are no memory leaks, but some memory is still
reachable. I checked the details. Some of these still reachable memories
come from DMPlexCreateGmsh.
==1270244== HEAP SUMMARY:
==1270244== in use at exit: 701,196 bytes in 473 blocks
==1270244== total heap usage: 9,775 allocs, 9,263 frees, 10,553,085 bytes
allocated
==1270244==
==1270244== LEAK SUMMARY:
==1270244== definitely lost: 0 bytes in 0 blocks
==1270244== indirectly lost: 0 bytes in 0 blocks
==1270244== possibly lost: 0 bytes in 0 blocks
==1270244== still reachable: 701,196 bytes in 473 blocks
==1270244== suppressed: 0 bytes in 0 blocks
==1270244== Reachable blocks (those to which a pointer was found) are not
shown.
==1270244== To see them, rerun with: --leak-check=full --show-leak-kinds=all
Thansk,
Xiaodong
On Sun, Feb 9, 2025 at 11:28 AM Matthew Knepley <knepley at gmail.com> wrote:
> On Sun, Feb 9, 2025 at 10:02 AM neil liu <liufield at gmail.com> wrote:
>
>> Hi, Matt,
>>
>> I am working on extending the interface. So far so good. Almost finished
>> that for all related functions.
>> I have a question about the lines inside DMAdaptMetric_Mmg_Plex(),
>>
>> * if (rgLabel) {*
>> * PetscCall(PetscObjectGetName((PetscObject)rgLabel, &rgLabelName));*
>> * PetscCall(PetscStrcmp(rgLabelName, rgName, &flg));*
>> * PetscCheck(!flg, comm, PETSC_ERR_ARG_WRONG, "\"%s\" cannot be used
>> as label for element tags", rgLabelName);*
>> * }*
>>
>> My confusion,
>> *Here, rdgLabelName is "Cell_Sets", rgName is "_regions_". Then flg is
>> also petsc_false. *
>> *So what is the purpose to add these lines? *
>>
>
> This is the name I use internally for Plex regions. The user can choose
> another name if they want to control things, but
> not overwrite my name.
>
> Thanks,
>
> Matt
>
>
>> Thanks,
>>
>> Xiaodong
>>
>> On Wed, Feb 5, 2025 at 3:12 PM neil liu <liufield at gmail.com> wrote:
>>
>>> Theoretically, the edges of the open boundary surface can be extracted
>>> outside this subroutine. (I am wondering if this can be effectively
>>> delivered outside this subroutine.)_
>>>
>>> It might be more convenient to assign edge labels and set these edges
>>> in MMG using MMG3D_Set_edges. This way, after refinement, the labeled
>>> edges can be easily identified.
>>>
>>> I would appreciate your insights on this.
>>>
>>> Thanks,
>>>
>>> Xiaodong
>>>
>>>
>>>
>>>
>>> On Wed, Feb 5, 2025 at 2:43 PM Matthew Knepley <knepley at gmail.com>
>>> wrote:
>>>
>>>> On Wed, Feb 5, 2025 at 2:06 PM neil liu <liufield at gmail.com> wrote:
>>>>
>>>>> For open boundaries, MMG sets a reference for the internal open
>>>>> boundary surface and then runs in opnbdy mode after we define the corners
>>>>> using MMG3D_Set_corner.
>>>>>
>>>>> The edges are only desired for my own case. We need to know the edges
>>>>> delimiting the open boundary surface after refinement to extract some
>>>>> physical data.
>>>>>
>>>>
>>>> Okay, so it seems that we need to extend the interface to MMG to allow
>>>> corners to be labeled. You can label edges on your own without extending
>>>> the interface I think. Let me know if this is wrong.
>>>>
>>>> Thanks,
>>>>
>>>> Matt
>>>>
>>>>
>>>>> On Wed, Feb 5, 2025 at 1:56 PM Matthew Knepley <knepley at gmail.com>
>>>>> wrote:
>>>>>
>>>>>> On Wed, Feb 5, 2025 at 1:24 PM neil liu <liufield at gmail.com> wrote:
>>>>>>
>>>>>>> The corners can be set with MMG's own API function, LIBMMG3D_EXPORT
>>>>>>> int MMG3D_Set_corner(MMG5_pMesh mesh, MMG5_int k);
>>>>>>>
>>>>>>
>>>>>> This definitely sets a corner attribute on a vertex.
>>>>>>
>>>>>>
>>>>>>> The edges can be set with MMG's own API function, LIBMMG3D_EXPORT
>>>>>>> int MMG3D_Set_edges(MMG5_pMesh mesh, MMG5_int *edges, MMG5_int* refs);
>>>>>>>
>>>>>>
>>>>>> This seems to define all the edges in the mesh. Are you saying that
>>>>>> MMG only uses these edge definitions for open boundaries?
>>>>>>
>>>>>>
>>>>>>> MMG doesn't have a very detailed documentation. The above API
>>>>>>> subroutines can be found,
>>>>>>> mmg/src/mmg3d/libmmg3d.h at master · MmgTools/mmg · GitHub
>>>>>>> <https://urldefense.us/v3/__https://github.com/MmgTools/mmg/blob/master/src/mmg3d/libmmg3d.h__;!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNUSN0MayA$ >
>>>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>>
>>>>>> Matt
>>>>>>
>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Xiaodong
>>>>>>>
>>>>>>> On Wed, Feb 5, 2025 at 1:16 PM Matthew Knepley <knepley at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> On Wed, Feb 5, 2025 at 1:06 PM neil liu <liufield at gmail.com> wrote:
>>>>>>>>
>>>>>>>>> Hi, Matt,
>>>>>>>>>
>>>>>>>>> It is not enough to only turn on -the open boundary.
>>>>>>>>> For the above example, the 4 physical corner vertices (0D) for
>>>>>>>>> this internal quadrilateral surface have to be set, otherwise the shape can
>>>>>>>>> not be kept.
>>>>>>>>> In addition, for my present case, the boundary edges (1D)
>>>>>>>>> consisting of this quadrilateral surface need to be tagged.
>>>>>>>>> The present bdLabel seems to only work for 2D shapes for 3D cases.
>>>>>>>>> Please correct me if I am wrong.
>>>>>>>>>
>>>>>>>>
>>>>>>>> Are you saying that this is the interface published by MMG? Can you
>>>>>>>> point me toward the piece of MMG documentation? I just want to understand
>>>>>>>> the interface requirements before we make any changes to PETSc.
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Matt
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>>
>>>>>>>>> Xiaodong
>>>>>>>>>
>>>>>>>>> On Wed, Feb 5, 2025 at 12:05 PM Matthew Knepley <knepley at gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> This is a really poor name. The boundary is not open in any
>>>>>>>>>> sense. It should be called an internal boundary, and what they call
>>>>>>>>>> internal boundaries should be called interdomain boundaries, but it seems
>>>>>>>>>> too late to fix this.
>>>>>>>>>>
>>>>>>>>>> Turning on open boundaries is just a flag, so that is easy, and
>>>>>>>>>> one can see the usefulness of this mode.
>>>>>>>>>>
>>>>>>>>>> My understanding from the documentation link below is that MMG
>>>>>>>>>> does not change anything about parts of the mesh marked
>>>>>>>>>> as internal boundaries, so we can read them right back out from
>>>>>>>>>> the boundary label. Why would we need a new label for this?
>>>>>>>>>>
>>>>>>>>>> Thanks,
>>>>>>>>>>
>>>>>>>>>> Matt
>>>>>>>>>>
>>>>>>>>>> On Wed, Feb 5, 2025 at 11:22 AM Pierre Jolivet <pierre at joliv.et>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> See also:
>>>>>>>>>>> https://urldefense.us/v3/__https://www.mmgtools.org/mmg-remesher-try-mmg/mmg-remesher-tutorials/mmg-remesher-mmg3d/open-boundary-remeshing__;!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNV2_-iELQ$
>>>>>>>>>>> .
>>>>>>>>>>>
>>>>>>>>>>> Thanks,
>>>>>>>>>>> Pierre
>>>>>>>>>>>
>>>>>>>>>>> On 5 Feb 2025, at 4:39 PM, neil liu <liufield at gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> It seems the figures were broken. Please see the following
>>>>>>>>>>> attached.
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Feb 5, 2025 at 10:36 AM neil liu <liufield at gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi, Mark,
>>>>>>>>>>>>
>>>>>>>>>>>> For example, in the left figure, the yellow rectangular face
>>>>>>>>>>>> needs to be preserved during mesh refinement. However, without specifying
>>>>>>>>>>>> its four corner points, the rectangle cannot be maintained, as shown in the
>>>>>>>>>>>> right figure. Additionally, the four edges of this face must be recorded
>>>>>>>>>>>> and retrieved for post-processing.
>>>>>>>>>>>>
>>>>>>>>>>>> This yellow face is an *open boundary*, meaning it is not an
>>>>>>>>>>>> interface between different materials. To ensure its preservation during
>>>>>>>>>>>> mesh refinement, MMG must be run in *opnbdy* (open boundary)
>>>>>>>>>>>> mode.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks a lot,
>>>>>>>>>>>>
>>>>>>>>>>>> Xiaodong
>>>>>>>>>>>> [image: image.png] [image: image.png]
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Feb 5, 2025 at 10:05 AM Matthew Knepley <
>>>>>>>>>>>> knepley at gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> On Wed, Feb 5, 2025 at 9:52 AM neil liu <liufield at gmail.com>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Dear developers,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am currently working with MMG in the context of PETSc and
>>>>>>>>>>>>>> have identified a need to modify the existing MMG interface,
>>>>>>>>>>>>>> DMAdaptMetric_Mmg_Plex(), for our use case. Given these
>>>>>>>>>>>>>> requirements, I would like to explore the feasibility of contributing to
>>>>>>>>>>>>>> PETSc to enhance this interface, which has been verified and validated in
>>>>>>>>>>>>>> our research code.
>>>>>>>>>>>>>> *Proposed Modifications:*
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Additional Labels for Physical Entities:*
>>>>>>>>>>>>>> - In addition to the existing bdLabel and rgLabel, our
>>>>>>>>>>>>>> case requires two additional labels to represent physical vertices and
>>>>>>>>>>>>>> edges within the computational domain (3D).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am open to this. Can you be more specific about what it
>>>>>>>>>>>>> means?
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1.
>>>>>>>>>>>>>> - One approach is to introduce two new parameters in
>>>>>>>>>>>>>> the subroutine’s input list. However, this may require modifications across
>>>>>>>>>>>>>> related components, such as Pragmatic.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This is not a problem. I can modify those.
>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> 1.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> *Support for Open Boundaries:*
>>>>>>>>>>>>>> - The current interface does not support open boundaries,
>>>>>>>>>>>>>> a feature available in MMG.
>>>>>>>>>>>>>> - As a result, several MMG benchmark cases involving
>>>>>>>>>>>>>> open boundary remeshing cannot be executed within PETSc.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Can you explain what this means? What is an open boundary
>>>>>>>>>>>>> exactly?
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Would this be a viable contribution to PETSc? If so, I would
>>>>>>>>>>>>>> appreciate any guidance on the best approach to implementing these changes
>>>>>>>>>>>>>> while maintaining compatibility with existing features.
>>>>>>>>>>>>>>
>>>>>>>>>>>>> Yes. Please make a fork of the petsc repo, make a branch with
>>>>>>>>>>>>> the proposed changes, make an MR for that branch, and add me to your fork
>>>>>>>>>>>>> (I am knepley on GitLab). I can help you get it going.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>
>>>>>>>>>>>>> Matt
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Looking forward to your thoughts.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> Xiaodong
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNVhT5SvMw$
>>>>>>>>>>>>> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!anvbtQDqn57whvgg2qc1Dix0Izm9kxNlvUkeyYkcfknnt6VmqbCE0mlGSj6O1DLJx6qR7-7UsHv48zbaqVDECw$>
>>>>>>>>>>>>>
>>>>>>>>>>>> <The right figure.png><The left figure.png>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNVhT5SvMw$
>>>>>>>>>> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNURHIxjqw$ >
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNVhT5SvMw$
>>>>>>>> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNURHIxjqw$ >
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNVhT5SvMw$
>>>>>> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNURHIxjqw$ >
>>>>>>
>>>>>
>>>>
>>>> --
>>>> 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNVhT5SvMw$
>>>> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNURHIxjqw$ >
>>>>
>>>
>
> --
> 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://urldefense.us/v3/__https://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNVhT5SvMw$
> <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!dNDagQYzVDsS7RHRolLp1ZxApyE_MY_JpIE5RnvdL56Yr9IeHdzR8cEgbpikfyGUqGC0TwnFRNzoVNURHIxjqw$ >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20250215/978ba4e9/attachment-0001.html>
More information about the petsc-dev
mailing list