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 62d27e6124SSatish Balay #define matzerorowslocal0_ MATZEROROWSLOCAL0 63d27e6124SSatish Balay #define matzerorowslocal1_ MATZEROROWSLOCAL1 64f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 6517ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6617ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 671eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 68fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 69c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 705ba43861SSatish Balay #define matgetinfo_ MATGETINFO 7122688b47SSatish Balay #define matlufactor_ MATLUFACTOR 7222688b47SSatish Balay #define matilufactor_ MATILUFACTOR 7322688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 7422688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 7522688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7622688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7722688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7822688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7922688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 8022688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 8122688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 82b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 830905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 8438135fcbSMartin Diehl #define matgetsize_ MATGETSIZE 853be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 863be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 873be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 8838135fcbSMartin Diehl #define matgetlocalsize_ MATGETLOCALSIZE 893be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 903be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 913be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 92260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 93260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 9491f56e93SMartin Diehl #define matgetownershiprange00_ MATGETOWNERSHIPRANGE00 9591f56e93SMartin Diehl #define matgetownershiprange10_ MATGETOWNERSHIPRANGE10 9691f56e93SMartin Diehl #define matgetownershiprange01_ MATGETOWNERSHIPRANGE01 9791f56e93SMartin Diehl #define matgetownershiprange10_ MATGETOWNERSHIPRANGE11 98c08c7cb9SBarry Smith #define matgetownershipis_ MATGETOWNERSHIPIS 99afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 100f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1014d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 1021006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 1033b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 1041b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 1054d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 1064d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1074d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1084d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1093b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1104d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1114d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1124d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1134d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1144d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1154d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1163b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1170aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1184d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1194d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1204d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 12124aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1224d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1233b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1244d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1254d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1264d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 12724aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 12887bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 12987bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1305928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1315928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1325928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 133df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1345dffd610SBarry Smith #define matgetfactor_ matgetfactor 13535bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 136fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 137f4e70085SSatish Balay #define matgetrowij_ matgetrowij 138f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 139f4e70085SSatish Balay #define matgetrow_ matgetrow 140f4e70085SSatish Balay #define matrestorerow_ matrestorerow 141f4e70085SSatish Balay #define matview_ matview 142f7e310deSShri Abhyankar #define matload_ matload 1438c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1448c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1458c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1468572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1478c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1488572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 149f4e70085SSatish Balay #define matconvert_ matconvert 1507dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 15117ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 15217ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 15317ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 154d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 155f4e70085SSatish Balay #define matzerorows_ matzerorows 156f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 157f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 158f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 15917ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 16017ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1611eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 162812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1635ba43861SSatish Balay #define matgetinfo_ matgetinfo 16422688b47SSatish Balay #define matlufactor_ matlufactor 16522688b47SSatish Balay #define matilufactor_ matilufactor 16622688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 16722688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 16822688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 16922688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 17022688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 17122688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 17222688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 17322688b47SSatish Balay #define maticcfactor_ maticcfactor 17422688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 175b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1760905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 17738135fcbSMartin Diehl #define matgetsize_ matgetsize 1783be0408cSBarry Smith #define matgetsize00_ matgetsize00 1793be0408cSBarry Smith #define matgetsize10_ matgetsize10 1803be0408cSBarry Smith #define matgetsize01_ matgetsize01 18138135fcbSMartin Diehl #define matgetlocalsize_ matgetlocalsize 1823be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1833be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1843be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 185260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 186260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 18791f56e93SMartin Diehl #define matgetownershiprange00_ matgetownershiprange00 18891f56e93SMartin Diehl #define matgetownershiprange10_ matgetownershiprange10 18991f56e93SMartin Diehl #define matgetownershiprange01_ matgetownershiprange01 19091f56e93SMartin Diehl #define matgetownershiprange11_ matgetownershiprange11 191c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 192afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 193f4e70085SSatish Balay #endif 194f4e70085SSatish Balay 195260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 196260663b8SBarry Smith { 197260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 198260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 199260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 200260663b8SBarry Smith } 201260663b8SBarry Smith 202*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 203*5dd307cdSMartin Diehl { 204*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 205*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 206*5dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 207*5dd307cdSMartin Diehl } 208*5dd307cdSMartin Diehl 209*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 210*5dd307cdSMartin Diehl { 211*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 212*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 213*5dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 214*5dd307cdSMartin Diehl } 215*5dd307cdSMartin Diehl 216*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 217*5dd307cdSMartin Diehl { 218*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 219*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 220*5dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 221*5dd307cdSMartin Diehl } 222*5dd307cdSMartin Diehl 223*5dd307cdSMartin Diehl PETSC_EXTERN void PETSC_STDCALL matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 224*5dd307cdSMartin Diehl { 225*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 226*5dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 227*5dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 228*5dd307cdSMartin Diehl } 229*5dd307cdSMartin Diehl 230c08c7cb9SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr ) 231c08c7cb9SBarry Smith { 232c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 233c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 234c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat,m,n); 235c08c7cb9SBarry Smith } 236c08c7cb9SBarry Smith 237afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 238afc39838SBarry Smith { 239afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 240afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 241afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 242afc39838SBarry Smith } 243afc39838SBarry Smith 2443be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2453be0408cSBarry Smith { 2463be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2473be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2483be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2493be0408cSBarry Smith } 2503be0408cSBarry Smith 2513be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2523be0408cSBarry Smith { 2533be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2543be0408cSBarry Smith } 2553be0408cSBarry Smith 2563be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2573be0408cSBarry Smith { 2583be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2593be0408cSBarry Smith } 2603be0408cSBarry Smith 2613be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2623be0408cSBarry Smith { 2633be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2643be0408cSBarry Smith } 2653be0408cSBarry Smith 2663be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2673be0408cSBarry Smith { 2683be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2693be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2703be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2713be0408cSBarry Smith } 2723be0408cSBarry Smith 2733be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2743be0408cSBarry Smith { 2753be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2763be0408cSBarry Smith } 2773be0408cSBarry Smith 2783be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2793be0408cSBarry Smith { 2803be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2813be0408cSBarry Smith } 2823be0408cSBarry Smith 2833be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2843be0408cSBarry Smith { 2853be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2863be0408cSBarry Smith } 2873be0408cSBarry Smith 2884d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2894d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2904d03fd2bSBarry Smith } 2914d03fd2bSBarry Smith 292cee688dbSBarry 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)){ 293cee688dbSBarry Smith PetscScalar *fa; 2940aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 295cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 296cee688dbSBarry Smith } 297cee688dbSBarry Smith 2983b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2993b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3003b494cfeSSatish Balay } 3013b494cfeSSatish Balay 3024d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3034d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3044d03fd2bSBarry Smith } 3054d03fd2bSBarry Smith 3064d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(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 matsetvaluesblocked1n_(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 matsetvaluesblockedn1_(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 matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3194d03fd2bSBarry Smith { 3204d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3214d03fd2bSBarry Smith } 3224d03fd2bSBarry Smith 3233b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3243b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3253b494cfeSSatish Balay } 3263b494cfeSSatish Balay 3274d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3284d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3294d03fd2bSBarry Smith } 3304d03fd2bSBarry Smith 3314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(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 matsetvaluesblockedlocal1n_(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 matsetvaluesblockedlocaln1_(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 matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3444d03fd2bSBarry Smith { 3454d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3464d03fd2bSBarry Smith } 3474d03fd2bSBarry Smith 3481b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3491b266c99SBarry Smith { 3501b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3511b266c99SBarry Smith } 3521b266c99SBarry Smith 3533b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3543b494cfeSSatish Balay { 3553b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3563b494cfeSSatish Balay } 3573b494cfeSSatish Balay 3581b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3591b266c99SBarry Smith { 3601b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3611b266c99SBarry Smith } 3621b266c99SBarry Smith 3634d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3644d03fd2bSBarry Smith { 3654d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3664d03fd2bSBarry Smith } 3674d03fd2bSBarry Smith 3684d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3694d03fd2bSBarry Smith { 3704d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3714d03fd2bSBarry Smith } 3724d03fd2bSBarry Smith 3734d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3744d03fd2bSBarry Smith { 3754d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3764d03fd2bSBarry Smith } 3774d03fd2bSBarry Smith 3784d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3794d03fd2bSBarry Smith { 3804d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3814d03fd2bSBarry Smith } 3824d03fd2bSBarry Smith 3833b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3843b494cfeSSatish Balay { 3853b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3863b494cfeSSatish Balay } 3873b494cfeSSatish Balay 3884d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3894d03fd2bSBarry Smith { 3904d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3914d03fd2bSBarry Smith } 3924d03fd2bSBarry Smith 3934d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3944d03fd2bSBarry Smith { 3954d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3964d03fd2bSBarry Smith } 3974d03fd2bSBarry Smith 3984d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3994d03fd2bSBarry Smith { 4004d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4014d03fd2bSBarry Smith } 4024d03fd2bSBarry Smith 4034d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4044d03fd2bSBarry Smith { 4054d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4064d03fd2bSBarry Smith } 4074d03fd2bSBarry Smith 4084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4094d03fd2bSBarry Smith { 4104d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4114d03fd2bSBarry Smith } 4124d03fd2bSBarry Smith 41387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 41487bcf4e0SBarry Smith { 41587bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 41687bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 41787bcf4e0SBarry Smith } 4184d03fd2bSBarry Smith 41987bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 42087bcf4e0SBarry Smith { 42187bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 42287bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 42387bcf4e0SBarry Smith } 42487bcf4e0SBarry Smith 4255928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4265928be6bSBarry Smith { 4275928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4285928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 4295928be6bSBarry Smith } 4305928be6bSBarry Smith 4315928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4325928be6bSBarry Smith { 4335928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4345928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 4355928be6bSBarry Smith } 4365928be6bSBarry Smith 437b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 438b22b330cSBarry Smith { 439b22b330cSBarry Smith PetscErrorCode ierr = 0; 440b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 441b22b330cSBarry Smith return 0; 442b22b330cSBarry Smith } 443b22b330cSBarry Smith 4448cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 445b22b330cSBarry Smith { 446b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 447b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 44826fbe8dcSKarl Rupp 449b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 450b22b330cSBarry Smith } 451b22b330cSBarry Smith 452d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4537c54600cSBarry Smith { 4547c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4557c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4562a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4577c54600cSBarry Smith } 4587c54600cSBarry Smith 4598cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 460ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 461f4e70085SSatish Balay { 4621a83f524SJed Brown const PetscInt *IA,*JA; 4638f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4641a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4651a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 466f4e70085SSatish Balay } 467f4e70085SSatish Balay 4688cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 469ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 470f4e70085SSatish Balay { 4711a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4728f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 473f4e70085SSatish Balay } 474f4e70085SSatish Balay 475f4e70085SSatish Balay /* 476f4e70085SSatish Balay This is a poor way of storing the column and value pointers 477f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 478f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 479f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 480f4e70085SSatish Balay at a time. 481f4e70085SSatish Balay */ 482f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 483f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 484f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 485f4e70085SSatish Balay 4868cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 487f4e70085SSatish Balay { 488f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 489f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 490f4e70085SSatish Balay 491f4e70085SSatish Balay if (matgetrowactive) { 492efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 493f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 494f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 495f4e70085SSatish Balay *ierr = 1; 496f4e70085SSatish Balay return; 497f4e70085SSatish Balay } 498f4e70085SSatish Balay 4990298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5000298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 501f4e70085SSatish Balay 502f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 503f4e70085SSatish Balay if (*ierr) return; 504f4e70085SSatish Balay 505f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 506f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 507f4e70085SSatish Balay matgetrowactive = 1; 508f4e70085SSatish Balay } 509f4e70085SSatish Balay 5108cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 511f4e70085SSatish Balay { 512f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 513f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 514f4e70085SSatish Balay if (!matgetrowactive) { 515efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 516f4e70085SSatish Balay "Must call MatGetRow() first"); 517f4e70085SSatish Balay *ierr = 1; 518f4e70085SSatish Balay return; 519f4e70085SSatish Balay } 5200298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5210298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 522f4e70085SSatish Balay 523f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 524f4e70085SSatish Balay matgetrowactive = 0; 525f4e70085SSatish Balay } 526f4e70085SSatish Balay 5278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 528f4e70085SSatish Balay { 529f4e70085SSatish Balay PetscViewer v; 530f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 531f4e70085SSatish Balay *ierr = MatView(*mat,v); 532f4e70085SSatish Balay } 533f4e70085SSatish Balay 5348cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 535f7e310deSShri Abhyankar { 536f7e310deSShri Abhyankar PetscViewer v; 537f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 538112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 539f7e310deSShri Abhyankar } 540f7e310deSShri Abhyankar 5418cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 542f4e70085SSatish Balay { 543f4e70085SSatish Balay PetscScalar *mm; 544f4e70085SSatish Balay PetscInt m,n; 545f4e70085SSatish Balay 5468c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 547f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 548f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 549f4e70085SSatish Balay } 550f4e70085SSatish Balay 5518cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 552f4e70085SSatish Balay { 553f4e70085SSatish Balay PetscScalar *lx; 554f4e70085SSatish Balay PetscInt m,n; 555f4e70085SSatish Balay 556f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 557f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5588c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 559f4e70085SSatish Balay } 560f4e70085SSatish Balay 5618cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 56273a71a0fSBarry Smith { 56373a71a0fSBarry Smith PetscScalar *mm; 56473a71a0fSBarry Smith PetscInt m,n; 56573a71a0fSBarry Smith 5668c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 56773a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 56873a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 56973a71a0fSBarry Smith } 57073a71a0fSBarry Smith 5718cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 57273a71a0fSBarry Smith { 57373a71a0fSBarry Smith PetscScalar *lx; 57473a71a0fSBarry Smith PetscInt m,n; 57573a71a0fSBarry Smith 57673a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 57773a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5788c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 57973a71a0fSBarry Smith } 58073a71a0fSBarry Smith 5817067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5828572280aSBarry Smith { 5837067c7f7SBarry Smith const PetscScalar *mm; 5848572280aSBarry Smith PetscInt m,n; 5858572280aSBarry Smith 5868572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 5878572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5887067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 5898572280aSBarry Smith } 5908572280aSBarry Smith 5917067c7f7SBarry Smith 5927067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5938572280aSBarry Smith { 5947067c7f7SBarry Smith const PetscScalar *lx; 5958572280aSBarry Smith PetscInt m,n; 5968572280aSBarry Smith 5978572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5987067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 5998572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 6008572280aSBarry Smith } 6018572280aSBarry Smith 602390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 60335bd34faSBarry Smith { 60435bd34faSBarry Smith const char *tname; 60535bd34faSBarry Smith 6063ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 60735bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 60835bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 60935bd34faSBarry Smith } 61035bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 61135bd34faSBarry Smith } 61235bd34faSBarry Smith 613390e1bf2SBarry 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)) 6145dffd610SBarry Smith { 6155dffd610SBarry Smith char *t; 6165dffd610SBarry Smith FIXCHAR(outtype,len,t); 617d49bb8f9SBarry Smith *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 6185dffd610SBarry Smith FREECHAR(outtype,t); 6195dffd610SBarry Smith } 6205dffd610SBarry Smith 621390e1bf2SBarry 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)) 622f4e70085SSatish Balay { 623f4e70085SSatish Balay char *t; 624f4e70085SSatish Balay FIXCHAR(outtype,len,t); 625d49bb8f9SBarry Smith *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 626f4e70085SSatish Balay FREECHAR(outtype,t); 627f4e70085SSatish Balay } 628f4e70085SSatish Balay 629f4e70085SSatish Balay /* 6307dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 631f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 6327dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 633f4e70085SSatish Balay */ 6347dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 635f4e70085SSatish Balay { 636f4e70085SSatish Balay Mat *lsmat; 637f4e70085SSatish Balay PetscInt i; 638f4e70085SSatish Balay 639f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 6407dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 641de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 642f4e70085SSatish Balay smat[i] = lsmat[i]; 643f4e70085SSatish Balay } 644f4e70085SSatish Balay *ierr = PetscFree(lsmat); 645f4e70085SSatish Balay } else { 6467dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 647f4e70085SSatish Balay } 648f4e70085SSatish Balay } 649f4e70085SSatish Balay 6507d6bfa3bSBarry Smith /* 6517d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 652de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 653de7ef04eSHong Zhang the array is freed 654de7ef04eSHong Zhang */ 655de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 656de7ef04eSHong Zhang { 657de7ef04eSHong Zhang PetscInt i; 658de7ef04eSHong Zhang 659de7ef04eSHong Zhang for (i=0; i<*n; i++) { 660de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 661de7ef04eSHong Zhang } 662de7ef04eSHong Zhang } 663de7ef04eSHong Zhang 664de7ef04eSHong Zhang /* 665de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6667d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6677dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6687d6bfa3bSBarry Smith */ 669de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6707d6bfa3bSBarry Smith { 671de7ef04eSHong Zhang Mat *lsmat; 6727d6bfa3bSBarry Smith PetscInt i; 6737d6bfa3bSBarry Smith 674de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 675de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 676de7ef04eSHong Zhang lsmat[i] = smat[i]; 6777d6bfa3bSBarry Smith } 678de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 679df750dc8SHong Zhang } 680df750dc8SHong Zhang 681390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 6821eea217eSSatish Balay { 6831eea217eSSatish Balay char *t; 6841eea217eSSatish Balay 6851eea217eSSatish Balay FIXCHAR(prefix,len,t); 686d49bb8f9SBarry Smith *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 6871eea217eSSatish Balay FREECHAR(prefix,t); 6881eea217eSSatish Balay } 6891eea217eSSatish Balay 690d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 691812c3f48SMatthew Knepley { 692260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 693d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 694812c3f48SMatthew Knepley } 6951eea217eSSatish Balay 6964d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 6975ba43861SSatish Balay { 6984d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 6995ba43861SSatish Balay } 7005ba43861SSatish Balay 7014d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 70222688b47SSatish Balay { 7034d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 70422688b47SSatish Balay } 70522688b47SSatish Balay 7064d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 70722688b47SSatish Balay { 7084d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 70922688b47SSatish Balay } 71022688b47SSatish Balay 7114d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 71222688b47SSatish Balay { 7134d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 71422688b47SSatish Balay } 71522688b47SSatish Balay 7164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 71722688b47SSatish Balay { 7184d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 71922688b47SSatish Balay } 72022688b47SSatish Balay 7214d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 72222688b47SSatish Balay { 7234d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 72422688b47SSatish Balay } 72522688b47SSatish Balay 7264d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 72722688b47SSatish Balay { 7284d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 72922688b47SSatish Balay } 73022688b47SSatish Balay 7314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 73222688b47SSatish Balay { 7334d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 73422688b47SSatish Balay } 73522688b47SSatish Balay 7364d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 73722688b47SSatish Balay { 7384d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 73922688b47SSatish Balay } 74022688b47SSatish Balay 7414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 74222688b47SSatish Balay { 7434d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 74422688b47SSatish Balay } 74522688b47SSatish Balay 7464d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 74722688b47SSatish Balay { 7484d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 74922688b47SSatish Balay } 75022688b47SSatish Balay 7514d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 75222688b47SSatish Balay { 7534d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 75422688b47SSatish Balay } 755d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 756d27e6124SSatish Balay { 757d27e6124SSatish Balay *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 758d27e6124SSatish Balay } 759d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 760d27e6124SSatish Balay { 761d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 762d27e6124SSatish Balay } 763d27e6124SSatish Balay PETSC_EXTERN void PETSC_STDCALL matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 764d27e6124SSatish Balay { 765d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 766d27e6124SSatish Balay } 767