xref: /petsc/src/dm/interface/ftn-custom/zdmf.c (revision 5b6bfdb9644f185dbf5e5a09b808ec241507e1e7)
1 #include <petsc/private/fortranimpl.h>
2 #include <petscdm.h>
3 #include <petscviewer.h>
4 
5 #if defined(PETSC_HAVE_FORTRAN_CAPS)
6 #define dmview_                      DMVIEW
7 #define dmsetoptionsprefix_          DMSETOPTIONSPREFIX
8 #define dmsettype_                   DMSETTYPE
9 #define dmgettype_                   DMGETTYPE
10 #define dmsetmattype_                DMSETMATTYPE
11 #define dmsetvectype_                DMSETVECTYPE
12 #define dmgetmattype_                DMGETMATTYPE
13 #define dmgetvectype_                DMGETVECTYPE
14 #define dmlabelview_                 DMLABELVIEW
15 #define dmcreatelabel_               DMCREATELABEL
16 #define dmhaslabel_                  DMHASLABEL
17 #define dmgetlabelvalue_             DMGETLABELVALUE
18 #define dmsetlabelvalue_             DMSETLABELVALUE
19 #define dmgetlabelsize_              DMGETLABELSIZE
20 #define dmgetlabelidis_              DMGETLABELIDIS
21 #define dmgetlabelname_              DMGETLABELNAME
22 #define dmgetlabel_                  DMGETLABEL
23 #define dmgetstratumsize_            DMGETSTRATUMSIZE
24 #define dmgetstratumis_              DMGETSTRATUMIS
25 #define dmsetstratumis_              DMSETSTRATUMIS
26 #define dmremovelabel_               DMREMOVELABEL
27 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
28 #define dmview_                      dmview
29 #define dmsetoptionsprefix_          dmsetoptionsprefix
30 #define dmsettype_                   dmsettype
31 #define dmgettype_                   dmgettype
32 #define dmsetmattype_                dmsetmattype
33 #define dmsetvectype_                dmsetvectype
34 #define dmgetmattype_                dmgetmattype
35 #define dmgetvectype_                dmgetvectype
36 #define dmlabelview_                 dmlabelview
37 #define dmcreatelabel_               dmcreatelabel
38 #define dmhaslabel_                  dmhaslabel
39 #define dmgetlabelvalue_             dmgetlabelvalue
40 #define dmsetlabelvalue_             dmsetlabelvalue
41 #define dmgetlabelsize_              dmlabelsize
42 #define dmgetlabelidis_              dmlabelidis
43 #define dmgetlabelname_              dmgetlabelname
44 #define dmgetlabel_                  dmgetlabel
45 #define dmgetstratumsize_            dmgetstratumsize
46 #define dmgetstratumis_              dmgetstratumis
47 #define dmsetstratumis_              dmsetstratumis
48 #define dmremovelabel_               dmremovelabel
49 #endif
50 
51 PETSC_EXTERN void PETSC_STDCALL dmgetmattype_(DM *mm,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
52 {
53   const char *tname;
54 
55   *ierr = DMGetMatType(*mm,&tname);if (*ierr) return;
56   if (name != PETSC_NULL_CHARACTER_Fortran) {
57     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
58   }
59   FIXRETURNCHAR(PETSC_TRUE,name,len);
60 }
61 
62 PETSC_EXTERN void PETSC_STDCALL dmgetvectype_(DM *mm,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
63 {
64   const char *tname;
65 
66   *ierr = DMGetVecType(*mm,&tname);if (*ierr) return;
67   if (name != PETSC_NULL_CHARACTER_Fortran) {
68     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
69   }
70   FIXRETURNCHAR(PETSC_TRUE,name,len);
71 }
72 
73 PETSC_EXTERN void PETSC_STDCALL dmview_(DM *da,PetscViewer *vin,PetscErrorCode *ierr)
74 {
75   PetscViewer v;
76   PetscPatchDefaultViewers_Fortran(vin,v);
77   *ierr = DMView(*da,v);
78 }
79 
80 PETSC_EXTERN void PETSC_STDCALL dmsetoptionsprefix_(DM *dm,char* prefix PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len))
81 {
82   char *t;
83 
84   FIXCHAR(prefix,len,t);
85   *ierr = DMSetOptionsPrefix(*dm,t);
86   FREECHAR(prefix,t);
87 }
88 
89 PETSC_EXTERN void PETSC_STDCALL dmsettype_(DM *x,char* type_name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
90 {
91   char *t;
92 
93   FIXCHAR(type_name,len,t);
94   *ierr = DMSetType(*x,t);
95   FREECHAR(type_name,t);
96 }
97 
98 PETSC_EXTERN void PETSC_STDCALL dmgettype_(DM *mm,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
99 {
100   const char *tname;
101 
102   *ierr = DMGetType(*mm,&tname);if (*ierr) return;
103   if (name != PETSC_NULL_CHARACTER_Fortran) {
104     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
105   }
106   FIXRETURNCHAR(PETSC_TRUE,name,len);
107 
108 }
109 
110 PETSC_EXTERN void PETSC_STDCALL dmsetmattype_(DM *dm,char* prefix PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len))
111 {
112   char *t;
113 
114   FIXCHAR(prefix,len,t);
115   *ierr = DMSetMatType(*dm,t);
116   FREECHAR(prefix,t);
117 }
118 
119 
120 PETSC_EXTERN void PETSC_STDCALL dmsetvectype_(DM *dm,char* prefix PETSC_MIXED_LEN(len), PetscErrorCode *ierr PETSC_END_LEN(len))
121 {
122   char *t;
123 
124   FIXCHAR(prefix,len,t);
125   *ierr = DMSetVecType(*dm,t);
126   FREECHAR(prefix,t);
127 }
128 
129 PETSC_EXTERN void PETSC_STDCALL dmcreatelabel_(DM *dm, char* name PETSC_MIXED_LEN(lenN), int *ierr PETSC_END_LEN(lenN))
130 {
131   char *lname;
132 
133   FIXCHAR(name, lenN, lname);
134   *ierr = DMCreateLabel(*dm, lname);
135   FREECHAR(name, lname);
136 }
137 
138 PETSC_EXTERN void PETSC_STDCALL dmhaslabel_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscBool *hasLabel, int *ierr PETSC_END_LEN(lenN))
139 {
140   char *lname;
141 
142   FIXCHAR(name, lenN, lname);
143   *ierr = DMHasLabel(*dm, lname, hasLabel);
144   FREECHAR(name, lname);
145 }
146 
147 PETSC_EXTERN void PETSC_STDCALL dmgetlabelvalue_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscInt *point, PetscInt *value, int *ierr PETSC_END_LEN(lenN))
148 {
149   char *lname;
150 
151   FIXCHAR(name, lenN, lname);
152   *ierr = DMGetLabelValue(*dm, lname, *point, value);
153   FREECHAR(name, lname);
154 }
155 
156 PETSC_EXTERN void PETSC_STDCALL dmsetlabelvalue_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscInt *point, PetscInt *value, int *ierr PETSC_END_LEN(lenN))
157 {
158   char *lname;
159 
160   FIXCHAR(name, lenN, lname);
161   *ierr = DMSetLabelValue(*dm, lname, *point, *value);
162   FREECHAR(name, lname);
163 }
164 
165 PETSC_EXTERN void PETSC_STDCALL dmgetlabelsize_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscInt *size, int *ierr PETSC_END_LEN(lenN))
166 {
167   char *lname;
168 
169   FIXCHAR(name, lenN, lname);
170   *ierr = DMGetLabelSize(*dm, lname, size);
171   FREECHAR(name, lname);
172 }
173 
174 PETSC_EXTERN void PETSC_STDCALL dmgetlabelidis_(DM *dm, char* name PETSC_MIXED_LEN(lenN), IS *ids, int *ierr PETSC_END_LEN(lenN))
175 {
176   char *lname;
177 
178   FIXCHAR(name, lenN, lname);
179   *ierr = DMGetLabelIdIS(*dm, lname, ids);
180   FREECHAR(name, lname);
181 }
182 
183 PETSC_EXTERN void PETSC_STDCALL dmgetlabelname_(DM *dm,PetscInt *n,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len))
184 {
185   const char *tmp;
186   *ierr = DMGetLabelName(*dm,*n,&tmp);
187   *ierr = PetscStrncpy(name,tmp,len);if (*ierr) return;
188   FIXRETURNCHAR(PETSC_TRUE,name,len);
189 }
190 
191 PETSC_EXTERN void PETSC_STDCALL dmgetlabel_(DM *dm, char* name PETSC_MIXED_LEN(lenN), DMLabel *label, int *ierr PETSC_END_LEN(lenN))
192 {
193   char *lname;
194 
195   FIXCHAR(name, lenN, lname);
196   *ierr = DMGetLabel(*dm, lname, label);
197   FREECHAR(name, lname);
198 }
199 
200 PETSC_EXTERN void PETSC_STDCALL dmgetstratumsize_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscInt *value, PetscInt *size, int *ierr PETSC_END_LEN(lenN))
201 {
202   char *lname;
203 
204   FIXCHAR(name, lenN, lname);
205   *ierr = DMGetStratumSize(*dm, lname, *value, size);
206   FREECHAR(name, lname);
207 }
208 
209 PETSC_EXTERN void PETSC_STDCALL dmgetstratumis_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscInt *value, IS *is, int *ierr PETSC_END_LEN(lenN))
210 {
211   char *lname;
212 
213   FIXCHAR(name, lenN, lname);
214   *ierr = DMGetStratumIS(*dm, lname, *value, is);
215   if (is && !*is) *is = (IS)-1;
216   FREECHAR(name, lname);
217 }
218 
219 PETSC_EXTERN void PETSC_STDCALL dmsetstratumis_(DM *dm, char* name PETSC_MIXED_LEN(lenN), PetscInt *value, IS *is, int *ierr PETSC_END_LEN(lenN))
220 {
221   char *lname;
222 
223   FIXCHAR(name, lenN, lname);
224   *ierr = DMSetStratumIS(*dm, lname, *value, *is);
225   FREECHAR(name, lname);
226 }
227 
228 PETSC_EXTERN void PETSC_STDCALL dmremovelabel_(DM *dm, char* name PETSC_MIXED_LEN(lenN), DMLabel *label, int *ierr PETSC_END_LEN(lenN))
229 {
230   char *lname;
231 
232   FIXCHAR(name, lenN, lname);
233   *ierr = DMRemoveLabel(*dm, lname, label);
234   FREECHAR(name, lname);
235 }
236