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