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