xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 06bbad5a641eabf163b60615e810e56ab80c7932)
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
8*06bbad5aSVaclav Hapla #define petscviewerhdf5hasattribute_    PETSCVIEWERHDF5HASATTRIBUTE
9*06bbad5aSVaclav Hapla #define petscviewerhdf5readsizes_       PETSCVIEWERHDF5READSIZES
10df863907SAlex Fikl #define petscviewerhdf5writeattribute_  PETSCVIEWERHDF5WRITEATTRIBUTE
11df863907SAlex Fikl #define petscviewerhdf5readattribute_   PETSCVIEWERHDF5READATTRIBUTE
12*06bbad5aSVaclav Hapla #define petscviewerhdf5setaijnames_     PETSCVIEWERHDF5SETAIJNAMES
13*06bbad5aSVaclav Hapla #define petscviewerhdf5getaijnames_     PETSCVIEWERHDF5GETAIJNAMES
145c6c1daeSBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
155c6c1daeSBarry Smith #define petscviewerhdf5open_            petscviewerhdf5open
163ef9c667SSatish Balay #define petscviewerhdf5pushgroup_       petscviewerhdf5pushgroup
173ef9c667SSatish Balay #define petscviewerhdf5getgroup_        petscviewerhdf5getgroup
18*06bbad5aSVaclav Hapla #define petscviewerhdf5hasattribute_    petscviewerhdf5hasattribute
19*06bbad5aSVaclav Hapla #define petscviewerhdf5readsizes_       petscviewerhdf5readsizes
20df863907SAlex Fikl #define petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
21df863907SAlex Fikl #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
22*06bbad5aSVaclav Hapla #define petscviewerhdf5setaijnames_     petscviewerhdf5setaijnames
23*06bbad5aSVaclav Hapla #define petscviewerhdf5getaijnames_     petscviewerhdf5getaijnames
245c6c1daeSBarry Smith #endif
255c6c1daeSBarry Smith 
26390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5open_(MPI_Comm *comm, char* name PETSC_MIXED_LEN(len), PetscFileMode *type,
275c6c1daeSBarry Smith     PetscViewer *binv, PetscErrorCode *ierr PETSC_END_LEN(len))
285c6c1daeSBarry Smith {
295c6c1daeSBarry Smith   char *c1;
30df863907SAlex Fikl 
315c6c1daeSBarry Smith   FIXCHAR(name, len, c1);
32d49bb8f9SBarry Smith   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return;
335c6c1daeSBarry Smith   FREECHAR(name, c1);
345c6c1daeSBarry Smith }
355c6c1daeSBarry Smith 
36390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
373ef9c667SSatish Balay     PetscErrorCode *ierr PETSC_END_LEN(len))
383ef9c667SSatish Balay {
393ef9c667SSatish Balay   char *c1;
40df863907SAlex Fikl 
413ef9c667SSatish Balay   FIXCHAR(name, len, c1);
42d49bb8f9SBarry Smith   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return;
433ef9c667SSatish Balay   FREECHAR(name, c1);
443ef9c667SSatish Balay }
453ef9c667SSatish Balay 
46390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
473ef9c667SSatish Balay     PetscErrorCode *ierr PETSC_END_LEN(len))
483ef9c667SSatish Balay {
493ef9c667SSatish Balay   const char *c1;
50df863907SAlex Fikl 
51d49bb8f9SBarry Smith   *ierr = PetscViewerHDF5GetGroup(*viewer, &c1);if (*ierr) return;
523ef9c667SSatish Balay   *ierr = PetscStrncpy(name, c1, len);
533ef9c667SSatish Balay   FIXRETURNCHAR(PETSC_TRUE,name,len);
543ef9c667SSatish Balay }
55df863907SAlex Fikl 
56390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
57390e1bf2SBarry Smith     char* name PETSC_MIXED_LEN(nlen), PetscBool *has, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
58df863907SAlex Fikl {
59df863907SAlex Fikl    char *c1, *c2;
60df863907SAlex Fikl 
61df863907SAlex Fikl    FIXCHAR(parent, plen, c1);
62df863907SAlex Fikl    FIXCHAR(name, nlen, c2);
63d49bb8f9SBarry Smith    *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return;
64df863907SAlex Fikl    FREECHAR(parent, c1);
65df863907SAlex Fikl    FREECHAR(name, c2);
66df863907SAlex Fikl }
67df863907SAlex Fikl 
68c1aaad9cSVaclav Hapla PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readsizes_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
69c1aaad9cSVaclav Hapla     PetscInt *bs, PetscInt *N, PetscErrorCode *ierr PETSC_END_LEN(len))
70c1aaad9cSVaclav Hapla {
71c1aaad9cSVaclav Hapla    char *c1;
72c1aaad9cSVaclav Hapla 
73c1aaad9cSVaclav Hapla    FIXCHAR(name, len, c1);
74c1aaad9cSVaclav Hapla    *ierr = PetscViewerHDF5ReadSizes(*viewer, c1, bs, N);
75c1aaad9cSVaclav Hapla    FREECHAR(name, c1);
76c1aaad9cSVaclav Hapla }
77c1aaad9cSVaclav Hapla 
78390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
79390e1bf2SBarry Smith     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, const void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
80df863907SAlex Fikl {
81df863907SAlex Fikl    char *c1, *c2;
82df863907SAlex Fikl 
83df863907SAlex Fikl    FIXCHAR(parent, plen, c1);
84df863907SAlex Fikl    FIXCHAR(name, nlen, c2);
85d49bb8f9SBarry Smith    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return;
86df863907SAlex Fikl    FREECHAR(parent, c1);
87df863907SAlex Fikl    FREECHAR(name, c2);
88df863907SAlex Fikl }
89df863907SAlex Fikl 
90390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
91390e1bf2SBarry Smith     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
92df863907SAlex Fikl {
93df863907SAlex Fikl    char *c1, *c2;
94df863907SAlex Fikl 
95df863907SAlex Fikl    FIXCHAR(parent, plen, c1);
96df863907SAlex Fikl    FIXCHAR(name, nlen, c2);
97d49bb8f9SBarry Smith    *ierr = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return;
98df863907SAlex Fikl    FREECHAR(parent, c1);
99df863907SAlex Fikl    FREECHAR(name, c2);
100df863907SAlex Fikl }
101058bd781SVaclav Hapla 
102058bd781SVaclav Hapla PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5setaijnames_(PetscViewer *viewer,
103058bd781SVaclav Hapla     char* iname PETSC_MIXED_LEN(ilen),
104058bd781SVaclav Hapla     char* jname PETSC_MIXED_LEN(jlen),
105058bd781SVaclav Hapla     char* aname PETSC_MIXED_LEN(alen),
106058bd781SVaclav Hapla     char* cname PETSC_MIXED_LEN(clen),
107058bd781SVaclav Hapla     PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen))
108058bd781SVaclav Hapla {
109058bd781SVaclav Hapla   char *ci, *cj, *ca, *cc;
110058bd781SVaclav Hapla   PetscViewer v;
111058bd781SVaclav Hapla 
112058bd781SVaclav Hapla   PetscPatchDefaultViewers_Fortran(viewer,v);
113058bd781SVaclav Hapla   FIXCHAR(iname,ilen,ci);
114058bd781SVaclav Hapla   FIXCHAR(jname,jlen,cj);
115058bd781SVaclav Hapla   FIXCHAR(aname,alen,ca);
116058bd781SVaclav Hapla   FIXCHAR(cname,clen,cc);
117058bd781SVaclav Hapla   *ierr = PetscViewerHDF5SetAIJNames(v,ci,cj,ca,cc);if (*ierr) return;
118058bd781SVaclav Hapla   FREECHAR(iname,ci);
119058bd781SVaclav Hapla   FREECHAR(jname,cj);
120058bd781SVaclav Hapla   FREECHAR(aname,ca);
121058bd781SVaclav Hapla   FREECHAR(cname,cc);
122058bd781SVaclav Hapla }
123058bd781SVaclav Hapla 
124058bd781SVaclav Hapla PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getaijnames_(PetscViewer *viewer,
125058bd781SVaclav Hapla     char* iname PETSC_MIXED_LEN(ilen),
126058bd781SVaclav Hapla     char* jname PETSC_MIXED_LEN(jlen),
127058bd781SVaclav Hapla     char* aname PETSC_MIXED_LEN(alen),
128058bd781SVaclav Hapla     char* cname PETSC_MIXED_LEN(clen),
129058bd781SVaclav Hapla     PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen))
130058bd781SVaclav Hapla {
131058bd781SVaclav Hapla   const char *ci, *cj, *ca, *cc;
132058bd781SVaclav Hapla 
133058bd781SVaclav Hapla   *ierr = PetscViewerHDF5GetAIJNames(*viewer,&ci,&cj,&ca,&cc);if (*ierr) return;
134058bd781SVaclav Hapla   *ierr = PetscStrncpy(iname,ci,ilen);if (*ierr) return;
135058bd781SVaclav Hapla   *ierr = PetscStrncpy(jname,cj,jlen);if (*ierr) return;
136058bd781SVaclav Hapla   *ierr = PetscStrncpy(aname,ca,alen);if (*ierr) return;
137058bd781SVaclav Hapla   *ierr = PetscStrncpy(cname,cc,clen);if (*ierr) return;
138058bd781SVaclav Hapla   FIXRETURNCHAR(PETSC_TRUE,iname,ilen);
139058bd781SVaclav Hapla   FIXRETURNCHAR(PETSC_TRUE,jname,jlen);
140058bd781SVaclav Hapla   FIXRETURNCHAR(PETSC_TRUE,aname,alen);
141058bd781SVaclav Hapla   FIXRETURNCHAR(PETSC_TRUE,cname,clen);
142058bd781SVaclav Hapla }
143