1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2d70abbfaSBarry Smith #include <petscviewerhdf5.h> 35c6c1daeSBarry Smith 45c6c1daeSBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS) 55c6c1daeSBarry Smith #define petscviewerhdf5open_ PETSCVIEWERHDF5OPEN 63ef9c667SSatish Balay #define petscviewerhdf5pushgroup_ PETSCVIEWERHDF5PUSHGROUP 73ef9c667SSatish Balay #define petscviewerhdf5getgroup_ PETSCVIEWERHDF5GETGROUP 8df863907SAlex Fikl #define petscviewerhdf5writeattribute_ PETSCVIEWERHDF5WRITEATTRIBUTE 9df863907SAlex Fikl #define petscviewerhdf5readattribute_ PETSCVIEWERHDF5READATTRIBUTE 105c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 115c6c1daeSBarry Smith #define petscviewerhdf5open_ petscviewerhdf5open 123ef9c667SSatish Balay #define petscviewerhdf5pushgroup_ petscviewerhdf5pushgroup 133ef9c667SSatish Balay #define petscviewerhdf5getgroup_ petscviewerhdf5getgroup 14df863907SAlex Fikl #define petscviewerhdf5writeattribute_ petscviewerhdf5writeattribute 15df863907SAlex Fikl #define petscviewerhdf5readattribute_ petscviewerhdf5readattribute 165c6c1daeSBarry Smith #endif 175c6c1daeSBarry Smith 18390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5open_(MPI_Comm *comm, char* name PETSC_MIXED_LEN(len), PetscFileMode *type, 195c6c1daeSBarry Smith PetscViewer *binv, PetscErrorCode *ierr PETSC_END_LEN(len)) 205c6c1daeSBarry Smith { 215c6c1daeSBarry Smith char *c1; 22df863907SAlex Fikl 235c6c1daeSBarry Smith FIXCHAR(name, len, c1); 24d49bb8f9SBarry Smith *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return; 255c6c1daeSBarry Smith FREECHAR(name, c1); 265c6c1daeSBarry Smith } 275c6c1daeSBarry Smith 28390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), 293ef9c667SSatish Balay PetscErrorCode *ierr PETSC_END_LEN(len)) 303ef9c667SSatish Balay { 313ef9c667SSatish Balay char *c1; 32df863907SAlex Fikl 333ef9c667SSatish Balay FIXCHAR(name, len, c1); 34d49bb8f9SBarry Smith *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return; 353ef9c667SSatish Balay FREECHAR(name, c1); 363ef9c667SSatish Balay } 373ef9c667SSatish Balay 38390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), 393ef9c667SSatish Balay PetscErrorCode *ierr PETSC_END_LEN(len)) 403ef9c667SSatish Balay { 413ef9c667SSatish Balay const char *c1; 42df863907SAlex Fikl 43d49bb8f9SBarry Smith *ierr = PetscViewerHDF5GetGroup(*viewer, &c1);if (*ierr) return; 443ef9c667SSatish Balay *ierr = PetscStrncpy(name, c1, len); 453ef9c667SSatish Balay FIXRETURNCHAR(PETSC_TRUE,name,len); 463ef9c667SSatish Balay } 47df863907SAlex Fikl 48390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen), 49390e1bf2SBarry Smith char* name PETSC_MIXED_LEN(nlen), PetscBool *has, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen)) 50df863907SAlex Fikl { 51df863907SAlex Fikl char *c1, *c2; 52df863907SAlex Fikl 53df863907SAlex Fikl FIXCHAR(parent, plen, c1); 54df863907SAlex Fikl FIXCHAR(name, nlen, c2); 55d49bb8f9SBarry Smith *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return; 56df863907SAlex Fikl FREECHAR(parent, c1); 57df863907SAlex Fikl FREECHAR(name, c2); 58df863907SAlex Fikl } 59df863907SAlex Fikl 60c1aaad9cSVaclav Hapla PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readsizes_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len), 61c1aaad9cSVaclav Hapla PetscInt *bs, PetscInt *N, PetscErrorCode *ierr PETSC_END_LEN(len)) 62c1aaad9cSVaclav Hapla { 63c1aaad9cSVaclav Hapla char *c1; 64c1aaad9cSVaclav Hapla 65c1aaad9cSVaclav Hapla FIXCHAR(name, len, c1); 66c1aaad9cSVaclav Hapla *ierr = PetscViewerHDF5ReadSizes(*viewer, c1, bs, N); 67c1aaad9cSVaclav Hapla FREECHAR(name, c1); 68c1aaad9cSVaclav Hapla } 69c1aaad9cSVaclav Hapla 70390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen), 71390e1bf2SBarry Smith char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, const void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen)) 72df863907SAlex Fikl { 73df863907SAlex Fikl char *c1, *c2; 74df863907SAlex Fikl 75df863907SAlex Fikl FIXCHAR(parent, plen, c1); 76df863907SAlex Fikl FIXCHAR(name, nlen, c2); 77d49bb8f9SBarry Smith *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return; 78df863907SAlex Fikl FREECHAR(parent, c1); 79df863907SAlex Fikl FREECHAR(name, c2); 80df863907SAlex Fikl } 81df863907SAlex Fikl 82390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen), 83390e1bf2SBarry Smith char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen)) 84df863907SAlex Fikl { 85df863907SAlex Fikl char *c1, *c2; 86df863907SAlex Fikl 87df863907SAlex Fikl FIXCHAR(parent, plen, c1); 88df863907SAlex Fikl FIXCHAR(name, nlen, c2); 89d49bb8f9SBarry Smith *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return; 90df863907SAlex Fikl FREECHAR(parent, c1); 91df863907SAlex Fikl FREECHAR(name, c2); 92df863907SAlex Fikl } 93*058bd781SVaclav Hapla 94*058bd781SVaclav Hapla PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5setaijnames_(PetscViewer *viewer, 95*058bd781SVaclav Hapla char* iname PETSC_MIXED_LEN(ilen), 96*058bd781SVaclav Hapla char* jname PETSC_MIXED_LEN(jlen), 97*058bd781SVaclav Hapla char* aname PETSC_MIXED_LEN(alen), 98*058bd781SVaclav Hapla char* cname PETSC_MIXED_LEN(clen), 99*058bd781SVaclav Hapla PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen)) 100*058bd781SVaclav Hapla { 101*058bd781SVaclav Hapla char *ci, *cj, *ca, *cc; 102*058bd781SVaclav Hapla PetscViewer v; 103*058bd781SVaclav Hapla 104*058bd781SVaclav Hapla PetscPatchDefaultViewers_Fortran(viewer,v); 105*058bd781SVaclav Hapla FIXCHAR(iname,ilen,ci); 106*058bd781SVaclav Hapla FIXCHAR(jname,jlen,cj); 107*058bd781SVaclav Hapla FIXCHAR(aname,alen,ca); 108*058bd781SVaclav Hapla FIXCHAR(cname,clen,cc); 109*058bd781SVaclav Hapla *ierr = PetscViewerHDF5SetAIJNames(v,ci,cj,ca,cc);if (*ierr) return; 110*058bd781SVaclav Hapla FREECHAR(iname,ci); 111*058bd781SVaclav Hapla FREECHAR(jname,cj); 112*058bd781SVaclav Hapla FREECHAR(aname,ca); 113*058bd781SVaclav Hapla FREECHAR(cname,cc); 114*058bd781SVaclav Hapla } 115*058bd781SVaclav Hapla 116*058bd781SVaclav Hapla PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getaijnames_(PetscViewer *viewer, 117*058bd781SVaclav Hapla char* iname PETSC_MIXED_LEN(ilen), 118*058bd781SVaclav Hapla char* jname PETSC_MIXED_LEN(jlen), 119*058bd781SVaclav Hapla char* aname PETSC_MIXED_LEN(alen), 120*058bd781SVaclav Hapla char* cname PETSC_MIXED_LEN(clen), 121*058bd781SVaclav Hapla PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen)) 122*058bd781SVaclav Hapla { 123*058bd781SVaclav Hapla const char *ci, *cj, *ca, *cc; 124*058bd781SVaclav Hapla 125*058bd781SVaclav Hapla *ierr = PetscViewerHDF5GetAIJNames(*viewer,&ci,&cj,&ca,&cc);if (*ierr) return; 126*058bd781SVaclav Hapla *ierr = PetscStrncpy(iname,ci,ilen);if (*ierr) return; 127*058bd781SVaclav Hapla *ierr = PetscStrncpy(jname,cj,jlen);if (*ierr) return; 128*058bd781SVaclav Hapla *ierr = PetscStrncpy(aname,ca,alen);if (*ierr) return; 129*058bd781SVaclav Hapla *ierr = PetscStrncpy(cname,cc,clen);if (*ierr) return; 130*058bd781SVaclav Hapla FIXRETURNCHAR(PETSC_TRUE,iname,ilen); 131*058bd781SVaclav Hapla FIXRETURNCHAR(PETSC_TRUE,jname,jlen); 132*058bd781SVaclav Hapla FIXRETURNCHAR(PETSC_TRUE,aname,alen); 133*058bd781SVaclav Hapla FIXRETURNCHAR(PETSC_TRUE,cname,clen); 134*058bd781SVaclav Hapla } 135