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 petscviewerhdf5readsizes_ PETSCVIEWERHDF5READSIZES 10 #define petscviewerhdf5writeattribute_ PETSCVIEWERHDF5WRITEATTRIBUTE 11 #define petscviewerhdf5readattribute_ PETSCVIEWERHDF5READATTRIBUTE 12 #define petscviewerhdf5setaijnames_ PETSCVIEWERHDF5SETAIJNAMES 13 #define petscviewerhdf5getaijnames_ PETSCVIEWERHDF5GETAIJNAMES 14 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 15 #define petscviewerhdf5open_ petscviewerhdf5open 16 #define petscviewerhdf5pushgroup_ petscviewerhdf5pushgroup 17 #define petscviewerhdf5getgroup_ petscviewerhdf5getgroup 18 #define petscviewerhdf5hasattribute_ petscviewerhdf5hasattribute 19 #define petscviewerhdf5readsizes_ petscviewerhdf5readsizes 20 #define petscviewerhdf5writeattribute_ petscviewerhdf5writeattribute 21 #define petscviewerhdf5readattribute_ petscviewerhdf5readattribute 22 #define petscviewerhdf5setaijnames_ petscviewerhdf5setaijnames 23 #define petscviewerhdf5getaijnames_ petscviewerhdf5getaijnames 24 #endif 25 26 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5open_(MPI_Comm *comm, char* name PETSC_MIXED_LEN(len), PetscFileMode *type, 27 PetscViewer *binv, PetscErrorCode *ierr PETSC_END_LEN(len)) 28 { 29 char *c1; 30 31 FIXCHAR(name, len, c1); 32 *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return; 33 FREECHAR(name, c1); 34 } 35 36 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), 37 PetscErrorCode *ierr PETSC_END_LEN(len)) 38 { 39 char *c1; 40 41 FIXCHAR(name, len, c1); 42 *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return; 43 FREECHAR(name, c1); 44 } 45 46 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), 47 PetscErrorCode *ierr PETSC_END_LEN(len)) 48 { 49 const char *c1; 50 51 *ierr = PetscViewerHDF5GetGroup(*viewer, &c1);if (*ierr) return; 52 *ierr = PetscStrncpy(name, c1, len); 53 FIXRETURNCHAR(PETSC_TRUE,name,len); 54 } 55 56 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen), 57 char* name PETSC_MIXED_LEN(nlen), PetscBool *has, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen)) 58 { 59 char *c1, *c2; 60 61 FIXCHAR(parent, plen, c1); 62 FIXCHAR(name, nlen, c2); 63 *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return; 64 FREECHAR(parent, c1); 65 FREECHAR(name, c2); 66 } 67 68 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readsizes_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), 69 PetscInt *bs, PetscInt *N, PetscErrorCode *ierr PETSC_END_LEN(len)) 70 { 71 char *c1; 72 73 FIXCHAR(name, len, c1); 74 *ierr = PetscViewerHDF5ReadSizes(*viewer, c1, bs, N); 75 FREECHAR(name, c1); 76 } 77 78 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen), 79 char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, const void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen)) 80 { 81 char *c1, *c2; 82 83 FIXCHAR(parent, plen, c1); 84 FIXCHAR(name, nlen, c2); 85 *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return; 86 FREECHAR(parent, c1); 87 FREECHAR(name, c2); 88 } 89 90 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen), 91 char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen)) 92 { 93 char *c1, *c2; 94 95 FIXCHAR(parent, plen, c1); 96 FIXCHAR(name, nlen, c2); 97 *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return; 98 FREECHAR(parent, c1); 99 FREECHAR(name, c2); 100 } 101 102 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5setaijnames_(PetscViewer *viewer, 103 char* iname PETSC_MIXED_LEN(ilen), 104 char* jname PETSC_MIXED_LEN(jlen), 105 char* aname PETSC_MIXED_LEN(alen), 106 char* cname PETSC_MIXED_LEN(clen), 107 PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen)) 108 { 109 char *ci, *cj, *ca, *cc; 110 PetscViewer v; 111 112 PetscPatchDefaultViewers_Fortran(viewer,v); 113 FIXCHAR(iname,ilen,ci); 114 FIXCHAR(jname,jlen,cj); 115 FIXCHAR(aname,alen,ca); 116 FIXCHAR(cname,clen,cc); 117 *ierr = PetscViewerHDF5SetAIJNames(v,ci,cj,ca,cc);if (*ierr) return; 118 FREECHAR(iname,ci); 119 FREECHAR(jname,cj); 120 FREECHAR(aname,ca); 121 FREECHAR(cname,cc); 122 } 123 124 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getaijnames_(PetscViewer *viewer, 125 char* iname PETSC_MIXED_LEN(ilen), 126 char* jname PETSC_MIXED_LEN(jlen), 127 char* aname PETSC_MIXED_LEN(alen), 128 char* cname PETSC_MIXED_LEN(clen), 129 PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen)) 130 { 131 const char *ci, *cj, *ca, *cc; 132 133 *ierr = PetscViewerHDF5GetAIJNames(*viewer,&ci,&cj,&ca,&cc);if (*ierr) return; 134 *ierr = PetscStrncpy(iname,ci,ilen);if (*ierr) return; 135 *ierr = PetscStrncpy(jname,cj,jlen);if (*ierr) return; 136 *ierr = PetscStrncpy(aname,ca,alen);if (*ierr) return; 137 *ierr = PetscStrncpy(cname,cc,clen);if (*ierr) return; 138 FIXRETURNCHAR(PETSC_TRUE,iname,ilen); 139 FIXRETURNCHAR(PETSC_TRUE,jname,jlen); 140 FIXRETURNCHAR(PETSC_TRUE,aname,alen); 141 FIXRETURNCHAR(PETSC_TRUE,cname,clen); 142 } 143