xref: /petsc/src/mat/impls/nest/ftn-custom/zmatnestf.c (revision ffa9b3b1b4df436c9af82c61ab815cba07b7b4bc)
1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h>
245c38901SJed Brown #include <petscmat.h>
345c38901SJed Brown 
445c38901SJed Brown #if defined(PETSC_HAVE_FORTRAN_CAPS)
545c38901SJed Brown #define matcreatenest_                   MATCREATENEST
63a4d7b9aSSatish Balay #define matnestgetiss_                   MATNESTGETISS
7*ffa9b3b1SVincent Le Chenadec #define matnestgetsubmats_               MATNESTGETSUBMATS
845c38901SJed Brown #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
945c38901SJed Brown #define matcreatenest_                   matcreatenest
103a4d7b9aSSatish Balay #define matnestgetiss_                   matnestgetiss
11*ffa9b3b1SVincent Le Chenadec #define matnestgetsubmats_               matnestgetsubmats
1245c38901SJed Brown #endif
1345c38901SJed Brown 
148cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matcreatenest_(MPI_Fint *comm,PetscInt *nr,IS is_row[],PetscInt *nc,IS is_col[],Mat a[],Mat *B,int *ierr)
1545c38901SJed Brown {
1645c38901SJed Brown   CHKFORTRANNULLOBJECT(is_row);
1745c38901SJed Brown   CHKFORTRANNULLOBJECT(is_col);
1845c38901SJed Brown   *ierr = MatCreateNest(MPI_Comm_f2c(*comm),*nr,is_row,*nc,is_col,a,B);
1945c38901SJed Brown }
203a4d7b9aSSatish Balay 
213a4d7b9aSSatish Balay PETSC_EXTERN void PETSC_STDCALL  matnestgetiss_(Mat *A,IS rows[],IS cols[], int *ierr )
223a4d7b9aSSatish Balay {
233a4d7b9aSSatish Balay   CHKFORTRANNULLOBJECT(rows);
243a4d7b9aSSatish Balay   CHKFORTRANNULLOBJECT(cols);
253a4d7b9aSSatish Balay   *ierr = MatNestGetISs(*A,rows,cols);
263a4d7b9aSSatish Balay }
27*ffa9b3b1SVincent Le Chenadec 
28*ffa9b3b1SVincent Le Chenadec PETSC_EXTERN void PETSC_STDCALL matnestgetsubmats_(Mat *A,PetscInt *M,PetscInt *N,Mat *sub,int *ierr)
29*ffa9b3b1SVincent Le Chenadec {
30*ffa9b3b1SVincent Le Chenadec   Mat **mat;
31*ffa9b3b1SVincent Le Chenadec   PetscInt i,j;
32*ffa9b3b1SVincent Le Chenadec   *ierr = MatNestGetSubMats(*A,M,N,&mat);
33*ffa9b3b1SVincent Le Chenadec   for (i=0; i<(*M);i++){
34*ffa9b3b1SVincent Le Chenadec     for (j=0;j<(*N);j++){
35*ffa9b3b1SVincent Le Chenadec       sub[j + (*N) * i] = mat[i][j];
36*ffa9b3b1SVincent Le Chenadec     }
37*ffa9b3b1SVincent Le Chenadec   }
38*ffa9b3b1SVincent Le Chenadec }
39