Dear Matt and Jed,

Thank you so much for your insights.

Jed, as far as I know, the format is custom internal structure. I will 
double-check this. If it is used outside, I'm more than willing to contribute 
the reader.

Best,

Onur

Sent with [Proton Mail](https://proton.me/) secure email.

------- Original Message -------
On Monday, October 30th, 2023 at 8:16 PM, Matthew Knepley <knep...@gmail.com> 
wrote:

> On Mon, Oct 30, 2023 at 5:37 AM onur.notonur via petsc-users 
> <petsc-users@mcs.anl.gov> wrote:
>
>> Hi,
>>
>> I hope this message finds you all in good health and high spirits.
>>
>> I wanted to discuss an approach problem input file reading/processing in a 
>> solver which is using PETSc DMPlex. In our team we have a range of solvers, 
>> they are not built on PETSc except this one, but they all share a common 
>> problem input format. This format includes essential data such as node 
>> coordinates, element connectivity, boundary conditions based on elements, 
>> and specific metadata related to the problem. I create an array for boundary 
>> points on each rank and utilize them in our computations, I am doing it 
>> hardcoded currently but I need to start reading those input files, But I am 
>> not sure about the approach.
>>
>> Here's what I have in mind:
>>
>> - - Begin by reading the node coordinates and connectivity on a single core.
>> - Utilize the DMPlexCreateFromCellListPetsc() function to construct the 
>> DMPlex.
>> - Distribute the mesh across processors.
>> - Proceed to read and process the boundary conditions on each processor. If 
>> the global index of the boundary element corresponds to that processor, we 
>> process it; otherwise, we pass.
>>
>> Additionally, maybe I need to reorder the mesh. In that case I think I can 
>> use the point permutation IS obtained from the DMPlexGetOrdering() function 
>> while processing boundary conditions.
>>
>> Also I have another approach in my mind but I don't know if it's possible: 
>> Read/construct DMPlex on single core including boundary conditions. Store BC 
>> related data in Vec or another appropriate data structure. Then distribute 
>> this BC holding data structure too as well as DMPlex.
>
> This is by far the easier approach. If you do not have meshes that are too 
> big to load in serial, I would do
> this. Here is what you do:
>
> - Read in the mesh onto 1 process
> - Mark the boundary conditions, probably with a DMLabel
> - Make a Section over the mesh indicating what data you have for BC
> - Create a Vec from this Section and fill it with boundary values 
> (DMCreateGlobalVector)
> - Distribute the mesh, and keep the point SF (DMPlexDIstribute)
> - Create a BC SF from the points SF (PetscSFCreateSectionSF)
> - DIstribute the BC values using the BC SF (PetscSFBcast)
>
> Thanks,
>
> Matt
>
>> I would greatly appreciate your thoughts and any suggestions you might have 
>> regarding this approach. Looking forward to hearing your insights.
>>
>> Best regards,
>>
>> Onur
>
> --
>
> 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