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