1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2c6db04a5SJed Brown #include <petscksp.h> 3e54e4138SSatish Balay 4e54e4138SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 5ab32a8f3SSatish Balay #define pcasmgetsubksp1_ PCASMGETSUBKSP1 6ab32a8f3SSatish Balay #define pcasmgetsubksp2_ PCASMGETSUBKSP2 7*59fc98c0SBarry Smith #define pcasmgetsubksp3_ PCASMGETSUBKSP3 8*59fc98c0SBarry Smith #define pcasmgetsubksp4_ PCASMGETSUBKSP4 9*59fc98c0SBarry Smith #define pcasmgetsubksp5_ PCASMGETSUBKSP5 10*59fc98c0SBarry Smith #define pcasmgetsubksp6_ PCASMGETSUBKSP6 11*59fc98c0SBarry Smith #define pcasmgetsubksp7_ PCASMGETSUBKSP7 12*59fc98c0SBarry Smith #define pcasmgetsubksp8_ PCASMGETSUBKSP8 13e54e4138SSatish Balay #define pcasmsetlocalsubdomains_ PCASMSETLOCALSUBDOMAINS 14e54e4138SSatish Balay #define pcasmsetglobalsubdomains_ PCASMSETGLOBALSUBDOMAINS 15e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_ PCASMGETLOCALSUBMATRICES 16e54e4138SSatish Balay #define pcasmgetlocalsubdomains_ PCASMGETLOCALSUBDOMAINS 17ef356e52SBarry Smith #define pcasmcreatesubdomains_ PCASMCREATESUBDOMAINS 18ef356e52SBarry Smith #define pcasmdestroysubdomains_ PCASMDESTROYSUBDOMAINS 19e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 20ab32a8f3SSatish Balay #define pcasmgetsubksp1_ pcasmgetsubksp1 21ab32a8f3SSatish Balay #define pcasmgetsubksp2_ pcasmgetsubksp2 22*59fc98c0SBarry Smith #define pcasmgetsubksp3_ pcasmgetsubksp3 23*59fc98c0SBarry Smith #define pcasmgetsubksp4_ pcasmgetsubksp4 24*59fc98c0SBarry Smith #define pcasmgetsubksp5_ pcasmgetsubksp5 25*59fc98c0SBarry Smith #define pcasmgetsubksp6_ pcasmgetsubksp6 26*59fc98c0SBarry Smith #define pcasmgetsubksp7_ pcasmgetsubksp7 27*59fc98c0SBarry Smith #define pcasmgetsubksp8_ pcasmgetsubksp8 28e54e4138SSatish Balay #define pcasmsetlocalsubdomains_ pcasmsetlocalsubdomains 29e54e4138SSatish Balay #define pcasmsetglobalsubdomains_ pcasmsetglobalsubdomains 30e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_ pcasmgetlocalsubmatrices 31e54e4138SSatish Balay #define pcasmgetlocalsubdomains_ pcasmgetlocalsubdomains 32ef356e52SBarry Smith #define pcasmcreatesubdomains_ pcasmcreatesubdomains 33ef356e52SBarry Smith #define pcasmdestroysubdomains_ pcasmdestroysubdomains 34e54e4138SSatish Balay #endif 35e54e4138SSatish Balay 3619caf8f3SSatish Balay PETSC_EXTERN void pcasmcreatesubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr) 37ef356e52SBarry Smith { 38ef356e52SBarry Smith PetscInt i; 39ef356e52SBarry Smith IS *insubs; 40ef356e52SBarry Smith 41ef356e52SBarry Smith *ierr = PCASMCreateSubdomains(*mat,*n,&insubs);if (*ierr) return; 422fa5cd67SKarl Rupp for (i=0; i<*n; i++) subs[i] = insubs[i]; 43ef356e52SBarry Smith *ierr = PetscFree(insubs); 44ef356e52SBarry Smith } 45ef356e52SBarry Smith 46ef356e52SBarry Smith 4719caf8f3SSatish Balay PETSC_EXTERN void pcasmdestroysubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr) 48ef356e52SBarry Smith { 49ef356e52SBarry Smith PetscInt i; 50ef356e52SBarry Smith 51ef356e52SBarry Smith for (i=0; i<*n; i++) { 52fcfd50ebSBarry Smith *ierr = ISDestroy(&subs[i]);if (*ierr) return; 53ef356e52SBarry Smith } 54ef356e52SBarry Smith } 55ef356e52SBarry Smith 56ab32a8f3SSatish Balay PETSC_EXTERN void pcasmgetsubksp1_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 57e54e4138SSatish Balay { 58e54e4138SSatish Balay KSP *tksp; 59e54e4138SSatish Balay PetscInt i,nloc; 60e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n_local); 61e54e4138SSatish Balay CHKFORTRANNULLINTEGER(first_local); 62d29017ddSJed Brown CHKFORTRANNULLOBJECT(ksp); 63e54e4138SSatish Balay *ierr = PCASMGetSubKSP(*pc,&nloc,first_local,&tksp); 64e54e4138SSatish Balay if (n_local) *n_local = nloc; 65d29017ddSJed Brown if (ksp) { 662fa5cd67SKarl Rupp for (i=0; i<nloc; i++) ksp[i] = tksp[i]; 67e54e4138SSatish Balay } 68d29017ddSJed Brown } 69e54e4138SSatish Balay 70ab32a8f3SSatish Balay PETSC_EXTERN void pcasmgetsubksp2_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 71ab32a8f3SSatish Balay { 72ab32a8f3SSatish Balay pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 73ab32a8f3SSatish Balay } 74ab32a8f3SSatish Balay 75*59fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp3_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 76*59fc98c0SBarry Smith { 77*59fc98c0SBarry Smith pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 78*59fc98c0SBarry Smith } 79*59fc98c0SBarry Smith 80*59fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp4_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 81*59fc98c0SBarry Smith { 82*59fc98c0SBarry Smith pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 83*59fc98c0SBarry Smith } 84*59fc98c0SBarry Smith 85*59fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp5_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 86*59fc98c0SBarry Smith { 87*59fc98c0SBarry Smith pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 88*59fc98c0SBarry Smith } 89*59fc98c0SBarry Smith 90*59fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp6_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 91*59fc98c0SBarry Smith { 92*59fc98c0SBarry Smith pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 93*59fc98c0SBarry Smith } 94*59fc98c0SBarry Smith 95*59fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp7_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 96*59fc98c0SBarry Smith { 97*59fc98c0SBarry Smith pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 98*59fc98c0SBarry Smith } 99*59fc98c0SBarry Smith 100*59fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp8_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 101*59fc98c0SBarry Smith { 102*59fc98c0SBarry Smith pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr); 103*59fc98c0SBarry Smith } 104*59fc98c0SBarry Smith 10519caf8f3SSatish Balay PETSC_EXTERN void pcasmsetlocalsubdomains_(PC *pc,PetscInt *n,IS *is,IS *is_local, PetscErrorCode *ierr) 106e54e4138SSatish Balay { 107e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 1082b691e39SMatthew Knepley CHKFORTRANNULLOBJECT(is_local); 1092b691e39SMatthew Knepley *ierr = PCASMSetLocalSubdomains(*pc,*n,is,is_local); 110e54e4138SSatish Balay } 111e54e4138SSatish Balay 11219caf8f3SSatish Balay PETSC_EXTERN void pcasmsettotalsubdomains_(PC *pc,PetscInt *N,IS *is,IS *is_local, PetscErrorCode *ierr) 113e54e4138SSatish Balay { 114e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 1152b691e39SMatthew Knepley CHKFORTRANNULLOBJECT(is_local); 1162b691e39SMatthew Knepley *ierr = PCASMSetTotalSubdomains(*pc,*N,is,is_local); 117e54e4138SSatish Balay } 118e54e4138SSatish Balay 11919caf8f3SSatish Balay PETSC_EXTERN void pcasmgetlocalsubmatrices_(PC *pc,PetscInt *n,Mat *mat, PetscErrorCode *ierr) 120e54e4138SSatish Balay { 121e54e4138SSatish Balay PetscInt nloc,i; 122e54e4138SSatish Balay Mat *tmat; 123e54e4138SSatish Balay CHKFORTRANNULLOBJECT(mat); 124e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n); 125e54e4138SSatish Balay *ierr = PCASMGetLocalSubmatrices(*pc,&nloc,&tmat); 126e54e4138SSatish Balay if (n) *n = nloc; 127e54e4138SSatish Balay if (mat) { 1282fa5cd67SKarl Rupp for (i=0; i<nloc; i++) mat[i] = tmat[i]; 129e54e4138SSatish Balay } 130e54e4138SSatish Balay } 13119caf8f3SSatish Balay PETSC_EXTERN void pcasmgetlocalsubdomains_(PC *pc,PetscInt *n,IS *is,IS *is_local, PetscErrorCode *ierr) 132e54e4138SSatish Balay { 133e54e4138SSatish Balay PetscInt nloc,i; 1342b691e39SMatthew Knepley IS *tis, *tis_local; 135e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 1362b691e39SMatthew Knepley CHKFORTRANNULLOBJECT(is_local); 137e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n); 1382b691e39SMatthew Knepley *ierr = PCASMGetLocalSubdomains(*pc,&nloc,&tis,&tis_local); 139e54e4138SSatish Balay if (n) *n = nloc; 140e54e4138SSatish Balay if (is) { 1412fa5cd67SKarl Rupp for (i=0; i<nloc; i++) is[i] = tis[i]; 142e54e4138SSatish Balay } 1432b691e39SMatthew Knepley if (is_local && tis_local) { 1442a808120SBarry Smith for (i=0; i<nloc; i++) is_local[i] = tis_local[i]; 1452b691e39SMatthew Knepley } 146e54e4138SSatish Balay } 147e54e4138SSatish Balay 148