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) 7f0a86a08SBarry Smith #define matgetvalues_ MATGETVALUES 8f0a86a08SBarry Smith #define matgetvalues0_ MATGETVALUES0 9f0a86a08SBarry Smith #define matgetvaluesnn1_ MATGETVALUESnn1 10f0a86a08SBarry Smith #define matgetvaluesnnnn_ MATGETVALUESnnnn 11f0a86a08SBarry Smith #define matgetvalues11_ MATGETVALUES11 12f0a86a08SBarry Smith #define matgetvalues1n_ MATGETVALUES1n 13f0a86a08SBarry 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 1091fb7b255SJunchao Zhang #define matdestroy_ MATDESTROY 110*77433607SBarry Smith #define matcreatefromoptions_ MATCREATEFROMOPTIONS 111f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1124d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 1131006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 1143b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 1151b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 1164d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 1174d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1184d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1194d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1203b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1214d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1224d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1234d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1244d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1254d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1264d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1273b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1280aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1294d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1304d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1314d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 13224aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1334d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1343b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1354d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1364d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1374d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 13824aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 13987bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 14087bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1415928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1425928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1435928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 144df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1455dffd610SBarry Smith #define matgetfactor_ matgetfactor 14635bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 147fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 148f4e70085SSatish Balay #define matgetrowij_ matgetrowij 149f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 150f4e70085SSatish Balay #define matgetrow_ matgetrow 151f4e70085SSatish Balay #define matrestorerow_ matrestorerow 152f4e70085SSatish Balay #define matview_ matview 153f7e310deSShri Abhyankar #define matload_ matload 1548c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1558c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1568c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1578572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1588c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1598572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 160f4e70085SSatish Balay #define matconvert_ matconvert 1617dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 16281ec7b92Smarius #define matcreatesubmatricesmpi_ matcreatesubmatricesmpi 16317ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 16417ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 16517ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 166d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 167f4e70085SSatish Balay #define matzerorows_ matzerorows 168f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 169f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 170f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 17117ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 17217ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1731eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 174812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1755ba43861SSatish Balay #define matgetinfo_ matgetinfo 17622688b47SSatish Balay #define matlufactor_ matlufactor 17722688b47SSatish Balay #define matilufactor_ matilufactor 17822688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 17922688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 18022688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 18122688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 18222688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 18322688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 18422688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 18522688b47SSatish Balay #define maticcfactor_ maticcfactor 18622688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 187b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1880905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 18938135fcbSMartin Diehl #define matgetsize_ matgetsize 1903be0408cSBarry Smith #define matgetsize00_ matgetsize00 1913be0408cSBarry Smith #define matgetsize10_ matgetsize10 1923be0408cSBarry Smith #define matgetsize01_ matgetsize01 19338135fcbSMartin Diehl #define matgetlocalsize_ matgetlocalsize 1943be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1953be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1963be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 197f0a86a08SBarry Smith #define matgetvalues_ matgetvalues 198f0a86a08SBarry Smith #define matgetvalues0_ matgetvalues0 199f0a86a08SBarry Smith #define matgetvaluesnn1_ matgetvaluesnn1 200f0a86a08SBarry Smith #define matgetvaluesnnnn_ matgetvaluesnnnn 201f0a86a08SBarry Smith #define matgetvalues11_ matgetvalues11 202f0a86a08SBarry Smith #define matgetvalues1n_ matgetvalues1n 203f0a86a08SBarry Smith #define matgetvaluesn1_ matgetvaluesn1 204260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 205260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 20691f56e93SMartin Diehl #define matgetownershiprange00_ matgetownershiprange00 20791f56e93SMartin Diehl #define matgetownershiprange10_ matgetownershiprange10 20891f56e93SMartin Diehl #define matgetownershiprange01_ matgetownershiprange01 20991f56e93SMartin Diehl #define matgetownershiprange11_ matgetownershiprange11 210c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 211afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 212fe2efc57SMark #define matviewfromoptions_ matviewfromoptions 2131fb7b255SJunchao Zhang #define matdestroy_ matdestroy 214*77433607SBarry Smith #define matcreatefromoptions_ matcreatefromoptions 215f4e70085SSatish Balay #endif 216f4e70085SSatish Balay 217*77433607SBarry Smith PETSC_EXTERN void matcreatefromoptions_(MPI_Fint *comm, char *prefix, PetscInt *bs, PetscInt *m, PetscInt *n, PetscInt *M, PetscInt *N, Mat *A, int *ierr, PETSC_FORTRAN_CHARLEN_T len) 218*77433607SBarry Smith { 219*77433607SBarry Smith char *fprefix; 220*77433607SBarry Smith FIXCHAR(prefix, len, fprefix); 221*77433607SBarry Smith *ierr = MatCreateFromOptions(MPI_Comm_f2c(*(comm)), fprefix, *bs, *m, *n, *M, *N, A); 222*77433607SBarry Smith if (*ierr) return; 223*77433607SBarry Smith FREECHAR(prefix, fprefix); 224*77433607SBarry Smith } 225*77433607SBarry Smith 226f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 227f0a86a08SBarry Smith { 228f0a86a08SBarry Smith *ierr = MatGetValues(*mat, *m, idxm, *n, idxn, v); 229f0a86a08SBarry Smith } 230f0a86a08SBarry Smith 231f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 232f0a86a08SBarry Smith { 233f0a86a08SBarry Smith matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 234f0a86a08SBarry Smith } 235f0a86a08SBarry Smith 236f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 237f0a86a08SBarry Smith { 238f0a86a08SBarry Smith matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 239f0a86a08SBarry Smith } 240f0a86a08SBarry Smith 241f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 242f0a86a08SBarry Smith { 243f0a86a08SBarry Smith matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 244f0a86a08SBarry Smith } 245f0a86a08SBarry Smith 246f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 247f0a86a08SBarry Smith { 248f0a86a08SBarry Smith matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 249f0a86a08SBarry Smith } 250f0a86a08SBarry Smith 251f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 252f0a86a08SBarry Smith { 253f0a86a08SBarry Smith matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 254f0a86a08SBarry Smith } 255f0a86a08SBarry Smith 256f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], int *ierr) 257f0a86a08SBarry Smith { 258f0a86a08SBarry Smith matgetvalues_(mat, m, idxm, n, idxn, v, ierr); 259f0a86a08SBarry Smith } 260f0a86a08SBarry Smith 26119caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 262260663b8SBarry Smith { 263260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 264260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 265260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat, m, n); 266260663b8SBarry Smith } 267260663b8SBarry Smith 26819caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 2695dd307cdSMartin Diehl { 2705dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2715dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2725dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat, m, n); 2735dd307cdSMartin Diehl } 2745dd307cdSMartin Diehl 27519caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 2765dd307cdSMartin Diehl { 2775dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2785dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2795dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat, m, n); 2805dd307cdSMartin Diehl } 2815dd307cdSMartin Diehl 28219caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 2835dd307cdSMartin Diehl { 2845dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2855dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2865dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat, m, n); 2875dd307cdSMartin Diehl } 2885dd307cdSMartin Diehl 28919caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 2905dd307cdSMartin Diehl { 2915dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2925dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2935dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat, m, n); 2945dd307cdSMartin Diehl } 2955dd307cdSMartin Diehl 29619caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat, IS *m, IS *n, int *ierr) 297c08c7cb9SBarry Smith { 298c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 299c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 300c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat, m, n); 301c08c7cb9SBarry Smith } 302c08c7cb9SBarry Smith 30319caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 304afc39838SBarry Smith { 305afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 306afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 307afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat, m, n); 308afc39838SBarry Smith } 309afc39838SBarry Smith 31019caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3113be0408cSBarry Smith { 3123be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 3133be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 3143be0408cSBarry Smith *ierr = MatGetSize(*mat, m, n); 3153be0408cSBarry Smith } 3163be0408cSBarry Smith 31719caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3183be0408cSBarry Smith { 3193be0408cSBarry Smith matgetsize_(mat, m, n, ierr); 3203be0408cSBarry Smith } 3213be0408cSBarry Smith 32219caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3233be0408cSBarry Smith { 3243be0408cSBarry Smith matgetsize_(mat, m, n, ierr); 3253be0408cSBarry Smith } 3263be0408cSBarry Smith 32719caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3283be0408cSBarry Smith { 3293be0408cSBarry Smith matgetsize_(mat, m, n, ierr); 3303be0408cSBarry Smith } 3313be0408cSBarry Smith 33219caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3333be0408cSBarry Smith { 3343be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 3353be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 3363be0408cSBarry Smith *ierr = MatGetLocalSize(*mat, m, n); 3373be0408cSBarry Smith } 3383be0408cSBarry Smith 33919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3403be0408cSBarry Smith { 3413be0408cSBarry Smith matgetlocalsize_(mat, m, n, ierr); 3423be0408cSBarry Smith } 3433be0408cSBarry Smith 34419caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3453be0408cSBarry Smith { 3463be0408cSBarry Smith matgetlocalsize_(mat, m, n, ierr); 3473be0408cSBarry Smith } 3483be0408cSBarry Smith 34919caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat, PetscInt *m, PetscInt *n, int *ierr) 3503be0408cSBarry Smith { 3513be0408cSBarry Smith matgetlocalsize_(mat, m, n, ierr); 3523be0408cSBarry Smith } 3533be0408cSBarry Smith 35470a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 35570a7d78aSStefano Zampini { 3564d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat, *m, idxm, *n, idxn, v, *addv); 3574d03fd2bSBarry Smith } 3584d03fd2bSBarry Smith 35970a7d78aSStefano Zampini 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)) 36070a7d78aSStefano Zampini { 361cee688dbSBarry Smith PetscScalar *fa; 3625975b3b6SBarry Smith *ierr = F90Array2dAccess(y, MPIU_SCALAR, (void **)&fa PETSC_F90_2PTR_PARAM(ptrd)); 3635975b3b6SBarry Smith if (*ierr) return; 364cee688dbSBarry Smith matsetvaluesblocked_(mat, m, idxm, n, idxn, fa, addv, ierr); 365cee688dbSBarry Smith } 366cee688dbSBarry Smith 36770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 36870a7d78aSStefano Zampini { 3693b494cfeSSatish Balay matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 3703b494cfeSSatish Balay } 3713b494cfeSSatish Balay 37270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 37370a7d78aSStefano Zampini { 3744d03fd2bSBarry Smith matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 3754d03fd2bSBarry Smith } 3764d03fd2bSBarry Smith 37770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 37870a7d78aSStefano Zampini { 3794d03fd2bSBarry Smith matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 3804d03fd2bSBarry Smith } 3814d03fd2bSBarry Smith 38270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 38370a7d78aSStefano Zampini { 3844d03fd2bSBarry Smith matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 3854d03fd2bSBarry Smith } 3864d03fd2bSBarry Smith 38770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 38870a7d78aSStefano Zampini { 3894d03fd2bSBarry Smith matsetvaluesblocked_(mat, m, idxm, n, idxn, v, addv, ierr); 3904d03fd2bSBarry Smith } 3914d03fd2bSBarry Smith 39219caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 3934d03fd2bSBarry Smith { 3944d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat, *nrow, irow, *ncol, icol, y, *addv); 3954d03fd2bSBarry Smith } 3964d03fd2bSBarry Smith 39770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 39870a7d78aSStefano Zampini { 3993b494cfeSSatish Balay matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 4003b494cfeSSatish Balay } 4013b494cfeSSatish Balay 40270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 40370a7d78aSStefano Zampini { 4044d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 4054d03fd2bSBarry Smith } 4064d03fd2bSBarry Smith 40770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 40870a7d78aSStefano Zampini { 4094d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 4104d03fd2bSBarry Smith } 4114d03fd2bSBarry Smith 41270a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 41370a7d78aSStefano Zampini { 4144d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 4154d03fd2bSBarry Smith } 4164d03fd2bSBarry Smith 41770a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 41870a7d78aSStefano Zampini { 4194d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat, m, idxm, n, idxn, v, addv, ierr); 4204d03fd2bSBarry Smith } 4214d03fd2bSBarry Smith 42219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4234d03fd2bSBarry Smith { 4244d03fd2bSBarry Smith *ierr = MatSetValues(*mat, *m, idxm, *n, idxn, v, *addv); 4254d03fd2bSBarry Smith } 4264d03fd2bSBarry Smith 42719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4281b266c99SBarry Smith { 4291b266c99SBarry Smith matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 4301b266c99SBarry Smith } 4311b266c99SBarry Smith 43219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4333b494cfeSSatish Balay { 4343b494cfeSSatish Balay matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 4353b494cfeSSatish Balay } 4363b494cfeSSatish Balay 43719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4381b266c99SBarry Smith { 4391b266c99SBarry Smith matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 4401b266c99SBarry Smith } 4411b266c99SBarry Smith 44219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4434d03fd2bSBarry Smith { 4444d03fd2bSBarry Smith matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 4454d03fd2bSBarry Smith } 4464d03fd2bSBarry Smith 44719caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4484d03fd2bSBarry Smith { 4494d03fd2bSBarry Smith matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 4504d03fd2bSBarry Smith } 4514d03fd2bSBarry Smith 45219caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat, PetscInt *m, PetscInt idxm[], PetscInt *n, PetscInt idxn[], PetscScalar v[], InsertMode *addv, int *ierr) 4534d03fd2bSBarry Smith { 4544d03fd2bSBarry Smith matsetvalues_(mat, m, idxm, n, idxn, v, addv, ierr); 4554d03fd2bSBarry Smith } 4564d03fd2bSBarry Smith 45719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4584d03fd2bSBarry Smith { 4594d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat, *nrow, irow, *ncol, icol, y, *addv); 4604d03fd2bSBarry Smith } 4614d03fd2bSBarry Smith 46219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4633b494cfeSSatish Balay { 4643b494cfeSSatish Balay matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 4653b494cfeSSatish Balay } 4663b494cfeSSatish Balay 46719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4684d03fd2bSBarry Smith { 4694d03fd2bSBarry Smith matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 4704d03fd2bSBarry Smith } 4714d03fd2bSBarry Smith 47219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4734d03fd2bSBarry Smith { 4744d03fd2bSBarry Smith matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 4754d03fd2bSBarry Smith } 4764d03fd2bSBarry Smith 47719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4784d03fd2bSBarry Smith { 4794d03fd2bSBarry Smith matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 4804d03fd2bSBarry Smith } 4814d03fd2bSBarry Smith 48219caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4834d03fd2bSBarry Smith { 4844d03fd2bSBarry Smith matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 4854d03fd2bSBarry Smith } 4864d03fd2bSBarry Smith 48719caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat, PetscInt *nrow, PetscInt irow[], PetscInt *ncol, PetscInt icol[], PetscScalar y[], InsertMode *addv, int *ierr) 4884d03fd2bSBarry Smith { 4894d03fd2bSBarry Smith matsetvalueslocal_(mat, nrow, irow, ncol, icol, y, addv, ierr); 4904d03fd2bSBarry Smith } 4914d03fd2bSBarry Smith 49219caf8f3SSatish Balay PETSC_EXTERN void matgetrowmin_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 49387bcf4e0SBarry Smith { 49487bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 49587bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat, *v, idx); 49687bcf4e0SBarry Smith } 4974d03fd2bSBarry Smith 49819caf8f3SSatish Balay PETSC_EXTERN void matgetrowminabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 49987bcf4e0SBarry Smith { 50087bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 50187bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat, *v, idx); 50287bcf4e0SBarry Smith } 50387bcf4e0SBarry Smith 50419caf8f3SSatish Balay PETSC_EXTERN void matgetrowmax_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 5055928be6bSBarry Smith { 5065928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 5075928be6bSBarry Smith *ierr = MatGetRowMax(*mat, *v, idx); 5085928be6bSBarry Smith } 5095928be6bSBarry Smith 51019caf8f3SSatish Balay PETSC_EXTERN void matgetrowmaxabs_(Mat *mat, Vec *v, PetscInt idx[], int *ierr) 5115928be6bSBarry Smith { 5125928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 5135928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat, *v, idx); 5145928be6bSBarry Smith } 5155928be6bSBarry Smith 516b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp, Vec x, void *ctx) 517b22b330cSBarry Smith { 5189566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(MatNullSpace *, Vec *, void *, PetscErrorCode *))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp, &x, ctx, &ierr)); 5193ba16761SJacob Faibussowitsch return PETSC_SUCCESS; 520b22b330cSBarry Smith } 521b22b330cSBarry Smith 52219caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace, Vec, void *), void *ctx, PetscErrorCode *ierr) 523b22b330cSBarry Smith { 524b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp, 1); 525b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 52626fbe8dcSKarl Rupp 527b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp, ournullfunction, ctx); 528b22b330cSBarry Smith } 529b22b330cSBarry Smith 53019caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat, Vec *right, Vec *left, int *ierr) 5317c54600cSBarry Smith { 5327c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 5337c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 5342a7a6963SBarry Smith *ierr = MatCreateVecs(*mat, right, left); 5357c54600cSBarry Smith } 5367c54600cSBarry Smith 5375975b3b6SBarry Smith PETSC_EXTERN void matgetrowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr) 538f4e70085SSatish Balay { 5391a83f524SJed Brown const PetscInt *IA, *JA; 5405975b3b6SBarry Smith *ierr = MatGetRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done); 5415975b3b6SBarry Smith if (*ierr) return; 5421a83f524SJed Brown *iia = PetscIntAddressToFortran(ia, (PetscInt *)IA); 5431a83f524SJed Brown *jja = PetscIntAddressToFortran(ja, (PetscInt *)JA); 544f4e70085SSatish Balay } 545f4e70085SSatish Balay 5465975b3b6SBarry Smith PETSC_EXTERN void matrestorerowij_(Mat *B, PetscInt *shift, PetscBool *sym, PetscBool *blockcompressed, PetscInt *n, PetscInt *ia, size_t *iia, PetscInt *ja, size_t *jja, PetscBool *done, PetscErrorCode *ierr) 547f4e70085SSatish Balay { 5481a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia, *iia), *JA = PetscIntAddressFromFortran(ja, *jja); 5498f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B, *shift, *sym, *blockcompressed, n, &IA, &JA, done); 550f4e70085SSatish Balay } 551f4e70085SSatish Balay 552f4e70085SSatish Balay /* 553f4e70085SSatish Balay This is a poor way of storing the column and value pointers 554f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 555f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 556f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 557f4e70085SSatish Balay at a time. 558f4e70085SSatish Balay */ 5593ba16761SJacob Faibussowitsch static int matgetrowactive = 0; 560f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 561f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 562f4e70085SSatish Balay 56319caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(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 568f4e70085SSatish Balay if (matgetrowactive) { 5693ba16761SJacob Faibussowitsch *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatGetRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Cannot have two MatGetRow() active simultaneously\n\ 570f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 5713ba16761SJacob Faibussowitsch *ierr = PETSC_ERR_ARG_WRONGSTATE; 572f4e70085SSatish Balay return; 573f4e70085SSatish Balay } 574f4e70085SSatish Balay 5753ba16761SJacob Faibussowitsch CHKFORTRANNULLINTEGER(cols); 5763ba16761SJacob Faibussowitsch if (!cols) oocols = NULL; 5773ba16761SJacob Faibussowitsch CHKFORTRANNULLSCALAR(vals); 5783ba16761SJacob Faibussowitsch if (!vals) oovals = NULL; 579f4e70085SSatish Balay 580f4e70085SSatish Balay *ierr = MatGetRow(*mat, *row, ncols, oocols, oovals); 581f4e70085SSatish Balay if (*ierr) return; 582f4e70085SSatish Balay 5833ba16761SJacob Faibussowitsch if (oocols) { 5843ba16761SJacob Faibussowitsch *ierr = PetscArraycpy(cols, my_ocols, *ncols); 5853ba16761SJacob Faibussowitsch if (*ierr) return; 5863ba16761SJacob Faibussowitsch } 5873ba16761SJacob Faibussowitsch if (oovals) { 5883ba16761SJacob Faibussowitsch *ierr = PetscArraycpy(vals, my_ovals, *ncols); 5893ba16761SJacob Faibussowitsch if (*ierr) return; 5903ba16761SJacob Faibussowitsch } 591f4e70085SSatish Balay matgetrowactive = 1; 592f4e70085SSatish Balay } 593f4e70085SSatish Balay 59419caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat, PetscInt *row, PetscInt *ncols, PetscInt *cols, PetscScalar *vals, PetscErrorCode *ierr) 595f4e70085SSatish Balay { 596f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 597f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 5983ba16761SJacob Faibussowitsch 599f4e70085SSatish Balay if (!matgetrowactive) { 6003ba16761SJacob Faibussowitsch *ierr = PetscError(PETSC_COMM_SELF, __LINE__, "MatRestoreRow_Fortran", __FILE__, PETSC_ERR_ARG_WRONGSTATE, PETSC_ERROR_INITIAL, "Must call MatGetRow() first"); 6013ba16761SJacob Faibussowitsch *ierr = PETSC_ERR_ARG_WRONGSTATE; 602f4e70085SSatish Balay return; 603f4e70085SSatish Balay } 6043ba16761SJacob Faibussowitsch CHKFORTRANNULLINTEGER(cols); 6053ba16761SJacob Faibussowitsch if (!cols) oocols = NULL; 6063ba16761SJacob Faibussowitsch CHKFORTRANNULLSCALAR(vals); 6073ba16761SJacob Faibussowitsch if (!vals) oovals = NULL; 608f4e70085SSatish Balay 609f4e70085SSatish Balay *ierr = MatRestoreRow(*mat, *row, ncols, oocols, oovals); 610f4e70085SSatish Balay matgetrowactive = 0; 611f4e70085SSatish Balay } 612f4e70085SSatish Balay 61319caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr) 614f4e70085SSatish Balay { 615f4e70085SSatish Balay PetscViewer v; 616f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin, v); 617f4e70085SSatish Balay *ierr = MatView(*mat, v); 618f4e70085SSatish Balay } 619f4e70085SSatish Balay 62019caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat, PetscViewer *vin, PetscErrorCode *ierr) 621f7e310deSShri Abhyankar { 622f7e310deSShri Abhyankar PetscViewer v; 623f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin, v); 624112444f4SShri Abhyankar *ierr = MatLoad(*mat, v); 625f7e310deSShri Abhyankar } 626f7e310deSShri Abhyankar 62719caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 628f4e70085SSatish Balay { 629f4e70085SSatish Balay PetscScalar *mm; 630f4e70085SSatish Balay PetscInt m, n; 631f4e70085SSatish Balay 6325975b3b6SBarry Smith *ierr = MatSeqAIJGetArray(*mat, &mm); 6335975b3b6SBarry Smith if (*ierr) return; 6345975b3b6SBarry Smith *ierr = MatGetSize(*mat, &m, &n); 6355975b3b6SBarry Smith if (*ierr) return; 6365975b3b6SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia); 6375975b3b6SBarry Smith if (*ierr) return; 638f4e70085SSatish Balay } 639f4e70085SSatish Balay 64019caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 641f4e70085SSatish Balay { 642f4e70085SSatish Balay PetscScalar *lx; 643f4e70085SSatish Balay PetscInt m, n; 644f4e70085SSatish Balay 6455975b3b6SBarry Smith *ierr = MatGetSize(*mat, &m, &n); 6465975b3b6SBarry Smith if (*ierr) return; 6475975b3b6SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx); 6485975b3b6SBarry Smith if (*ierr) return; 6495975b3b6SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat, &lx); 6505975b3b6SBarry Smith if (*ierr) return; 651f4e70085SSatish Balay } 652f4e70085SSatish Balay 65319caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 65473a71a0fSBarry Smith { 65573a71a0fSBarry Smith PetscScalar *mm; 65673a71a0fSBarry Smith PetscInt m, n; 65773a71a0fSBarry Smith 6585975b3b6SBarry Smith *ierr = MatDenseGetArray(*mat, &mm); 6595975b3b6SBarry Smith if (*ierr) return; 6605975b3b6SBarry Smith *ierr = MatGetSize(*mat, &m, &n); 6615975b3b6SBarry Smith if (*ierr) return; 6625975b3b6SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, mm, m * n, ia); 6635975b3b6SBarry Smith if (*ierr) return; 66473a71a0fSBarry Smith } 66573a71a0fSBarry Smith 66619caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 66773a71a0fSBarry Smith { 66873a71a0fSBarry Smith PetscScalar *lx; 66973a71a0fSBarry Smith PetscInt m, n; 67073a71a0fSBarry Smith 6715975b3b6SBarry Smith *ierr = MatGetSize(*mat, &m, &n); 6725975b3b6SBarry Smith if (*ierr) return; 6735975b3b6SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, &lx); 6745975b3b6SBarry Smith if (*ierr) return; 6755975b3b6SBarry Smith *ierr = MatDenseRestoreArray(*mat, &lx); 6765975b3b6SBarry Smith if (*ierr) return; 67773a71a0fSBarry Smith } 67873a71a0fSBarry Smith 67919caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 6808572280aSBarry Smith { 6817067c7f7SBarry Smith const PetscScalar *mm; 6828572280aSBarry Smith PetscInt m, n; 6838572280aSBarry Smith 6845975b3b6SBarry Smith *ierr = MatDenseGetArrayRead(*mat, &mm); 6855975b3b6SBarry Smith if (*ierr) return; 6865975b3b6SBarry Smith *ierr = MatGetSize(*mat, &m, &n); 6875975b3b6SBarry Smith if (*ierr) return; 6885975b3b6SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat, 1, fa, (PetscScalar *)mm, m * n, ia); 6895975b3b6SBarry Smith if (*ierr) return; 6908572280aSBarry Smith } 6918572280aSBarry Smith 69219caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat, PetscScalar *fa, size_t *ia, PetscErrorCode *ierr) 6938572280aSBarry Smith { 6947067c7f7SBarry Smith const PetscScalar *lx; 6958572280aSBarry Smith PetscInt m, n; 6968572280aSBarry Smith 6975975b3b6SBarry Smith *ierr = MatGetSize(*mat, &m, &n); 6985975b3b6SBarry Smith if (*ierr) return; 6995975b3b6SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat, fa, *ia, m * n, (PetscScalar **)&lx); 7005975b3b6SBarry Smith if (*ierr) return; 7015975b3b6SBarry Smith *ierr = MatDenseRestoreArrayRead(*mat, &lx); 7025975b3b6SBarry Smith if (*ierr) return; 7038572280aSBarry Smith } 7048572280aSBarry Smith 70519caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat, char *name, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 70635bd34faSBarry Smith { 70735bd34faSBarry Smith const char *tname; 70835bd34faSBarry Smith 7095975b3b6SBarry Smith *ierr = MatFactorGetSolverType(*mat, &tname); 7105975b3b6SBarry Smith if (*ierr) return; 71135bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 7125975b3b6SBarry Smith *ierr = PetscStrncpy(name, tname, len); 7135975b3b6SBarry Smith if (*ierr) return; 71435bd34faSBarry Smith } 71535bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE, name, len); 71635bd34faSBarry Smith } 71735bd34faSBarry Smith 71819caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat, char *outtype, MatFactorType *ftype, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 7195dffd610SBarry Smith { 7205dffd610SBarry Smith char *t; 7215dffd610SBarry Smith FIXCHAR(outtype, len, t); 7225975b3b6SBarry Smith *ierr = MatGetFactor(*mat, t, *ftype, M); 7235975b3b6SBarry Smith if (*ierr) return; 7245dffd610SBarry Smith FREECHAR(outtype, t); 7255dffd610SBarry Smith } 7265dffd610SBarry Smith 72719caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat, char *outtype, MatReuse *reuse, Mat *M, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 728f4e70085SSatish Balay { 729f4e70085SSatish Balay char *t; 730f4e70085SSatish Balay FIXCHAR(outtype, len, t); 7315975b3b6SBarry Smith *ierr = MatConvert(*mat, t, *reuse, M); 7325975b3b6SBarry Smith if (*ierr) return; 733f4e70085SSatish Balay FREECHAR(outtype, t); 734f4e70085SSatish Balay } 735f4e70085SSatish Balay 736f4e70085SSatish Balay /* 7377dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 738f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 7397dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 740f4e70085SSatish Balay */ 74119caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr) 742f4e70085SSatish Balay { 743f4e70085SSatish Balay Mat *lsmat; 744f4e70085SSatish Balay PetscInt i; 745f4e70085SSatish Balay 746f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 7477dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &lsmat); 74869d47153SPierre Jolivet for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */ 749f4e70085SSatish Balay smat[i] = lsmat[i]; 750f4e70085SSatish Balay } 751f4e70085SSatish Balay *ierr = PetscFree(lsmat); 752f4e70085SSatish Balay } else { 7537dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat, *n, isrow, iscol, *scall, &smat); 754f4e70085SSatish Balay } 755f4e70085SSatish Balay } 756f4e70085SSatish Balay 7577d6bfa3bSBarry Smith /* 75881ec7b92Smarius MatCreateSubmatrices() is slightly different from C since the 75981ec7b92Smarius Fortran provides the array to hold the submatrix objects,while in C that 76081ec7b92Smarius array is allocated by the MatCreateSubmatrices() 76181ec7b92Smarius */ 76219caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat, PetscInt *n, IS *isrow, IS *iscol, MatReuse *scall, Mat *smat, PetscErrorCode *ierr) 76381ec7b92Smarius { 76481ec7b92Smarius Mat *lsmat; 76581ec7b92Smarius PetscInt i; 76681ec7b92Smarius 76781ec7b92Smarius if (*scall == MAT_INITIAL_MATRIX) { 76881ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &lsmat); 76969d47153SPierre Jolivet for (i = 0; i <= *n; i++) { /* lsmat[*n] might be a dummy matrix for saving data structure */ 77081ec7b92Smarius smat[i] = lsmat[i]; 77181ec7b92Smarius } 77281ec7b92Smarius *ierr = PetscFree(lsmat); 77381ec7b92Smarius } else { 77481ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat, *n, isrow, iscol, *scall, &smat); 77581ec7b92Smarius } 77681ec7b92Smarius } 77781ec7b92Smarius 77881ec7b92Smarius /* 7797d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 780de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 781de7ef04eSHong Zhang the array is freed 782de7ef04eSHong Zhang */ 78319caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr) 784de7ef04eSHong Zhang { 785de7ef04eSHong Zhang PetscInt i; 786de7ef04eSHong Zhang 787de7ef04eSHong Zhang for (i = 0; i < *n; i++) { 7881fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 7895975b3b6SBarry Smith *ierr = MatDestroy(&smat[i]); 7905975b3b6SBarry Smith if (*ierr) return; 7911fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 792de7ef04eSHong Zhang } 793de7ef04eSHong Zhang } 794de7ef04eSHong Zhang 795de7ef04eSHong Zhang /* 796de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 7977d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 7987dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 7997d6bfa3bSBarry Smith */ 80019caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n, Mat *smat, PetscErrorCode *ierr) 8017d6bfa3bSBarry Smith { 802de7ef04eSHong Zhang Mat *lsmat; 8037d6bfa3bSBarry Smith PetscInt i; 8047d6bfa3bSBarry Smith 805de7ef04eSHong Zhang *ierr = PetscMalloc1(*n + 1, &lsmat); 806de7ef04eSHong Zhang for (i = 0; i <= *n; i++) { 8071fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 808de7ef04eSHong Zhang lsmat[i] = smat[i]; 8097d6bfa3bSBarry Smith } 810de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n, &lsmat); 8115975b3b6SBarry Smith for (i = 0; i <= *n; i++) { PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); } 8121fb7b255SJunchao Zhang } 8131fb7b255SJunchao Zhang 8141fb7b255SJunchao Zhang PETSC_EXTERN void matdestroy_(Mat *x, int *ierr) 8151fb7b255SJunchao Zhang { 8161fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x); 8175975b3b6SBarry Smith *ierr = MatDestroy(x); 8185975b3b6SBarry Smith if (*ierr) return; 8191fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x); 820df750dc8SHong Zhang } 821df750dc8SHong Zhang 82219caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat, char *prefix, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 8231eea217eSSatish Balay { 8241eea217eSSatish Balay char *t; 8251eea217eSSatish Balay 8261eea217eSSatish Balay FIXCHAR(prefix, len, t); 8275975b3b6SBarry Smith *ierr = MatSetOptionsPrefix(*mat, t); 8285975b3b6SBarry Smith if (*ierr) return; 8291eea217eSSatish Balay FREECHAR(prefix, t); 8301eea217eSSatish Balay } 8311eea217eSSatish Balay 83219caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp, Vec *vec, PetscErrorCode *ierr) 833812c3f48SMatthew Knepley { 834a8f51744SPierre Jolivet CHKFORTRANNULLOBJECT(*sp); 835d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp, *vec); 836812c3f48SMatthew Knepley } 8371eea217eSSatish Balay 83819caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat, MatInfoType *flag, MatInfo *info, int *ierr) 8395ba43861SSatish Balay { 8404d03fd2bSBarry Smith *ierr = MatGetInfo(*mat, *flag, info); 8415ba43861SSatish Balay } 8425ba43861SSatish Balay 84319caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 84422688b47SSatish Balay { 8454d03fd2bSBarry Smith *ierr = MatLUFactor(*mat, *row, *col, info); 84622688b47SSatish Balay } 84722688b47SSatish Balay 84819caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 84922688b47SSatish Balay { 8504d03fd2bSBarry Smith *ierr = MatILUFactor(*mat, *row, *col, info); 85122688b47SSatish Balay } 85222688b47SSatish Balay 85319caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 85422688b47SSatish Balay { 8554d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact, *mat, *row, *col, info); 85622688b47SSatish Balay } 85722688b47SSatish Balay 85819caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr) 85922688b47SSatish Balay { 8604d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact, *mat, info); 86122688b47SSatish Balay } 86222688b47SSatish Balay 86319caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr) 86422688b47SSatish Balay { 8654d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat, *perm, info); 86622688b47SSatish Balay } 86722688b47SSatish Balay 86819caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr) 86922688b47SSatish Balay { 8704d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact, *mat, *perm, info); 87122688b47SSatish Balay } 87222688b47SSatish Balay 87319caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact, Mat *mat, const MatFactorInfo *info, int *ierr) 87422688b47SSatish Balay { 8754d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact, *mat, info); 87622688b47SSatish Balay } 87722688b47SSatish Balay 87819caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact, Mat *mat, IS *row, IS *col, const MatFactorInfo *info, int *ierr) 87922688b47SSatish Balay { 8804d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact, *mat, *row, *col, info); 88122688b47SSatish Balay } 88222688b47SSatish Balay 88319caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact, Mat *mat, IS *perm, const MatFactorInfo *info, int *ierr) 88422688b47SSatish Balay { 8854d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact, *mat, *perm, info); 88622688b47SSatish Balay } 88722688b47SSatish Balay 88819caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat, IS *row, const MatFactorInfo *info, int *ierr) 88922688b47SSatish Balay { 8904d03fd2bSBarry Smith *ierr = MatICCFactor(*mat, *row, info); 89122688b47SSatish Balay } 89222688b47SSatish Balay 89319caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 89422688b47SSatish Balay { 8954d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 89622688b47SSatish Balay } 89719caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr) 898d27e6124SSatish Balay { 899d27e6124SSatish Balay *ierr = MatZeroRowsLocal(*mat, *numRows, rows, *diag, *x, *b); 900d27e6124SSatish Balay } 90119caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr) 902d27e6124SSatish Balay { 903d27e6124SSatish Balay matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr); 904d27e6124SSatish Balay } 90519caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat, PetscInt *numRows, PetscInt rows[], PetscScalar *diag, Vec *x, Vec *b, int *ierr) 906d27e6124SSatish Balay { 907d27e6124SSatish Balay matzerorowslocal_(mat, numRows, rows, diag, x, b, ierr); 908d27e6124SSatish Balay } 90919caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao, PetscObject obj, char *type, PetscErrorCode *ierr, PETSC_FORTRAN_CHARLEN_T len) 910fe2efc57SMark { 911fe2efc57SMark char *t; 912fe2efc57SMark 913fe2efc57SMark FIXCHAR(type, len, t); 914b14c0cbaSBlaise Bourdin CHKFORTRANNULLOBJECT(obj); 9155975b3b6SBarry Smith *ierr = MatViewFromOptions(*ao, obj, t); 9165975b3b6SBarry Smith if (*ierr) return; 917fe2efc57SMark FREECHAR(type, t); 918fe2efc57SMark } 919