xref: /petsc/src/ksp/pc/impls/asm/ftn-custom/zasmf.c (revision d29017dd8b673ed237dcffee28a3a0b012e14849)
1b45d2f2cSJed Brown #include <petsc-private/fortranimpl.h>
2c6db04a5SJed Brown #include <petscksp.h>
3e54e4138SSatish Balay 
4e54e4138SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS)
5e54e4138SSatish Balay #define pcasmgetsubksp_            PCASMGETSUBKSP
6e54e4138SSatish Balay #define pcasmsetlocalsubdomains_   PCASMSETLOCALSUBDOMAINS
7e54e4138SSatish Balay #define pcasmsetglobalsubdomains_  PCASMSETGLOBALSUBDOMAINS
8e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_  PCASMGETLOCALSUBMATRICES
9e54e4138SSatish Balay #define pcasmgetlocalsubdomains_   PCASMGETLOCALSUBDOMAINS
10ef356e52SBarry Smith #define pcasmcreatesubdomains_     PCASMCREATESUBDOMAINS
11ef356e52SBarry Smith #define pcasmdestroysubdomains_    PCASMDESTROYSUBDOMAINS
12e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
13e54e4138SSatish Balay #define pcasmgetsubksp_            pcasmgetsubksp
14e54e4138SSatish Balay #define pcasmsetlocalsubdomains_   pcasmsetlocalsubdomains
15e54e4138SSatish Balay #define pcasmsetglobalsubdomains_  pcasmsetglobalsubdomains
16e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_  pcasmgetlocalsubmatrices
17e54e4138SSatish Balay #define pcasmgetlocalsubdomains_   pcasmgetlocalsubdomains
18ef356e52SBarry Smith #define pcasmcreatesubdomains_     pcasmcreatesubdomains
19ef356e52SBarry Smith #define pcasmdestroysubdomains_    pcasmdestroysubdomains
20e54e4138SSatish Balay #endif
21e54e4138SSatish Balay 
22e54e4138SSatish Balay EXTERN_C_BEGIN
23ef356e52SBarry Smith void PETSC_STDCALL pcasmcreatesubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr)
24ef356e52SBarry Smith {
25ef356e52SBarry Smith   PetscInt i;
26ef356e52SBarry Smith   IS       *insubs;
27ef356e52SBarry Smith 
28ef356e52SBarry Smith   *ierr = PCASMCreateSubdomains(*mat,*n,&insubs);if (*ierr) return;
29ef356e52SBarry Smith   for (i=0; i<*n; i++) {
30ef356e52SBarry Smith     subs[i] = insubs[i];
31ef356e52SBarry Smith   }
32ef356e52SBarry Smith   *ierr = PetscFree(insubs);
33ef356e52SBarry Smith }
34ef356e52SBarry Smith 
35ef356e52SBarry Smith 
36ef356e52SBarry Smith void PETSC_STDCALL pcasmdestroysubdomains_(Mat *mat,PetscInt *n,IS *subs,PetscErrorCode *ierr)
37ef356e52SBarry Smith {
38ef356e52SBarry Smith   PetscInt i;
39ef356e52SBarry Smith 
40ef356e52SBarry Smith   for (i=0; i<*n; i++) {
41fcfd50ebSBarry Smith     *ierr = ISDestroy(&subs[i]);if (*ierr) return;
42ef356e52SBarry Smith   }
43ef356e52SBarry Smith }
44ef356e52SBarry Smith 
45e54e4138SSatish Balay void PETSC_STDCALL pcasmgetsubksp_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr)
46e54e4138SSatish Balay {
47e54e4138SSatish Balay   KSP *tksp;
48e54e4138SSatish Balay   PetscInt  i,nloc;
49e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n_local);
50e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(first_local);
51*d29017ddSJed Brown   CHKFORTRANNULLOBJECT(ksp);
52e54e4138SSatish Balay   *ierr = PCASMGetSubKSP(*pc,&nloc,first_local,&tksp);
53e54e4138SSatish Balay   if (n_local) *n_local = nloc;
54*d29017ddSJed Brown   if (ksp) {
55e54e4138SSatish Balay     for (i=0; i<nloc; i++){
56e54e4138SSatish Balay       ksp[i] = tksp[i];
57e54e4138SSatish Balay     }
58e54e4138SSatish Balay   }
59*d29017ddSJed Brown }
60e54e4138SSatish Balay 
612b691e39SMatthew Knepley void PETSC_STDCALL pcasmsetlocalsubdomains_(PC *pc,PetscInt *n,IS *is,IS *is_local, PetscErrorCode *ierr)
62e54e4138SSatish Balay {
63e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
642b691e39SMatthew Knepley   CHKFORTRANNULLOBJECT(is_local);
652b691e39SMatthew Knepley   *ierr = PCASMSetLocalSubdomains(*pc,*n,is,is_local);
66e54e4138SSatish Balay }
67e54e4138SSatish Balay 
682b691e39SMatthew Knepley void PETSC_STDCALL pcasmsettotalsubdomains_(PC *pc,PetscInt *N,IS *is,IS *is_local, PetscErrorCode *ierr)
69e54e4138SSatish Balay {
70e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
712b691e39SMatthew Knepley   CHKFORTRANNULLOBJECT(is_local);
722b691e39SMatthew Knepley   *ierr = PCASMSetTotalSubdomains(*pc,*N,is,is_local);
73e54e4138SSatish Balay }
74e54e4138SSatish Balay 
75e54e4138SSatish Balay void PETSC_STDCALL pcasmgetlocalsubmatrices_(PC *pc,PetscInt *n,Mat *mat, PetscErrorCode *ierr)
76e54e4138SSatish Balay {
77e54e4138SSatish Balay   PetscInt nloc,i;
78e54e4138SSatish Balay   Mat  *tmat;
79e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(mat);
80e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n);
81e54e4138SSatish Balay   *ierr = PCASMGetLocalSubmatrices(*pc,&nloc,&tmat);
82e54e4138SSatish Balay   if (n) *n = nloc;
83e54e4138SSatish Balay   if (mat) {
84e54e4138SSatish Balay     for (i=0; i<nloc; i++){
85e54e4138SSatish Balay       mat[i] = tmat[i];
86e54e4138SSatish Balay     }
87e54e4138SSatish Balay   }
88e54e4138SSatish Balay }
892b691e39SMatthew Knepley void PETSC_STDCALL 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) {
99e54e4138SSatish Balay     for (i=0; i<nloc; i++){
100e54e4138SSatish Balay       is[i] = tis[i];
101e54e4138SSatish Balay     }
102e54e4138SSatish Balay   }
1032b691e39SMatthew Knepley   if (is_local && tis_local) {
1042b691e39SMatthew Knepley     for (i=0; i<nloc; i++){
1052b691e39SMatthew Knepley       is[i] = tis_local[i];
1062b691e39SMatthew Knepley     }
1072b691e39SMatthew Knepley   }
108e54e4138SSatish Balay }
109e54e4138SSatish Balay 
110e54e4138SSatish Balay EXTERN_C_END
111