1c6db04a5SJed Brown #include <petscdmcomposite.h> 2*6dd63270SBarry Smith #include <petsc/private/ftnimpl.h> 347c6ae99SBarry Smith 447c6ae99SBarry Smith #if defined(PETSC_HAVE_FORTRAN_CAPS) 547c6ae99SBarry Smith #define dmcompositegetentries1_ DMCOMPOSITEGETENTRIES1 647c6ae99SBarry Smith #define dmcompositegetentries2_ DMCOMPOSITEGETENTRIES2 747c6ae99SBarry Smith #define dmcompositegetentries3_ DMCOMPOSITEGETENTRIES3 847c6ae99SBarry Smith #define dmcompositegetentries4_ DMCOMPOSITEGETENTRIES4 947c6ae99SBarry Smith #define dmcompositegetentries5_ DMCOMPOSITEGETENTRIES5 1047c6ae99SBarry Smith #define dmcompositegetaccess4_ DMCOMPOSITEGETACCESS4 1147c6ae99SBarry Smith #define dmcompositescatter4_ DMCOMPOSITESCATTER4 1247c6ae99SBarry Smith #define dmcompositerestoreaccess4_ DMCOMPOSITERESTOREACCESS4 1347c6ae99SBarry Smith #define dmcompositegetlocalvectors4_ DMCOMPOSITEGETLOCALVECTORS4 1447c6ae99SBarry Smith #define dmcompositerestorelocalvectors4_ DMCOMPOSITERESTORELOCALVECTORS4 1573e31fe2SJed Brown #define dmcompositegetglobaliss_ DMCOMPOSITEGETGLOBALISS 16ce78bad3SBarry Smith #define dmcompositerestoreglobaliss_ DMCOMPOSITERESTOREGLOBALISS 1773e31fe2SJed Brown #define dmcompositegetlocaliss_ DMCOMPOSITEGETLOCALISS 18ce78bad3SBarry Smith #define dmcompositerestorelocaliss_ DMCOMPOSITERESTORELOCALISS 1947c6ae99SBarry Smith #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 2047c6ae99SBarry Smith #define dmcompositegetentries1_ dmcompositegetentries1 2147c6ae99SBarry Smith #define dmcompositegetentries2_ dmcompositegetentries2 2247c6ae99SBarry Smith #define dmcompositegetentries3_ dmcompositegetentries3 2347c6ae99SBarry Smith #define dmcompositegetentries4_ dmcompositegetentries4 2447c6ae99SBarry Smith #define dmcompositegetentries5_ dmcompositegetentries5 2547c6ae99SBarry Smith #define dmcompositegetaccess4_ dmcompositegetaccess4 2647c6ae99SBarry Smith #define dmcompositescatter4_ dmcompositescatter4 2747c6ae99SBarry Smith #define dmcompositerestoreaccess4_ dmcompositerestoreaccess4 2847c6ae99SBarry Smith #define dmcompositegetlocalvectors4_ dmcompositegetlocalvectors4 2947c6ae99SBarry Smith #define dmcompositerestorelocalvectors4_ dmcompositerestorelocalvectors4 3073e31fe2SJed Brown #define dmcompositegetglobaliss_ dmcompositegetglobaliss 31ce78bad3SBarry Smith #define dmcompositerestoreglobaliss_ dmcompositerestoreglobaliss 3273e31fe2SJed Brown #define dmcompositegetlocaliss_ dmcompositegetlocaliss 33ce78bad3SBarry Smith #define dmcompositerestorelocaliss_ dmcompositerestorelocaliss 3447c6ae99SBarry Smith #endif 3547c6ae99SBarry Smith 3619caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetentries1_(DM *dm, DM *da1, PetscErrorCode *ierr) 3747c6ae99SBarry Smith { 3847c6ae99SBarry Smith *ierr = DMCompositeGetEntries(*dm, da1); 3947c6ae99SBarry Smith } 4047c6ae99SBarry Smith 4119caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetentries2_(DM *dm, DM *da1, DM *da2, PetscErrorCode *ierr) 4247c6ae99SBarry Smith { 4347c6ae99SBarry Smith *ierr = DMCompositeGetEntries(*dm, da1, da2); 4447c6ae99SBarry Smith } 4547c6ae99SBarry Smith 4619caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetentries3_(DM *dm, DM *da1, DM *da2, DM *da3, PetscErrorCode *ierr) 4747c6ae99SBarry Smith { 4847c6ae99SBarry Smith *ierr = DMCompositeGetEntries(*dm, da1, da2, da3); 4947c6ae99SBarry Smith } 5047c6ae99SBarry Smith 5119caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetentries4_(DM *dm, DM *da1, DM *da2, DM *da3, DM *da4, PetscErrorCode *ierr) 5247c6ae99SBarry Smith { 5347c6ae99SBarry Smith *ierr = DMCompositeGetEntries(*dm, da1, da2, da3, da4); 5447c6ae99SBarry Smith } 5547c6ae99SBarry Smith 5619caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetentries5_(DM *dm, DM *da1, DM *da2, DM *da3, DM *da4, DM *da5, PetscErrorCode *ierr) 5747c6ae99SBarry Smith { 5847c6ae99SBarry Smith *ierr = DMCompositeGetEntries(*dm, da1, da2, da3, da4, da5); 5947c6ae99SBarry Smith } 6047c6ae99SBarry Smith 6119caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetaccess4_(DM *dm, Vec *v, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr) 6247c6ae99SBarry Smith { 6347c6ae99SBarry Smith Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2; 6447c6ae99SBarry Smith *ierr = DMCompositeGetAccess(*dm, *v, vv1, (PetscScalar *)p1, vv2, (PetscScalar *)p2); 6547c6ae99SBarry Smith } 6647c6ae99SBarry Smith 6719caf8f3SSatish Balay PETSC_EXTERN void dmcompositescatter4_(DM *dm, Vec *v, void *v1, void *p1, void *v2, void *p2, PetscErrorCode *ierr) 6847c6ae99SBarry Smith { 6947c6ae99SBarry Smith Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2; 7047c6ae99SBarry Smith *ierr = DMCompositeScatter(*dm, *v, *vv1, (PetscScalar *)p1, *vv2, (PetscScalar *)p2); 7147c6ae99SBarry Smith } 7247c6ae99SBarry Smith 7319caf8f3SSatish Balay PETSC_EXTERN void dmcompositerestoreaccess4_(DM *dm, Vec *v, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr) 7447c6ae99SBarry Smith { 7547c6ae99SBarry Smith *ierr = DMCompositeRestoreAccess(*dm, *v, (Vec *)v1, 0, (Vec *)v2, 0); 7647c6ae99SBarry Smith } 7747c6ae99SBarry Smith 7819caf8f3SSatish Balay PETSC_EXTERN void dmcompositegetlocalvectors4_(DM *dm, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr) 7947c6ae99SBarry Smith { 8047c6ae99SBarry Smith Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2; 8147c6ae99SBarry Smith *ierr = DMCompositeGetLocalVectors(*dm, vv1, (PetscScalar *)p1, vv2, (PetscScalar *)p2); 8247c6ae99SBarry Smith } 8347c6ae99SBarry Smith 8419caf8f3SSatish Balay PETSC_EXTERN void dmcompositerestorelocalvectors4_(DM *dm, void **v1, void **p1, void **v2, void **p2, PetscErrorCode *ierr) 8547c6ae99SBarry Smith { 8647c6ae99SBarry Smith Vec *vv1 = (Vec *)v1, *vv2 = (Vec *)v2; 8747c6ae99SBarry Smith *ierr = DMCompositeRestoreLocalVectors(*dm, vv1, (PetscScalar *)p1, vv2, (PetscScalar *)p2); 8847c6ae99SBarry Smith } 8947c6ae99SBarry Smith 90ce78bad3SBarry Smith PETSC_EXTERN void dmcompositegetglobaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 9173e31fe2SJed Brown { 9273e31fe2SJed Brown IS *ais; 93ce78bad3SBarry Smith PetscInt ndm; 94ce78bad3SBarry Smith 955975b3b6SBarry Smith *ierr = DMCompositeGetGlobalISs(*dm, &ais); 965975b3b6SBarry Smith if (*ierr) return; 975975b3b6SBarry Smith *ierr = DMCompositeGetNumberDM(*dm, &ndm); 985975b3b6SBarry Smith if (*ierr) return; 99ce78bad3SBarry Smith *ierr = F90Array1dCreate((void *)ais, MPIU_FORTRANADDR, 1, ndm, ptr PETSC_F90_2PTR_PARAM(ptrd)); 10073e31fe2SJed Brown } 10173e31fe2SJed Brown 102ce78bad3SBarry Smith PETSC_EXTERN void dmcompositerestoreglobaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 10373e31fe2SJed Brown { 10473e31fe2SJed Brown IS *ais; 105ce78bad3SBarry Smith PetscInt ndm; 106ce78bad3SBarry Smith 107ce78bad3SBarry Smith *ierr = F90Array1dAccess(ptr, MPIU_FORTRANADDR, (void **)&ais PETSC_F90_2PTR_PARAM(ptrd)); 108ce78bad3SBarry Smith if (*ierr) return; 109ce78bad3SBarry Smith *ierr = DMCompositeGetNumberDM(*dm, &ndm); 110ce78bad3SBarry Smith for (PetscInt i = 0; i < ndm; i++) { 111ce78bad3SBarry Smith *ierr = ISDestroy(&ais[i]); 112ce78bad3SBarry Smith if (*ierr) return; 113ce78bad3SBarry Smith } 114ce78bad3SBarry Smith *ierr = PetscFree(ais); 115ce78bad3SBarry Smith if (*ierr) return; 116ce78bad3SBarry Smith *ierr = F90Array1dDestroy(ptr, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd)); 117ce78bad3SBarry Smith } 118ce78bad3SBarry Smith 119ce78bad3SBarry Smith PETSC_EXTERN void dmcompositegetlocaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 120ce78bad3SBarry Smith { 121ce78bad3SBarry Smith IS *ais; 122ce78bad3SBarry Smith PetscInt ndm; 123ce78bad3SBarry Smith 1245975b3b6SBarry Smith *ierr = DMCompositeGetLocalISs(*dm, &ais); 1255975b3b6SBarry Smith if (*ierr) return; 1265975b3b6SBarry Smith *ierr = DMCompositeGetNumberDM(*dm, &ndm); 1275975b3b6SBarry Smith if (*ierr) return; 128ce78bad3SBarry Smith *ierr = F90Array1dCreate((void *)ais, MPIU_FORTRANADDR, 1, ndm, ptr PETSC_F90_2PTR_PARAM(ptrd)); 129ce78bad3SBarry Smith } 130ce78bad3SBarry Smith 131ce78bad3SBarry Smith PETSC_EXTERN void dmcompositerestorelocaliss_(DM *dm, F90Array1d *ptr, PetscErrorCode *ierr PETSC_F90_2PTR_PROTO(ptrd)) 132ce78bad3SBarry Smith { 133ce78bad3SBarry Smith IS *ais; 134ce78bad3SBarry Smith PetscInt ndm; 135ce78bad3SBarry Smith 136ce78bad3SBarry Smith *ierr = F90Array1dAccess(ptr, MPIU_FORTRANADDR, (void **)&ais PETSC_F90_2PTR_PARAM(ptrd)); 137ce78bad3SBarry Smith if (*ierr) return; 138ce78bad3SBarry Smith *ierr = DMCompositeGetNumberDM(*dm, &ndm); 139ce78bad3SBarry Smith for (PetscInt i = 0; i < ndm; i++) { 140ce78bad3SBarry Smith *ierr = ISDestroy(&ais[i]); 141ce78bad3SBarry Smith if (*ierr) return; 142ce78bad3SBarry Smith } 14373e31fe2SJed Brown *ierr = PetscFree(ais); 144ce78bad3SBarry Smith if (*ierr) return; 145ce78bad3SBarry Smith *ierr = F90Array1dDestroy(ptr, MPIU_FORTRANADDR PETSC_F90_2PTR_PARAM(ptrd)); 14673e31fe2SJed Brown } 147