xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision fc8a9adeb7fcdc98711d755fa2dc544ddccf0f3e)
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 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
12 #define petscviewerhdf5open_            petscviewerhdf5open
13 #define petscviewerhdf5pushgroup_       petscviewerhdf5pushgroup
14 #define petscviewerhdf5getgroup_        petscviewerhdf5getgroup
15 #define petscviewerhdf5hasattribute_    petscviewerhdf5hasattribute
16 #define petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
17 #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
18 #endif
19 
20 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5open_(MPI_Comm *comm, char* name PETSC_MIXED_LEN(len), PetscFileMode *type,
21     PetscViewer *binv, PetscErrorCode *ierr PETSC_END_LEN(len))
22 {
23   char *c1;
24 
25   FIXCHAR(name, len, c1);
26   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return;
27   FREECHAR(name, c1);
28 }
29 
30 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
31     PetscErrorCode *ierr PETSC_END_LEN(len))
32 {
33   char *c1;
34 
35   FIXCHAR(name, len, c1);
36   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return;
37   FREECHAR(name, c1);
38 }
39 
40 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
41     PetscErrorCode *ierr PETSC_END_LEN(len))
42 {
43   const char *c1;
44 
45   *ierr = PetscViewerHDF5GetGroup(*viewer, &c1);if (*ierr) return;
46   *ierr = PetscStrncpy(name, c1, len);
47   FIXRETURNCHAR(PETSC_TRUE,name,len);
48 }
49 
50 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
51     char* name PETSC_MIXED_LEN(nlen), PetscBool *has, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
52 {
53    char *c1, *c2;
54 
55    FIXCHAR(parent, plen, c1);
56    FIXCHAR(name, nlen, c2);
57    *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return;
58    FREECHAR(parent, c1);
59    FREECHAR(name, c2);
60 }
61 
62 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
63     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, const void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
64 {
65    char *c1, *c2;
66 
67    FIXCHAR(parent, plen, c1);
68    FIXCHAR(name, nlen, c2);
69    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return;
70    FREECHAR(parent, c1);
71    FREECHAR(name, c2);
72 }
73 
74 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
75     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
76 {
77    char *c1, *c2;
78 
79    FIXCHAR(parent, plen, c1);
80    FIXCHAR(name, nlen, c2);
81    *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return;
82    FREECHAR(parent, c1);
83    FREECHAR(name, c2);
84 }
85