1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2cee688dbSBarry Smith #include <petsc/private/f90impl.h> 3c6db04a5SJed Brown #include <petscmat.h> 4665c2dedSJed Brown #include <petscviewer.h> 5f4e70085SSatish Balay 6f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 74d03fd2bSBarry Smith #define matsetvalues_ MATSETVALUES 81006886cSSatish Balay #define matsetvaluesnnnn_ MATSETVALUESNNNN 93b494cfeSSatish Balay #define matsetvalues0_ MATSETVALUES0 101b266c99SBarry Smith #define matsetvaluesnn1_ MATSETVALUESNN1 114d03fd2bSBarry Smith #define matsetvalues11_ MATSETVALUES11 124d03fd2bSBarry Smith #define matsetvalues1n_ MATSETVALUES1N 134d03fd2bSBarry Smith #define matsetvaluesn1_ MATSETVALUESN1 143b494cfeSSatish Balay #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 150aee3464SBarry Smith #define matsetvaluesblocked2_ MATSETVALUESBLOCKED2 164d03fd2bSBarry Smith #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 174d03fd2bSBarry Smith #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 184d03fd2bSBarry Smith #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 194d03fd2bSBarry Smith #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 204d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 213b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 224d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 234d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 244d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 254d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 264d03fd2bSBarry Smith #define matsetvalueslocal_ MATSETVALUESLOCAL 273b494cfeSSatish Balay #define matsetvalueslocal0_ MATSETVALUESLOCAL0 284d03fd2bSBarry Smith #define matsetvalueslocal11_ MATSETVALUESLOCAL11 294d03fd2bSBarry Smith #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 304d03fd2bSBarry Smith #define matsetvalueslocal111_ MATSETVALUESLOCAL111 314d03fd2bSBarry Smith #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 324d03fd2bSBarry Smith #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 3387bcf4e0SBarry Smith #define matgetrowmin_ MATGETROWMIN 3487bcf4e0SBarry Smith #define matgetrowminabs_ MATGETROWMINABS 355928be6bSBarry Smith #define matgetrowmax_ MATGETROWMAX 365928be6bSBarry Smith #define matgetrowmaxabs_ MATGETROWMAXABS 377d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 38df750dc8SHong Zhang #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 395dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 4035bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 41f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 42f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 43f4e70085SSatish Balay #define matgetrow_ MATGETROW 44f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 45f7e310deSShri Abhyankar #define matload_ MATLOAD 46f4e70085SSatish Balay #define matview_ MATVIEW 478c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 486778691eSSatish Balay #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 498c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 508572280aSBarry Smith #define matdensegetarrayread_ MATDENSEGETARRAYREAD 518c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 528572280aSBarry Smith #define matdenserestorearrayread_ MATDENSERESTOREARRAYREAD 53f4e70085SSatish Balay #define matconvert_ MATCONVERT 547dae84e0SHong Zhang #define matcreatesubmatrices_ MATCREATESUBMATRICES 5517ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5617ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5717ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 58d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 59f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 60f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 61f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 62f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 6317ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6417ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 651eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 66fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 67c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 685ba43861SSatish Balay #define matgetinfo_ MATGETINFO 6922688b47SSatish Balay #define matlufactor_ MATLUFACTOR 7022688b47SSatish Balay #define matilufactor_ MATILUFACTOR 7122688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 7222688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 7322688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7422688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7522688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7622688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7722688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 7822688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 7922688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 80b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 810905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 82*38135fcbSMartin Diehl #define matgetsize_ MATGETSIZE 833be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 843be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 853be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 86*38135fcbSMartin Diehl #define matgetlocalsize_ MATGETLOCALSIZE 873be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 883be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 893be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 90260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 91260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 92c08c7cb9SBarry Smith #define matgetownershipis_ MATGETOWNERSHIPIS 93afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 94f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 954d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 961006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 973b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 981b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 994d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 1004d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1014d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1024d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1033b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1044d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1054d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1064d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1074d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1084d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1094d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1103b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1110aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1124d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1134d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1144d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 11524aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1164d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1173b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1184d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1194d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1204d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 12124aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 12287bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 12387bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1245928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1255928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1265928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 127df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1285dffd610SBarry Smith #define matgetfactor_ matgetfactor 12935bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 130fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 131f4e70085SSatish Balay #define matgetrowij_ matgetrowij 132f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 133f4e70085SSatish Balay #define matgetrow_ matgetrow 134f4e70085SSatish Balay #define matrestorerow_ matrestorerow 135f4e70085SSatish Balay #define matview_ matview 136f7e310deSShri Abhyankar #define matload_ matload 1378c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1388c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1398c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1408572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1418c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1428572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 143f4e70085SSatish Balay #define matconvert_ matconvert 1447dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 14517ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 14617ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 14717ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 148d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 149f4e70085SSatish Balay #define matzerorows_ matzerorows 150f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 151f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 152f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 15317ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 15417ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1551eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 156812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1575ba43861SSatish Balay #define matgetinfo_ matgetinfo 15822688b47SSatish Balay #define matlufactor_ matlufactor 15922688b47SSatish Balay #define matilufactor_ matilufactor 16022688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 16122688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 16222688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 16322688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 16422688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 16522688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 16622688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 16722688b47SSatish Balay #define maticcfactor_ maticcfactor 16822688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 169b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1700905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 171*38135fcbSMartin Diehl #define matgetsize_ matgetsize 1723be0408cSBarry Smith #define matgetsize00_ matgetsize00 1733be0408cSBarry Smith #define matgetsize10_ matgetsize10 1743be0408cSBarry Smith #define matgetsize01_ matgetsize01 175*38135fcbSMartin Diehl #define matgetlocalsize_ matgetlocalsize 1763be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1773be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1783be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 179260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 180260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 181c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 182afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 183f4e70085SSatish Balay #endif 184f4e70085SSatish Balay 185260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 186260663b8SBarry Smith { 187260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 188260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 189260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 190260663b8SBarry Smith } 191260663b8SBarry Smith 192c08c7cb9SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr ) 193c08c7cb9SBarry Smith { 194c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 195c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 196c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat,m,n); 197c08c7cb9SBarry Smith } 198c08c7cb9SBarry Smith 199afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 200afc39838SBarry Smith { 201afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 202afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 203afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 204afc39838SBarry Smith } 205afc39838SBarry Smith 2063be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2073be0408cSBarry Smith { 2083be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2093be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2103be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2113be0408cSBarry Smith } 2123be0408cSBarry Smith 2133be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2143be0408cSBarry Smith { 2153be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2163be0408cSBarry Smith } 2173be0408cSBarry Smith 2183be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2193be0408cSBarry Smith { 2203be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2213be0408cSBarry Smith } 2223be0408cSBarry Smith 2233be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2243be0408cSBarry Smith { 2253be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2263be0408cSBarry Smith } 2273be0408cSBarry Smith 2283be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2293be0408cSBarry Smith { 2303be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2313be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2323be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2333be0408cSBarry Smith } 2343be0408cSBarry Smith 2353be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2363be0408cSBarry Smith { 2373be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2383be0408cSBarry Smith } 2393be0408cSBarry Smith 2403be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2413be0408cSBarry Smith { 2423be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2433be0408cSBarry Smith } 2443be0408cSBarry Smith 2453be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2463be0408cSBarry Smith { 2473be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2483be0408cSBarry Smith } 2493be0408cSBarry Smith 2504d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2514d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2524d03fd2bSBarry Smith } 2534d03fd2bSBarry Smith 254cee688dbSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){ 255cee688dbSBarry Smith PetscScalar *fa; 2560aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 257cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 258cee688dbSBarry Smith } 259cee688dbSBarry Smith 2603b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2613b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2623b494cfeSSatish Balay } 2633b494cfeSSatish Balay 2644d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2654d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2664d03fd2bSBarry Smith } 2674d03fd2bSBarry Smith 2684d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2694d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2704d03fd2bSBarry Smith } 2714d03fd2bSBarry Smith 2724d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2734d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2744d03fd2bSBarry Smith } 2754d03fd2bSBarry Smith 2764d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2774d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2784d03fd2bSBarry Smith } 2794d03fd2bSBarry Smith 2804d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2814d03fd2bSBarry Smith { 2824d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2834d03fd2bSBarry Smith } 2844d03fd2bSBarry Smith 2853b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2863b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2873b494cfeSSatish Balay } 2883b494cfeSSatish Balay 2894d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2904d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2914d03fd2bSBarry Smith } 2924d03fd2bSBarry Smith 2934d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2944d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2954d03fd2bSBarry Smith } 2964d03fd2bSBarry Smith 2974d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2984d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2994d03fd2bSBarry Smith } 3004d03fd2bSBarry Smith 3014d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3024d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3034d03fd2bSBarry Smith } 3044d03fd2bSBarry Smith 3054d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3064d03fd2bSBarry Smith { 3074d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3084d03fd2bSBarry Smith } 3094d03fd2bSBarry Smith 3101b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3111b266c99SBarry Smith { 3121b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3131b266c99SBarry Smith } 3141b266c99SBarry Smith 3153b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3163b494cfeSSatish Balay { 3173b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3183b494cfeSSatish Balay } 3193b494cfeSSatish Balay 3201b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3211b266c99SBarry Smith { 3221b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3231b266c99SBarry Smith } 3241b266c99SBarry Smith 3254d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3264d03fd2bSBarry Smith { 3274d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3284d03fd2bSBarry Smith } 3294d03fd2bSBarry Smith 3304d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3314d03fd2bSBarry Smith { 3324d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3334d03fd2bSBarry Smith } 3344d03fd2bSBarry Smith 3354d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3364d03fd2bSBarry Smith { 3374d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3384d03fd2bSBarry Smith } 3394d03fd2bSBarry Smith 3404d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3414d03fd2bSBarry Smith { 3424d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3434d03fd2bSBarry Smith } 3444d03fd2bSBarry Smith 3453b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3463b494cfeSSatish Balay { 3473b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3483b494cfeSSatish Balay } 3493b494cfeSSatish Balay 3504d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3514d03fd2bSBarry Smith { 3524d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3534d03fd2bSBarry Smith } 3544d03fd2bSBarry Smith 3554d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3564d03fd2bSBarry Smith { 3574d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3584d03fd2bSBarry Smith } 3594d03fd2bSBarry Smith 3604d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3614d03fd2bSBarry Smith { 3624d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3634d03fd2bSBarry Smith } 3644d03fd2bSBarry Smith 3654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3664d03fd2bSBarry Smith { 3674d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3684d03fd2bSBarry Smith } 3694d03fd2bSBarry Smith 3704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3714d03fd2bSBarry Smith { 3724d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3734d03fd2bSBarry Smith } 3744d03fd2bSBarry Smith 37587bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 37687bcf4e0SBarry Smith { 37787bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 37887bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 37987bcf4e0SBarry Smith } 3804d03fd2bSBarry Smith 38187bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 38287bcf4e0SBarry Smith { 38387bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 38487bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 38587bcf4e0SBarry Smith } 38687bcf4e0SBarry Smith 3875928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3885928be6bSBarry Smith { 3895928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3905928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 3915928be6bSBarry Smith } 3925928be6bSBarry Smith 3935928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3945928be6bSBarry Smith { 3955928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3965928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 3975928be6bSBarry Smith } 3985928be6bSBarry Smith 399b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 400b22b330cSBarry Smith { 401b22b330cSBarry Smith PetscErrorCode ierr = 0; 402b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 403b22b330cSBarry Smith return 0; 404b22b330cSBarry Smith } 405b22b330cSBarry Smith 4068cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 407b22b330cSBarry Smith { 408b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 409b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 41026fbe8dcSKarl Rupp 411b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 412b22b330cSBarry Smith } 413b22b330cSBarry Smith 414d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4157c54600cSBarry Smith { 4167c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4177c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4182a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4197c54600cSBarry Smith } 4207c54600cSBarry Smith 4218cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 422ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 423f4e70085SSatish Balay { 4241a83f524SJed Brown const PetscInt *IA,*JA; 4258f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4261a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4271a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 428f4e70085SSatish Balay } 429f4e70085SSatish Balay 4308cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 431ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 432f4e70085SSatish Balay { 4331a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4348f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 435f4e70085SSatish Balay } 436f4e70085SSatish Balay 437f4e70085SSatish Balay /* 438f4e70085SSatish Balay This is a poor way of storing the column and value pointers 439f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 440f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 441f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 442f4e70085SSatish Balay at a time. 443f4e70085SSatish Balay */ 444f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 445f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 446f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 447f4e70085SSatish Balay 4488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 449f4e70085SSatish Balay { 450f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 451f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 452f4e70085SSatish Balay 453f4e70085SSatish Balay if (matgetrowactive) { 454efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 455f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 456f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 457f4e70085SSatish Balay *ierr = 1; 458f4e70085SSatish Balay return; 459f4e70085SSatish Balay } 460f4e70085SSatish Balay 4610298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4620298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 463f4e70085SSatish Balay 464f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 465f4e70085SSatish Balay if (*ierr) return; 466f4e70085SSatish Balay 467f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 468f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 469f4e70085SSatish Balay matgetrowactive = 1; 470f4e70085SSatish Balay } 471f4e70085SSatish Balay 4728cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 473f4e70085SSatish Balay { 474f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 475f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 476f4e70085SSatish Balay if (!matgetrowactive) { 477efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 478f4e70085SSatish Balay "Must call MatGetRow() first"); 479f4e70085SSatish Balay *ierr = 1; 480f4e70085SSatish Balay return; 481f4e70085SSatish Balay } 4820298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4830298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 484f4e70085SSatish Balay 485f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 486f4e70085SSatish Balay matgetrowactive = 0; 487f4e70085SSatish Balay } 488f4e70085SSatish Balay 4898cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 490f4e70085SSatish Balay { 491f4e70085SSatish Balay PetscViewer v; 492f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 493f4e70085SSatish Balay *ierr = MatView(*mat,v); 494f4e70085SSatish Balay } 495f4e70085SSatish Balay 4968cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 497f7e310deSShri Abhyankar { 498f7e310deSShri Abhyankar PetscViewer v; 499f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 500112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 501f7e310deSShri Abhyankar } 502f7e310deSShri Abhyankar 5038cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 504f4e70085SSatish Balay { 505f4e70085SSatish Balay PetscScalar *mm; 506f4e70085SSatish Balay PetscInt m,n; 507f4e70085SSatish Balay 5088c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 509f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 510f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 511f4e70085SSatish Balay } 512f4e70085SSatish Balay 5138cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 514f4e70085SSatish Balay { 515f4e70085SSatish Balay PetscScalar *lx; 516f4e70085SSatish Balay PetscInt m,n; 517f4e70085SSatish Balay 518f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 519f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5208c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 521f4e70085SSatish Balay } 522f4e70085SSatish Balay 5238cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 52473a71a0fSBarry Smith { 52573a71a0fSBarry Smith PetscScalar *mm; 52673a71a0fSBarry Smith PetscInt m,n; 52773a71a0fSBarry Smith 5288c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 52973a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 53073a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 53173a71a0fSBarry Smith } 53273a71a0fSBarry Smith 5338cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 53473a71a0fSBarry Smith { 53573a71a0fSBarry Smith PetscScalar *lx; 53673a71a0fSBarry Smith PetscInt m,n; 53773a71a0fSBarry Smith 53873a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 53973a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5408c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 54173a71a0fSBarry Smith } 54273a71a0fSBarry Smith 5437067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5448572280aSBarry Smith { 5457067c7f7SBarry Smith const PetscScalar *mm; 5468572280aSBarry Smith PetscInt m,n; 5478572280aSBarry Smith 5488572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 5498572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5507067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 5518572280aSBarry Smith } 5528572280aSBarry Smith 5537067c7f7SBarry Smith 5547067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5558572280aSBarry Smith { 5567067c7f7SBarry Smith const PetscScalar *lx; 5578572280aSBarry Smith PetscInt m,n; 5588572280aSBarry Smith 5598572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5607067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 5618572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 5628572280aSBarry Smith } 5638572280aSBarry Smith 564390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 56535bd34faSBarry Smith { 56635bd34faSBarry Smith const char *tname; 56735bd34faSBarry Smith 5683ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 56935bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 57035bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 57135bd34faSBarry Smith } 57235bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 57335bd34faSBarry Smith } 57435bd34faSBarry Smith 575390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 5765dffd610SBarry Smith { 5775dffd610SBarry Smith char *t; 5785dffd610SBarry Smith FIXCHAR(outtype,len,t); 5799be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5805dffd610SBarry Smith FREECHAR(outtype,t); 5815dffd610SBarry Smith } 5825dffd610SBarry Smith 583390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 584f4e70085SSatish Balay { 585f4e70085SSatish Balay char *t; 586f4e70085SSatish Balay FIXCHAR(outtype,len,t); 587f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 588f4e70085SSatish Balay FREECHAR(outtype,t); 589f4e70085SSatish Balay } 590f4e70085SSatish Balay 591f4e70085SSatish Balay /* 5927dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 593f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 5947dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 595f4e70085SSatish Balay */ 5967dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 597f4e70085SSatish Balay { 598f4e70085SSatish Balay Mat *lsmat; 599f4e70085SSatish Balay PetscInt i; 600f4e70085SSatish Balay 601f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 6027dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 603de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 604f4e70085SSatish Balay smat[i] = lsmat[i]; 605f4e70085SSatish Balay } 606f4e70085SSatish Balay *ierr = PetscFree(lsmat); 607f4e70085SSatish Balay } else { 6087dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 609f4e70085SSatish Balay } 610f4e70085SSatish Balay } 611f4e70085SSatish Balay 6127d6bfa3bSBarry Smith /* 6137d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 614de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 615de7ef04eSHong Zhang the array is freed 616de7ef04eSHong Zhang */ 617de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 618de7ef04eSHong Zhang { 619de7ef04eSHong Zhang PetscInt i; 620de7ef04eSHong Zhang 621de7ef04eSHong Zhang for (i=0; i<*n; i++) { 622de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 623de7ef04eSHong Zhang } 624de7ef04eSHong Zhang } 625de7ef04eSHong Zhang 626de7ef04eSHong Zhang /* 627de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6287d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6297dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6307d6bfa3bSBarry Smith */ 631de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6327d6bfa3bSBarry Smith { 633de7ef04eSHong Zhang Mat *lsmat; 6347d6bfa3bSBarry Smith PetscInt i; 6357d6bfa3bSBarry Smith 636de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 637de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 638de7ef04eSHong Zhang lsmat[i] = smat[i]; 6397d6bfa3bSBarry Smith } 640de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 641df750dc8SHong Zhang } 642df750dc8SHong Zhang 643390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 6441eea217eSSatish Balay { 6451eea217eSSatish Balay char *t; 6461eea217eSSatish Balay 6471eea217eSSatish Balay FIXCHAR(prefix,len,t); 6481eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 6491eea217eSSatish Balay FREECHAR(prefix,t); 6501eea217eSSatish Balay } 6511eea217eSSatish Balay 652d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 653812c3f48SMatthew Knepley { 654260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 655d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 656812c3f48SMatthew Knepley } 6571eea217eSSatish Balay 6584d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 6595ba43861SSatish Balay { 6604d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 6615ba43861SSatish Balay } 6625ba43861SSatish Balay 6634d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 66422688b47SSatish Balay { 6654d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 66622688b47SSatish Balay } 66722688b47SSatish Balay 6684d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 66922688b47SSatish Balay { 6704d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 67122688b47SSatish Balay } 67222688b47SSatish Balay 6734d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 67422688b47SSatish Balay { 6754d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 67622688b47SSatish Balay } 67722688b47SSatish Balay 6784d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 67922688b47SSatish Balay { 6804d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 68122688b47SSatish Balay } 68222688b47SSatish Balay 6834d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 68422688b47SSatish Balay { 6854d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 68622688b47SSatish Balay } 68722688b47SSatish Balay 6884d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 68922688b47SSatish Balay { 6904d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 69122688b47SSatish Balay } 69222688b47SSatish Balay 6934d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 69422688b47SSatish Balay { 6954d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 69622688b47SSatish Balay } 69722688b47SSatish Balay 6984d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 69922688b47SSatish Balay { 7004d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 70122688b47SSatish Balay } 70222688b47SSatish Balay 7034d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 70422688b47SSatish Balay { 7054d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 70622688b47SSatish Balay } 70722688b47SSatish Balay 7084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 70922688b47SSatish Balay { 7104d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 71122688b47SSatish Balay } 71222688b47SSatish Balay 7134d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 71422688b47SSatish Balay { 7154d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 71622688b47SSatish Balay } 717