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