xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision ab4a9b837c16b130ca28fa2a4ea7c7c75b9d91b1)
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 petscviewerhdf5hasdataset_      PETSCVIEWERHDF5HASDATASET
9 #define petscviewerhdf5hasattribute_    PETSCVIEWERHDF5HASATTRIBUTE
10 #define petscviewerhdf5writeattribute_  PETSCVIEWERHDF5WRITEATTRIBUTE
11 #define petscviewerhdf5readattribute_   PETSCVIEWERHDF5READATTRIBUTE
12 #define petscviewerhdf5hasgroup_        PETSCVIEWERHDF5HASGROUP
13 #define petscviewerhdf5opengroup_       PETSCVIEWERHDF5OPENGROUP
14 #define petscviewerhdf5writegroup_      PETSCVIEWERHDF5WRITEGROUP
15 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
16 #define petscviewerhdf5open_            petscviewerhdf5open
17 #define petscviewerhdf5pushgroup_       petscviewerhdf5pushgroup
18 #define petscviewerhdf5getgroup_        petscviewerhdf5getgroup
19 #define petscviewerhdf5hasdataset_      petscviewerhdf5hasdataset
20 #define petscviewerhdf5hasattribute_    petscviewerhdf5hasattribute
21 #define petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
22 #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
23 #define petscviewerhdf5hasgroup_        petscviewerhdf5hasgroup
24 #define petscviewerhdf5opengroup_       petscviewerhdf5opengroup
25 #define petscviewerhdf5writegroup_      petscviewerhdf5writegroup
26 #endif
27 
28 PETSC_EXTERN void petscviewerhdf5open_(MPI_Comm *comm, char* name, PetscFileMode *type,
29     PetscViewer *binv, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
30 {
31   char *c1;
32 
33   FIXCHAR(name, len, c1);
34   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return;
35   FREECHAR(name, c1);
36 }
37 
38 PETSC_EXTERN void petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name,
39     PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
40 {
41   char *c1;
42 
43   FIXCHAR(name, len, c1);
44   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return;
45   FREECHAR(name, c1);
46 }
47 
48 PETSC_EXTERN void petscviewerhdf5getgroup_(PetscViewer *viewer, char* path, char* abspath,
49     PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len0, PETSC_FORTRAN_CHARLEN_T len1)
50 {
51   char *c0;
52   char *c1;
53 
54   FIXCHAR(path, len0, c0);
55   *ierr = PetscViewerHDF5GetGroup(*viewer, c0, &c1);if (*ierr) return;
56   *ierr = PetscStrncpy(abspath, c1, len1);if (*ierr) return;
57   *ierr = PetscFree(c1);if (*ierr) return;
58   FREECHAR(path, c0);
59   FIXRETURNCHAR(PETSC_TRUE,abspath,len1);
60 }
61 
62 PETSC_EXTERN void petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent,
63     char* name, PetscBool *has, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
64 {
65    char *c1, *c2;
66 
67    FIXCHAR(parent, plen, c1);
68    FIXCHAR(name, nlen, c2);
69    *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return;
70    FREECHAR(parent, c1);
71    FREECHAR(name, c2);
72 }
73 
74 PETSC_EXTERN void petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent,
75     char* name, PetscDataType *datatype, const void *value, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
76 {
77    char *c1, *c2;
78 
79    FIXCHAR(parent, plen, c1);
80    FIXCHAR(name, nlen, c2);
81    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, value);if (*ierr) return;
82    FREECHAR(parent, c1);
83    FREECHAR(name, c2);
84 }
85 
86 PETSC_EXTERN void petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent,
87     char* name, PetscDataType *datatype, void *defaultValue, void *value, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
88 {
89    char *c1, *c2;
90 
91    FIXCHAR(parent, plen, c1);
92    FIXCHAR(name, nlen, c2);
93    *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, defaultValue, value);if (*ierr) return;
94    FREECHAR(parent, c1);
95    FREECHAR(name, c2);
96 }
97 
98 PETSC_EXTERN void petscviewerhdf5hasdataset_(PetscViewer *viewer, char* path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
99 {
100    char *c1;
101 
102    FIXCHAR(path, len, c1);
103    *ierr = PetscViewerHDF5HasDataset(*viewer, c1, has);if (*ierr) return;
104    FREECHAR(path, c1);
105 }
106 
107 PETSC_EXTERN void petscviewerhdf5hasgroup_(PetscViewer *viewer, char* path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
108 {
109    char *c1;
110 
111    FIXCHAR(path, len, c1);
112    *ierr = PetscViewerHDF5HasGroup(*viewer, c1, has);if (*ierr) return;
113    FREECHAR(path, c1);
114 }
115 
116 PETSC_EXTERN void petscviewerhdf5opengroup_(PetscViewer *viewer, char path[], hid_t *fileId, hid_t *groupId, int *ierr, PETSC_FORTRAN_CHARLEN_T len)
117 {
118    char *c1;
119 
120    FIXCHAR(path, len, c1);
121    *ierr = PetscViewerHDF5OpenGroup(*viewer, c1, fileId, groupId);
122    FREECHAR(path, c1);
123 }
124 
125 PETSC_EXTERN void petscviewerhdf5writegroup_(PetscViewer *viewer, char path[], int *ierr, PETSC_FORTRAN_CHARLEN_T len)
126 {
127    char *c1;
128 
129    FIXCHAR(path, len, c1);
130    *ierr = PetscViewerHDF5WriteGroup(*viewer, c1);
131    FREECHAR(path, c1);
132 }
133