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 5581ec7b92Smarius #define matcreatesubmatricesmpi_ MATCREATESUBMATRICESMPI 5617ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5717ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5817ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 59d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 60f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 61f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 62f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 63d27e6124SSatish Balay #define matzerorowslocal0_ MATZEROROWSLOCAL0 64d27e6124SSatish Balay #define matzerorowslocal1_ MATZEROROWSLOCAL1 65f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 6617ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6717ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 681eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 69fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 70c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 715ba43861SSatish Balay #define matgetinfo_ MATGETINFO 7222688b47SSatish Balay #define matlufactor_ MATLUFACTOR 7322688b47SSatish Balay #define matilufactor_ MATILUFACTOR 7422688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 7522688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 7622688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7722688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7822688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7922688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 8022688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 8122688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 8222688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 83b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 840905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 8538135fcbSMartin Diehl #define matgetsize_ MATGETSIZE 863be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 873be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 883be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 8938135fcbSMartin Diehl #define matgetlocalsize_ MATGETLOCALSIZE 903be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 913be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 923be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 93260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 94260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 9591f56e93SMartin Diehl #define matgetownershiprange00_ MATGETOWNERSHIPRANGE00 9691f56e93SMartin Diehl #define matgetownershiprange10_ MATGETOWNERSHIPRANGE10 9791f56e93SMartin Diehl #define matgetownershiprange01_ MATGETOWNERSHIPRANGE01 985c16e969SSatish Balay #define matgetownershiprange11_ MATGETOWNERSHIPRANGE11 99c08c7cb9SBarry Smith #define matgetownershipis_ MATGETOWNERSHIPIS 100afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 101*fe2efc57SMark #define matviewfromoptions_ MATVIEWFROMOPTIONS 102f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1034d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 1041006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 1053b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 1061b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 1074d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 1084d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1094d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1104d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1113b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1124d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1134d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1144d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1154d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1164d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1174d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1183b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1190aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1204d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1214d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1224d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 12324aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1244d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1253b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1264d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1274d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1284d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 12924aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 13087bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 13187bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1325928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1335928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1345928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 135df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1365dffd610SBarry Smith #define matgetfactor_ matgetfactor 13735bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 138fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 139f4e70085SSatish Balay #define matgetrowij_ matgetrowij 140f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 141f4e70085SSatish Balay #define matgetrow_ matgetrow 142f4e70085SSatish Balay #define matrestorerow_ matrestorerow 143f4e70085SSatish Balay #define matview_ matview 144f7e310deSShri Abhyankar #define matload_ matload 1458c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1468c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1478c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1488572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1498c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1508572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 151f4e70085SSatish Balay #define matconvert_ matconvert 1527dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 15381ec7b92Smarius #define matcreatesubmatricesmpi_ matcreatesubmatricesmpi 15417ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 15517ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 15617ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 157d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 158f4e70085SSatish Balay #define matzerorows_ matzerorows 159f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 160f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 161f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 16217ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 16317ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1641eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 165812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1665ba43861SSatish Balay #define matgetinfo_ matgetinfo 16722688b47SSatish Balay #define matlufactor_ matlufactor 16822688b47SSatish Balay #define matilufactor_ matilufactor 16922688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 17022688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 17122688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 17222688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 17322688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 17422688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 17522688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 17622688b47SSatish Balay #define maticcfactor_ maticcfactor 17722688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 178b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1790905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 18038135fcbSMartin Diehl #define matgetsize_ matgetsize 1813be0408cSBarry Smith #define matgetsize00_ matgetsize00 1823be0408cSBarry Smith #define matgetsize10_ matgetsize10 1833be0408cSBarry Smith #define matgetsize01_ matgetsize01 18438135fcbSMartin Diehl #define matgetlocalsize_ matgetlocalsize 1853be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1863be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1873be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 188260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 189260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 19091f56e93SMartin Diehl #define matgetownershiprange00_ matgetownershiprange00 19191f56e93SMartin Diehl #define matgetownershiprange10_ matgetownershiprange10 19291f56e93SMartin Diehl #define matgetownershiprange01_ matgetownershiprange01 19391f56e93SMartin Diehl #define matgetownershiprange11_ matgetownershiprange11 194c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 195afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 196*fe2efc57SMark #define matviewfromoptions_ matviewfromoptions 197f4e70085SSatish Balay #endif 198f4e70085SSatish Balay 199260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 200260663b8SBarry Smith { 201260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 202260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 203260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 204260663b8SBarry Smith } 205260663b8SBarry Smith 2065dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2075dd307cdSMartin Diehl { 2085dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2095dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2105dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2115dd307cdSMartin Diehl } 2125dd307cdSMartin Diehl 2135dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2145dd307cdSMartin Diehl { 2155dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2165dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2175dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2185dd307cdSMartin Diehl } 2195dd307cdSMartin Diehl 2205dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2215dd307cdSMartin Diehl { 2225dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2235dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2245dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2255dd307cdSMartin Diehl } 2265dd307cdSMartin Diehl 2275dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2285dd307cdSMartin Diehl { 2295dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2305dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2315dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2325dd307cdSMartin Diehl } 2335dd307cdSMartin Diehl 234c08c7cb9SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr ) 235c08c7cb9SBarry Smith { 236c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 237c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 238c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat,m,n); 239c08c7cb9SBarry Smith } 240c08c7cb9SBarry Smith 241afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 242afc39838SBarry Smith { 243afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 244afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 245afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 246afc39838SBarry Smith } 247afc39838SBarry Smith 2483be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2493be0408cSBarry Smith { 2503be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2513be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2523be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2533be0408cSBarry Smith } 2543be0408cSBarry Smith 2553be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2563be0408cSBarry Smith { 2573be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2583be0408cSBarry Smith } 2593be0408cSBarry Smith 2603be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2613be0408cSBarry Smith { 2623be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2633be0408cSBarry Smith } 2643be0408cSBarry Smith 2653be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2663be0408cSBarry Smith { 2673be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2683be0408cSBarry Smith } 2693be0408cSBarry Smith 2703be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2713be0408cSBarry Smith { 2723be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2733be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2743be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2753be0408cSBarry Smith } 2763be0408cSBarry Smith 2773be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2783be0408cSBarry Smith { 2793be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2803be0408cSBarry Smith } 2813be0408cSBarry Smith 2823be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2833be0408cSBarry Smith { 2843be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2853be0408cSBarry Smith } 2863be0408cSBarry Smith 2873be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2883be0408cSBarry Smith { 2893be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2903be0408cSBarry Smith } 2913be0408cSBarry Smith 2924d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2934d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2944d03fd2bSBarry Smith } 2954d03fd2bSBarry Smith 296cee688dbSBarry 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)){ 297cee688dbSBarry Smith PetscScalar *fa; 2980aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 299cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 300cee688dbSBarry Smith } 301cee688dbSBarry Smith 3023b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3033b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3043b494cfeSSatish Balay } 3053b494cfeSSatish Balay 3064d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3074d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3084d03fd2bSBarry Smith } 3094d03fd2bSBarry Smith 3104d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3114d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3124d03fd2bSBarry Smith } 3134d03fd2bSBarry Smith 3144d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3154d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3164d03fd2bSBarry Smith } 3174d03fd2bSBarry Smith 3184d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3194d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3204d03fd2bSBarry Smith } 3214d03fd2bSBarry Smith 3224d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3234d03fd2bSBarry Smith { 3244d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3254d03fd2bSBarry Smith } 3264d03fd2bSBarry Smith 3273b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3283b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3293b494cfeSSatish Balay } 3303b494cfeSSatish Balay 3314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3324d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3334d03fd2bSBarry Smith } 3344d03fd2bSBarry Smith 3354d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3364d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3374d03fd2bSBarry Smith } 3384d03fd2bSBarry Smith 3394d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3404d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3414d03fd2bSBarry Smith } 3424d03fd2bSBarry Smith 3434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3444d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3454d03fd2bSBarry Smith } 3464d03fd2bSBarry Smith 3474d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3484d03fd2bSBarry Smith { 3494d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3504d03fd2bSBarry Smith } 3514d03fd2bSBarry Smith 3521b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3531b266c99SBarry Smith { 3541b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3551b266c99SBarry Smith } 3561b266c99SBarry Smith 3573b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3583b494cfeSSatish Balay { 3593b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3603b494cfeSSatish Balay } 3613b494cfeSSatish Balay 3621b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3631b266c99SBarry Smith { 3641b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3651b266c99SBarry Smith } 3661b266c99SBarry Smith 3674d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3684d03fd2bSBarry Smith { 3694d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3704d03fd2bSBarry Smith } 3714d03fd2bSBarry Smith 3724d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3734d03fd2bSBarry Smith { 3744d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3754d03fd2bSBarry Smith } 3764d03fd2bSBarry Smith 3774d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3784d03fd2bSBarry Smith { 3794d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3804d03fd2bSBarry Smith } 3814d03fd2bSBarry Smith 3824d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3834d03fd2bSBarry Smith { 3844d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3854d03fd2bSBarry Smith } 3864d03fd2bSBarry Smith 3873b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3883b494cfeSSatish Balay { 3893b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3903b494cfeSSatish Balay } 3913b494cfeSSatish Balay 3924d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3934d03fd2bSBarry Smith { 3944d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3954d03fd2bSBarry Smith } 3964d03fd2bSBarry Smith 3974d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3984d03fd2bSBarry Smith { 3994d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4004d03fd2bSBarry Smith } 4014d03fd2bSBarry Smith 4024d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4034d03fd2bSBarry Smith { 4044d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4054d03fd2bSBarry Smith } 4064d03fd2bSBarry Smith 4074d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4084d03fd2bSBarry Smith { 4094d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4104d03fd2bSBarry Smith } 4114d03fd2bSBarry Smith 4124d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4134d03fd2bSBarry Smith { 4144d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4154d03fd2bSBarry Smith } 4164d03fd2bSBarry Smith 41787bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 41887bcf4e0SBarry Smith { 41987bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 42087bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 42187bcf4e0SBarry Smith } 4224d03fd2bSBarry Smith 42387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 42487bcf4e0SBarry Smith { 42587bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 42687bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 42787bcf4e0SBarry Smith } 42887bcf4e0SBarry Smith 4295928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4305928be6bSBarry Smith { 4315928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4325928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 4335928be6bSBarry Smith } 4345928be6bSBarry Smith 4355928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4365928be6bSBarry Smith { 4375928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4385928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 4395928be6bSBarry Smith } 4405928be6bSBarry Smith 441b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 442b22b330cSBarry Smith { 443b22b330cSBarry Smith PetscErrorCode ierr = 0; 444b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 445b22b330cSBarry Smith return 0; 446b22b330cSBarry Smith } 447b22b330cSBarry Smith 4488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 449b22b330cSBarry Smith { 450b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 451b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 45226fbe8dcSKarl Rupp 453b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 454b22b330cSBarry Smith } 455b22b330cSBarry Smith 456d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4577c54600cSBarry Smith { 4587c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4597c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4602a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4617c54600cSBarry Smith } 4627c54600cSBarry Smith 4638cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 464ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 465f4e70085SSatish Balay { 4661a83f524SJed Brown const PetscInt *IA,*JA; 4678f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4681a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4691a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 470f4e70085SSatish Balay } 471f4e70085SSatish Balay 4728cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 473ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 474f4e70085SSatish Balay { 4751a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4768f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 477f4e70085SSatish Balay } 478f4e70085SSatish Balay 479f4e70085SSatish Balay /* 480f4e70085SSatish Balay This is a poor way of storing the column and value pointers 481f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 482f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 483f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 484f4e70085SSatish Balay at a time. 485f4e70085SSatish Balay */ 486f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 487f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 488f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 489f4e70085SSatish Balay 4908cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 491f4e70085SSatish Balay { 492f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 493f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 494f4e70085SSatish Balay 495f4e70085SSatish Balay if (matgetrowactive) { 496efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 497f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 498f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 499f4e70085SSatish Balay *ierr = 1; 500f4e70085SSatish Balay return; 501f4e70085SSatish Balay } 502f4e70085SSatish Balay 5030298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5040298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 505f4e70085SSatish Balay 506f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 507f4e70085SSatish Balay if (*ierr) return; 508f4e70085SSatish Balay 509580bdb30SBarry Smith if (oocols) { *ierr = PetscArraycpy(cols,my_ocols,*ncols); if (*ierr) return;} 510580bdb30SBarry Smith if (oovals) { *ierr = PetscArraycpy(vals,my_ovals,*ncols); if (*ierr) return;} 511f4e70085SSatish Balay matgetrowactive = 1; 512f4e70085SSatish Balay } 513f4e70085SSatish Balay 5148cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 515f4e70085SSatish Balay { 516f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 517f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 518f4e70085SSatish Balay if (!matgetrowactive) { 519efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 520f4e70085SSatish Balay "Must call MatGetRow() first"); 521f4e70085SSatish Balay *ierr = 1; 522f4e70085SSatish Balay return; 523f4e70085SSatish Balay } 5240298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5250298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 526f4e70085SSatish Balay 527f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 528f4e70085SSatish Balay matgetrowactive = 0; 529f4e70085SSatish Balay } 530f4e70085SSatish Balay 5318cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 532f4e70085SSatish Balay { 533f4e70085SSatish Balay PetscViewer v; 534f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 535f4e70085SSatish Balay *ierr = MatView(*mat,v); 536f4e70085SSatish Balay } 537f4e70085SSatish Balay 5388cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 539f7e310deSShri Abhyankar { 540f7e310deSShri Abhyankar PetscViewer v; 541f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 542112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 543f7e310deSShri Abhyankar } 544f7e310deSShri Abhyankar 5458cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 546f4e70085SSatish Balay { 547f4e70085SSatish Balay PetscScalar *mm; 548f4e70085SSatish Balay PetscInt m,n; 549f4e70085SSatish Balay 5508c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 551f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 552f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 553f4e70085SSatish Balay } 554f4e70085SSatish Balay 5558cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 556f4e70085SSatish Balay { 557f4e70085SSatish Balay PetscScalar *lx; 558f4e70085SSatish Balay PetscInt m,n; 559f4e70085SSatish Balay 560f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 561f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5628c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 563f4e70085SSatish Balay } 564f4e70085SSatish Balay 5658cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 56673a71a0fSBarry Smith { 56773a71a0fSBarry Smith PetscScalar *mm; 56873a71a0fSBarry Smith PetscInt m,n; 56973a71a0fSBarry Smith 5708c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 57173a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 57273a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 57373a71a0fSBarry Smith } 57473a71a0fSBarry Smith 5758cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 57673a71a0fSBarry Smith { 57773a71a0fSBarry Smith PetscScalar *lx; 57873a71a0fSBarry Smith PetscInt m,n; 57973a71a0fSBarry Smith 58073a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 58173a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5828c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 58373a71a0fSBarry Smith } 58473a71a0fSBarry Smith 5857067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5868572280aSBarry Smith { 5877067c7f7SBarry Smith const PetscScalar *mm; 5888572280aSBarry Smith PetscInt m,n; 5898572280aSBarry Smith 5908572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 5918572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5927067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 5938572280aSBarry Smith } 5948572280aSBarry Smith 5957067c7f7SBarry Smith 5967067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5978572280aSBarry Smith { 5987067c7f7SBarry Smith const PetscScalar *lx; 5998572280aSBarry Smith PetscInt m,n; 6008572280aSBarry Smith 6018572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 6027067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 6038572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 6048572280aSBarry Smith } 6058572280aSBarry Smith 606390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 60735bd34faSBarry Smith { 60835bd34faSBarry Smith const char *tname; 60935bd34faSBarry Smith 6103ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 61135bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 61235bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 61335bd34faSBarry Smith } 61435bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 61535bd34faSBarry Smith } 61635bd34faSBarry Smith 617390e1bf2SBarry 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)) 6185dffd610SBarry Smith { 6195dffd610SBarry Smith char *t; 6205dffd610SBarry Smith FIXCHAR(outtype,len,t); 621d49bb8f9SBarry Smith *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 6225dffd610SBarry Smith FREECHAR(outtype,t); 6235dffd610SBarry Smith } 6245dffd610SBarry Smith 625390e1bf2SBarry 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)) 626f4e70085SSatish Balay { 627f4e70085SSatish Balay char *t; 628f4e70085SSatish Balay FIXCHAR(outtype,len,t); 629d49bb8f9SBarry Smith *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 630f4e70085SSatish Balay FREECHAR(outtype,t); 631f4e70085SSatish Balay } 632f4e70085SSatish Balay 633f4e70085SSatish Balay /* 6347dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 635f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 6367dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 637f4e70085SSatish Balay */ 6387dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 639f4e70085SSatish Balay { 640f4e70085SSatish Balay Mat *lsmat; 641f4e70085SSatish Balay PetscInt i; 642f4e70085SSatish Balay 643f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 6447dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 645de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 646f4e70085SSatish Balay smat[i] = lsmat[i]; 647f4e70085SSatish Balay } 648f4e70085SSatish Balay *ierr = PetscFree(lsmat); 649f4e70085SSatish Balay } else { 6507dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 651f4e70085SSatish Balay } 652f4e70085SSatish Balay } 653f4e70085SSatish Balay 6547d6bfa3bSBarry Smith /* 65581ec7b92Smarius MatCreateSubmatrices() is slightly different from C since the 65681ec7b92Smarius Fortran provides the array to hold the submatrix objects,while in C that 65781ec7b92Smarius array is allocated by the MatCreateSubmatrices() 65881ec7b92Smarius */ 65981ec7b92Smarius PETSC_EXTERN void PETSC_STDCALL matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 66081ec7b92Smarius { 66181ec7b92Smarius Mat *lsmat; 66281ec7b92Smarius PetscInt i; 66381ec7b92Smarius 66481ec7b92Smarius if (*scall == MAT_INITIAL_MATRIX) { 66581ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat); 66681ec7b92Smarius for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 66781ec7b92Smarius smat[i] = lsmat[i]; 66881ec7b92Smarius } 66981ec7b92Smarius *ierr = PetscFree(lsmat); 67081ec7b92Smarius } else { 67181ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat); 67281ec7b92Smarius } 67381ec7b92Smarius } 67481ec7b92Smarius 67581ec7b92Smarius /* 6767d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 677de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 678de7ef04eSHong Zhang the array is freed 679de7ef04eSHong Zhang */ 680de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 681de7ef04eSHong Zhang { 682de7ef04eSHong Zhang PetscInt i; 683de7ef04eSHong Zhang 684de7ef04eSHong Zhang for (i=0; i<*n; i++) { 685de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 686de7ef04eSHong Zhang } 687de7ef04eSHong Zhang } 688de7ef04eSHong Zhang 689de7ef04eSHong Zhang /* 690de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6917d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6927dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6937d6bfa3bSBarry Smith */ 694de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6957d6bfa3bSBarry Smith { 696de7ef04eSHong Zhang Mat *lsmat; 6977d6bfa3bSBarry Smith PetscInt i; 6987d6bfa3bSBarry Smith 699de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 700de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 701de7ef04eSHong Zhang lsmat[i] = smat[i]; 7027d6bfa3bSBarry Smith } 703de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 704df750dc8SHong Zhang } 705df750dc8SHong Zhang 706390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 7071eea217eSSatish Balay { 7081eea217eSSatish Balay char *t; 7091eea217eSSatish Balay 7101eea217eSSatish Balay FIXCHAR(prefix,len,t); 711d49bb8f9SBarry Smith *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 7121eea217eSSatish Balay FREECHAR(prefix,t); 7131eea217eSSatish Balay } 7141eea217eSSatish Balay 715d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 716812c3f48SMatthew Knepley { 717260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 718d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 719812c3f48SMatthew Knepley } 7201eea217eSSatish Balay 7214d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7225ba43861SSatish Balay { 7234d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7245ba43861SSatish Balay } 7255ba43861SSatish Balay 7264d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 72722688b47SSatish Balay { 7284d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 72922688b47SSatish Balay } 73022688b47SSatish Balay 7314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 73222688b47SSatish Balay { 7334d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 73422688b47SSatish Balay } 73522688b47SSatish Balay 7364d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 73722688b47SSatish Balay { 7384d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 73922688b47SSatish Balay } 74022688b47SSatish Balay 7414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 74222688b47SSatish Balay { 7434d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 74422688b47SSatish Balay } 74522688b47SSatish Balay 7464d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 74722688b47SSatish Balay { 7484d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 74922688b47SSatish Balay } 75022688b47SSatish Balay 7514d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 75222688b47SSatish Balay { 7534d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 75422688b47SSatish Balay } 75522688b47SSatish Balay 7564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 75722688b47SSatish Balay { 7584d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 75922688b47SSatish Balay } 76022688b47SSatish Balay 7614d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 76222688b47SSatish Balay { 7634d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 76422688b47SSatish Balay } 76522688b47SSatish Balay 7664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 76722688b47SSatish Balay { 7684d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 76922688b47SSatish Balay } 77022688b47SSatish Balay 7714d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 77222688b47SSatish Balay { 7734d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 77422688b47SSatish Balay } 77522688b47SSatish Balay 7764d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 77722688b47SSatish Balay { 7784d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 77922688b47SSatish Balay } 780d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 781d27e6124SSatish Balay { 782d27e6124SSatish Balay *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 783d27e6124SSatish Balay } 784d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 785d27e6124SSatish Balay { 786d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 787d27e6124SSatish Balay } 788d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 789d27e6124SSatish Balay { 790d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 791d27e6124SSatish Balay } 792*fe2efc57SMark PETSC_EXTERN void PETSC_STDCALL matviewfromoptions_(Mat *ao,PetscObject obj,char* type PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 793*fe2efc57SMark { 794*fe2efc57SMark char *t; 795*fe2efc57SMark 796*fe2efc57SMark FIXCHAR(type,len,t); 797*fe2efc57SMark *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return; 798*fe2efc57SMark FREECHAR(type,t); 799*fe2efc57SMark } 800