Matt: My bad again, I need to clarify something that I just realized doesn't make sense. I said: "The nature of the I/O makes it so that I need to read the connectivity before I get a semblance of buffer sizes." Scratch that, obviously, if I can read the connectivity, I know the buffer sizes.
What I should have said is that I cannot know the "chart" that one sets in DMPlexSetChart() a priori like in most cases. I need to determine the chart from the connectivity lists. ________________________________ From: Ferrand, Jesus A. <ferra...@my.erau.edu> Sent: Wednesday, May 1, 2024 8:17 PM To: Matthew Knepley <knep...@gmail.com> Cc: petsc-users@mcs.anl.gov <petsc-users@mcs.anl.gov> Subject: Re: [EXTERNAL] Re: [petsc-users] Is there anything like a "DMPlexSetCones()" ? Matt: "I do not understand the "flag check". What is that?" My bad, I should have referred to the "dm->setupcalled". I believe this PetscBool is checked by the other DM (not just DMPlex) APIs. The subsequent checks for dm->setupcalled == PETSC_TRUE is what I meant to say. Here's a copy of DMSetUp(). PetscErrorCode<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscErrorCode/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIvmDOx14$ > DMSetUp<https://urldefense.us/v3/__https://petsc.org/release/manualpages/DM/DMSetUp/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIOSy-UaQ$ >(DM<https://urldefense.us/v3/__https://petsc.org/release/manualpages/DM/DM/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIQUtSyT4$ > dm) 817: { 818: PetscFunctionBegin<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscFunctionBegin/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIthWKl2Y$ >; 820: if (dm->setupcalled) PetscFunctionReturn<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscFunctionReturn/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIA9zrkn4$ >(PETSC_SUCCESS<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscErrorCode/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIvmDOx14$ >); 821: PetscTryTypeMethod<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscTryTypeMethod/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIFSJZYG4$ >(dm, setup); 822: dm->setupcalled = PETSC_TRUE<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PETSC_TRUE/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIQcJ2U-8$ >; 823: PetscFunctionReturn<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscFunctionReturn/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIA9zrkn4$ >(PETSC_SUCCESS<https://urldefense.us/v3/__https://petsc.org/release/manualpages/Sys/PetscErrorCode/__;!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIvmDOx14$ >); 824: } "We could make a DMPlexSetCones(), but as you point out, the workflow for DMSetUp() would have to change. Where does the memory come from for your connectivity?" It's a memory that I myself allocate based on a file's contents. The nature of the I/O makes it so that I need to read the connectivity before I get a semblance of buffer sizes. Otherwise, I would stick to the tried and tested way. Also, when replying to the PETSc developers, users must reply to petsc-users@mcs.anl.gov and not just to the individual email accounts of the developers, right? ________________________________ From: Matthew Knepley <knep...@gmail.com> Sent: Wednesday, May 1, 2024 8:07 PM To: Ferrand, Jesus A. <ferra...@my.erau.edu> Cc: petsc-users@mcs.anl.gov <petsc-users@mcs.anl.gov> Subject: [EXTERNAL] Re: [petsc-users] Is there anything like a "DMPlexSetCones()" ? CAUTION: This email originated outside of Embry-Riddle Aeronautical University. Do not click links or open attachments unless you recognize the sender and know the content is safe. On Wed, May 1, 2024 at 3:34 PM Ferrand, Jesus A. <ferra...@my.erau.edu<mailto:ferra...@my.erau.edu>> wrote: This Message Is From an External Sender This message came from outside your organization. Dear PETSc team: For a project that I'm working on, I need to manually build a DMPlex. >From studying the source code of the various APIs in which the plex is built >from some supported file format, I get that the workflow is this: 1. DMPlexSetChart() <-- Input nCells + nVerts 2. DMPlexSetConeSize() <-- Input ConeSize for each point in [0,nCells) 3. DMSetUp() – Allocates memory internally. 4. DMPlexGetCones() --> Gives you the memory onto which to write the cell connectivity. 5. *Write connectivity* 6. DMPlexReorderCell() <-- For each point in [0,nCells) I'm in a situation where the memory given by step (4) is available a-priori. I was hoping to skip steps 2, 3 , and 4 with something like a "DMPlexSetCones()", but such an API does not exist. My current workaround is to implement steps 2 through 4 as always and have double the memory allocated in the interim (my instance + DM's internal instance). I was thinking of looking for the name of the struct member and = it to my memory, but I can't overcome the flag check in DMSetUp() during later calls to DMPlexGetCones() or DMPlexGetTransitiveClosure(). I do not understand the "flag check". What is that? We could make a DMPlexSetCones(), but as you point out, the workflow for DMSetUp() would have to change. Where does the memory come from for your connectivity? Thanks, Matt Sincerely: J.A. Ferrand Embry-Riddle Aeronautical University - Daytona Beach - FL Ph.D. Candidate, Aerospace Engineering M.Sc. Aerospace Engineering B.Sc. Aerospace Engineering B.Sc. Computational Mathematics Phone: (386)-843-1829 Email(s): ferra...@my.erau.edu<mailto:ferra...@my.erau.edu> jesus.ferr...@gmail.com<mailto:jesus.ferr...@gmail.com> -- 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!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIlMqTtdQ$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOI2JgJ_9s$ > ________________________________ From: Matthew Knepley <knep...@gmail.com> Sent: Wednesday, May 1, 2024 8:07 PM To: Ferrand, Jesus A. <ferra...@my.erau.edu> Cc: petsc-users@mcs.anl.gov <petsc-users@mcs.anl.gov> Subject: [EXTERNAL] Re: [petsc-users] Is there anything like a "DMPlexSetCones()" ? CAUTION: This email originated outside of Embry-Riddle Aeronautical University. Do not click links or open attachments unless you recognize the sender and know the content is safe. On Wed, May 1, 2024 at 3:34 PM Ferrand, Jesus A. <ferra...@my.erau.edu<mailto:ferra...@my.erau.edu>> wrote: This Message Is From an External Sender This message came from outside your organization. Dear PETSc team: For a project that I'm working on, I need to manually build a DMPlex. >From studying the source code of the various APIs in which the plex is built >from some supported file format, I get that the workflow is this: 1. DMPlexSetChart() <-- Input nCells + nVerts 2. DMPlexSetConeSize() <-- Input ConeSize for each point in [0,nCells) 3. DMSetUp() – Allocates memory internally. 4. DMPlexGetCones() --> Gives you the memory onto which to write the cell connectivity. 5. *Write connectivity* 6. DMPlexReorderCell() <-- For each point in [0,nCells) I'm in a situation where the memory given by step (4) is available a-priori. I was hoping to skip steps 2, 3 , and 4 with something like a "DMPlexSetCones()", but such an API does not exist. My current workaround is to implement steps 2 through 4 as always and have double the memory allocated in the interim (my instance + DM's internal instance). I was thinking of looking for the name of the struct member and = it to my memory, but I can't overcome the flag check in DMSetUp() during later calls to DMPlexGetCones() or DMPlexGetTransitiveClosure(). I do not understand the "flag check". What is that? We could make a DMPlexSetCones(), but as you point out, the workflow for DMSetUp() would have to change. Where does the memory come from for your connectivity? Thanks, Matt Sincerely: J.A. Ferrand Embry-Riddle Aeronautical University - Daytona Beach - FL Ph.D. Candidate, Aerospace Engineering M.Sc. Aerospace Engineering B.Sc. Aerospace Engineering B.Sc. Computational Mathematics Phone: (386)-843-1829 Email(s): ferra...@my.erau.edu<mailto:ferra...@my.erau.edu> jesus.ferr...@gmail.com<mailto:jesus.ferr...@gmail.com> -- 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!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOIlMqTtdQ$ <https://urldefense.us/v3/__http://www.cse.buffalo.edu/*knepley/__;fg!!G_uCfscf7eWS!Y59qV_AfccorvDZ2Ux5zlODn2plUGK9DDK2MadlAOvbh7uPhFCvfhWkUgJ_4ncaI6RxBeDbsKAPuyB-H6hOI2JgJ_9s$ >