1 #include <petsc/private/fortranimpl.h>
2 #include <petscmat.h>
3 
4 #if defined(PETSC_HAVE_FORTRAN_CAPS)
5 #define matmpiaijgetseqaij_              MATMPIAIJGETSEQAIJ
6 #define matcreateaij_                    MATCREATEAIJ
7 #define matmpiaijsetpreallocation_       MATMPIAIJSETPREALLOCATION
8 #define matxaijsetpreallocation_         MATXAIJSETPREALLOCATION
9 #define matcreatempiaijwithsplitarrays_ MATCREATEMPIAIJWITHSPLITARRAYS
10 #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE)
11 #define matmpiaijgetseqaij_              matmpiaijgetseqaij
12 #define matcreateaij_                    matcreateaij
13 #define matmpiaijsetpreallocation_       matmpiaijsetpreallocation
14 #define matxaijsetpreallocation_         matxaijsetpreallocation
15 #define matcreatempiaijwithsplitarrays_  matcreatempiaijwithsplitarrays
16 #endif
17 
matcreatempiaijwithsplitarrays_(MPI_Comm * comm,PetscInt * m,PetscInt * n,PetscInt * M,PetscInt * N,PetscInt i[],PetscInt j[],PetscScalar a[],PetscInt oi[],PetscInt oj[],PetscScalar oa[],Mat * mat,int * ierr)18 PETSC_EXTERN void  matcreatempiaijwithsplitarrays_(MPI_Comm *comm,PetscInt *m,PetscInt *n,PetscInt *M,PetscInt *N,PetscInt i[],PetscInt j[],PetscScalar a[],PetscInt oi[],PetscInt oj[],PetscScalar oa[],Mat *mat, int *ierr)
19 {
20   *ierr = MatCreateMPIAIJWithSplitArrays(MPI_Comm_f2c(*(MPI_Fint*)&*comm),*m,*n,*M,*N,i,j,a,oi,oj,oa,mat);
21 }
22 
matmpiaijgetseqaij_(Mat * A,Mat * Ad,Mat * Ao,PetscInt * ic,size_t * iic,PetscErrorCode * ierr)23 PETSC_EXTERN void matmpiaijgetseqaij_(Mat *A,Mat *Ad,Mat *Ao,PetscInt *ic,size_t *iic,PetscErrorCode *ierr)
24 {
25   const PetscInt *i;
26   *ierr = MatMPIAIJGetSeqAIJ(*A,Ad,Ao,&i);if (*ierr) return;
27   *iic  = PetscIntAddressToFortran(ic,(PetscInt*)i);
28 }
29 
matcreateaij_(MPI_Comm * comm,PetscInt * m,PetscInt * n,PetscInt * M,PetscInt * N,PetscInt * d_nz,PetscInt * d_nnz,PetscInt * o_nz,PetscInt * o_nnz,Mat * newmat,PetscErrorCode * ierr)30 PETSC_EXTERN void matcreateaij_(MPI_Comm *comm,PetscInt *m,PetscInt *n,PetscInt *M,PetscInt *N,PetscInt *d_nz,PetscInt *d_nnz,PetscInt *o_nz,PetscInt *o_nnz,Mat *newmat,PetscErrorCode *ierr)
31 {
32   CHKFORTRANNULLINTEGER(d_nnz);
33   CHKFORTRANNULLINTEGER(o_nnz);
34 
35   *ierr = MatCreateAIJ(MPI_Comm_f2c(*(MPI_Fint*)&*comm),*m,*n,*M,*N,*d_nz,d_nnz,*o_nz,o_nnz,newmat);
36 }
37 
matmpiaijsetpreallocation_(Mat * mat,PetscInt * d_nz,PetscInt * d_nnz,PetscInt * o_nz,PetscInt * o_nnz,PetscErrorCode * ierr)38 PETSC_EXTERN void matmpiaijsetpreallocation_(Mat *mat,PetscInt *d_nz,PetscInt *d_nnz,PetscInt *o_nz,PetscInt *o_nnz,PetscErrorCode *ierr)
39 {
40   CHKFORTRANNULLINTEGER(d_nnz);
41   CHKFORTRANNULLINTEGER(o_nnz);
42   *ierr = MatMPIAIJSetPreallocation(*mat,*d_nz,d_nnz,*o_nz,o_nnz);
43 }
44 
matxaijsetpreallocation_(Mat * A,PetscInt * bs,PetscInt dnnz[],PetscInt onnz[],PetscInt dnnzu[],PetscInt onnzu[],PetscErrorCode * ierr)45 PETSC_EXTERN void  matxaijsetpreallocation_(Mat *A,PetscInt *bs,PetscInt dnnz[],PetscInt onnz[],PetscInt dnnzu[],PetscInt onnzu[],PetscErrorCode *ierr)
46 {
47   CHKFORTRANNULLINTEGER(dnnz);
48   CHKFORTRANNULLINTEGER(onnz);
49   CHKFORTRANNULLINTEGER(dnnzu);
50   CHKFORTRANNULLINTEGER(onnzu);
51   *ierr = MatXAIJSetPreallocation(*A,*bs,dnnz,onnz,dnnzu,onnzu);
52 }
53 
54