xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 4302210d98c281cf4e8bc0fee406cf222e373a4c)
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 petscviewerhdf5writeattribute_  PETSCVIEWERHDF5WRITEATTRIBUTE
10 #define petscviewerhdf5readattribute_   PETSCVIEWERHDF5READATTRIBUTE
11 #define petscviewerhdf5hasgroup_        PETSCVIEWERHDF5HASGROUP
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 petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
18 #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
19 #define petscviewerhdf5hasgroup_        petscviewerhdf5hasgroup
20 #endif
21 
22 PETSC_EXTERN void petscviewerhdf5open_(MPI_Comm *comm, char* name, PetscFileMode *type,
23     PetscViewer *binv, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T 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 petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name,
33     PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T 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 petscviewerhdf5getgroup_(PetscViewer *viewer, char* name,
43     PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T 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 petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent,
53     char* name, PetscBool *has, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T 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 petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent,
65     char* name, PetscDataType *datatype, const void *value, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
66 {
67    char *c1, *c2;
68 
69    FIXCHAR(parent, plen, c1);
70    FIXCHAR(name, nlen, c2);
71    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return;
72    FREECHAR(parent, c1);
73    FREECHAR(name, c2);
74 }
75 
76 PETSC_EXTERN void petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent,
77     char* name, PetscDataType *datatype, void *value, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T plen,PETSC_FORTRAN_CHARLEN_T nlen)
78 {
79    char *c1, *c2;
80 
81    FIXCHAR(parent, plen, c1);
82    FIXCHAR(name, nlen, c2);
83    *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return;
84    FREECHAR(parent, c1);
85    FREECHAR(name, c2);
86 }
87 
88 PETSC_EXTERN void petscviewerhdf5hasgroup_(PetscViewer *viewer, char* path, PetscBool *has, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
89 {
90    char *c1;
91 
92    FIXCHAR(path, len, c1);
93    *ierr = PetscViewerHDF5HasGroup(*viewer, c1, has);if (*ierr) return;
94    FREECHAR(path, c1);
95 }
96