xref: /petsc/src/dm/interface/ftn-custom/zdmf.c (revision 6823f3c5150c1da349ca574ac70c38fd7a677edd)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2c6db04a5SJed Brown #include <petscdm.h>
3665c2dedSJed Brown #include <petscviewer.h>
49a42bb27SBarry Smith 
59a42bb27SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS)
648eeb7c8SBarry Smith #define dmcreateinterpolation_       DMCREATEINTERPOLATION
724e7ded0SBarry Smith #define dmview_                      DMVIEW
85b400853SJed Brown #define dmsetoptionsprefix_          DMSETOPTIONSPREFIX
918fb3ae4SVincent Le Chenadec #define dmsettype_                   DMSETTYPE
1018fb3ae4SVincent Le Chenadec #define dmgettype_                   DMGETTYPE
11b412c318SBarry Smith #define dmsetmattype_                DMSETMATTYPE
12b412c318SBarry Smith #define dmsetvectype_                DMSETVECTYPE
13c0dedaeaSBarry Smith #define dmgetmattype_                DMGETMATTYPE
14c0dedaeaSBarry Smith #define dmgetvectype_                DMGETVECTYPE
15c58f1c22SToby Isaac #define dmlabelview_                 DMLABELVIEW
16c58f1c22SToby Isaac #define dmcreatelabel_               DMCREATELABEL
17c58f1c22SToby Isaac #define dmhaslabel_                  DMHASLABEL
18c58f1c22SToby Isaac #define dmgetlabelvalue_             DMGETLABELVALUE
19c58f1c22SToby Isaac #define dmsetlabelvalue_             DMSETLABELVALUE
20c58f1c22SToby Isaac #define dmgetlabelsize_              DMGETLABELSIZE
21c58f1c22SToby Isaac #define dmgetlabelidis_              DMGETLABELIDIS
22a7631e77SMatthew G. Knepley #define dmgetlabelname_              DMGETLABELNAME
23c58f1c22SToby Isaac #define dmgetlabel_                  DMGETLABEL
24c58f1c22SToby Isaac #define dmgetstratumsize_            DMGETSTRATUMSIZE
25c58f1c22SToby Isaac #define dmgetstratumis_              DMGETSTRATUMIS
264de306b1SToby Isaac #define dmsetstratumis_              DMSETSTRATUMIS
27d7188716SSatish Balay #define dmremovelabel_               DMREMOVELABEL
28fe2efc57SMark #define dmviewfromoptions_           DMVIEWFROMOPTIONS
29b14c0cbaSBlaise Bourdin #define dmcreatesuperdm_             DMCREATESUPERDM
301fb7b255SJunchao Zhang #define dmdestroy_                   DMDESTROY
319a42bb27SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
3248eeb7c8SBarry Smith #define dmcreateinterpolation_       dmcreateinterpolation
3324e7ded0SBarry Smith #define dmview_                      dmview
345b400853SJed Brown #define dmsetoptionsprefix_          dmsetoptionsprefix
3518fb3ae4SVincent Le Chenadec #define dmsettype_                   dmsettype
3618fb3ae4SVincent Le Chenadec #define dmgettype_                   dmgettype
37b412c318SBarry Smith #define dmsetmattype_                dmsetmattype
38b412c318SBarry Smith #define dmsetvectype_                dmsetvectype
39c0dedaeaSBarry Smith #define dmgetmattype_                dmgetmattype
40c0dedaeaSBarry Smith #define dmgetvectype_                dmgetvectype
41c58f1c22SToby Isaac #define dmlabelview_                 dmlabelview
42c58f1c22SToby Isaac #define dmcreatelabel_               dmcreatelabel
43c58f1c22SToby Isaac #define dmhaslabel_                  dmhaslabel
44c58f1c22SToby Isaac #define dmgetlabelvalue_             dmgetlabelvalue
45c58f1c22SToby Isaac #define dmsetlabelvalue_             dmsetlabelvalue
46c58f1c22SToby Isaac #define dmgetlabelsize_              dmlabelsize
47c58f1c22SToby Isaac #define dmgetlabelidis_              dmlabelidis
48a7631e77SMatthew G. Knepley #define dmgetlabelname_              dmgetlabelname
49c58f1c22SToby Isaac #define dmgetlabel_                  dmgetlabel
50c58f1c22SToby Isaac #define dmgetstratumsize_            dmgetstratumsize
51c58f1c22SToby Isaac #define dmgetstratumis_              dmgetstratumis
524de306b1SToby Isaac #define dmsetstratumis_              dmsetstratumis
53d7188716SSatish Balay #define dmremovelabel_               dmremovelabel
54fe2efc57SMark #define dmviewfromoptions_           dmviewfromoptions
55b14c0cbaSBlaise Bourdin #define dmcreatesuperdm_             dmreatesuperdm
561fb7b255SJunchao Zhang #define dmdestroy_                   dmdestroy
579a42bb27SBarry Smith #endif
589a42bb27SBarry Smith 
5919caf8f3SSatish Balay PETSC_EXTERN void dmgetmattype_(DM *mm,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
60c0dedaeaSBarry Smith {
61c0dedaeaSBarry Smith   const char *tname;
62c0dedaeaSBarry Smith 
63c0dedaeaSBarry Smith   *ierr = DMGetMatType(*mm,&tname);if (*ierr) return;
64c0dedaeaSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
65c0dedaeaSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
66c0dedaeaSBarry Smith   }
67c0dedaeaSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
68c0dedaeaSBarry Smith }
69c0dedaeaSBarry Smith 
7019caf8f3SSatish Balay PETSC_EXTERN void dmgetvectype_(DM *mm,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
71c0dedaeaSBarry Smith {
72c0dedaeaSBarry Smith   const char *tname;
73c0dedaeaSBarry Smith 
74c0dedaeaSBarry Smith   *ierr = DMGetVecType(*mm,&tname);if (*ierr) return;
75c0dedaeaSBarry Smith   if (name != PETSC_NULL_CHARACTER_Fortran) {
76c0dedaeaSBarry Smith     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
77c0dedaeaSBarry Smith   }
78c0dedaeaSBarry Smith   FIXRETURNCHAR(PETSC_TRUE,name,len);
79c0dedaeaSBarry Smith }
80c0dedaeaSBarry Smith 
8119caf8f3SSatish Balay PETSC_EXTERN void dmview_(DM *da,PetscViewer *vin,PetscErrorCode *ierr)
829a42bb27SBarry Smith {
839a42bb27SBarry Smith   PetscViewer v;
849a42bb27SBarry Smith   PetscPatchDefaultViewers_Fortran(vin,v);
859a42bb27SBarry Smith   *ierr = DMView(*da,v);
869a42bb27SBarry Smith }
87950540a4SJed Brown 
8819caf8f3SSatish Balay PETSC_EXTERN void dmsetoptionsprefix_(DM *dm,char* prefix, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
895b400853SJed Brown {
905b400853SJed Brown   char *t;
915b400853SJed Brown 
925b400853SJed Brown   FIXCHAR(prefix,len,t);
93d49bb8f9SBarry Smith   *ierr = DMSetOptionsPrefix(*dm,t);if (*ierr) return;
945b400853SJed Brown   FREECHAR(prefix,t);
955b400853SJed Brown }
96b412c318SBarry Smith 
9719caf8f3SSatish Balay PETSC_EXTERN void dmsettype_(DM *x,char* type_name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
9818fb3ae4SVincent Le Chenadec {
9918fb3ae4SVincent Le Chenadec   char *t;
10018fb3ae4SVincent Le Chenadec 
10118fb3ae4SVincent Le Chenadec   FIXCHAR(type_name,len,t);
102d49bb8f9SBarry Smith   *ierr = DMSetType(*x,t);if (*ierr) return;
10318fb3ae4SVincent Le Chenadec   FREECHAR(type_name,t);
10418fb3ae4SVincent Le Chenadec }
10518fb3ae4SVincent Le Chenadec 
10619caf8f3SSatish Balay PETSC_EXTERN void dmgettype_(DM *mm,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
10718fb3ae4SVincent Le Chenadec {
10818fb3ae4SVincent Le Chenadec   const char *tname;
10918fb3ae4SVincent Le Chenadec 
11018fb3ae4SVincent Le Chenadec   *ierr = DMGetType(*mm,&tname);if (*ierr) return;
11118fb3ae4SVincent Le Chenadec   if (name != PETSC_NULL_CHARACTER_Fortran) {
11218fb3ae4SVincent Le Chenadec     *ierr = PetscStrncpy(name,tname,len);if (*ierr) return;
11318fb3ae4SVincent Le Chenadec   }
11418fb3ae4SVincent Le Chenadec   FIXRETURNCHAR(PETSC_TRUE,name,len);
11518fb3ae4SVincent Le Chenadec 
11618fb3ae4SVincent Le Chenadec }
11718fb3ae4SVincent Le Chenadec 
11819caf8f3SSatish Balay PETSC_EXTERN void dmsetmattype_(DM *dm,char* prefix, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
119b412c318SBarry Smith {
120b412c318SBarry Smith   char *t;
121b412c318SBarry Smith 
122b412c318SBarry Smith   FIXCHAR(prefix,len,t);
123d49bb8f9SBarry Smith   *ierr = DMSetMatType(*dm,t);if (*ierr) return;
124b412c318SBarry Smith   FREECHAR(prefix,t);
125b412c318SBarry Smith }
126b412c318SBarry Smith 
127b412c318SBarry Smith 
12819caf8f3SSatish Balay PETSC_EXTERN void dmsetvectype_(DM *dm,char* prefix, PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
129b412c318SBarry Smith {
130b412c318SBarry Smith   char *t;
131b412c318SBarry Smith 
132b412c318SBarry Smith   FIXCHAR(prefix,len,t);
133d49bb8f9SBarry Smith   *ierr = DMSetVecType(*dm,t);if (*ierr) return;
134b412c318SBarry Smith   FREECHAR(prefix,t);
135b412c318SBarry Smith }
136c58f1c22SToby Isaac 
13719caf8f3SSatish Balay PETSC_EXTERN void dmcreatelabel_(DM *dm, char* name, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
138c58f1c22SToby Isaac {
139c58f1c22SToby Isaac   char *lname;
140c58f1c22SToby Isaac 
141c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
142d49bb8f9SBarry Smith   *ierr = DMCreateLabel(*dm, lname);if (*ierr) return;
143c58f1c22SToby Isaac   FREECHAR(name, lname);
144c58f1c22SToby Isaac }
145c58f1c22SToby Isaac 
14619caf8f3SSatish Balay PETSC_EXTERN void dmhaslabel_(DM *dm, char* name, PetscBool *hasLabel, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
147c58f1c22SToby Isaac {
148c58f1c22SToby Isaac   char *lname;
149c58f1c22SToby Isaac 
150c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
151d49bb8f9SBarry Smith   *ierr = DMHasLabel(*dm, lname, hasLabel);if (*ierr) return;
152c58f1c22SToby Isaac   FREECHAR(name, lname);
153c58f1c22SToby Isaac }
154c58f1c22SToby Isaac 
15519caf8f3SSatish Balay PETSC_EXTERN void dmgetlabelvalue_(DM *dm, char* name, PetscInt *point, PetscInt *value, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
156c58f1c22SToby Isaac {
157c58f1c22SToby Isaac   char *lname;
158c58f1c22SToby Isaac 
159c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
160d49bb8f9SBarry Smith   *ierr = DMGetLabelValue(*dm, lname, *point, value);if (*ierr) return;
161c58f1c22SToby Isaac   FREECHAR(name, lname);
162c58f1c22SToby Isaac }
163c58f1c22SToby Isaac 
16419caf8f3SSatish Balay PETSC_EXTERN void dmsetlabelvalue_(DM *dm, char* name, PetscInt *point, PetscInt *value, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
165c58f1c22SToby Isaac {
166c58f1c22SToby Isaac   char *lname;
167c58f1c22SToby Isaac 
168c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
169d49bb8f9SBarry Smith   *ierr = DMSetLabelValue(*dm, lname, *point, *value);if (*ierr) return;
170c58f1c22SToby Isaac   FREECHAR(name, lname);
171c58f1c22SToby Isaac }
172c58f1c22SToby Isaac 
17319caf8f3SSatish Balay PETSC_EXTERN void dmgetlabelsize_(DM *dm, char* name, PetscInt *size, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
174c58f1c22SToby Isaac {
175c58f1c22SToby Isaac   char *lname;
176c58f1c22SToby Isaac 
177c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
178d49bb8f9SBarry Smith   *ierr = DMGetLabelSize(*dm, lname, size);if (*ierr) return;
179c58f1c22SToby Isaac   FREECHAR(name, lname);
180c58f1c22SToby Isaac }
181c58f1c22SToby Isaac 
18219caf8f3SSatish Balay PETSC_EXTERN void dmgetlabelidis_(DM *dm, char* name, IS *ids, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
183c58f1c22SToby Isaac {
184c58f1c22SToby Isaac   char *lname;
185c58f1c22SToby Isaac 
186c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
187d49bb8f9SBarry Smith   *ierr = DMGetLabelIdIS(*dm, lname, ids);if (*ierr) return;
188c58f1c22SToby Isaac   FREECHAR(name, lname);
189c58f1c22SToby Isaac }
190c58f1c22SToby Isaac 
19119caf8f3SSatish Balay PETSC_EXTERN void dmgetlabelname_(DM *dm,PetscInt *n,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
192a7631e77SMatthew G. Knepley {
193a7631e77SMatthew G. Knepley   const char *tmp;
1949566978fSMatthew G. Knepley   *ierr = DMGetLabelName(*dm,*n,&tmp);
195a7631e77SMatthew G. Knepley   *ierr = PetscStrncpy(name,tmp,len);if (*ierr) return;
196a7631e77SMatthew G. Knepley   FIXRETURNCHAR(PETSC_TRUE,name,len);
197a7631e77SMatthew G. Knepley }
198a7631e77SMatthew G. Knepley 
19919caf8f3SSatish Balay PETSC_EXTERN void dmgetlabel_(DM *dm, char* name, DMLabel *label, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
200c58f1c22SToby Isaac {
201c58f1c22SToby Isaac   char *lname;
202c58f1c22SToby Isaac 
203c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
204d49bb8f9SBarry Smith   *ierr = DMGetLabel(*dm, lname, label);if (*ierr) return;
205c58f1c22SToby Isaac   FREECHAR(name, lname);
206c58f1c22SToby Isaac }
207c58f1c22SToby Isaac 
20819caf8f3SSatish Balay PETSC_EXTERN void dmgetstratumsize_(DM *dm, char* name, PetscInt *value, PetscInt *size, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
209c58f1c22SToby Isaac {
210c58f1c22SToby Isaac   char *lname;
211c58f1c22SToby Isaac 
212c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
213d49bb8f9SBarry Smith   *ierr = DMGetStratumSize(*dm, lname, *value, size);if (*ierr) return;
214c58f1c22SToby Isaac   FREECHAR(name, lname);
215c58f1c22SToby Isaac }
216c58f1c22SToby Isaac 
21719caf8f3SSatish Balay PETSC_EXTERN void dmgetstratumis_(DM *dm, char* name, PetscInt *value, IS *is, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
218c58f1c22SToby Isaac {
219c58f1c22SToby Isaac   char *lname;
220c58f1c22SToby Isaac 
221c58f1c22SToby Isaac   FIXCHAR(name, lenN, lname);
222d49bb8f9SBarry Smith   *ierr = DMGetStratumIS(*dm, lname, *value, is);if (*ierr) return;
22306c2e117SBarry Smith   if (is && !*is) *is = (IS)0;
224c58f1c22SToby Isaac   FREECHAR(name, lname);
225c58f1c22SToby Isaac }
226d7188716SSatish Balay 
22719caf8f3SSatish Balay PETSC_EXTERN void dmsetstratumis_(DM *dm, char* name, PetscInt *value, IS *is, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
2284de306b1SToby Isaac {
2294de306b1SToby Isaac   char *lname;
2304de306b1SToby Isaac 
2314de306b1SToby Isaac   FIXCHAR(name, lenN, lname);
232d49bb8f9SBarry Smith   *ierr = DMSetStratumIS(*dm, lname, *value, *is);if (*ierr) return;
2334de306b1SToby Isaac   FREECHAR(name, lname);
2344de306b1SToby Isaac }
2354de306b1SToby Isaac 
23619caf8f3SSatish Balay PETSC_EXTERN void dmremovelabel_(DM *dm, char* name, DMLabel *label, int *ierr,PETSC_FORTRAN_CHARLEN_T lenN)
237d7188716SSatish Balay {
238d7188716SSatish Balay   char *lname;
239d7188716SSatish Balay 
240d7188716SSatish Balay   FIXCHAR(name, lenN, lname);
241d49bb8f9SBarry Smith   *ierr = DMRemoveLabel(*dm, lname, label);if (*ierr) return;
242d7188716SSatish Balay   FREECHAR(name, lname);
243d7188716SSatish Balay }
244fe2efc57SMark 
24519caf8f3SSatish Balay PETSC_EXTERN void dmviewfromoptions_(DM *dm,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len)
246fe2efc57SMark {
247fe2efc57SMark   char *t;
248fe2efc57SMark 
249fe2efc57SMark   FIXCHAR(type,len,t);
25074d0cae8SMatthew G. Knepley   CHKFORTRANNULLOBJECT(obj);
251fe2efc57SMark   *ierr = DMViewFromOptions(*dm,obj,t);if (*ierr) return;
252fe2efc57SMark   FREECHAR(type,t);
253fe2efc57SMark }
25448eeb7c8SBarry Smith 
25548eeb7c8SBarry Smith PETSC_EXTERN void dmcreateinterpolation_(DM *dmc,DM *dmf,Mat *mat,Vec *vec, int *ierr)
25648eeb7c8SBarry Smith {
25748eeb7c8SBarry Smith   CHKFORTRANNULLOBJECT(vec);
25848eeb7c8SBarry Smith   *ierr = DMCreateInterpolation(*dmc,*dmf,mat,vec);
25948eeb7c8SBarry Smith }
2601fb7b255SJunchao Zhang 
261*6823f3c5SBlaise Bourdin PETSC_EXTERN void dmcreatesuperdm_(DM dms[], PetscInt *len, IS ***is, DM *superdm, int *ierr)
262*6823f3c5SBlaise Bourdin {
263*6823f3c5SBlaise Bourdin   *ierr = DMCreateSuperDM(dms, *len, *is, superdm);
264*6823f3c5SBlaise Bourdin }
265*6823f3c5SBlaise Bourdin 
2661fb7b255SJunchao Zhang PETSC_EXTERN void dmdestroy_(DM *x,int *ierr)
2671fb7b255SJunchao Zhang {
2681fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
2691fb7b255SJunchao Zhang   *ierr = DMDestroy(x); if (*ierr) return;
2701fb7b255SJunchao Zhang   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
2711fb7b255SJunchao Zhang }
272