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 110f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 1114d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 1121006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 1133b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 1141b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 1154d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 1164d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1174d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1184d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1193b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1204d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1214d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1224d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1234d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1244d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1254d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1263b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1270aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1284d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1294d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1304d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 13124aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1324d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1333b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1344d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1354d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1364d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 13724aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 13887bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 13987bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1405928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1415928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1425928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 143df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1445dffd610SBarry Smith #define matgetfactor_ matgetfactor 14535bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 146fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 147f4e70085SSatish Balay #define matgetrowij_ matgetrowij 148f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 149f4e70085SSatish Balay #define matgetrow_ matgetrow 150f4e70085SSatish Balay #define matrestorerow_ matrestorerow 151f4e70085SSatish Balay #define matview_ matview 152f7e310deSShri Abhyankar #define matload_ matload 1538c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1548c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1558c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1568572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1578c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1588572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 159f4e70085SSatish Balay #define matconvert_ matconvert 1607dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 16181ec7b92Smarius #define matcreatesubmatricesmpi_ matcreatesubmatricesmpi 16217ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 16317ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 16417ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 165d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 166f4e70085SSatish Balay #define matzerorows_ matzerorows 167f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 168f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 169f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 17017ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 17117ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1721eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 173812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1745ba43861SSatish Balay #define matgetinfo_ matgetinfo 17522688b47SSatish Balay #define matlufactor_ matlufactor 17622688b47SSatish Balay #define matilufactor_ matilufactor 17722688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 17822688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 17922688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 18022688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 18122688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 18222688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 18322688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 18422688b47SSatish Balay #define maticcfactor_ maticcfactor 18522688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 186b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1870905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 18838135fcbSMartin Diehl #define matgetsize_ matgetsize 1893be0408cSBarry Smith #define matgetsize00_ matgetsize00 1903be0408cSBarry Smith #define matgetsize10_ matgetsize10 1913be0408cSBarry Smith #define matgetsize01_ matgetsize01 19238135fcbSMartin Diehl #define matgetlocalsize_ matgetlocalsize 1933be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1943be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1953be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 196f0a86a08SBarry Smith #define matgetvalues_ matgetvalues 197f0a86a08SBarry Smith #define matgetvalues0_ matgetvalues0 198f0a86a08SBarry Smith #define matgetvaluesnn1_ matgetvaluesnn1 199f0a86a08SBarry Smith #define matgetvaluesnnnn_ matgetvaluesnnnn 200f0a86a08SBarry Smith #define matgetvalues11_ matgetvalues11 201f0a86a08SBarry Smith #define matgetvalues1n_ matgetvalues1n 202f0a86a08SBarry Smith #define matgetvaluesn1_ matgetvaluesn1 203260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 204260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 20591f56e93SMartin Diehl #define matgetownershiprange00_ matgetownershiprange00 20691f56e93SMartin Diehl #define matgetownershiprange10_ matgetownershiprange10 20791f56e93SMartin Diehl #define matgetownershiprange01_ matgetownershiprange01 20891f56e93SMartin Diehl #define matgetownershiprange11_ matgetownershiprange11 209c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 210afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 211fe2efc57SMark #define matviewfromoptions_ matviewfromoptions 2121fb7b255SJunchao Zhang #define matdestroy_ matdestroy 213f4e70085SSatish Balay #endif 214f4e70085SSatish Balay 215f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 216f0a86a08SBarry Smith { 217f0a86a08SBarry Smith *ierr = MatGetValues(*mat,*m,idxm,*n,idxn,v); 218f0a86a08SBarry Smith } 219f0a86a08SBarry Smith 220f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 221f0a86a08SBarry Smith { 222f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 223f0a86a08SBarry Smith } 224f0a86a08SBarry Smith 225f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 226f0a86a08SBarry Smith { 227f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 228f0a86a08SBarry Smith } 229f0a86a08SBarry Smith 230f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 231f0a86a08SBarry Smith { 232f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 233f0a86a08SBarry Smith } 234f0a86a08SBarry Smith 235f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 236f0a86a08SBarry Smith { 237f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 238f0a86a08SBarry Smith } 239f0a86a08SBarry Smith 240f0a86a08SBarry Smith PETSC_EXTERN void matgetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 241f0a86a08SBarry Smith { 242f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 243f0a86a08SBarry Smith } 244f0a86a08SBarry Smith 245f0a86a08SBarry Smith PETSC_EXTERN void matgetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[],PetscScalar v[], int *ierr) 246f0a86a08SBarry Smith { 247f0a86a08SBarry Smith matgetvalues_(mat,m,idxm,n,idxn,v,ierr); 248f0a86a08SBarry Smith } 249f0a86a08SBarry Smith 25019caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 251260663b8SBarry Smith { 252260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 253260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 254260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 255260663b8SBarry Smith } 256260663b8SBarry Smith 25719caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 2585dd307cdSMartin Diehl { 2595dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2605dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2615dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2625dd307cdSMartin Diehl } 2635dd307cdSMartin Diehl 26419caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 2655dd307cdSMartin Diehl { 2665dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2675dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2685dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2695dd307cdSMartin Diehl } 2705dd307cdSMartin Diehl 27119caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 2725dd307cdSMartin Diehl { 2735dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2745dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2755dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2765dd307cdSMartin Diehl } 2775dd307cdSMartin Diehl 27819caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprange11_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 2795dd307cdSMartin Diehl { 2805dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(m); 2815dd307cdSMartin Diehl CHKFORTRANNULLINTEGER(n); 2825dd307cdSMartin Diehl *ierr = MatGetOwnershipRange(*mat,m,n); 2835dd307cdSMartin Diehl } 2845dd307cdSMartin Diehl 28519caf8f3SSatish Balay PETSC_EXTERN void matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr) 286c08c7cb9SBarry Smith { 287c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 288c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 289c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat,m,n); 290c08c7cb9SBarry Smith } 291c08c7cb9SBarry Smith 29219caf8f3SSatish Balay PETSC_EXTERN void matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 293afc39838SBarry Smith { 294afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 295afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 296afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 297afc39838SBarry Smith } 298afc39838SBarry Smith 29919caf8f3SSatish Balay PETSC_EXTERN void matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3003be0408cSBarry Smith { 3013be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 3023be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 3033be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 3043be0408cSBarry Smith } 3053be0408cSBarry Smith 30619caf8f3SSatish Balay PETSC_EXTERN void matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3073be0408cSBarry Smith { 3083be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 3093be0408cSBarry Smith } 3103be0408cSBarry Smith 31119caf8f3SSatish Balay PETSC_EXTERN void matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3123be0408cSBarry Smith { 3133be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 3143be0408cSBarry Smith } 3153be0408cSBarry Smith 31619caf8f3SSatish Balay PETSC_EXTERN void matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3173be0408cSBarry Smith { 3183be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 3193be0408cSBarry Smith } 3203be0408cSBarry Smith 32119caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3223be0408cSBarry Smith { 3233be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 3243be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 3253be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 3263be0408cSBarry Smith } 3273be0408cSBarry Smith 32819caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3293be0408cSBarry Smith { 3303be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 3313be0408cSBarry Smith } 3323be0408cSBarry Smith 33319caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3343be0408cSBarry Smith { 3353be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 3363be0408cSBarry Smith } 3373be0408cSBarry Smith 33819caf8f3SSatish Balay PETSC_EXTERN void matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr) 3393be0408cSBarry Smith { 3403be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 3413be0408cSBarry Smith } 3423be0408cSBarry Smith 34370a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 34470a7d78aSStefano Zampini { 3454d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 3464d03fd2bSBarry Smith } 3474d03fd2bSBarry Smith 34870a7d78aSStefano 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)) 34970a7d78aSStefano Zampini { 350cee688dbSBarry Smith PetscScalar *fa; 3510aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 352cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 353cee688dbSBarry Smith } 354cee688dbSBarry Smith 35570a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 35670a7d78aSStefano Zampini { 3573b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3583b494cfeSSatish Balay } 3593b494cfeSSatish Balay 36070a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 36170a7d78aSStefano Zampini { 3624d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3634d03fd2bSBarry Smith } 3644d03fd2bSBarry Smith 36570a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 36670a7d78aSStefano Zampini { 3674d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3684d03fd2bSBarry Smith } 3694d03fd2bSBarry Smith 37070a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 37170a7d78aSStefano Zampini { 3724d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3734d03fd2bSBarry Smith } 3744d03fd2bSBarry Smith 37570a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 37670a7d78aSStefano Zampini { 3774d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 3784d03fd2bSBarry Smith } 3794d03fd2bSBarry Smith 38019caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 3814d03fd2bSBarry Smith { 3824d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3834d03fd2bSBarry Smith } 3844d03fd2bSBarry Smith 38570a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 38670a7d78aSStefano Zampini { 3873b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3883b494cfeSSatish Balay } 3893b494cfeSSatish Balay 39070a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 39170a7d78aSStefano Zampini { 3924d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3934d03fd2bSBarry Smith } 3944d03fd2bSBarry Smith 39570a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 39670a7d78aSStefano Zampini { 3974d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3984d03fd2bSBarry Smith } 3994d03fd2bSBarry Smith 40070a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 40170a7d78aSStefano Zampini { 4024d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 4034d03fd2bSBarry Smith } 4044d03fd2bSBarry Smith 40570a7d78aSStefano Zampini PETSC_EXTERN void matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 40670a7d78aSStefano Zampini { 4074d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 4084d03fd2bSBarry Smith } 4094d03fd2bSBarry Smith 41019caf8f3SSatish Balay PETSC_EXTERN void matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4114d03fd2bSBarry Smith { 4124d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 4134d03fd2bSBarry Smith } 4144d03fd2bSBarry Smith 41519caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4161b266c99SBarry Smith { 4171b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4181b266c99SBarry Smith } 4191b266c99SBarry Smith 42019caf8f3SSatish Balay PETSC_EXTERN void matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4213b494cfeSSatish Balay { 4223b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4233b494cfeSSatish Balay } 4243b494cfeSSatish Balay 42519caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4261b266c99SBarry Smith { 4271b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4281b266c99SBarry Smith } 4291b266c99SBarry Smith 43019caf8f3SSatish Balay PETSC_EXTERN void matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4314d03fd2bSBarry Smith { 4324d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4334d03fd2bSBarry Smith } 4344d03fd2bSBarry Smith 43519caf8f3SSatish Balay PETSC_EXTERN void matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4364d03fd2bSBarry Smith { 4374d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4384d03fd2bSBarry Smith } 4394d03fd2bSBarry Smith 44019caf8f3SSatish Balay PETSC_EXTERN void matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr) 4414d03fd2bSBarry Smith { 4424d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 4434d03fd2bSBarry Smith } 4444d03fd2bSBarry Smith 44519caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4464d03fd2bSBarry Smith { 4474d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 4484d03fd2bSBarry Smith } 4494d03fd2bSBarry Smith 45019caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4513b494cfeSSatish Balay { 4523b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4533b494cfeSSatish Balay } 4543b494cfeSSatish Balay 45519caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4564d03fd2bSBarry Smith { 4574d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4584d03fd2bSBarry Smith } 4594d03fd2bSBarry Smith 46019caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4614d03fd2bSBarry Smith { 4624d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4634d03fd2bSBarry Smith } 4644d03fd2bSBarry Smith 46519caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4664d03fd2bSBarry Smith { 4674d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4684d03fd2bSBarry Smith } 4694d03fd2bSBarry Smith 47019caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4714d03fd2bSBarry Smith { 4724d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4734d03fd2bSBarry Smith } 4744d03fd2bSBarry Smith 47519caf8f3SSatish Balay PETSC_EXTERN void matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr) 4764d03fd2bSBarry Smith { 4774d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 4784d03fd2bSBarry Smith } 4794d03fd2bSBarry Smith 48019caf8f3SSatish Balay PETSC_EXTERN void matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 48187bcf4e0SBarry Smith { 48287bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 48387bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 48487bcf4e0SBarry Smith } 4854d03fd2bSBarry Smith 48619caf8f3SSatish Balay PETSC_EXTERN void matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 48787bcf4e0SBarry Smith { 48887bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 48987bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 49087bcf4e0SBarry Smith } 49187bcf4e0SBarry Smith 49219caf8f3SSatish Balay PETSC_EXTERN void matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 4935928be6bSBarry Smith { 4945928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4955928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 4965928be6bSBarry Smith } 4975928be6bSBarry Smith 49819caf8f3SSatish Balay PETSC_EXTERN void matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr) 4995928be6bSBarry Smith { 5005928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 5015928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 5025928be6bSBarry Smith } 5035928be6bSBarry Smith 504b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 505b22b330cSBarry Smith { 506*9566063dSJacob Faibussowitsch PetscCallFortranVoidFunction((*(void (*)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr)); 507b22b330cSBarry Smith return 0; 508b22b330cSBarry Smith } 509b22b330cSBarry Smith 51019caf8f3SSatish Balay PETSC_EXTERN void matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 511b22b330cSBarry Smith { 512b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 513b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 51426fbe8dcSKarl Rupp 515b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 516b22b330cSBarry Smith } 517b22b330cSBarry Smith 51819caf8f3SSatish Balay PETSC_EXTERN void matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 5197c54600cSBarry Smith { 5207c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 5217c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 5222a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 5237c54600cSBarry Smith } 5247c54600cSBarry Smith 52519caf8f3SSatish Balay PETSC_EXTERN void matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 526ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 527f4e70085SSatish Balay { 5281a83f524SJed Brown const PetscInt *IA,*JA; 5298f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 5301a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 5311a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 532f4e70085SSatish Balay } 533f4e70085SSatish Balay 53419caf8f3SSatish Balay PETSC_EXTERN void matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 535ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 536f4e70085SSatish Balay { 5371a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 5388f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 539f4e70085SSatish Balay } 540f4e70085SSatish Balay 541f4e70085SSatish Balay /* 542f4e70085SSatish Balay This is a poor way of storing the column and value pointers 543f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 544f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 545f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 546f4e70085SSatish Balay at a time. 547f4e70085SSatish Balay */ 548f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 549f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 550f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 551f4e70085SSatish Balay 55219caf8f3SSatish Balay PETSC_EXTERN void matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 553f4e70085SSatish Balay { 554f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 555f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 556f4e70085SSatish Balay 557f4e70085SSatish Balay if (matgetrowactive) { 558efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 559f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 560f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 561f4e70085SSatish Balay *ierr = 1; 562f4e70085SSatish Balay return; 563f4e70085SSatish Balay } 564f4e70085SSatish Balay 5650298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5660298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 567f4e70085SSatish Balay 568f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 569f4e70085SSatish Balay if (*ierr) return; 570f4e70085SSatish Balay 571580bdb30SBarry Smith if (oocols) { *ierr = PetscArraycpy(cols,my_ocols,*ncols); if (*ierr) return;} 572580bdb30SBarry Smith if (oovals) { *ierr = PetscArraycpy(vals,my_ovals,*ncols); if (*ierr) return;} 573f4e70085SSatish Balay matgetrowactive = 1; 574f4e70085SSatish Balay } 575f4e70085SSatish Balay 57619caf8f3SSatish Balay PETSC_EXTERN void matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 577f4e70085SSatish Balay { 578f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 579f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 580f4e70085SSatish Balay if (!matgetrowactive) { 581efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 582f4e70085SSatish Balay "Must call MatGetRow() first"); 583f4e70085SSatish Balay *ierr = 1; 584f4e70085SSatish Balay return; 585f4e70085SSatish Balay } 5860298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 5870298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 588f4e70085SSatish Balay 589f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 590f4e70085SSatish Balay matgetrowactive = 0; 591f4e70085SSatish Balay } 592f4e70085SSatish Balay 59319caf8f3SSatish Balay PETSC_EXTERN void matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 594f4e70085SSatish Balay { 595f4e70085SSatish Balay PetscViewer v; 596f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 597f4e70085SSatish Balay *ierr = MatView(*mat,v); 598f4e70085SSatish Balay } 599f4e70085SSatish Balay 60019caf8f3SSatish Balay PETSC_EXTERN void matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 601f7e310deSShri Abhyankar { 602f7e310deSShri Abhyankar PetscViewer v; 603f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 604112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 605f7e310deSShri Abhyankar } 606f7e310deSShri Abhyankar 60719caf8f3SSatish Balay PETSC_EXTERN void matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 608f4e70085SSatish Balay { 609f4e70085SSatish Balay PetscScalar *mm; 610f4e70085SSatish Balay PetscInt m,n; 611f4e70085SSatish Balay 6128c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 613f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 614f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 615f4e70085SSatish Balay } 616f4e70085SSatish Balay 61719caf8f3SSatish Balay PETSC_EXTERN void matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 618f4e70085SSatish Balay { 619f4e70085SSatish Balay PetscScalar *lx; 620f4e70085SSatish Balay PetscInt m,n; 621f4e70085SSatish Balay 622f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 623f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 6248c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 625f4e70085SSatish Balay } 626f4e70085SSatish Balay 62719caf8f3SSatish Balay PETSC_EXTERN void matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 62873a71a0fSBarry Smith { 62973a71a0fSBarry Smith PetscScalar *mm; 63073a71a0fSBarry Smith PetscInt m,n; 63173a71a0fSBarry Smith 6328c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 63373a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 63473a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 63573a71a0fSBarry Smith } 63673a71a0fSBarry Smith 63719caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 63873a71a0fSBarry Smith { 63973a71a0fSBarry Smith PetscScalar *lx; 64073a71a0fSBarry Smith PetscInt m,n; 64173a71a0fSBarry Smith 64273a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 64373a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 6448c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 64573a71a0fSBarry Smith } 64673a71a0fSBarry Smith 64719caf8f3SSatish Balay PETSC_EXTERN void matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 6488572280aSBarry Smith { 6497067c7f7SBarry Smith const PetscScalar *mm; 6508572280aSBarry Smith PetscInt m,n; 6518572280aSBarry Smith 6528572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 6538572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 6547067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 6558572280aSBarry Smith } 6568572280aSBarry Smith 65719caf8f3SSatish Balay PETSC_EXTERN void matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 6588572280aSBarry Smith { 6597067c7f7SBarry Smith const PetscScalar *lx; 6608572280aSBarry Smith PetscInt m,n; 6618572280aSBarry Smith 6628572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 6637067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 6648572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 6658572280aSBarry Smith } 6668572280aSBarry Smith 66719caf8f3SSatish Balay PETSC_EXTERN void matfactorgetsolverpackage_(Mat *mat,char* name,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 66835bd34faSBarry Smith { 66935bd34faSBarry Smith const char *tname; 67035bd34faSBarry Smith 6713ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 67235bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 67335bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 67435bd34faSBarry Smith } 67535bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 67635bd34faSBarry Smith } 67735bd34faSBarry Smith 67819caf8f3SSatish Balay PETSC_EXTERN void matgetfactor_(Mat *mat,char* outtype,MatFactorType *ftype,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 6795dffd610SBarry Smith { 6805dffd610SBarry Smith char *t; 6815dffd610SBarry Smith FIXCHAR(outtype,len,t); 682d49bb8f9SBarry Smith *ierr = MatGetFactor(*mat,t,*ftype,M);if (*ierr) return; 6835dffd610SBarry Smith FREECHAR(outtype,t); 6845dffd610SBarry Smith } 6855dffd610SBarry Smith 68619caf8f3SSatish Balay PETSC_EXTERN void matconvert_(Mat *mat,char* outtype,MatReuse *reuse,Mat *M,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 687f4e70085SSatish Balay { 688f4e70085SSatish Balay char *t; 689f4e70085SSatish Balay FIXCHAR(outtype,len,t); 690d49bb8f9SBarry Smith *ierr = MatConvert(*mat,t,*reuse,M);if (*ierr) return; 691f4e70085SSatish Balay FREECHAR(outtype,t); 692f4e70085SSatish Balay } 693f4e70085SSatish Balay 694f4e70085SSatish Balay /* 6957dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 696f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 6977dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 698f4e70085SSatish Balay */ 69919caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 700f4e70085SSatish Balay { 701f4e70085SSatish Balay Mat *lsmat; 702f4e70085SSatish Balay PetscInt i; 703f4e70085SSatish Balay 704f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 7057dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 706de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 707f4e70085SSatish Balay smat[i] = lsmat[i]; 708f4e70085SSatish Balay } 709f4e70085SSatish Balay *ierr = PetscFree(lsmat); 710f4e70085SSatish Balay } else { 7117dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 712f4e70085SSatish Balay } 713f4e70085SSatish Balay } 714f4e70085SSatish Balay 7157d6bfa3bSBarry Smith /* 71681ec7b92Smarius MatCreateSubmatrices() is slightly different from C since the 71781ec7b92Smarius Fortran provides the array to hold the submatrix objects,while in C that 71881ec7b92Smarius array is allocated by the MatCreateSubmatrices() 71981ec7b92Smarius */ 72019caf8f3SSatish Balay PETSC_EXTERN void matcreatesubmatricesmpi_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 72181ec7b92Smarius { 72281ec7b92Smarius Mat *lsmat; 72381ec7b92Smarius PetscInt i; 72481ec7b92Smarius 72581ec7b92Smarius if (*scall == MAT_INITIAL_MATRIX) { 72681ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&lsmat); 72781ec7b92Smarius for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 72881ec7b92Smarius smat[i] = lsmat[i]; 72981ec7b92Smarius } 73081ec7b92Smarius *ierr = PetscFree(lsmat); 73181ec7b92Smarius } else { 73281ec7b92Smarius *ierr = MatCreateSubMatricesMPI(*mat,*n,isrow,iscol,*scall,&smat); 73381ec7b92Smarius } 73481ec7b92Smarius } 73581ec7b92Smarius 73681ec7b92Smarius /* 7377d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 738de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 739de7ef04eSHong Zhang the array is freed 740de7ef04eSHong Zhang */ 74119caf8f3SSatish Balay PETSC_EXTERN void matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 742de7ef04eSHong Zhang { 743de7ef04eSHong Zhang PetscInt i; 744de7ef04eSHong Zhang 745de7ef04eSHong Zhang for (i=0; i<*n; i++) { 7461fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 747de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 7481fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 749de7ef04eSHong Zhang } 750de7ef04eSHong Zhang } 751de7ef04eSHong Zhang 752de7ef04eSHong Zhang /* 753de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 7547d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 7557dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 7567d6bfa3bSBarry Smith */ 75719caf8f3SSatish Balay PETSC_EXTERN void matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 7587d6bfa3bSBarry Smith { 759de7ef04eSHong Zhang Mat *lsmat; 7607d6bfa3bSBarry Smith PetscInt i; 7617d6bfa3bSBarry Smith 762de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 763de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 7641fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(&smat[i]); 765de7ef04eSHong Zhang lsmat[i] = smat[i]; 7667d6bfa3bSBarry Smith } 767de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 7681fb7b255SJunchao Zhang for (i=0; i<=*n; i++) { 7691fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(&smat[i]); 7701fb7b255SJunchao Zhang } 7711fb7b255SJunchao Zhang } 7721fb7b255SJunchao Zhang 7731fb7b255SJunchao Zhang PETSC_EXTERN void matdestroy_(Mat *x,int *ierr) 7741fb7b255SJunchao Zhang { 7751fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_F_DESTROYED_TO_C_NULL(x); 7761fb7b255SJunchao Zhang *ierr = MatDestroy(x); if (*ierr) return; 7771fb7b255SJunchao Zhang PETSC_FORTRAN_OBJECT_C_NULL_TO_F_DESTROYED(x); 778df750dc8SHong Zhang } 779df750dc8SHong Zhang 78019caf8f3SSatish Balay PETSC_EXTERN void matsetoptionsprefix_(Mat *mat,char* prefix,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 7811eea217eSSatish Balay { 7821eea217eSSatish Balay char *t; 7831eea217eSSatish Balay 7841eea217eSSatish Balay FIXCHAR(prefix,len,t); 785d49bb8f9SBarry Smith *ierr = MatSetOptionsPrefix(*mat,t);if (*ierr) return; 7861eea217eSSatish Balay FREECHAR(prefix,t); 7871eea217eSSatish Balay } 7881eea217eSSatish Balay 78919caf8f3SSatish Balay PETSC_EXTERN void matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 790812c3f48SMatthew Knepley { 791260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 792d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 793812c3f48SMatthew Knepley } 7941eea217eSSatish Balay 79519caf8f3SSatish Balay PETSC_EXTERN void matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7965ba43861SSatish Balay { 7974d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7985ba43861SSatish Balay } 7995ba43861SSatish Balay 80019caf8f3SSatish Balay PETSC_EXTERN void matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 80122688b47SSatish Balay { 8024d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 80322688b47SSatish Balay } 80422688b47SSatish Balay 80519caf8f3SSatish Balay PETSC_EXTERN void matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 80622688b47SSatish Balay { 8074d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 80822688b47SSatish Balay } 80922688b47SSatish Balay 81019caf8f3SSatish Balay PETSC_EXTERN void matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 81122688b47SSatish Balay { 8124d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 81322688b47SSatish Balay } 81422688b47SSatish Balay 81519caf8f3SSatish Balay PETSC_EXTERN void matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 81622688b47SSatish Balay { 8174d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 81822688b47SSatish Balay } 81922688b47SSatish Balay 82019caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 82122688b47SSatish Balay { 8224d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 82322688b47SSatish Balay } 82422688b47SSatish Balay 82519caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 82622688b47SSatish Balay { 8274d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 82822688b47SSatish Balay } 82922688b47SSatish Balay 83019caf8f3SSatish Balay PETSC_EXTERN void matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 83122688b47SSatish Balay { 8324d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 83322688b47SSatish Balay } 83422688b47SSatish Balay 83519caf8f3SSatish Balay PETSC_EXTERN void matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 83622688b47SSatish Balay { 8374d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 83822688b47SSatish Balay } 83922688b47SSatish Balay 84019caf8f3SSatish Balay PETSC_EXTERN void maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 84122688b47SSatish Balay { 8424d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 84322688b47SSatish Balay } 84422688b47SSatish Balay 84519caf8f3SSatish Balay PETSC_EXTERN void maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 84622688b47SSatish Balay { 8474d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 84822688b47SSatish Balay } 84922688b47SSatish Balay 85019caf8f3SSatish Balay PETSC_EXTERN void matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 85122688b47SSatish Balay { 8524d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 85322688b47SSatish Balay } 85419caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 855d27e6124SSatish Balay { 856d27e6124SSatish Balay *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 857d27e6124SSatish Balay } 85819caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal0_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 859d27e6124SSatish Balay { 860d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 861d27e6124SSatish Balay } 86219caf8f3SSatish Balay PETSC_EXTERN void matzerorowslocal1_(Mat *mat,PetscInt *numRows, PetscInt rows[],PetscScalar *diag,Vec *x,Vec *b, int *ierr) 863d27e6124SSatish Balay { 864d27e6124SSatish Balay matzerorowslocal_(mat,numRows,rows,diag,x,b,ierr); 865d27e6124SSatish Balay } 86619caf8f3SSatish Balay PETSC_EXTERN void matviewfromoptions_(Mat *ao,PetscObject obj,char* type,PetscErrorCode *ierr,PETSC_FORTRAN_CHARLEN_T len) 867fe2efc57SMark { 868fe2efc57SMark char *t; 869fe2efc57SMark 870fe2efc57SMark FIXCHAR(type,len,t); 871b14c0cbaSBlaise Bourdin CHKFORTRANNULLOBJECT(obj); 872fe2efc57SMark *ierr = MatViewFromOptions(*ao,obj,t);if (*ierr) return; 873fe2efc57SMark FREECHAR(type,t); 874fe2efc57SMark } 875