xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 3014b61aa36a362266ae4eadf9b334e8b11a5815)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2d70abbfaSBarry Smith #include <petscviewerhdf5.h>
35c6c1daeSBarry Smith 
45c6c1daeSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
55c6c1daeSBarry Smith #define petscviewerhdf5open_            PETSCVIEWERHDF5OPEN
63ef9c667SSatish Balay #define petscviewerhdf5pushgroup_       PETSCVIEWERHDF5PUSHGROUP
73ef9c667SSatish Balay #define petscviewerhdf5getgroup_        PETSCVIEWERHDF5GETGROUP
889e0ef10SVaclav Hapla #define petscviewerhdf5hasdataset_      PETSCVIEWERHDF5HASDATASET
906bbad5aSVaclav Hapla #define petscviewerhdf5hasattribute_    PETSCVIEWERHDF5HASATTRIBUTE
10df863907SAlex Fikl #define petscviewerhdf5writeattribute_  PETSCVIEWERHDF5WRITEATTRIBUTE
11df863907SAlex Fikl #define petscviewerhdf5readattribute_   PETSCVIEWERHDF5READATTRIBUTE
124302210dSVaclav Hapla #define petscviewerhdf5hasgroup_        PETSCVIEWERHDF5HASGROUP
13*3014b61aSVaclav Hapla #define petscviewerhdf5opengroup_       PETSCVIEWERHDF5OPENGROUP
145c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
155c6c1daeSBarry Smith #define petscviewerhdf5open_            petscviewerhdf5open
163ef9c667SSatish Balay #define petscviewerhdf5pushgroup_       petscviewerhdf5pushgroup
173ef9c667SSatish Balay #define petscviewerhdf5getgroup_        petscviewerhdf5getgroup
1889e0ef10SVaclav Hapla #define petscviewerhdf5hasdataset_      petscviewerhdf5hasdataset
1906bbad5aSVaclav Hapla #define petscviewerhdf5hasattribute_    petscviewerhdf5hasattribute
20df863907SAlex Fikl #define petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
21df863907SAlex Fikl #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
224302210dSVaclav Hapla #define petscviewerhdf5hasgroup_        petscviewerhdf5hasgroup
23*3014b61aSVaclav Hapla #define petscviewerhdf5opengroup_       petscviewerhdf5opengroup
245c6c1daeSBarry Smith #endif
255c6c1daeSBarry Smith 
2619caf8f3SSatish Balay PETSC_EXTERN void petscviewerhdf5open_(MPI_Comm *comm, char* name, PetscFileMode *type,
2719caf8f3SSatish Balay     PetscViewer *binv, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
285c6c1daeSBarry Smith {
295c6c1daeSBarry Smith   char *c1;
30df863907SAlex Fikl 
315c6c1daeSBarry Smith   FIXCHAR(name, len, c1);
32d49bb8f9SBarry Smith   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return;
335c6c1daeSBarry Smith   FREECHAR(name, c1);
345c6c1daeSBarry Smith }
355c6c1daeSBarry Smith 
3619caf8f3SSatish Balay PETSC_EXTERN void petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name,
3719caf8f3SSatish Balay     PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
383ef9c667SSatish Balay {
393ef9c667SSatish Balay   char *c1;
40df863907SAlex Fikl 
413ef9c667SSatish Balay   FIXCHAR(name, len, c1);
42d49bb8f9SBarry Smith   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return;
433ef9c667SSatish Balay   FREECHAR(name, c1);
443ef9c667SSatish Balay }
453ef9c667SSatish Balay 
4677717648SVaclav Hapla PETSC_EXTERN void petscviewerhdf5getgroup_(PetscViewer *viewer, char* path, char* abspath,
4777717648SVaclav Hapla     PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len0, PETSC_FORTRAN_CHARLEN_T len1)
483ef9c667SSatish Balay {
4977717648SVaclav Hapla   char *c0;
5077717648SVaclav Hapla   char *c1;
51df863907SAlex Fikl 
5277717648SVaclav Hapla   FIXCHAR(path, len0, c0);
5377717648SVaclav Hapla   *ierr = PetscViewerHDF5GetGroup(*viewer, c0, &c1);if (*ierr) return;
5477717648SVaclav Hapla   *ierr = PetscStrncpy(abspath, c1, len1);if (*ierr) return;
5577717648SVaclav Hapla   *ierr = PetscFree(c1);if (*ierr) return;
5677717648SVaclav Hapla   FREECHAR(path, c0);
5777717648SVaclav Hapla   FIXRETURNCHAR(PETSC_TRUE,abspath,len1);
583ef9c667SSatish Balay }
59df863907SAlex Fikl 
6019caf8f3SSatish Balay PETSC_EXTERN void petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent,
6119caf8f3SSatish Balay     char* name, PetscBool *has, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
62df863907SAlex Fikl {
63df863907SAlex Fikl    char *c1, *c2;
64df863907SAlex Fikl 
65df863907SAlex Fikl    FIXCHAR(parent, plen, c1);
66df863907SAlex Fikl    FIXCHAR(name, nlen, c2);
67d49bb8f9SBarry Smith    *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return;
68df863907SAlex Fikl    FREECHAR(parent, c1);
69df863907SAlex Fikl    FREECHAR(name, c2);
70df863907SAlex Fikl }
71df863907SAlex Fikl 
7219caf8f3SSatish Balay PETSC_EXTERN void petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent,
7319caf8f3SSatish Balay     char* name, PetscDataType *datatype, const void *value, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
74df863907SAlex Fikl {
75df863907SAlex Fikl    char *c1, *c2;
76df863907SAlex Fikl 
77df863907SAlex Fikl    FIXCHAR(parent, plen, c1);
78df863907SAlex Fikl    FIXCHAR(name, nlen, c2);
79a2d6be1bSVaclav Hapla    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, value);if (*ierr) return;
80df863907SAlex Fikl    FREECHAR(parent, c1);
81df863907SAlex Fikl    FREECHAR(name, c2);
82df863907SAlex Fikl }
83df863907SAlex Fikl 
8419caf8f3SSatish Balay PETSC_EXTERN void petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent,
85a2d6be1bSVaclav Hapla     char* name, PetscDataType *datatype, void *defaultValue, void *value, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
86df863907SAlex Fikl {
87df863907SAlex Fikl    char *c1, *c2;
88df863907SAlex Fikl 
89df863907SAlex Fikl    FIXCHAR(parent, plen, c1);
90df863907SAlex Fikl    FIXCHAR(name, nlen, c2);
91a2d6be1bSVaclav Hapla    *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, defaultValue, value);if (*ierr) return;
92df863907SAlex Fikl    FREECHAR(parent, c1);
93df863907SAlex Fikl    FREECHAR(name, c2);
94df863907SAlex Fikl }
954302210dSVaclav Hapla 
9689e0ef10SVaclav Hapla PETSC_EXTERN void petscviewerhdf5hasdataset_(PetscViewer *viewer, char* path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
9789e0ef10SVaclav Hapla {
9889e0ef10SVaclav Hapla    char *c1;
9989e0ef10SVaclav Hapla 
10089e0ef10SVaclav Hapla    FIXCHAR(path, len, c1);
10189e0ef10SVaclav Hapla    *ierr = PetscViewerHDF5HasDataset(*viewer, c1, has);if (*ierr) return;
10289e0ef10SVaclav Hapla    FREECHAR(path, c1);
10389e0ef10SVaclav Hapla }
10489e0ef10SVaclav Hapla 
1054302210dSVaclav Hapla PETSC_EXTERN void petscviewerhdf5hasgroup_(PetscViewer *viewer, char* path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
1064302210dSVaclav Hapla {
1074302210dSVaclav Hapla    char *c1;
1084302210dSVaclav Hapla 
1094302210dSVaclav Hapla    FIXCHAR(path, len, c1);
1104302210dSVaclav Hapla    *ierr = PetscViewerHDF5HasGroup(*viewer, c1, has);if (*ierr) return;
1114302210dSVaclav Hapla    FREECHAR(path, c1);
1124302210dSVaclav Hapla }
113*3014b61aSVaclav Hapla 
114*3014b61aSVaclav Hapla PETSC_EXTERN void petscviewerhdf5opengroup_(PetscViewer *viewer, char path[], hid_t *fileId, hid_t *groupId, int *ierr, PETSC_FORTRAN_CHARLEN_T len)
115*3014b61aSVaclav Hapla {
116*3014b61aSVaclav Hapla    char *c1;
117*3014b61aSVaclav Hapla 
118*3014b61aSVaclav Hapla    FIXCHAR(path, len, c1);
119*3014b61aSVaclav Hapla    *ierr = PetscViewerHDF5OpenGroup(*viewer, c1, fileId, groupId);
120*3014b61aSVaclav Hapla    FREECHAR(path, c1);
121*3014b61aSVaclav Hapla }
122