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$
 >

Reply via email to