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