[petsc-users] TS tutorial ex11 in Fortran
Matthew Knepley
knepley at gmail.com
Sun Dec 13 08:29:37 CST 2020
On Sun, Dec 13, 2020 at 9:17 AM Mark Adams <mfadams at lbl.gov> wrote:
> I don't think function pointers to PETSc (DS and DM) methods are not going
> to work in Fortran:
>
> ierr = PetscDSAddBoundary(prob, DM_BC_NATURAL_RIEMANN, "inflow", "Face
> Sets", 0, 0, NULL, (void (*)(void)) PhysicsBoundary_Advect_Inflow, NULL,
> ALEN(inflowids), inflowids, phys);CHKERRQ(ierr);
>
> You could write a funcs.c file that you call from your fortran code, like,
> call setBC1(prob,...,ierr)
>
> and put PhysicsBoundary_Advect_Inflow and setBC1 in funcs.c, for instance.
>
Wrappers for functions that that function arguments are possible, but more
involved. We have to create an internal struct that
holds Fortran function pointers, and then call them with the right
arguments. This has been done for SNESSetFunction() for
instance, so we would start emulating that.
Thanks,
Matt
>
> On Sun, Dec 13, 2020 at 5:32 AM Thibault Bridel-Bertomeu <
> thibault.bridelbertomeu at gmail.com> wrote:
>
>> Good morning all,
>>
>> Thank you Barry for your answer.
>> I started adding some interfaces (PetscFVSetComponentName, PetscFVView &
>> PetscFVSetType so far) and I have to say I think it is working quite well,
>> but the prototypes of those functions are still quite "simple".
>> I am stuck at how to implement the wrappers for PetscDSSetRiemannSolver
>> and PetscDSSetContext though, especially on how to pass a function as an
>> argument to PetscDSSetRiemannSolver ... Are there any similar functions
>> that may already have their wrappers ?
>>
>> Thank you very much,
>>
>> Thibault
>>
>>
>> Le sam. 12 déc. 2020 à 23:28, Barry Smith <bsmith at petsc.dev> a écrit :
>>
>>>
>>>
>>> On Dec 12, 2020, at 2:59 PM, Thibault Bridel-Bertomeu <
>>> thibault.bridelbertomeu at gmail.com> wrote:
>>>
>>> Dear Jed, dear Barry,
>>>
>>> Thank you for the fast answers !
>>>
>>> If I have any success I will make sure to make a pull request to provide
>>> some version of ex11 in Fortran.
>>>
>>> Regarding the stubs, I admit I started looking in that direction to add
>>> the missing wrappers but I am not sure I fully understand the process yet.
>>> For each C function, I gotta provide a Fortran interface in a .h90 file
>>> as well as a C function that has a Fortran-like prototype and calls the C
>>> function - right ?
>>>
>>>
>>> Yes,
>>>
>>> However there are a few things I could not find / understand yet.
>>> For instance, it appears that for C functions that have character string
>>> arguments take an extra argument in their Fortran-like-prototype-wrapper,
>>> namely the length of the string. Is that passed automatically ? I couldn’t
>>> find where it could come from ...
>>>
>>>
>>> This secret argument is put automatically by the Fortran compiler.
>>>
>>> Another thing is for functions like PetscFVView. I guess the wrapping is
>>> less straightforward because I tried a quick something and it segfault’ed.
>>> I couldnt find the wrapper for DMView although there is such a routine in
>>> Fortran too. Could you please detail how to wrap such functions ?
>>>
>>>
>>> PETSC_EXTERN void dmview_(DM *da,PetscViewer *vin,PetscErrorCode *ierr)
>>> {
>>> PetscViewer v;
>>> PetscPatchDefaultViewers_Fortran(vin,v);
>>> *ierr = DMView(*da,v);
>>> }
>>>
>>> dm/interface/ftn-custom/zdmf.c
>>>
>>>
>>>
>>> Thank you very much again,
>>>
>>> Thibault Bridel-Bertomeu
>>>
>>> Le sam. 12 déc. 2020 à 21:48, Barry Smith <bsmith at petsc.dev> a écrit :
>>>
>>>>
>>>> PETSc Fortran interfaces are a combination of automatically
>>>> generated and manually generated.
>>>>
>>>> For any C PETSc function if the manual page begins with /*@ it
>>>> generates the Fortran interface automatically (make allfortranstubs). If
>>>> it begins /*@C then either the Fortran interface is done manually or is
>>>> missing.
>>>>
>>>> C functions that have character string arguments or function
>>>> arguments (or a few other special cases) need to be manually provided. The
>>>> automatically generated stubs go in the directory ftn-auto while manually
>>>> generated ones go in the directory fin-custom.
>>>>
>>>> Perhaps you could first generate a list of "missing" Fortran stubs
>>>> and then for each stub determine why it is missing and if it can be
>>>> provided. Some are likely easy to provide but a few (involving function
>>>> arguments) will be more involved. Once you have all the stubs available
>>>> translating ex11.c becomes straightforward.
>>>>
>>>> Barry
>>>>
>>>>
>>>> On Dec 12, 2020, at 9:30 AM, Thibault Bridel-Bertomeu <
>>>> thibault.bridelbertomeu at gmail.com> wrote:
>>>>
>>>> Dear all,
>>>>
>>>> Is there somewhere a version of the TS tutorial ex11.c in Fortran ?
>>>> I am looking into building in F90 (let's say that it is an unavoidable
>>>> constraint) an unstructured 3D solver of the Euler equations using the
>>>> "new" features of PETSc - mostly DMPlex & PetscFV - but I think there are
>>>> some interfaces missing and I find it hard to find workarounds in Fortran.
>>>> I would be grateful if anyone could please give me some pointers ...
>>>>
>>>> Thank you very much in advance,
>>>>
>>>> Thibault Bridel-Bertomeu
>>>> —
>>>> Eng, MSc, PhD
>>>> Research Engineer
>>>> CEA/CESTA
>>>> 33114 LE BARP
>>>> Tel.: (+33)557046924
>>>> Mob.: (+33)611025322
>>>> Mail: thibault.bridelbertomeu at gmail.com
>>>>
>>>>
>>>> --
>>> Thibault Bridel-Bertomeu
>>> —
>>> Eng, MSc, PhD
>>> Research Engineer
>>> CEA/CESTA
>>> 33114 LE BARP
>>> Tel.: (+33)557046924
>>> Mob.: (+33)611025322
>>> Mail: thibault.bridelbertomeu at 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://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20201213/abdb0dec/attachment.html>
More information about the petsc-users
mailing list