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 759fc98c0SBarry Smith #define pcasmgetsubksp3_ PCASMGETSUBKSP3 859fc98c0SBarry Smith #define pcasmgetsubksp4_ PCASMGETSUBKSP4 959fc98c0SBarry Smith #define pcasmgetsubksp5_ PCASMGETSUBKSP5 1059fc98c0SBarry Smith #define pcasmgetsubksp6_ PCASMGETSUBKSP6 1159fc98c0SBarry Smith #define pcasmgetsubksp7_ PCASMGETSUBKSP7 1259fc98c0SBarry 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 2259fc98c0SBarry Smith #define pcasmgetsubksp3_ pcasmgetsubksp3 2359fc98c0SBarry Smith #define pcasmgetsubksp4_ pcasmgetsubksp4 2459fc98c0SBarry Smith #define pcasmgetsubksp5_ pcasmgetsubksp5 2559fc98c0SBarry Smith #define pcasmgetsubksp6_ pcasmgetsubksp6 2659fc98c0SBarry Smith #define pcasmgetsubksp7_ pcasmgetsubksp7 2759fc98c0SBarry 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 41*5975b3b6SBarry Smith *ierr = PCASMCreateSubdomains(*mat, *n, &insubs); 42*5975b3b6SBarry Smith if (*ierr) return; 432fa5cd67SKarl Rupp for (i = 0; i < *n; i++) subs[i] = insubs[i]; 44ef356e52SBarry Smith *ierr = PetscFree(insubs); 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++) { 52*5975b3b6SBarry Smith *ierr = ISDestroy(&subs[i]); 53*5975b3b6SBarry Smith if (*ierr) return; 54ef356e52SBarry Smith } 55ef356e52SBarry Smith } 56ef356e52SBarry Smith 57ab32a8f3SSatish Balay PETSC_EXTERN void pcasmgetsubksp1_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 58e54e4138SSatish Balay { 59e54e4138SSatish Balay KSP *tksp; 60e54e4138SSatish Balay PetscInt i, nloc; 61e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n_local); 62e54e4138SSatish Balay CHKFORTRANNULLINTEGER(first_local); 63d29017ddSJed Brown CHKFORTRANNULLOBJECT(ksp); 64e54e4138SSatish Balay *ierr = PCASMGetSubKSP(*pc, &nloc, first_local, &tksp); 65e54e4138SSatish Balay if (n_local) *n_local = nloc; 66d29017ddSJed Brown if (ksp) { 672fa5cd67SKarl Rupp for (i = 0; i < nloc; i++) ksp[i] = tksp[i]; 68e54e4138SSatish Balay } 69d29017ddSJed Brown } 70e54e4138SSatish Balay 71ab32a8f3SSatish Balay PETSC_EXTERN void pcasmgetsubksp2_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 72ab32a8f3SSatish Balay { 73ab32a8f3SSatish Balay pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 74ab32a8f3SSatish Balay } 75ab32a8f3SSatish Balay 7659fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp3_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 7759fc98c0SBarry Smith { 7859fc98c0SBarry Smith pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 7959fc98c0SBarry Smith } 8059fc98c0SBarry Smith 8159fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp4_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 8259fc98c0SBarry Smith { 8359fc98c0SBarry Smith pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 8459fc98c0SBarry Smith } 8559fc98c0SBarry Smith 8659fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp5_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 8759fc98c0SBarry Smith { 8859fc98c0SBarry Smith pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 8959fc98c0SBarry Smith } 9059fc98c0SBarry Smith 9159fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp6_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 9259fc98c0SBarry Smith { 9359fc98c0SBarry Smith pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 9459fc98c0SBarry Smith } 9559fc98c0SBarry Smith 9659fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp7_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 9759fc98c0SBarry Smith { 9859fc98c0SBarry Smith pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 9959fc98c0SBarry Smith } 10059fc98c0SBarry Smith 10159fc98c0SBarry Smith PETSC_EXTERN void pcasmgetsubksp8_(PC *pc, PetscInt *n_local, PetscInt *first_local, KSP *ksp, PetscErrorCode *ierr) 10259fc98c0SBarry Smith { 10359fc98c0SBarry Smith pcasmgetsubksp1_(pc, n_local, first_local, ksp, ierr); 10459fc98c0SBarry Smith } 10559fc98c0SBarry Smith 10619caf8f3SSatish Balay PETSC_EXTERN void pcasmsetlocalsubdomains_(PC *pc, PetscInt *n, IS *is, IS *is_local, PetscErrorCode *ierr) 107e54e4138SSatish Balay { 108e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 1092b691e39SMatthew Knepley CHKFORTRANNULLOBJECT(is_local); 1102b691e39SMatthew Knepley *ierr = PCASMSetLocalSubdomains(*pc, *n, is, is_local); 111e54e4138SSatish Balay } 112e54e4138SSatish Balay 11319caf8f3SSatish Balay PETSC_EXTERN void pcasmsettotalsubdomains_(PC *pc, PetscInt *N, IS *is, IS *is_local, PetscErrorCode *ierr) 114e54e4138SSatish Balay { 115e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 1162b691e39SMatthew Knepley CHKFORTRANNULLOBJECT(is_local); 1172b691e39SMatthew Knepley *ierr = PCASMSetTotalSubdomains(*pc, *N, is, is_local); 118e54e4138SSatish Balay } 119e54e4138SSatish Balay 12019caf8f3SSatish Balay PETSC_EXTERN void pcasmgetlocalsubmatrices_(PC *pc, PetscInt *n, Mat *mat, PetscErrorCode *ierr) 121e54e4138SSatish Balay { 122e54e4138SSatish Balay PetscInt nloc, i; 123e54e4138SSatish Balay Mat *tmat; 124e54e4138SSatish Balay CHKFORTRANNULLOBJECT(mat); 125e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n); 126e54e4138SSatish Balay *ierr = PCASMGetLocalSubmatrices(*pc, &nloc, &tmat); 127e54e4138SSatish Balay if (n) *n = nloc; 128e54e4138SSatish Balay if (mat) { 1292fa5cd67SKarl Rupp for (i = 0; i < nloc; i++) mat[i] = tmat[i]; 130e54e4138SSatish Balay } 131e54e4138SSatish Balay } 13219caf8f3SSatish Balay PETSC_EXTERN void pcasmgetlocalsubdomains_(PC *pc, PetscInt *n, IS *is, IS *is_local, PetscErrorCode *ierr) 133e54e4138SSatish Balay { 134e54e4138SSatish Balay PetscInt nloc, i; 1352b691e39SMatthew Knepley IS *tis, *tis_local; 136e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 1372b691e39SMatthew Knepley CHKFORTRANNULLOBJECT(is_local); 138e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n); 1392b691e39SMatthew Knepley *ierr = PCASMGetLocalSubdomains(*pc, &nloc, &tis, &tis_local); 140e54e4138SSatish Balay if (n) *n = nloc; 141e54e4138SSatish Balay if (is) { 1422fa5cd67SKarl Rupp for (i = 0; i < nloc; i++) is[i] = tis[i]; 143e54e4138SSatish Balay } 1442b691e39SMatthew Knepley if (is_local && tis_local) { 1452a808120SBarry Smith for (i = 0; i < nloc; i++) is_local[i] = tis_local[i]; 1462b691e39SMatthew Knepley } 147e54e4138SSatish Balay } 148