xref: /petsc/src/ksp/pc/impls/asm/ftn-custom/zasmf.c (revision ab32a8f333ac0303adfd31137139d114f03757c4)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
2c6db04a5SJed Brown #include <petscksp.h>
3e54e4138SSatish Balay 
4e54e4138SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
5*ab32a8f3SSatish Balay #define pcasmgetsubksp1_           PCASMGETSUBKSP1
6*ab32a8f3SSatish Balay #define pcasmgetsubksp2_           PCASMGETSUBKSP2
7e54e4138SSatish Balay #define pcasmsetlocalsubdomains_   PCASMSETLOCALSUBDOMAINS
8e54e4138SSatish Balay #define pcasmsetglobalsubdomains_  PCASMSETGLOBALSUBDOMAINS
9e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_  PCASMGETLOCALSUBMATRICES
10e54e4138SSatish Balay #define pcasmgetlocalsubdomains_   PCASMGETLOCALSUBDOMAINS
11ef356e52SBarry Smith #define pcasmcreatesubdomains_     PCASMCREATESUBDOMAINS
12ef356e52SBarry Smith #define pcasmdestroysubdomains_    PCASMDESTROYSUBDOMAINS
13e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
14*ab32a8f3SSatish Balay #define pcasmgetsubksp1_           pcasmgetsubksp1
15*ab32a8f3SSatish Balay #define pcasmgetsubksp2_           pcasmgetsubksp2
16e54e4138SSatish Balay #define pcasmsetlocalsubdomains_   pcasmsetlocalsubdomains
17e54e4138SSatish Balay #define pcasmsetglobalsubdomains_  pcasmsetglobalsubdomains
18e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_  pcasmgetlocalsubmatrices
19e54e4138SSatish Balay #define pcasmgetlocalsubdomains_   pcasmgetlocalsubdomains
20ef356e52SBarry Smith #define pcasmcreatesubdomains_     pcasmcreatesubdomains
21ef356e52SBarry Smith #define pcasmdestroysubdomains_    pcasmdestroysubdomains
22e54e4138SSatish Balay #endif
23e54e4138SSatish Balay 
2419caf8f3SSatish Balay PETSC_EXTERN void pcasmcreatesubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr)
25ef356e52SBarry Smith {
26ef356e52SBarry Smith   PetscInt i;
27ef356e52SBarry Smith   IS       *insubs;
28ef356e52SBarry Smith 
29ef356e52SBarry Smith   *ierr = PCASMCreateSubdomains(*mat,*n,&insubs);if (*ierr) return;
302fa5cd67SKarl Rupp   for (i=0; i<*n; i++) subs[i] = insubs[i];
31ef356e52SBarry Smith   *ierr = PetscFree(insubs);
32ef356e52SBarry Smith }
33ef356e52SBarry Smith 
34ef356e52SBarry Smith 
3519caf8f3SSatish Balay PETSC_EXTERN void pcasmdestroysubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr)
36ef356e52SBarry Smith {
37ef356e52SBarry Smith   PetscInt i;
38ef356e52SBarry Smith 
39ef356e52SBarry Smith   for (i=0; i<*n; i++) {
40fcfd50ebSBarry Smith     *ierr = ISDestroy(&subs[i]);if (*ierr) return;
41ef356e52SBarry Smith   }
42ef356e52SBarry Smith }
43ef356e52SBarry Smith 
44*ab32a8f3SSatish Balay PETSC_EXTERN void pcasmgetsubksp1_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr)
45e54e4138SSatish Balay {
46e54e4138SSatish Balay   KSP      *tksp;
47e54e4138SSatish Balay   PetscInt i,nloc;
48e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n_local);
49e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(first_local);
50d29017ddSJed Brown   CHKFORTRANNULLOBJECT(ksp);
51e54e4138SSatish Balay   *ierr = PCASMGetSubKSP(*pc,&nloc,first_local,&tksp);
52e54e4138SSatish Balay   if (n_local) *n_local = nloc;
53d29017ddSJed Brown   if (ksp) {
542fa5cd67SKarl Rupp     for (i=0; i<nloc; i++) ksp[i] = tksp[i];
55e54e4138SSatish Balay   }
56d29017ddSJed Brown }
57e54e4138SSatish Balay 
58*ab32a8f3SSatish Balay PETSC_EXTERN void pcasmgetsubksp2_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr)
59*ab32a8f3SSatish Balay {
60*ab32a8f3SSatish Balay   pcasmgetsubksp1_(pc,n_local,first_local,ksp,ierr);
61*ab32a8f3SSatish Balay }
62*ab32a8f3SSatish Balay 
6319caf8f3SSatish Balay PETSC_EXTERN void pcasmsetlocalsubdomains_(PC *pc,PetscInt *n,IS *is,IS *is_local, PetscErrorCode *ierr)
64e54e4138SSatish Balay {
65e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
662b691e39SMatthew Knepley   CHKFORTRANNULLOBJECT(is_local);
672b691e39SMatthew Knepley   *ierr = PCASMSetLocalSubdomains(*pc,*n,is,is_local);
68e54e4138SSatish Balay }
69e54e4138SSatish Balay 
7019caf8f3SSatish Balay PETSC_EXTERN void pcasmsettotalsubdomains_(PC *pc,PetscInt *N,IS *is,IS *is_local, PetscErrorCode *ierr)
71e54e4138SSatish Balay {
72e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
732b691e39SMatthew Knepley   CHKFORTRANNULLOBJECT(is_local);
742b691e39SMatthew Knepley   *ierr = PCASMSetTotalSubdomains(*pc,*N,is,is_local);
75e54e4138SSatish Balay }
76e54e4138SSatish Balay 
7719caf8f3SSatish Balay PETSC_EXTERN void pcasmgetlocalsubmatrices_(PC *pc,PetscInt *n,Mat *mat, PetscErrorCode *ierr)
78e54e4138SSatish Balay {
79e54e4138SSatish Balay   PetscInt nloc,i;
80e54e4138SSatish Balay   Mat      *tmat;
81e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(mat);
82e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n);
83e54e4138SSatish Balay   *ierr = PCASMGetLocalSubmatrices(*pc,&nloc,&tmat);
84e54e4138SSatish Balay   if (n) *n = nloc;
85e54e4138SSatish Balay   if (mat) {
862fa5cd67SKarl Rupp     for (i=0; i<nloc; i++) mat[i] = tmat[i];
87e54e4138SSatish Balay   }
88e54e4138SSatish Balay }
8919caf8f3SSatish Balay PETSC_EXTERN void pcasmgetlocalsubdomains_(PC *pc,PetscInt *n,IS *is,IS *is_local, PetscErrorCode *ierr)
90e54e4138SSatish Balay {
91e54e4138SSatish Balay   PetscInt nloc,i;
922b691e39SMatthew Knepley   IS       *tis, *tis_local;
93e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
942b691e39SMatthew Knepley   CHKFORTRANNULLOBJECT(is_local);
95e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n);
962b691e39SMatthew Knepley   *ierr = PCASMGetLocalSubdomains(*pc,&nloc,&tis,&tis_local);
97e54e4138SSatish Balay   if (n) *n = nloc;
98e54e4138SSatish Balay   if (is) {
992fa5cd67SKarl Rupp     for (i=0; i<nloc; i++) is[i] = tis[i];
100e54e4138SSatish Balay   }
1012b691e39SMatthew Knepley   if (is_local && tis_local) {
1022a808120SBarry Smith     for (i=0; i<nloc; i++) is_local[i] = tis_local[i];
1032b691e39SMatthew Knepley   }
104e54e4138SSatish Balay }
105e54e4138SSatish Balay 
106