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