1*e54e4138SSatish Balay #include "zpetsc.h" 2*e54e4138SSatish Balay #include "petscksp.h" 3*e54e4138SSatish Balay 4*e54e4138SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 5*e54e4138SSatish Balay #define pcasmgetsubksp_ PCASMGETSUBKSP 6*e54e4138SSatish Balay #define pcasmsetlocalsubdomains_ PCASMSETLOCALSUBDOMAINS 7*e54e4138SSatish Balay #define pcasmsetglobalsubdomains_ PCASMSETGLOBALSUBDOMAINS 8*e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_ PCASMGETLOCALSUBMATRICES 9*e54e4138SSatish Balay #define pcasmgetlocalsubdomains_ PCASMGETLOCALSUBDOMAINS 10*e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 11*e54e4138SSatish Balay #define pcasmgetsubksp_ pcasmgetsubksp 12*e54e4138SSatish Balay #define pcasmsetlocalsubdomains_ pcasmsetlocalsubdomains 13*e54e4138SSatish Balay #define pcasmsetglobalsubdomains_ pcasmsetglobalsubdomains 14*e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_ pcasmgetlocalsubmatrices 15*e54e4138SSatish Balay #define pcasmgetlocalsubdomains_ pcasmgetlocalsubdomains 16*e54e4138SSatish Balay #endif 17*e54e4138SSatish Balay 18*e54e4138SSatish Balay EXTERN_C_BEGIN 19*e54e4138SSatish Balay void PETSC_STDCALL pcasmgetsubksp_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr) 20*e54e4138SSatish Balay { 21*e54e4138SSatish Balay KSP *tksp; 22*e54e4138SSatish Balay PetscInt i,nloc; 23*e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n_local); 24*e54e4138SSatish Balay CHKFORTRANNULLINTEGER(first_local); 25*e54e4138SSatish Balay *ierr = PCASMGetSubKSP(*pc,&nloc,first_local,&tksp); 26*e54e4138SSatish Balay if (n_local) *n_local = nloc; 27*e54e4138SSatish Balay for (i=0; i<nloc; i++){ 28*e54e4138SSatish Balay ksp[i] = tksp[i]; 29*e54e4138SSatish Balay } 30*e54e4138SSatish Balay } 31*e54e4138SSatish Balay 32*e54e4138SSatish Balay void PETSC_STDCALL pcasmsetlocalsubdomains_(PC *pc,PetscInt *n,IS *is, PetscErrorCode *ierr) 33*e54e4138SSatish Balay { 34*e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 35*e54e4138SSatish Balay *ierr = PCASMSetLocalSubdomains(*pc,*n,is); 36*e54e4138SSatish Balay } 37*e54e4138SSatish Balay 38*e54e4138SSatish Balay void PETSC_STDCALL pcasmsettotalsubdomains_(PC *pc,PetscInt *N,IS *is, PetscErrorCode *ierr) 39*e54e4138SSatish Balay { 40*e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 41*e54e4138SSatish Balay *ierr = PCASMSetTotalSubdomains(*pc,*N,is); 42*e54e4138SSatish Balay } 43*e54e4138SSatish Balay 44*e54e4138SSatish Balay void PETSC_STDCALL pcasmgetlocalsubmatrices_(PC *pc,PetscInt *n,Mat *mat, PetscErrorCode *ierr) 45*e54e4138SSatish Balay { 46*e54e4138SSatish Balay PetscInt nloc,i; 47*e54e4138SSatish Balay Mat *tmat; 48*e54e4138SSatish Balay CHKFORTRANNULLOBJECT(mat); 49*e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n); 50*e54e4138SSatish Balay *ierr = PCASMGetLocalSubmatrices(*pc,&nloc,&tmat); 51*e54e4138SSatish Balay if (n) *n = nloc; 52*e54e4138SSatish Balay if (mat) { 53*e54e4138SSatish Balay for (i=0; i<nloc; i++){ 54*e54e4138SSatish Balay mat[i] = tmat[i]; 55*e54e4138SSatish Balay } 56*e54e4138SSatish Balay } 57*e54e4138SSatish Balay } 58*e54e4138SSatish Balay void PETSC_STDCALL pcasmgetlocalsubdomains_(PC *pc,PetscInt *n,IS *is, PetscErrorCode *ierr) 59*e54e4138SSatish Balay { 60*e54e4138SSatish Balay PetscInt nloc,i; 61*e54e4138SSatish Balay IS *tis; 62*e54e4138SSatish Balay CHKFORTRANNULLOBJECT(is); 63*e54e4138SSatish Balay CHKFORTRANNULLINTEGER(n); 64*e54e4138SSatish Balay *ierr = PCASMGetLocalSubdomains(*pc,&nloc,&tis); 65*e54e4138SSatish Balay if (n) *n = nloc; 66*e54e4138SSatish Balay if (is) { 67*e54e4138SSatish Balay for (i=0; i<nloc; i++){ 68*e54e4138SSatish Balay is[i] = tis[i]; 69*e54e4138SSatish Balay } 70*e54e4138SSatish Balay } 71*e54e4138SSatish Balay } 72*e54e4138SSatish Balay 73*e54e4138SSatish Balay EXTERN_C_END 74