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