[petsc-users] TS tutorial ex11 in Fortran

Thibault Bridel-Bertomeu thibault.bridelbertomeu at gmail.com
Sun Dec 13 08:28:46 CST 2020


Thank you Mark for your answer.

I am not sure what you think could be in the setBC1 routine ? How to make
the connection with the PetscDS ?

On the other hand, I actually found after a while TSMonitorSet has a
fortran wrapper, and it does take as arguments two function pointers, so I
guess it is possible ? Although I am not sure exactly how to play with the
PetscObjectSetFortranCallback & PetscObjectUseFortranCallback macros -
could anybody advise please ?


Thank you !

Thibault


Le dim. 13 déc. 2020 à 15:17, Mark Adams <mfadams at lbl.gov> a écrit :

> 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/d5c8e4fc/attachment-0001.html>


More information about the petsc-users mailing list