xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 058bd78131d72dfa2894ff645538496308f539cc)
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