xref: /petsc/src/dm/interface/ftn-custom/zdmf.c (revision 18839329aaeb3ce9cd40c4ea53e02f28ec2a1604)
1 #include <petsc/private/fortranimpl.h>
2 #include <petscdm.h>
3 #include <petscviewer.h>
4 
5 #if defined(PETSC_HAVE_FORTRAN_CAPS)
6   #define dmcreateinterpolation_ DMCREATEINTERPOLATION
7   #define dmview_                DMVIEW
8   #define dmlabelview_           DMLABELVIEW
9   #define dmviewfromoptions_     DMVIEWFROMOPTIONS
10   #define dmcreatesuperdm_       DMCREATESUPERDM
11   #define dmcreatesubdm_         DMCREATESUBDM
12   #define dmdestroy_             DMDESTROY
13   #define dmload_                DMLOAD
14   #define dmsetfield_            DMSETFIELD
15   #define dmaddfield_            DMADDFIELD
16 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
17   #define dmcreateinterpolation_ dmcreateinterpolation
18   #define dmview_                dmview
19   #define dmlabelview_           dmlabelview
20   #define dmviewfromoptions_     dmviewfromoptions
21   #define dmcreatesuperdm_       dmreatesuperdm
22   #define dmcreatesubdm_         dmreatesubdm
23   #define dmdestroy_             dmdestroy
24   #define dmload_                dmload
25   #define dmsetfield_            dmsetfield
26   #define dmaddfield_            dmaddfield
27 #endif
28 
29 PETSC_EXTERN void dmsetfield_(DM *dm, PetscInt *f, DMLabel label, PetscObject *disc, PetscErrorCode *ierr)
30 {
31   CHKFORTRANNULLOBJECT(label);
32   *ierr = DMSetField(*dm, *f, label, *disc);
33 }
34 
35 PETSC_EXTERN void dmaddfield_(DM *dm, DMLabel label, PetscObject *disc, PetscErrorCode *ierr)
36 {
37   CHKFORTRANNULLOBJECT(label);
38   *ierr = DMAddField(*dm, label, *disc);
39 }
40 
41 PETSC_EXTERN void dmload_(DM *dm, PetscViewer *vin, PetscErrorCode *ierr)
42 {
43   PetscViewer v;
44   PetscPatchDefaultViewers_Fortran(vin, v);
45   *ierr = DMLoad(*dm, v);
46 }
47 
48 PETSC_EXTERN void dmview_(DM *da, PetscViewer *vin, PetscErrorCode *ierr)
49 {
50   PetscViewer v;
51   PetscPatchDefaultViewers_Fortran(vin, v);
52   *ierr = DMView(*da, v);
53 }
54 
55 PETSC_EXTERN void dmviewfromoptions_(DM *dm, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len)
56 {
57   char *t;
58 
59   FIXCHAR(type, len, t);
60   CHKFORTRANNULLOBJECT(obj);
61   *ierr = DMViewFromOptions(*dm, obj, t);
62   if (*ierr) return;
63   FREECHAR(type, t);
64 }
65 
66 PETSC_EXTERN void dmcreateinterpolation_(DM *dmc, DM *dmf, Mat *mat, Vec *vec, int *ierr)
67 {
68   CHKFORTRANNULLOBJECT(vec);
69   *ierr = DMCreateInterpolation(*dmc, *dmf, mat, vec);
70 }
71 
72 PETSC_EXTERN void dmcreatesuperdm_(DM dms[], PetscInt *len, IS ***is, DM *superdm, int *ierr)
73 {
74   *ierr = DMCreateSuperDM(dms, *len, *is, superdm);
75 }
76 
77 PETSC_EXTERN void dmcreatesubdm_(DM *dm, PetscInt *numFields, PetscInt fields[], IS *is, DM *subdm, int *ierr)
78 {
79   CHKFORTRANNULLOBJECT(is);
80   *ierr = DMCreateSubDM(*dm, *numFields, fields, is, subdm);
81 }
82 
83 PETSC_EXTERN void dmdestroy_(DM *x, int *ierr)
84 {
85   PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x);
86   *ierr = DMDestroy(x);
87   if (*ierr) return;
88   PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x);
89 }
90