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