xref: /petsc/src/ksp/pc/impls/asm/ftn-custom/zasmf.c (revision ce0a2cd1da0658c2b28aad1be2e2c8e41567bece)
1*ce0a2cd1SBarry Smith #include "private/fortranimpl.h"
2e54e4138SSatish Balay #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
10e54e4138SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
11e54e4138SSatish Balay #define pcasmgetsubksp_            pcasmgetsubksp
12e54e4138SSatish Balay #define pcasmsetlocalsubdomains_   pcasmsetlocalsubdomains
13e54e4138SSatish Balay #define pcasmsetglobalsubdomains_  pcasmsetglobalsubdomains
14e54e4138SSatish Balay #define pcasmgetlocalsubmatrices_  pcasmgetlocalsubmatrices
15e54e4138SSatish Balay #define pcasmgetlocalsubdomains_   pcasmgetlocalsubdomains
16e54e4138SSatish Balay #endif
17e54e4138SSatish Balay 
18e54e4138SSatish Balay EXTERN_C_BEGIN
19e54e4138SSatish Balay void PETSC_STDCALL pcasmgetsubksp_(PC *pc,PetscInt *n_local,PetscInt *first_local,KSP *ksp,PetscErrorCode *ierr)
20e54e4138SSatish Balay {
21e54e4138SSatish Balay   KSP *tksp;
22e54e4138SSatish Balay   PetscInt  i,nloc;
23e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n_local);
24e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(first_local);
25e54e4138SSatish Balay   *ierr = PCASMGetSubKSP(*pc,&nloc,first_local,&tksp);
26e54e4138SSatish Balay   if (n_local) *n_local = nloc;
27e54e4138SSatish Balay   for (i=0; i<nloc; i++){
28e54e4138SSatish Balay     ksp[i] = tksp[i];
29e54e4138SSatish Balay   }
30e54e4138SSatish Balay }
31e54e4138SSatish Balay 
32e54e4138SSatish Balay void PETSC_STDCALL pcasmsetlocalsubdomains_(PC *pc,PetscInt *n,IS *is, PetscErrorCode *ierr)
33e54e4138SSatish Balay {
34e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
35e54e4138SSatish Balay   *ierr = PCASMSetLocalSubdomains(*pc,*n,is);
36e54e4138SSatish Balay }
37e54e4138SSatish Balay 
38e54e4138SSatish Balay void PETSC_STDCALL pcasmsettotalsubdomains_(PC *pc,PetscInt *N,IS *is, PetscErrorCode *ierr)
39e54e4138SSatish Balay {
40e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
41e54e4138SSatish Balay   *ierr = PCASMSetTotalSubdomains(*pc,*N,is);
42e54e4138SSatish Balay }
43e54e4138SSatish Balay 
44e54e4138SSatish Balay void PETSC_STDCALL pcasmgetlocalsubmatrices_(PC *pc,PetscInt *n,Mat *mat, PetscErrorCode *ierr)
45e54e4138SSatish Balay {
46e54e4138SSatish Balay   PetscInt nloc,i;
47e54e4138SSatish Balay   Mat  *tmat;
48e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(mat);
49e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n);
50e54e4138SSatish Balay   *ierr = PCASMGetLocalSubmatrices(*pc,&nloc,&tmat);
51e54e4138SSatish Balay   if (n) *n = nloc;
52e54e4138SSatish Balay   if (mat) {
53e54e4138SSatish Balay     for (i=0; i<nloc; i++){
54e54e4138SSatish Balay       mat[i] = tmat[i];
55e54e4138SSatish Balay     }
56e54e4138SSatish Balay   }
57e54e4138SSatish Balay }
58e54e4138SSatish Balay void PETSC_STDCALL pcasmgetlocalsubdomains_(PC *pc,PetscInt *n,IS *is, PetscErrorCode *ierr)
59e54e4138SSatish Balay {
60e54e4138SSatish Balay   PetscInt nloc,i;
61e54e4138SSatish Balay   IS  *tis;
62e54e4138SSatish Balay   CHKFORTRANNULLOBJECT(is);
63e54e4138SSatish Balay   CHKFORTRANNULLINTEGER(n);
64e54e4138SSatish Balay   *ierr = PCASMGetLocalSubdomains(*pc,&nloc,&tis);
65e54e4138SSatish Balay   if (n) *n = nloc;
66e54e4138SSatish Balay   if (is) {
67e54e4138SSatish Balay     for (i=0; i<nloc; i++){
68e54e4138SSatish Balay       is[i] = tis[i];
69e54e4138SSatish Balay     }
70e54e4138SSatish Balay   }
71e54e4138SSatish Balay }
72e54e4138SSatish Balay 
73e54e4138SSatish Balay EXTERN_C_END
74