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