xref: /petsc/src/sys/classes/viewer/impls/hdf5/ftn-custom/zhdf5f.c (revision 380bf85a10dfabaabe769bf102c98e4f6c8eb43e)
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 petscviewerhdf5writeattribute_  PETSCVIEWERHDF5WRITEATTRIBUTE
10 #define petscviewerhdf5readattribute_   PETSCVIEWERHDF5READATTRIBUTE
11 #define petscviewerhdf5setaijnames_     PETSCVIEWERHDF5SETAIJNAMES
12 #define petscviewerhdf5getaijnames_     PETSCVIEWERHDF5GETAIJNAMES
13 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
14 #define petscviewerhdf5open_            petscviewerhdf5open
15 #define petscviewerhdf5pushgroup_       petscviewerhdf5pushgroup
16 #define petscviewerhdf5getgroup_        petscviewerhdf5getgroup
17 #define petscviewerhdf5hasattribute_    petscviewerhdf5hasattribute
18 #define petscviewerhdf5writeattribute_  petscviewerhdf5writeattribute
19 #define petscviewerhdf5readattribute_   petscviewerhdf5readattribute
20 #define petscviewerhdf5setaijnames_     petscviewerhdf5setaijnames
21 #define petscviewerhdf5getaijnames_     petscviewerhdf5getaijnames
22 #endif
23 
24 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5open_(MPI_Comm *comm, char* name PETSC_MIXED_LEN(len), PetscFileMode *type,
25     PetscViewer *binv, PetscErrorCode *ierr PETSC_END_LEN(len))
26 {
27   char *c1;
28 
29   FIXCHAR(name, len, c1);
30   *ierr = PetscViewerHDF5Open(MPI_Comm_f2c(*(MPI_Fint*)&*comm), c1, *type, binv);if (*ierr) return;
31   FREECHAR(name, c1);
32 }
33 
34 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5pushgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
35     PetscErrorCode *ierr PETSC_END_LEN(len))
36 {
37   char *c1;
38 
39   FIXCHAR(name, len, c1);
40   *ierr = PetscViewerHDF5PushGroup(*viewer, c1);if (*ierr) return;
41   FREECHAR(name, c1);
42 }
43 
44 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getgroup_(PetscViewer *viewer, char* name PETSC_MIXED_LEN(len),
45     PetscErrorCode *ierr PETSC_END_LEN(len))
46 {
47   const char *c1;
48 
49   *ierr = PetscViewerHDF5GetGroup(*viewer, &c1);if (*ierr) return;
50   *ierr = PetscStrncpy(name, c1, len);
51   FIXRETURNCHAR(PETSC_TRUE,name,len);
52 }
53 
54 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5hasattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
55     char* name PETSC_MIXED_LEN(nlen), PetscBool *has, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
56 {
57    char *c1, *c2;
58 
59    FIXCHAR(parent, plen, c1);
60    FIXCHAR(name, nlen, c2);
61    *ierr = PetscViewerHDF5HasAttribute(*viewer, c1, c2, has);if (*ierr) return;
62    FREECHAR(parent, c1);
63    FREECHAR(name, c2);
64 }
65 
66 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5writeattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
67     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, const void *value, PetscErrorCode *ierr PETSC_END_LEN(plen) PETSC_END_LEN(nlen))
68 {
69    char *c1, *c2;
70 
71    FIXCHAR(parent, plen, c1);
72    FIXCHAR(name, nlen, c2);
73    *ierr = PetscViewerHDF5WriteAttribute(*viewer, c1, c2, *datatype, (const void *) value);if (*ierr) return;
74    FREECHAR(parent, c1);
75    FREECHAR(name, c2);
76 }
77 
78 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5readattribute_(PetscViewer *viewer, char* parent PETSC_MIXED_LEN(plen),
79     char* name PETSC_MIXED_LEN(nlen), PetscDataType *datatype, 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 = PetscViewerHDF5ReadAttribute(*viewer, c1, c2, *datatype, (void *) value);if (*ierr) return;
86    FREECHAR(parent, c1);
87    FREECHAR(name, c2);
88 }
89 
90 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5setaijnames_(PetscViewer *viewer,
91     char* iname PETSC_MIXED_LEN(ilen),
92     char* jname PETSC_MIXED_LEN(jlen),
93     char* aname PETSC_MIXED_LEN(alen),
94     char* cname PETSC_MIXED_LEN(clen),
95     PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen))
96 {
97   char *ci, *cj, *ca, *cc;
98   PetscViewer v;
99 
100   PetscPatchDefaultViewers_Fortran(viewer,v);
101   FIXCHAR(iname,ilen,ci);
102   FIXCHAR(jname,jlen,cj);
103   FIXCHAR(aname,alen,ca);
104   FIXCHAR(cname,clen,cc);
105   *ierr = PetscViewerHDF5SetAIJNames(v,ci,cj,ca,cc);if (*ierr) return;
106   FREECHAR(iname,ci);
107   FREECHAR(jname,cj);
108   FREECHAR(aname,ca);
109   FREECHAR(cname,cc);
110 }
111 
112 PETSC_EXTERN void PETSC_STDCALL petscviewerhdf5getaijnames_(PetscViewer *viewer,
113     char* iname PETSC_MIXED_LEN(ilen),
114     char* jname PETSC_MIXED_LEN(jlen),
115     char* aname PETSC_MIXED_LEN(alen),
116     char* cname PETSC_MIXED_LEN(clen),
117     PetscErrorCode *ierr PETSC_END_LEN(ilen) PETSC_END_LEN(jlen) PETSC_END_LEN(alen) PETSC_END_LEN(clen))
118 {
119   const char *ci, *cj, *ca, *cc;
120 
121   *ierr = PetscViewerHDF5GetAIJNames(*viewer,&ci,&cj,&ca,&cc);if (*ierr) return;
122   *ierr = PetscStrncpy(iname,ci,ilen);if (*ierr) return;
123   *ierr = PetscStrncpy(jname,cj,jlen);if (*ierr) return;
124   *ierr = PetscStrncpy(aname,ca,alen);if (*ierr) return;
125   *ierr = PetscStrncpy(cname,cc,clen);if (*ierr) return;
126   FIXRETURNCHAR(PETSC_TRUE,iname,ilen);
127   FIXRETURNCHAR(PETSC_TRUE,jname,jlen);
128   FIXRETURNCHAR(PETSC_TRUE,aname,alen);
129   FIXRETURNCHAR(PETSC_TRUE,cname,clen);
130 }
131