xref: /petsc/src/vec/is/sf/interface/ftn-custom/zsf.c (revision 8af6ec1cc8e49a30993fa2a7b177d7989c62ae61)
1 #include <petsc/private/f90impl.h>
2 #include <petsc/private/sfimpl.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define sfview_           PETSCSFVIEW
6 #define petscsfbcastbegin_ PETSCSFBCASTBEGIN
7 #define petscsfbcastend_   PETSCSFBCASTEND
8 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
9 #define sfview_            petscsfview
10 #define petscsfbcastbegin_ petscsfbcastbegin
11 #define petscsfbcastend_   petscsfbcastend
12 #endif
13 
14 PETSC_EXTERN void PETSC_STDCALL petscsfview_(PetscSF *sf, PetscViewer *vin, PetscErrorCode *ierr)
15 {
16   PetscViewer v;
17 
18   PetscPatchDefaultViewers_Fortran(vin, v);
19   *ierr = PetscSFView(*sf, v);
20 }
21 
22 PETSC_EXTERN void PETSC_STDCALL petscsfbcastbegin_(PetscSF *sf, MPI_Fint *unit,F90Array1d *rptr, F90Array1d *lptr, int *ierr PETSC_F90_2PTR_PROTO(rptrd) PETSC_F90_2PTR_PROTO(lptrd))
23 {
24   MPI_Datatype dtype;
25   const void   *rootdata;
26   void         *leafdata;
27 
28   dtype = MPI_Type_f2c(*unit);
29   *ierr = F90Array1dAccess(rptr, dtype, (void**) &rootdata PETSC_F90_2PTR_PARAM(rptrd));if (*ierr) return;
30   *ierr = F90Array1dAccess(lptr, dtype, (void**) &leafdata PETSC_F90_2PTR_PARAM(lptrd));if (*ierr) return;
31   *ierr = PetscSFBcastBegin(*sf, dtype, rootdata, leafdata);
32 }
33 
34 PETSC_EXTERN void PETSC_STDCALL petscsfbcastend_(PetscSF *sf, MPI_Fint *unit,F90Array1d *rptr, F90Array1d *lptr, int *ierr PETSC_F90_2PTR_PROTO(rptrd) PETSC_F90_2PTR_PROTO(lptrd))
35 {
36   MPI_Datatype dtype;
37   const void   *rootdata;
38   void         *leafdata;
39 
40   dtype = MPI_Type_f2c(*unit);
41   *ierr = F90Array1dAccess(rptr, dtype, (void**) &rootdata PETSC_F90_2PTR_PARAM(rptrd));if (*ierr) return;
42   *ierr = F90Array1dAccess(lptr, dtype, (void**) &leafdata PETSC_F90_2PTR_PARAM(lptrd));if (*ierr) return;
43   *ierr = PetscSFBcastEnd(*sf, dtype, rootdata, leafdata);
44 }
45