#include #include #if defined(PETSC_HAVE_FORTRAN_CAPS) #define pcasmgetsubksp1_ PCASMGETSUBKSP1 #define pcasmgetsubksp2_ PCASMGETSUBKSP2 #define pcasmgetsubksp3_ PCASMGETSUBKSP3 #define pcasmgetsubksp4_ PCASMGETSUBKSP4 #define pcasmgetsubksp5_ PCASMGETSUBKSP5 #define pcasmgetsubksp6_ PCASMGETSUBKSP6 #define pcasmgetsubksp7_ PCASMGETSUBKSP7 #define pcasmgetsubksp8_ PCASMGETSUBKSP8 #define pcasmsetlocalsubdomains_ PCASMSETLOCALSUBDOMAINS #define pcasmsetglobalsubdomains_ PCASMSETGLOBALSUBDOMAINS #define pcasmgetlocalsubmatrices_ PCASMGETLOCALSUBMATRICES #define pcasmgetlocalsubdomains_ PCASMGETLOCALSUBDOMAINS #define pcasmcreatesubdomains_ PCASMCREATESUBDOMAINS #define pcasmdestroysubdomains_ PCASMDESTROYSUBDOMAINS #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) #define pcasmgetsubksp1_ pcasmgetsubksp1 #define pcasmgetsubksp2_ pcasmgetsubksp2 #define pcasmgetsubksp3_ pcasmgetsubksp3 #define pcasmgetsubksp4_ pcasmgetsubksp4 #define pcasmgetsubksp5_ pcasmgetsubksp5 #define pcasmgetsubksp6_ pcasmgetsubksp6 #define pcasmgetsubksp7_ pcasmgetsubksp7 #define pcasmgetsubksp8_ pcasmgetsubksp8 #define pcasmsetlocalsubdomains_ pcasmsetlocalsubdomains #define pcasmsetglobalsubdomains_ pcasmsetglobalsubdomains #define pcasmgetlocalsubmatrices_ pcasmgetlocalsubmatrices #define pcasmgetlocalsubdomains_ pcasmgetlocalsubdomains #define pcasmcreatesubdomains_ pcasmcreatesubdomains #define pcasmdestroysubdomains_ pcasmdestroysubdomains #endif PETSC_EXTERN void pcasmcreatesubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr) { PetscInt i; IS *insubs; *ierr = PCASMCreateSubdomains(*mat,*n,&insubs);if (*ierr) return; for (i=0; i<*n; i++) subs[i] = insubs[i]; *ierr = PetscFree(insubs); } PETSC_EXTERN void pcasmdestroysubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr) { PetscInt i; for (i=0; i<*n; i++) { *ierr = ISDestroy(&subs[i]);if (*ierr) return; } } PETSC_EXTERN void pcasmgetsubksp1_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) { KSP *tksp; PetscInt i,nloc; CHKFORTRANNULLINTEGER(n_local); CHKFORTRANNULLINTEGER(first_local); CHKFORTRANNULLOBJECT(ksp); *ierr = PCASMGetSubKSP(*pc,&nloc,first_local,&tksp); if (n_local) *n_local = nloc; if (ksp) { for (i=0; i