xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 5dc64a9727a0cc1147601b21df2b9dcd374fa7c9) !
1 #include <petsc/private/fortranimpl.h>
2 #include <petscviewerhdf5.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define petscviewerhdf5open_            PETSCVIEWERHDF5OPEN
6 #define petscviewerhdf5pushgroup_       PETSCVIEWERHDF5PUSHGROUP
7 #define petscviewerhdf5getgroup_        PETSCVIEWERHDF5GETGROUP
8 #define petscviewerhdf5hasattribute_    PETSCVIEWERHDF5HASATTRIBUTE
9 #define petscviewerhdf5readsizes_       PETSCVIEWERHDF5READSIZES
10 #define petscviewerhdf5writeattribute_  PETSCVIEWERHDF5WRITEATTRIBUTE
11 #define petscviewerhdf5readattribute_   PETSCVIEWERHDF5READATTRIBUTE
12 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
13 #define petscviewerhdf5open_            petscviewerhdf5open
14 #define petscviewerhdf5pushgroup_       petscviewerhdf5pushgroup
15 #define petscviewerhdf5getgroup_        petscviewerhdf5getgroup
16 #define petscviewerhdf5hasattribute_    petscviewerhdf5hasattribute
17 #define petscviewerhdf5readsizes_       petscviewerhdf5readsizes
18 #define petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
19 #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
20 #endif
21 
22 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5open_(MPI_Comm *comm, char* name PETSC_MIXED_LEN(len), PetscFileMode *type,
23     PetscViewer *binv, PetscErrorCode *ierr PETSC_END_LEN(len))
24 {
25   char *c1;
26 
27   FIXCHAR(name, len, c1);
28   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return;
29   FREECHAR(name, c1);
30 }
31 
32 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
33     PetscErrorCode *ierr PETSC_END_LEN(len))
34 {
35   char *c1;
36 
37   FIXCHAR(name, len, c1);
38   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return;
39   FREECHAR(name, c1);
40 }
41 
42 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
43     PetscErrorCode *ierr PETSC_END_LEN(len))
44 {
45   const char *c1;
46 
47   *ierr = PetscViewerHDF5GetGroup(*viewer, &c1);if (*ierr) return;
48   *ierr = PetscStrncpy(name, c1, len);
49   FIXRETURNCHAR(PETSC_TRUE,name,len);
50 }
51 
52 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
53     char* name PETSC_MIXED_LEN(nlen), PetscBool *has, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
54 {
55    char *c1, *c2;
56 
57    FIXCHAR(parent, plen, c1);
58    FIXCHAR(name, nlen, c2);
59    *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return;
60    FREECHAR(parent, c1);
61    FREECHAR(name, c2);
62 }
63 
64 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readsizes_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
65     PetscInt *bs, PetscInt *N, PetscErrorCode *ierr PETSC_END_LEN(len))
66 {
67    char *c1;
68 
69    FIXCHAR(name, len, c1);
70    *ierr = PetscViewerHDF5ReadSizes(*viewer, c1, bs, N);
71    FREECHAR(name, c1);
72 }
73 
74 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
75     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, const void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
76 {
77    char *c1, *c2;
78 
79    FIXCHAR(parent, plen, c1);
80    FIXCHAR(name, nlen, c2);
81    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return;
82    FREECHAR(parent, c1);
83    FREECHAR(name, c2);
84 }
85 
86 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
87     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
88 {
89    char *c1, *c2;
90 
91    FIXCHAR(parent, plen, c1);
92    FIXCHAR(name, nlen, c2);
93    *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return;
94    FREECHAR(parent, c1);
95    FREECHAR(name, c2);
96 }
97