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 7ffa9b3b1SVincent Le Chenadec #define matnestgetsubmats_ MATNESTGETSUBMATS 845c38901SJed Brown #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 945c38901SJed Brown #define matcreatenest_ matcreatenest 103a4d7b9aSSatish Balay #define matnestgetiss_ matnestgetiss 11ffa9b3b1SVincent 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 } 27ffa9b3b1SVincent Le Chenadec 28ffa9b3b1SVincent Le Chenadec PETSC_EXTERN void PETSC_STDCALL matnestgetsubmats_(Mat *A,PetscInt *M,PetscInt *N,Mat *sub,int *ierr) 29ffa9b3b1SVincent Le Chenadec { 30*351962e3SVincent Le Chenadec PetscInt i,j,m,n; 31ffa9b3b1SVincent Le Chenadec Mat **mat; 32*351962e3SVincent Le Chenadec 33*351962e3SVincent Le Chenadec CHKFORTRANNULLINTEGER(M); 34*351962e3SVincent Le Chenadec CHKFORTRANNULLINTEGER(N); 35*351962e3SVincent Le Chenadec CHKFORTRANNULLOBJECT(sub); 36*351962e3SVincent Le Chenadec 37*351962e3SVincent Le Chenadec *ierr = MatNestGetSubMats(*A,&m,&n,&mat); 38*351962e3SVincent Le Chenadec 39*351962e3SVincent Le Chenadec if (M) { 40*351962e3SVincent Le Chenadec *M = m; 41*351962e3SVincent Le Chenadec } 42*351962e3SVincent Le Chenadec if (N) { 43*351962e3SVincent Le Chenadec *N = n; 44*351962e3SVincent Le Chenadec } 45*351962e3SVincent Le Chenadec if (sub) { 46*351962e3SVincent Le Chenadec for (i=0; i<m; i++) { 47*351962e3SVincent Le Chenadec for (j=0; j<n; j++) { 48*351962e3SVincent Le Chenadec sub[j + n * i] = mat[i][j]; 49*351962e3SVincent Le Chenadec } 50ffa9b3b1SVincent Le Chenadec } 51ffa9b3b1SVincent Le Chenadec } 52ffa9b3b1SVincent Le Chenadec } 53