xref: /petsc/src/ksp/pc/impls/asm/ftn-custom/zasmf.c (revision e54e4138ce417ce13177b1b39c01f1f2d4bc2423)
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