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