[petsc-users] TS tutorial ex11 in Fortran

Mark Adams mfadams at lbl.gov
Sun Dec 13 08:17:05 CST 2020


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.




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
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20201213/00c5fb57/attachment.html>


More information about the petsc-users mailing list