xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 66af8762ec03dbef0e079729eb2a1734a35ed7ff)
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, PetscViewer *binv, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
29 {
30   char *c1;
31 
32   FIXCHAR(name, len, c1);
33   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint *)&*comm), c1, *type, binv);
34   if (*ierr) return;
35   FREECHAR(name, c1);
36 }
37 
38 PETSC_EXTERN void petscviewerhdf5pushgroup_(PetscViewer *viewer, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
39 {
40   char *c1;
41 
42   FIXCHAR(name, len, c1);
43   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);
44   if (*ierr) return;
45   FREECHAR(name, c1);
46 }
47 
48 PETSC_EXTERN void petscviewerhdf5getgroup_(PetscViewer *viewer, char *path, char *abspath, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len0, PETSC_FORTRAN_CHARLEN_T len1)
49 {
50   char *c0;
51   char *c1;
52 
53   FIXCHAR(path, len0, c0);
54   *ierr = PetscViewerHDF5GetGroup(*viewer, c0, &c1);
55   if (*ierr) return;
56   *ierr = PetscStrncpy(abspath, c1, len1);
57   if (*ierr) return;
58   *ierr = PetscFree(c1);
59   if (*ierr) return;
60   FREECHAR(path, c0);
61   FIXRETURNCHAR(PETSC_TRUE, abspath, len1);
62 }
63 
64 PETSC_EXTERN void petscviewerhdf5hasattribute_(PetscViewer *viewer, char *parent, char *name, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T plen, PETSC_FORTRAN_CHARLEN_T nlen)
65 {
66   char *c1, *c2;
67 
68   FIXCHAR(parent, plen, c1);
69   FIXCHAR(name, nlen, c2);
70   *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);
71   if (*ierr) return;
72   FREECHAR(parent, c1);
73   FREECHAR(name, c2);
74 }
75 
76 PETSC_EXTERN void petscviewerhdf5writeattribute_(PetscViewer *viewer, char *parent, char *name, PetscDataType *datatype, const void *value, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T plen, PETSC_FORTRAN_CHARLEN_T nlen)
77 {
78   char *c1, *c2;
79 
80   FIXCHAR(parent, plen, c1);
81   FIXCHAR(name, nlen, c2);
82   *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, value);
83   if (*ierr) return;
84   FREECHAR(parent, c1);
85   FREECHAR(name, c2);
86 }
87 
88 PETSC_EXTERN void petscviewerhdf5readattribute_(PetscViewer *viewer, char *parent, char *name, PetscDataType *datatype, void *defaultValue, void *value, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T plen, PETSC_FORTRAN_CHARLEN_T nlen)
89 {
90   char *c1, *c2;
91 
92   FIXCHAR(parent, plen, c1);
93   FIXCHAR(name, nlen, c2);
94   *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, defaultValue, value);
95   if (*ierr) return;
96   FREECHAR(parent, c1);
97   FREECHAR(name, c2);
98 }
99 
100 PETSC_EXTERN void petscviewerhdf5hasdataset_(PetscViewer *viewer, char *path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
101 {
102   char *c1;
103 
104   FIXCHAR(path, len, c1);
105   *ierr = PetscViewerHDF5HasDataset(*viewer, c1, has);
106   if (*ierr) return;
107   FREECHAR(path, c1);
108 }
109 
110 PETSC_EXTERN void petscviewerhdf5hasgroup_(PetscViewer *viewer, char *path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
111 {
112   char *c1;
113 
114   FIXCHAR(path, len, c1);
115   *ierr = PetscViewerHDF5HasGroup(*viewer, c1, has);
116   if (*ierr) return;
117   FREECHAR(path, c1);
118 }
119 
120 PETSC_EXTERN void petscviewerhdf5opengroup_(PetscViewer *viewer, char path[], hid_t *fileId, hid_t *groupId, int *ierr, PETSC_FORTRAN_CHARLEN_T len)
121 {
122   char *c1;
123 
124   FIXCHAR(path, len, c1);
125   *ierr = PetscViewerHDF5OpenGroup(*viewer, c1, fileId, groupId);
126   FREECHAR(path, c1);
127 }
128 
129 PETSC_EXTERN void petscviewerhdf5writegroup_(PetscViewer *viewer, char path[], int *ierr, PETSC_FORTRAN_CHARLEN_T len)
130 {
131   char *c1;
132 
133   FIXCHAR(path, len, c1);
134   *ierr = PetscViewerHDF5WriteGroup(*viewer, c1);
135   FREECHAR(path, c1);
136 }
137