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) 7*f0a86a08SBarry Smith #define matgetvalues_ MATGETVALUES 8*f0a86a08SBarry Smith #define matgetvalues0_ MATGETVALUES0 9*f0a86a08SBarry Smith #define matgetvaluesnn1_ MATGETVALUESnn1 10*f0a86a08SBarry Smith #define matgetvaluesnnnn_ MATGETVALUESnnnn 11*f0a86a08SBarry Smith #define matgetvalues11_ MATGETVALUES11 12*f0a86a08SBarry Smith #define matgetvalues1n_ MATGETVALUES1n 13*f0a86a08SBarry Smith #define matgetvaluesn1_ MATGETVALUESn1 144d03fd2bSBarry Smith #define matsetvalues_ MATSETVALUES 151006886cSSatish Balay #define matsetvaluesnnnn_ MATSETVALUESNNNN 163b494cfeSSatish Balay #define matsetvalues0_ MATSETVALUES0 171b266c99SBarry Smith #define matsetvaluesnn1_ MATSETVALUESNN1 184d03fd2bSBarry Smith #define matsetvalues11_ MATSETVALUES11 194d03fd2bSBarry Smith #define matsetvalues1n_ MATSETVALUES1N 204d03fd2bSBarry Smith #define matsetvaluesn1_ MATSETVALUESN1 213b494cfeSSatish Balay #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 220aee3464SBarry Smith #define matsetvaluesblocked2_ MATSETVALUESBLOCKED2 234d03fd2bSBarry Smith #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 244d03fd2bSBarry Smith #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 254d03fd2bSBarry Smith #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 264d03fd2bSBarry Smith #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 274d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 283b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 294d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 304d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 314d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 324d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 334d03fd2bSBarry Smith #define matsetvalueslocal_ MATSETVALUESLOCAL 343b494cfeSSatish Balay #define matsetvalueslocal0_ MATSETVALUESLOCAL0 354d03fd2bSBarry Smith #define matsetvalueslocal11_ MATSETVALUESLOCAL11 364d03fd2bSBarry Smith #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 374d03fd2bSBarry Smith #define matsetvalueslocal111_ MATSETVALUESLOCAL111 384d03fd2bSBarry Smith #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 394d03fd2bSBarry Smith #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 4087bcf4e0SBarry Smith #define matgetrowmin_ MATGETROWMIN 4187bcf4e0SBarry Smith #define matgetrowminabs_ MATGETROWMINABS 425928be6bSBarry Smith #define matgetrowmax_ MATGETROWMAX 435928be6bSBarry Smith #define matgetrowmaxabs_ MATGETROWMAXABS 447d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 45df750dc8SHong Zhang #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 465dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 4735bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 48f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 49f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 50f4e70085SSatish Balay #define matgetrow_ MATGETROW 51f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 52f7e310deSShri Abhyankar #define matload_ MATLOAD 53f4e70085SSatish Balay #define matview_ MATVIEW 548c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 556778691eSSatish Balay #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 568c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 578572280aSBarry Smith #define matdensegetarrayread_ MATDENSEGETARRAYREAD 588c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 598572280aSBarry Smith #define matdenserestorearrayread_ MATDENSERESTOREARRAYREAD 60f4e70085SSatish Balay #define matconvert_ MATCONVERT 617dae84e0SHong Zhang #define matcreatesubmatrices_ MATCREATESUBMATRICES 6281ec7b92Smarius #define matcreatesubmatricesmpi_ MATCREATESUBMATRICESMPI 6317ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 6417ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 6517ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 66d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 67f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 68f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 69f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 70d27e6124SSatish Balay #define matzerorowslocal0_ MATZEROROWSLOCAL0 71d27e6124SSatish Balay #define matzerorowslocal1_ MATZEROROWSLOCAL1 72f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 7317ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 7417ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 751eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 76fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 77c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 785ba43861SSatish Balay #define matgetinfo_ MATGETINFO 7922688b47SSatish Balay #define matlufactor_ MATLUFACTOR 8022688b47SSatish Balay #define matilufactor_ MATILUFACTOR 8122688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 8222688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 8322688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 8422688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 8522688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 8622688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 8722688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 8822688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 8922688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 90b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 910905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 9238135fcbSMartin Diehl #define matgetsize_ MATGETSIZE 933be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 943be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 953be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 9638135fcbSMartin Diehl #define matgetlocalsize_ MATGETLOCALSIZE 973be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 983be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 993be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 100260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 101260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 10291f56e93SMartin Diehl #define matgetownershiprange00_ MATGETOWNERSHIPRANGE00 10391f56e93SMartin Diehl #define matgetownershiprange10_ MATGETOWNERSHIPRANGE10 10491f56e93SMartin Diehl #define matgetownershiprange01_ MATGETOWNERSHIPRANGE01 1055c16e969SSatish Balay #define matgetownershiprange11_ MATGETOWNERSHIPRANGE11 106c08c7cb9SBarry Smith #define matgetownershipis_ MATGETOWNERSHIPIS 107afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 108fe2efc57SMark #define matviewfromoptions_ MATVIEWFROMOPTIONS 109f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1104d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 1111006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 1123b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 1131b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 1144d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 1154d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1164d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1174d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1183b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1194d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1204d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1214d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1224d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1234d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1244d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1253b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1260aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1274d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1284d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1294d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 13024aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1314d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1323b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1334d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1344d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1354d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 13624aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 13787bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 13887bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1395928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1405928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1415928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 142df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1435dffd610SBarry Smith #define matgetfactor_ matgetfactor 14435bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 145fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 146f4e70085SSatish Balay #define matgetrowij_ matgetrowij 147f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 148f4e70085SSatish Balay #define matgetrow_ matgetrow 149f4e70085SSatish Balay #define matrestorerow_ matrestorerow 150f4e70085SSatish Balay #define matview_ matview 151f7e310deSShri Abhyankar #define matload_ matload 1528c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1538c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1548c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1558572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1568c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1578572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 158f4e70085SSatish Balay #define matconvert_ matconvert 1597dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 16081ec7b92Smarius #define matcreatesubmatricesmpi_ matcreatesubmatricesmpi 16117ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 16217ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 16317ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 164d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 165f4e70085SSatish Balay #define matzerorows_ matzerorows 166f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 167f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 168f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 16917ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 17017ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1711eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 172812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1735ba43861SSatish Balay #define matgetinfo_ matgetinfo 17422688b47SSatish Balay #define matlufactor_ matlufactor 17522688b47SSatish Balay #define matilufactor_ matilufactor 17622688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 17722688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 17822688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 17922688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 18022688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 18122688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 18222688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 18322688b47SSatish Balay #define maticcfactor_ maticcfactor 18422688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 185b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1860905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 18738135fcbSMartin Diehl #define matgetsize_ matgetsize 1883be0408cSBarry Smith #define matgetsize00_ matgetsize00 1893be0408cSBarry Smith #define matgetsize10_ matgetsize10 1903be0408cSBarry Smith #define matgetsize01_ matgetsize01 19138135fcbSMartin Diehl #define matgetlocalsize_ matgetlocalsize 1923be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1933be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1943be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 195*f0a86a08SBarry Smith #define matgetvalues_ matgetvalues 196*f0a86a08SBarry Smith #define matgetvalues0_ matgetvalues0 197*f0a86a08SBarry Smith #define matgetvaluesnn1_ matgetvaluesnn1 198*f0a86a08SBarry Smith #define matgetvaluesnnnn_ matgetvaluesnnnn 199*f0a86a08SBarry Smith #define matgetvalues11_ matgetvalues11 200*f0a86a08SBarry Smith #define matgetvalues1n_ matgetvalues1n 201*f0a86a08SBarry Smith #define matgetvaluesn1_ matgetvaluesn1 202260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 203260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 20491f56e93SMartin Diehl #define matgetownershiprange00_ matgetownershiprange00 20591f56e93SMartin Diehl #define matgetownershiprange10_ matgetownershiprange10 20691f56e93SMartin Diehl #define matgetownershiprange01_ matgetownershiprange01 20791f56e93SMartin Diehl #define matgetownershiprange11_ matgetownershiprange11 208c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 209afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 210fe2efc57SMark #define matviewfromoptions_ matviewfromoptions 211f4e70085SSatish Balay #endif 212f4e70085SSatish Balay 213*f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 214*f0a86a08SBarry Smith { 215*f0a86a08SBarry Smith *ierr = MatGetValues(*mat,*m,idxm,*n,idxn,v); 216*f0a86a08SBarry Smith } 217*f0a86a08SBarry Smith 218*f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 219*f0a86a08SBarry Smith { 220*f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 221*f0a86a08SBarry Smith } 222*f0a86a08SBarry Smith 223*f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 224*f0a86a08SBarry Smith { 225*f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 226*f0a86a08SBarry Smith } 227*f0a86a08SBarry Smith 228*f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 229*f0a86a08SBarry Smith { 230*f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 231*f0a86a08SBarry Smith } 232*f0a86a08SBarry Smith 233*f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 234*f0a86a08SBarry Smith { 235*f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 236*f0a86a08SBarry Smith } 237*f0a86a08SBarry Smith 238*f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 239*f0a86a08SBarry Smith { 240*f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 241*f0a86a08SBarry Smith } 242*f0a86a08SBarry Smith 243*f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 244*f0a86a08SBarry Smith { 245*f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 246*f0a86a08SBarry Smith } 247*f0a86a08SBarry Smith 24819caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 249260663b8SBarry Smith { 250260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 251260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 252260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 253260663b8SBarry Smith } 254260663b8SBarry Smith 25519caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2565dd307cdSMartin Diehl { 2575dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2585dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2595dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2605dd307cdSMartin Diehl } 2615dd307cdSMartin Diehl 26219caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2635dd307cdSMartin Diehl { 2645dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2655dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2665dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2675dd307cdSMartin Diehl } 2685dd307cdSMartin Diehl 26919caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2705dd307cdSMartin Diehl { 2715dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2725dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2735dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2745dd307cdSMartin Diehl } 2755dd307cdSMartin Diehl 27619caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2775dd307cdSMartin Diehl { 2785dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2795dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2805dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2815dd307cdSMartin Diehl } 2825dd307cdSMartin Diehl 28319caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr ) 284c08c7cb9SBarry Smith { 285c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 286c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 287c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat,m,n); 288c08c7cb9SBarry Smith } 289c08c7cb9SBarry Smith 29019caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 291afc39838SBarry Smith { 292afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 293afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 294afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 295afc39838SBarry Smith } 296afc39838SBarry Smith 29719caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2983be0408cSBarry Smith { 2993be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 3003be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 3013be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 3023be0408cSBarry Smith } 3033be0408cSBarry Smith 30419caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3053be0408cSBarry Smith { 3063be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 3073be0408cSBarry Smith } 3083be0408cSBarry Smith 30919caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3103be0408cSBarry Smith { 3113be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 3123be0408cSBarry Smith } 3133be0408cSBarry Smith 31419caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3153be0408cSBarry Smith { 3163be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 3173be0408cSBarry Smith } 3183be0408cSBarry Smith 31919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3203be0408cSBarry Smith { 3213be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 3223be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 3233be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 3243be0408cSBarry Smith } 3253be0408cSBarry Smith 32619caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3273be0408cSBarry Smith { 3283be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 3293be0408cSBarry Smith } 3303be0408cSBarry Smith 33119caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3323be0408cSBarry Smith { 3333be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 3343be0408cSBarry Smith } 3353be0408cSBarry Smith 33619caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 3373be0408cSBarry Smith { 3383be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 3393be0408cSBarry Smith } 3403be0408cSBarry Smith 34119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3424d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 3434d03fd2bSBarry Smith } 3444d03fd2bSBarry Smith 34519caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){ 346cee688dbSBarry Smith PetscScalar *fa; 3470aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 348cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 349cee688dbSBarry Smith } 350cee688dbSBarry Smith 35119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3523b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3533b494cfeSSatish Balay } 3543b494cfeSSatish Balay 35519caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3564d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3574d03fd2bSBarry Smith } 3584d03fd2bSBarry Smith 35919caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3604d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3614d03fd2bSBarry Smith } 3624d03fd2bSBarry Smith 36319caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3644d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3654d03fd2bSBarry Smith } 3664d03fd2bSBarry Smith 36719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3684d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3694d03fd2bSBarry Smith } 3704d03fd2bSBarry Smith 37119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3724d03fd2bSBarry Smith { 3734d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3744d03fd2bSBarry Smith } 3754d03fd2bSBarry Smith 37619caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3773b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3783b494cfeSSatish Balay } 3793b494cfeSSatish Balay 38019caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3814d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3824d03fd2bSBarry Smith } 3834d03fd2bSBarry Smith 38419caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3854d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3864d03fd2bSBarry Smith } 3874d03fd2bSBarry Smith 38819caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3894d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3904d03fd2bSBarry Smith } 3914d03fd2bSBarry Smith 39219caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3934d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3944d03fd2bSBarry Smith } 3954d03fd2bSBarry Smith 39619caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3974d03fd2bSBarry Smith { 3984d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3994d03fd2bSBarry Smith } 4004d03fd2bSBarry Smith 40119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 4021b266c99SBarry Smith { 4031b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4041b266c99SBarry Smith } 4051b266c99SBarry Smith 40619caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 4073b494cfeSSatish Balay { 4083b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4093b494cfeSSatish Balay } 4103b494cfeSSatish Balay 41119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 4121b266c99SBarry Smith { 4131b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4141b266c99SBarry Smith } 4151b266c99SBarry Smith 41619caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 4174d03fd2bSBarry Smith { 4184d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4194d03fd2bSBarry Smith } 4204d03fd2bSBarry Smith 42119caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 4224d03fd2bSBarry Smith { 4234d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4244d03fd2bSBarry Smith } 4254d03fd2bSBarry Smith 42619caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 4274d03fd2bSBarry Smith { 4284d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4294d03fd2bSBarry Smith } 4304d03fd2bSBarry Smith 43119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4324d03fd2bSBarry Smith { 4334d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 4344d03fd2bSBarry Smith } 4354d03fd2bSBarry Smith 43619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4373b494cfeSSatish Balay { 4383b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4393b494cfeSSatish Balay } 4403b494cfeSSatish Balay 44119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4424d03fd2bSBarry Smith { 4434d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4444d03fd2bSBarry Smith } 4454d03fd2bSBarry Smith 44619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4474d03fd2bSBarry Smith { 4484d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4494d03fd2bSBarry Smith } 4504d03fd2bSBarry Smith 45119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4524d03fd2bSBarry Smith { 4534d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4544d03fd2bSBarry Smith } 4554d03fd2bSBarry Smith 45619caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4574d03fd2bSBarry Smith { 4584d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4594d03fd2bSBarry Smith } 4604d03fd2bSBarry Smith 46119caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 4624d03fd2bSBarry Smith { 4634d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4644d03fd2bSBarry Smith } 4654d03fd2bSBarry Smith 46619caf8f3SSatish Balay PETSC_EXTERN void matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 46787bcf4e0SBarry Smith { 46887bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 46987bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 47087bcf4e0SBarry Smith } 4714d03fd2bSBarry Smith 47219caf8f3SSatish Balay PETSC_EXTERN void matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 47387bcf4e0SBarry Smith { 47487bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 47587bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 47687bcf4e0SBarry Smith } 47787bcf4e0SBarry Smith 47819caf8f3SSatish Balay PETSC_EXTERN void matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4795928be6bSBarry Smith { 4805928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4815928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 4825928be6bSBarry Smith } 4835928be6bSBarry Smith 48419caf8f3SSatish Balay PETSC_EXTERN void matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4855928be6bSBarry Smith { 4865928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4875928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 4885928be6bSBarry Smith } 4895928be6bSBarry Smith 490b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 491b22b330cSBarry Smith { 492b22b330cSBarry Smith PetscErrorCode ierr = 0; 49319caf8f3SSatish Balay (*(void (*)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 494b22b330cSBarry Smith return 0; 495b22b330cSBarry Smith } 496b22b330cSBarry Smith 49719caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 498b22b330cSBarry Smith { 499b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 500b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 50126fbe8dcSKarl Rupp 502b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 503b22b330cSBarry Smith } 504b22b330cSBarry Smith 50519caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 5067c54600cSBarry Smith { 5077c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 5087c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 5092a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 5107c54600cSBarry Smith } 5117c54600cSBarry Smith 51219caf8f3SSatish Balay PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 513ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 514f4e70085SSatish Balay { 5151a83f524SJed Brown const PetscInt *IA,*JA; 5168f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 5171a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 5181a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 519f4e70085SSatish Balay } 520f4e70085SSatish Balay 52119caf8f3SSatish Balay PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 522ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 523f4e70085SSatish Balay { 5241a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 5258f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 526f4e70085SSatish Balay } 527f4e70085SSatish Balay 528f4e70085SSatish Balay /* 529f4e70085SSatish Balay This is a poor way of storing the column and value pointers 530f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 531f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 532f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 533f4e70085SSatish Balay at a time. 534f4e70085SSatish Balay */ 535f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 536f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 537f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 538f4e70085SSatish Balay 53919caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 540f4e70085SSatish Balay { 541f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 542f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 543f4e70085SSatish Balay 544f4e70085SSatish Balay if (matgetrowactive) { 545efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 546f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 547f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 548f4e70085SSatish Balay *ierr = 1; 549f4e70085SSatish Balay return; 550f4e70085SSatish Balay } 551f4e70085SSatish Balay 5520298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5530298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 554f4e70085SSatish Balay 555f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 556f4e70085SSatish Balay if (*ierr) return; 557f4e70085SSatish Balay 558580bdb30SBarry Smith if (oocols) { *ierr = PetscArraycpy(cols,my_ocols,*ncols); if (*ierr) return;} 559580bdb30SBarry Smith if (oovals) { *ierr = PetscArraycpy(vals,my_ovals,*ncols); if (*ierr) return;} 560f4e70085SSatish Balay matgetrowactive = 1; 561f4e70085SSatish Balay } 562f4e70085SSatish Balay 56319caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 564f4e70085SSatish Balay { 565f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 566f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 567f4e70085SSatish Balay if (!matgetrowactive) { 568efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 569f4e70085SSatish Balay "Must call MatGetRow() first"); 570f4e70085SSatish Balay *ierr = 1; 571f4e70085SSatish Balay return; 572f4e70085SSatish Balay } 5730298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5740298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 575f4e70085SSatish Balay 576f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 577f4e70085SSatish Balay matgetrowactive = 0; 578f4e70085SSatish Balay } 579f4e70085SSatish Balay 58019caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 581f4e70085SSatish Balay { 582f4e70085SSatish Balay PetscViewer v; 583f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 584f4e70085SSatish Balay *ierr = MatView(*mat,v); 585f4e70085SSatish Balay } 586f4e70085SSatish Balay 58719caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 588f7e310deSShri Abhyankar { 589f7e310deSShri Abhyankar PetscViewer v; 590f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 591112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 592f7e310deSShri Abhyankar } 593f7e310deSShri Abhyankar 59419caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 595f4e70085SSatish Balay { 596f4e70085SSatish Balay PetscScalar *mm; 597f4e70085SSatish Balay PetscInt m,n; 598f4e70085SSatish Balay 5998c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 600f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 601f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 602f4e70085SSatish Balay } 603f4e70085SSatish Balay 60419caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 605f4e70085SSatish Balay { 606f4e70085SSatish Balay PetscScalar *lx; 607f4e70085SSatish Balay PetscInt m,n; 608f4e70085SSatish Balay 609f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 610f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 6118c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 612f4e70085SSatish Balay } 613f4e70085SSatish Balay 61419caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 61573a71a0fSBarry Smith { 61673a71a0fSBarry Smith PetscScalar *mm; 61773a71a0fSBarry Smith PetscInt m,n; 61873a71a0fSBarry Smith 6198c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 62073a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 62173a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 62273a71a0fSBarry Smith } 62373a71a0fSBarry Smith 62419caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 62573a71a0fSBarry Smith { 62673a71a0fSBarry Smith PetscScalar *lx; 62773a71a0fSBarry Smith PetscInt m,n; 62873a71a0fSBarry Smith 62973a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 63073a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 6318c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 63273a71a0fSBarry Smith } 63373a71a0fSBarry Smith 63419caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 6358572280aSBarry Smith { 6367067c7f7SBarry Smith const PetscScalar *mm; 6378572280aSBarry Smith PetscInt m,n; 6388572280aSBarry Smith 6398572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 6408572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 6417067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 6428572280aSBarry Smith } 6438572280aSBarry Smith 6447067c7f7SBarry Smith 64519caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 6468572280aSBarry Smith { 6477067c7f7SBarry Smith const PetscScalar *lx; 6488572280aSBarry Smith PetscInt m,n; 6498572280aSBarry Smith 6508572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 6517067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 6528572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 6538572280aSBarry Smith } 6548572280aSBarry Smith 65519caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 65635bd34faSBarry Smith { 65735bd34faSBarry Smith const char *tname; 65835bd34faSBarry Smith 6593ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 66035bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 66135bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 66235bd34faSBarry Smith } 66335bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 66435bd34faSBarry Smith } 66535bd34faSBarry Smith 66619caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 6675dffd610SBarry Smith { 6685dffd610SBarry Smith char *t; 6695dffd610SBarry Smith FIXCHAR(outtype,len,t); 670d49bb8f9SBarry Smith *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 6715dffd610SBarry Smith FREECHAR(outtype,t); 6725dffd610SBarry Smith } 6735dffd610SBarry Smith 67419caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 675f4e70085SSatish Balay { 676f4e70085SSatish Balay char *t; 677f4e70085SSatish Balay FIXCHAR(outtype,len,t); 678d49bb8f9SBarry Smith *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 679f4e70085SSatish Balay FREECHAR(outtype,t); 680f4e70085SSatish Balay } 681f4e70085SSatish Balay 682f4e70085SSatish Balay /* 6837dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 684f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 6857dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 686f4e70085SSatish Balay */ 68719caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 688f4e70085SSatish Balay { 689f4e70085SSatish Balay Mat *lsmat; 690f4e70085SSatish Balay PetscInt i; 691f4e70085SSatish Balay 692f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 6937dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 694de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 695f4e70085SSatish Balay smat[i] = lsmat[i]; 696f4e70085SSatish Balay } 697f4e70085SSatish Balay *ierr = PetscFree(lsmat); 698f4e70085SSatish Balay } else { 6997dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 700f4e70085SSatish Balay } 701f4e70085SSatish Balay } 702f4e70085SSatish Balay 7037d6bfa3bSBarry Smith /* 70481ec7b92Smarius MatCreateSubmatrices() is slightly different from C since the 70581ec7b92Smarius Fortran provides the array to hold the submatrix objects,while in C that 70681ec7b92Smarius array is allocated by the MatCreateSubmatrices() 70781ec7b92Smarius */ 70819caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 70981ec7b92Smarius { 71081ec7b92Smarius Mat *lsmat; 71181ec7b92Smarius PetscInt i; 71281ec7b92Smarius 71381ec7b92Smarius if (*scall == MAT_INITIAL_MATRIX) { 71481ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat); 71581ec7b92Smarius for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 71681ec7b92Smarius smat[i] = lsmat[i]; 71781ec7b92Smarius } 71881ec7b92Smarius *ierr = PetscFree(lsmat); 71981ec7b92Smarius } else { 72081ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat); 72181ec7b92Smarius } 72281ec7b92Smarius } 72381ec7b92Smarius 72481ec7b92Smarius /* 7257d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 726de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 727de7ef04eSHong Zhang the array is freed 728de7ef04eSHong Zhang */ 72919caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 730de7ef04eSHong Zhang { 731de7ef04eSHong Zhang PetscInt i; 732de7ef04eSHong Zhang 733de7ef04eSHong Zhang for (i=0; i<*n; i++) { 734de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 735de7ef04eSHong Zhang } 736de7ef04eSHong Zhang } 737de7ef04eSHong Zhang 738de7ef04eSHong Zhang /* 739de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 7407d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 7417dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 7427d6bfa3bSBarry Smith */ 74319caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 7447d6bfa3bSBarry Smith { 745de7ef04eSHong Zhang Mat *lsmat; 7467d6bfa3bSBarry Smith PetscInt i; 7477d6bfa3bSBarry Smith 748de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 749de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 750de7ef04eSHong Zhang lsmat[i] = smat[i]; 7517d6bfa3bSBarry Smith } 752de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 753df750dc8SHong Zhang } 754df750dc8SHong Zhang 75519caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 7561eea217eSSatish Balay { 7571eea217eSSatish Balay char *t; 7581eea217eSSatish Balay 7591eea217eSSatish Balay FIXCHAR(prefix,len,t); 760d49bb8f9SBarry Smith *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 7611eea217eSSatish Balay FREECHAR(prefix,t); 7621eea217eSSatish Balay } 7631eea217eSSatish Balay 76419caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 765812c3f48SMatthew Knepley { 766260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 767d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 768812c3f48SMatthew Knepley } 7691eea217eSSatish Balay 77019caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7715ba43861SSatish Balay { 7724d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7735ba43861SSatish Balay } 7745ba43861SSatish Balay 77519caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 77622688b47SSatish Balay { 7774d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 77822688b47SSatish Balay } 77922688b47SSatish Balay 78019caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 78122688b47SSatish Balay { 7824d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 78322688b47SSatish Balay } 78422688b47SSatish Balay 78519caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 78622688b47SSatish Balay { 7874d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 78822688b47SSatish Balay } 78922688b47SSatish Balay 79019caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 79122688b47SSatish Balay { 7924d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 79322688b47SSatish Balay } 79422688b47SSatish Balay 79519caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 79622688b47SSatish Balay { 7974d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 79822688b47SSatish Balay } 79922688b47SSatish Balay 80019caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 80122688b47SSatish Balay { 8024d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 80322688b47SSatish Balay } 80422688b47SSatish Balay 80519caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 80622688b47SSatish Balay { 8074d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 80822688b47SSatish Balay } 80922688b47SSatish Balay 81019caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 81122688b47SSatish Balay { 8124d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 81322688b47SSatish Balay } 81422688b47SSatish Balay 81519caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 81622688b47SSatish Balay { 8174d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 81822688b47SSatish Balay } 81922688b47SSatish Balay 82019caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 82122688b47SSatish Balay { 8224d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 82322688b47SSatish Balay } 82422688b47SSatish Balay 82519caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 82622688b47SSatish Balay { 8274d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 82822688b47SSatish Balay } 82919caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 830d27e6124SSatish Balay { 831d27e6124SSatish Balay *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 832d27e6124SSatish Balay } 83319caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 834d27e6124SSatish Balay { 835d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 836d27e6124SSatish Balay } 83719caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 838d27e6124SSatish Balay { 839d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 840d27e6124SSatish Balay } 84119caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 842fe2efc57SMark { 843fe2efc57SMark char *t; 844fe2efc57SMark 845fe2efc57SMark FIXCHAR(type,len,t); 846fe2efc57SMark *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return; 847fe2efc57SMark FREECHAR(type,t); 848fe2efc57SMark } 849