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