[petsc-users] PetscSF Fortran interface

Junchao Zhang junchao.zhang at gmail.com
Thu Jan 12 23:29:45 CST 2023


How about this?

PetscInt, pointer :: remoteOffsets(:)
call PetscSFCreateRemoteOffsetsf90(distributionSF, section_filt_l,
leafSection, remoteoffsets, ierr )
call PetscSFCreateSectionSFF90(distributionSF, section_filt_l,
remoteoffsets, leafSection, distributionSF_dof, ierr)
call PetscIntArray1dDestroyF90(remoteOffsets,ierr) // free remoteoffsets
when not needed

On Thu, Jan 12, 2023 at 11:11 PM Nicholas Arnold-Medabalimi <
narnoldm at umich.edu> wrote:

> That is what I tried initially however, I get a segmentation fault. I can
> confirm it's due to the remote offsets because if I try and output
> remoteoffsets between the Distribute Section and Create Section it throws
> the same segmentation fault.
>
> Thanks for the help
> Nicholas
>
> On Thu, Jan 12, 2023 at 11:56 PM Junchao Zhang <junchao.zhang at gmail.com>
> wrote:
>
>>
>>
>> On Thu, Jan 12, 2023 at 1:28 PM Nicholas Arnold-Medabalimi <
>> narnoldm at umich.edu> wrote:
>>
>>> Hi Junchao
>>>
>>> Going back to this merge request. I'm not sure I follow exactly the
>>> usage described in the commit history. I have a c prototype of what I am
>>> trying to do which is
>>>
>>>     PetscSectionCreate(PETSC_COMM_WORLD, &leafSection);
>>>     PetscSFDistributeSection(redistributionSF, filteredSection_local, &remoteOffsets,
>>> leafSection);
>>>     PetscSFCreateSectionSF(redistributionSF, filteredSection_local,
>>> remoteOffsets, leafSection, &redistributionSF_dof);
>>>
>>> But something seems unclear with the usage in fortran around the
>>> remoteoffsets. Do I have to insert the CreateRemoteOffsetsF90 like so? Any
>>> clarification would be greatly appreciated.
>>>
>>> call PetscSFDistributeSectionF90(distributionSF, section_filt_l,
>>> remoteoffsets, leafSection, ierr)
>>> call PetscSFCreateRemoteOffsetsf90(distributionSF, section_filt_l,
>>> leafSection, remoteoffsets, ierr )
>>> call PetscSFCreateSectionSFF90(distributionSF, section_filt_l,
>>> remoteoffsets, leafSection, distributionSF_dof, ierr)
>>>
>>> Hi, Nicholas,
>>   Reading through comments at
>> https://gitlab.com/petsc/petsc/-/merge_requests/5386#note_1022942470, I
>> feel it should look like
>>
>> PetscInt, pointer :: remoteOffsets(:)
>> call PetscSFDistributeSectionF90(distributionSF, section_filt_l,
>> remoteoffsets, leafSection, ierr)  // allocate remoteoffsets
>> call PetscSFCreateSectionSFF90(distributionSF, section_filt_l,
>> remoteoffsets, leafSection, distributionSF_dof, ierr)
>> call PetscIntArray1dDestroyF90(remoteOffsets,ierr) // free remoteoffsets
>> when not needed
>>
>> Could you try it?
>>
>>
>> Sincerely
>>> Nicholas
>>>
>>> On Tue, Jan 10, 2023 at 4:42 PM Junchao Zhang <junchao.zhang at gmail.com>
>>> wrote:
>>>
>>>> Hi, Nicholas,
>>>>    It seems we have implemented it, but with another name,
>>>> PetscSFCreateSectionSFF90, see
>>>> https://gitlab.com/petsc/petsc/-/merge_requests/5386
>>>>    Try it to see if it works!
>>>>
>>>> --Junchao Zhang
>>>>
>>>>
>>>> On Tue, Jan 10, 2023 at 11:45 AM Nicholas Arnold-Medabalimi <
>>>> narnoldm at umich.edu> wrote:
>>>>
>>>>> Er to be honest I still can't get my stub to compile properly, and I
>>>>> don't know how to go about making a merge request. But here is what I am
>>>>> attempting right now. Let me know how best to proceed
>>>>>
>>>>>
>>>>> Its not exactly clear to me how to setup up the remote offset
>>>>> properly.
>>>>>
>>>>> in src/vec/is/sf/interface/ftn-custom/zsf.c
>>>>>
>>>>> PETSC_EXTERN void petscsfcreatesectionsf(PetscSF *sf, PetscSection
>>>>> *rootSection, F90Array1d *aremoteOffsets, PetscSection *leafSection,
>>>>> PetscSF *sectionSF, int * ierr PETSC_F90_2PTR_PROTO(remoteoffsetsd))
>>>>> {
>>>>>
>>>>>   int * remoteOffsets;
>>>>>   *ierr = F90Array1dAccess(aremoteOffsets, PETSC_INT, (void**)
>>>>> &remoteOffsets PETSC_F90_2PTR_PARAM(remoteoffsetsd));if (*ierr) return;
>>>>>   *ierr = PetscSFCreateSectionSF(*sf,*rootSection,
>>>>> &remoteOffsets,*leafSection,*sectionSF);if (*ierr) return;
>>>>>
>>>>> }
>>>>>
>>>>> This is the sticking point.
>>>>>
>>>>> Sincerely
>>>>> Nicholas
>>>>>
>>>>>
>>>>> On Tue, Jan 10, 2023 at 12:38 PM Junchao Zhang <
>>>>> junchao.zhang at gmail.com> wrote:
>>>>>
>>>>>> Hi, Nicholas,
>>>>>>   Could you make a merge request to PETSc and then our Fortran
>>>>>> experts can comment on your MR?
>>>>>>   Thanks.
>>>>>>
>>>>>> --Junchao Zhang
>>>>>>
>>>>>>
>>>>>> On Tue, Jan 10, 2023 at 11:10 AM Nicholas Arnold-Medabalimi <
>>>>>> narnoldm at umich.edu> wrote:
>>>>>>
>>>>>>> Hi Junchao
>>>>>>>
>>>>>>> I think I'm almost there, but I could use some insight into how to
>>>>>>> use the PETSC_F90_2PTR_PROTO and F90Array1dAccess for the remoteOffset
>>>>>>> parameter input so if another function comes up, I can add it myself
>>>>>>> without wasting your time.
>>>>>>> I am very grateful for your help and time.
>>>>>>>
>>>>>>> Sincerely
>>>>>>> Nicholas
>>>>>>>
>>>>>>> On Tue, Jan 10, 2023 at 10:55 AM Junchao Zhang <
>>>>>>> junchao.zhang at gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi, Nicholas,
>>>>>>>>    I am not a fortran guy, but I will try to add
>>>>>>>> petscsfcreatesectionsf.
>>>>>>>>
>>>>>>>>    Thanks.
>>>>>>>> --Junchao Zhang
>>>>>>>>
>>>>>>>>
>>>>>>>> On Tue, Jan 10, 2023 at 12:50 AM Nicholas Arnold-Medabalimi <
>>>>>>>> narnoldm at umich.edu> wrote:
>>>>>>>>
>>>>>>>>> I think it should be something like this, but I'm not very fluent
>>>>>>>>> in Fortran C interop syntax. Any advice would be appreciated. Thanks
>>>>>>>>>
>>>>>>>>> PETSC_EXTERN void petscsfcreatesectionsf(PetscSF *sf, PetscSection
>>>>>>>>> *rootSection, F90Array1d *aremoteOffsets, PetscSection *
>>>>>>>>> leafSection, PetscSF *sectionSF, int * ierr PETSC_F90_2PTR_PROTO
>>>>>>>>> (remoteoffsetsd))
>>>>>>>>> {
>>>>>>>>>
>>>>>>>>>   int * remoteOffsets;
>>>>>>>>>   *ierr = F90Array1dAccess(aremoteOffsets, PETSC_INT, (void**) &
>>>>>>>>> remoteOffsets PETSC_F90_2PTR_PARAM(remoteoffsetsd));if (*ierr)
>>>>>>>>> return;
>>>>>>>>>   *ierr = PetscSFCreateSectionSF(*sf,*rootSection, &remoteOffsets,
>>>>>>>>> *leafSection,*sectionSF);if (*ierr) return;
>>>>>>>>>
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> On Mon, Jan 9, 2023 at 11:41 PM Nicholas Arnold-Medabalimi <
>>>>>>>>> narnoldm at umich.edu> wrote:
>>>>>>>>>
>>>>>>>>>> Hi Junchao
>>>>>>>>>>
>>>>>>>>>> Thanks again for your help in November. I've been using the your
>>>>>>>>>> merge request branch quite heavily. Would it be possible to add a
>>>>>>>>>> petscsfcreatesectionsf interface as well?
>>>>>>>>>> I'm trying to write it myself using your commits as a guide but I
>>>>>>>>>> have been struggling with handling the section parameter properly.
>>>>>>>>>>
>>>>>>>>>> Sincerely
>>>>>>>>>> Nicholas
>>>>>>>>>>
>>>>>>>>>> On Sat, Nov 19, 2022 at 9:44 PM Junchao Zhang <
>>>>>>>>>> junchao.zhang at gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Sat, Nov 19, 2022 at 8:05 PM Nicholas Arnold-Medabalimi <
>>>>>>>>>>> narnoldm at umich.edu> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Hi
>>>>>>>>>>>>
>>>>>>>>>>>> Thanks, this is awesome. Thanks for the very prompt fix. Just
>>>>>>>>>>>> one question: will the array outputs on the fortran side copies (and need
>>>>>>>>>>>> to be deallocated) or direct access to the dmplex?
>>>>>>>>>>>>
>>>>>>>>>>> Direct access to internal data;  no need to deallocate
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Sincerely
>>>>>>>>>>>> Nicholas
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Nov 19, 2022 at 8:21 PM Junchao Zhang <
>>>>>>>>>>>> junchao.zhang at gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi, Nicholas,
>>>>>>>>>>>>>   See this MR,
>>>>>>>>>>>>> https://gitlab.com/petsc/petsc/-/merge_requests/5860
>>>>>>>>>>>>>   It is in testing, but you can try branch
>>>>>>>>>>>>> jczhang/add-petscsf-fortran to see if it works for you.
>>>>>>>>>>>>>
>>>>>>>>>>>>>   Thanks.
>>>>>>>>>>>>> --Junchao Zhang
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Sat, Nov 19, 2022 at 4:16 PM Nicholas Arnold-Medabalimi <
>>>>>>>>>>>>> narnoldm at umich.edu> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hi Junchao
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanks. I was wondering if there is any update on this. I may
>>>>>>>>>>>>>> write a small interface for those two routines myself in the interim but
>>>>>>>>>>>>>> I'd appreciate any insight you have.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Sincerely
>>>>>>>>>>>>>> Nicholas
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Nov 16, 2022 at 10:39 PM Junchao Zhang <
>>>>>>>>>>>>>> junchao.zhang at gmail.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hi, Nicholas,
>>>>>>>>>>>>>>>   I will have a look and get back to you.
>>>>>>>>>>>>>>>   Thanks.
>>>>>>>>>>>>>>> --Junchao Zhang
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, Nov 16, 2022 at 9:27 PM Nicholas Arnold-Medabalimi <
>>>>>>>>>>>>>>> narnoldm at umich.edu> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hi Petsc Users
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I'm in the process of adding some Petsc for mesh management
>>>>>>>>>>>>>>>> into an existing Fortran Solver. It has been relatively straightforward so
>>>>>>>>>>>>>>>> far but I am running into an issue with using PetscSF routines. Some like
>>>>>>>>>>>>>>>> the PetscSFGetGraph work no problem but a few of my routines require the
>>>>>>>>>>>>>>>> use of PetscSFGetLeafRanks and PetscSFGetRootRanks and those don't seem to
>>>>>>>>>>>>>>>> be in the fortran interface and I just get a linking error. I also don't
>>>>>>>>>>>>>>>> seem to see a PetscSF file in the finclude. Any clarification or assistance
>>>>>>>>>>>>>>>> would be appreciated.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Sincerely
>>>>>>>>>>>>>>>> Nicholas
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> Nicholas Arnold-Medabalimi
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Ph.D. Candidate
>>>>>>>>>>>>>>>> Computational Aeroscience Lab
>>>>>>>>>>>>>>>> University of Michigan
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> --
>>>>>>>>>>>>>> Nicholas Arnold-Medabalimi
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Ph.D. Candidate
>>>>>>>>>>>>>> Computational Aeroscience Lab
>>>>>>>>>>>>>> University of Michigan
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> Nicholas Arnold-Medabalimi
>>>>>>>>>>>>
>>>>>>>>>>>> Ph.D. Candidate
>>>>>>>>>>>> Computational Aeroscience Lab
>>>>>>>>>>>> University of Michigan
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Nicholas Arnold-Medabalimi
>>>>>>>>>>
>>>>>>>>>> Ph.D. Candidate
>>>>>>>>>> Computational Aeroscience Lab
>>>>>>>>>> University of Michigan
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Nicholas Arnold-Medabalimi
>>>>>>>>>
>>>>>>>>> Ph.D. Candidate
>>>>>>>>> Computational Aeroscience Lab
>>>>>>>>> University of Michigan
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Nicholas Arnold-Medabalimi
>>>>>>>
>>>>>>> Ph.D. Candidate
>>>>>>> Computational Aeroscience Lab
>>>>>>> University of Michigan
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Nicholas Arnold-Medabalimi
>>>>>
>>>>> Ph.D. Candidate
>>>>> Computational Aeroscience Lab
>>>>> University of Michigan
>>>>>
>>>>
>>>
>>> --
>>> Nicholas Arnold-Medabalimi
>>>
>>> Ph.D. Candidate
>>> Computational Aeroscience Lab
>>> University of Michigan
>>>
>>
>
> --
> Nicholas Arnold-Medabalimi
>
> Ph.D. Candidate
> Computational Aeroscience Lab
> University of Michigan
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230112/2cd26ca6/attachment-0001.html>


More information about the petsc-users mailing list