1af0996ceSBarry Smith #include <petsc/private/fortranimpl.h> 2cee688dbSBarry Smith #include <petsc/private/f90impl.h> 3c6db04a5SJed Brown #include <petscmat.h> 4665c2dedSJed Brown #include <petscviewer.h> 5f4e70085SSatish Balay 6f4e70085SSatish Balay #if defined(PETSC_HAVE_FORTRAN_CAPS) 74d03fd2bSBarry Smith #define matsetvalues_ MATSETVALUES 81006886cSSatish Balay #define matsetvaluesnnnn_ MATSETVALUESNNNN 93b494cfeSSatish Balay #define matsetvalues0_ MATSETVALUES0 101b266c99SBarry Smith #define matsetvaluesnn1_ MATSETVALUESNN1 114d03fd2bSBarry Smith #define matsetvalues11_ MATSETVALUES11 124d03fd2bSBarry Smith #define matsetvalues1n_ MATSETVALUES1N 134d03fd2bSBarry Smith #define matsetvaluesn1_ MATSETVALUESN1 143b494cfeSSatish Balay #define matsetvaluesblocked0_ MATSETVALUESBLOCKED0 150aee3464SBarry Smith #define matsetvaluesblocked2_ MATSETVALUESBLOCKED2 164d03fd2bSBarry Smith #define matsetvaluesblocked11_ MATSETVALUESBLOCKED11 174d03fd2bSBarry Smith #define matsetvaluesblocked111_ MATSETVALUESBLOCKED111 184d03fd2bSBarry Smith #define matsetvaluesblocked1n_ MATSETVALUESBLOCKED1N 194d03fd2bSBarry Smith #define matsetvaluesblockedn1_ MATSETVALUESBLOCKEDN1 204d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ MATSETVALUESBLOCKEDLOCAL 213b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ MATSETVALUESBLOCKEDLOCAL0 224d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ MATSETVALUESBLOCKEDLOCAL11 234d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ MATSETVALUESBLOCKEDLOCAL111 244d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ MATSETVALUESBLOCKEDLOCAL1N 254d03fd2bSBarry Smith #define matsetvaluesblockedlocaln1_ MATSETVALUESBLOCKEDLOCALN1 264d03fd2bSBarry Smith #define matsetvalueslocal_ MATSETVALUESLOCAL 273b494cfeSSatish Balay #define matsetvalueslocal0_ MATSETVALUESLOCAL0 284d03fd2bSBarry Smith #define matsetvalueslocal11_ MATSETVALUESLOCAL11 294d03fd2bSBarry Smith #define matsetvalueslocal11nn_ MATSETVALUESLOCAL11NN 304d03fd2bSBarry Smith #define matsetvalueslocal111_ MATSETVALUESLOCAL111 314d03fd2bSBarry Smith #define matsetvalueslocal1n_ MATSETVALUESLOCAL1N 324d03fd2bSBarry Smith #define matsetvalueslocaln1_ MATSETVALUESLOCALN1 3387bcf4e0SBarry Smith #define matgetrowmin_ MATGETROWMIN 3487bcf4e0SBarry Smith #define matgetrowminabs_ MATGETROWMINABS 355928be6bSBarry Smith #define matgetrowmax_ MATGETROWMAX 365928be6bSBarry Smith #define matgetrowmaxabs_ MATGETROWMAXABS 377d6bfa3bSBarry Smith #define matdestroymatrices_ MATDESTROYMATRICES 38df750dc8SHong Zhang #define matdestroysubmatrices_ MATDESTROYSUBMATRICES 395dffd610SBarry Smith #define matgetfactor_ MATGETFACTOR 4035bd34faSBarry Smith #define matfactorgetsolverpackage_ MATFACTORGETSOLVERPACKAGE 41f4e70085SSatish Balay #define matgetrowij_ MATGETROWIJ 42f4e70085SSatish Balay #define matrestorerowij_ MATRESTOREROWIJ 43f4e70085SSatish Balay #define matgetrow_ MATGETROW 44f4e70085SSatish Balay #define matrestorerow_ MATRESTOREROW 45f7e310deSShri Abhyankar #define matload_ MATLOAD 46f4e70085SSatish Balay #define matview_ MATVIEW 478c778c55SBarry Smith #define matseqaijgetarray_ MATSEQAIJGETARRAY 486778691eSSatish Balay #define matseqaijrestorearray_ MATSEQAIJRESTOREARRAY 498c778c55SBarry Smith #define matdensegetarray_ MATDENSEGETARRAY 508572280aSBarry Smith #define matdensegetarrayread_ MATDENSEGETARRAYREAD 518c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 528572280aSBarry Smith #define matdenserestorearrayread_ MATDENSERESTOREARRAYREAD 53f4e70085SSatish Balay #define matconvert_ MATCONVERT 547dae84e0SHong Zhang #define matcreatesubmatrices_ MATCREATESUBMATRICES 5517ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5617ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5717ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 58d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 59f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 60f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 61f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 62f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 6317ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6417ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 651eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 66fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 67c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 685ba43861SSatish Balay #define matgetinfo_ MATGETINFO 6922688b47SSatish Balay #define matlufactor_ MATLUFACTOR 7022688b47SSatish Balay #define matilufactor_ MATILUFACTOR 7122688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 7222688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 7322688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7422688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7522688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7622688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7722688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 7822688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 7922688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 80b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 810905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 823be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 833be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 843be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 853be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 863be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 873be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 88260663b8SBarry Smith #define matgetnullspace_ MATGETNULLSPACE 89260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 90260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 91*c08c7cb9SBarry Smith #define matgetownershipis_ MATGETOWNERSHIPIS 92afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 93f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 944d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 951006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 963b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 971b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 984d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 994d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 1004d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1014d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1023b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1034d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1044d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1054d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1064d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1074d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1084d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1093b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1100aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1114d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1124d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1134d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 11424aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1154d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1163b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1174d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1184d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1194d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 12024aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 12187bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 12287bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1235928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1245928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1255928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 126df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1275dffd610SBarry Smith #define matgetfactor_ matgetfactor 12835bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 129fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 130f4e70085SSatish Balay #define matgetrowij_ matgetrowij 131f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 132f4e70085SSatish Balay #define matgetrow_ matgetrow 133f4e70085SSatish Balay #define matrestorerow_ matrestorerow 134f4e70085SSatish Balay #define matview_ matview 135f7e310deSShri Abhyankar #define matload_ matload 1368c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1378c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1388c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1398572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1408c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1418572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 142f4e70085SSatish Balay #define matconvert_ matconvert 1437dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 14417ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 14517ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 14617ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 147d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 148f4e70085SSatish Balay #define matzerorows_ matzerorows 149f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 150f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 151f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 15217ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 15317ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1541eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 155812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1565ba43861SSatish Balay #define matgetinfo_ matgetinfo 15722688b47SSatish Balay #define matlufactor_ matlufactor 15822688b47SSatish Balay #define matilufactor_ matilufactor 15922688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 16022688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 16122688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 16222688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 16322688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 16422688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 16522688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 16622688b47SSatish Balay #define maticcfactor_ maticcfactor 16722688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 168b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1690905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 1703be0408cSBarry Smith #define matgetsize00_ matgetsize00 1713be0408cSBarry Smith #define matgetsize10_ matgetsize10 1723be0408cSBarry Smith #define matgetsize01_ matgetsize01 1733be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1743be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1753be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 176260663b8SBarry Smith #define matgetnullspace_ matgetnullspace 177260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 178260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 179*c08c7cb9SBarry Smith #define matgetownershipis_ matgetownershipis 180afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 181f4e70085SSatish Balay #endif 182f4e70085SSatish Balay 183260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 184260663b8SBarry Smith { 185260663b8SBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(nullsp); 186260663b8SBarry Smith *ierr = MatSetNullSpace(*mat,*nullsp); 187260663b8SBarry Smith } 188260663b8SBarry Smith 189260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 190260663b8SBarry Smith { 191260663b8SBarry Smith MatNullSpace sp; 192260663b8SBarry Smith *ierr = MatGetNullSpace(*mat,&sp);if (*ierr) return; 193260663b8SBarry Smith if (!sp) { 194260663b8SBarry Smith *nullsp = (MatNullSpace) -1; 195260663b8SBarry Smith } else { 196260663b8SBarry Smith *nullsp = sp; 197260663b8SBarry Smith } 198260663b8SBarry Smith } 199260663b8SBarry Smith 200260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 201260663b8SBarry Smith { 202260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 203260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 204260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 205260663b8SBarry Smith } 206260663b8SBarry Smith 207*c08c7cb9SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershipis_(Mat *mat,IS *m,IS *n, int *ierr ) 208*c08c7cb9SBarry Smith { 209*c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(m); 210*c08c7cb9SBarry Smith CHKFORTRANNULLOBJECT(n); 211*c08c7cb9SBarry Smith *ierr = MatGetOwnershipIS(*mat,m,n); 212*c08c7cb9SBarry Smith } 213*c08c7cb9SBarry Smith 214afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 215afc39838SBarry Smith { 216afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 217afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 218afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 219afc39838SBarry Smith } 220afc39838SBarry Smith 2213be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2223be0408cSBarry Smith { 2233be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2243be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2253be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2263be0408cSBarry Smith } 2273be0408cSBarry Smith 2283be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2293be0408cSBarry Smith { 2303be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2313be0408cSBarry Smith } 2323be0408cSBarry Smith 2333be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2343be0408cSBarry Smith { 2353be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2363be0408cSBarry Smith } 2373be0408cSBarry Smith 2383be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2393be0408cSBarry Smith { 2403be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2413be0408cSBarry Smith } 2423be0408cSBarry Smith 2433be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2443be0408cSBarry Smith { 2453be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2463be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2473be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2483be0408cSBarry Smith } 2493be0408cSBarry Smith 2503be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2513be0408cSBarry Smith { 2523be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2533be0408cSBarry Smith } 2543be0408cSBarry Smith 2553be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2563be0408cSBarry Smith { 2573be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2583be0408cSBarry Smith } 2593be0408cSBarry Smith 2603be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2613be0408cSBarry Smith { 2623be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2633be0408cSBarry Smith } 2643be0408cSBarry Smith 2654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2664d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2674d03fd2bSBarry Smith } 2684d03fd2bSBarry Smith 269cee688dbSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked2_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], F90Array2d *y,InsertMode *addv, int *ierr PETSC_F90_2PTR_PROTO(ptrd)){ 270cee688dbSBarry Smith PetscScalar *fa; 2710aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 272cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 273cee688dbSBarry Smith } 274cee688dbSBarry Smith 2753b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2763b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2773b494cfeSSatish Balay } 2783b494cfeSSatish Balay 2794d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2804d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2814d03fd2bSBarry Smith } 2824d03fd2bSBarry Smith 2834d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2844d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2854d03fd2bSBarry Smith } 2864d03fd2bSBarry Smith 2874d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2884d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2894d03fd2bSBarry Smith } 2904d03fd2bSBarry Smith 2914d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2924d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2934d03fd2bSBarry Smith } 2944d03fd2bSBarry Smith 2954d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2964d03fd2bSBarry Smith { 2974d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2984d03fd2bSBarry Smith } 2994d03fd2bSBarry Smith 3003b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3013b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3023b494cfeSSatish Balay } 3033b494cfeSSatish Balay 3044d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3054d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3064d03fd2bSBarry Smith } 3074d03fd2bSBarry Smith 3084d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3094d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3104d03fd2bSBarry Smith } 3114d03fd2bSBarry Smith 3124d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3134d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3144d03fd2bSBarry Smith } 3154d03fd2bSBarry Smith 3164d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3174d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3184d03fd2bSBarry Smith } 3194d03fd2bSBarry Smith 3204d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3214d03fd2bSBarry Smith { 3224d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3234d03fd2bSBarry Smith } 3244d03fd2bSBarry Smith 3251b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3261b266c99SBarry Smith { 3271b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3281b266c99SBarry Smith } 3291b266c99SBarry Smith 3303b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3313b494cfeSSatish Balay { 3323b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3333b494cfeSSatish Balay } 3343b494cfeSSatish Balay 3351b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3361b266c99SBarry Smith { 3371b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3381b266c99SBarry Smith } 3391b266c99SBarry Smith 3404d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3414d03fd2bSBarry Smith { 3424d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3434d03fd2bSBarry Smith } 3444d03fd2bSBarry Smith 3454d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3464d03fd2bSBarry Smith { 3474d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3484d03fd2bSBarry Smith } 3494d03fd2bSBarry Smith 3504d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3514d03fd2bSBarry Smith { 3524d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3534d03fd2bSBarry Smith } 3544d03fd2bSBarry Smith 3554d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3564d03fd2bSBarry Smith { 3574d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3584d03fd2bSBarry Smith } 3594d03fd2bSBarry Smith 3603b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3613b494cfeSSatish Balay { 3623b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3633b494cfeSSatish Balay } 3643b494cfeSSatish Balay 3654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3664d03fd2bSBarry Smith { 3674d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3684d03fd2bSBarry Smith } 3694d03fd2bSBarry Smith 3704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3714d03fd2bSBarry Smith { 3724d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3734d03fd2bSBarry Smith } 3744d03fd2bSBarry Smith 3754d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3764d03fd2bSBarry Smith { 3774d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3784d03fd2bSBarry Smith } 3794d03fd2bSBarry Smith 3804d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3814d03fd2bSBarry Smith { 3824d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3834d03fd2bSBarry Smith } 3844d03fd2bSBarry Smith 3854d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3864d03fd2bSBarry Smith { 3874d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3884d03fd2bSBarry Smith } 3894d03fd2bSBarry Smith 39087bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 39187bcf4e0SBarry Smith { 39287bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 39387bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 39487bcf4e0SBarry Smith } 3954d03fd2bSBarry Smith 39687bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 39787bcf4e0SBarry Smith { 39887bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 39987bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 40087bcf4e0SBarry Smith } 40187bcf4e0SBarry Smith 4025928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4035928be6bSBarry Smith { 4045928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4055928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 4065928be6bSBarry Smith } 4075928be6bSBarry Smith 4085928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4095928be6bSBarry Smith { 4105928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4115928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 4125928be6bSBarry Smith } 4135928be6bSBarry Smith 414b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 415b22b330cSBarry Smith { 416b22b330cSBarry Smith PetscErrorCode ierr = 0; 417b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 418b22b330cSBarry Smith return 0; 419b22b330cSBarry Smith } 420b22b330cSBarry Smith 4218cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 422b22b330cSBarry Smith { 423b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 424b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 42526fbe8dcSKarl Rupp 426b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 427b22b330cSBarry Smith } 428b22b330cSBarry Smith 429d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4307c54600cSBarry Smith { 4317c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4327c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4332a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4347c54600cSBarry Smith } 4357c54600cSBarry Smith 4368cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 437ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 438f4e70085SSatish Balay { 4391a83f524SJed Brown const PetscInt *IA,*JA; 4408f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4411a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4421a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 443f4e70085SSatish Balay } 444f4e70085SSatish Balay 4458cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 446ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 447f4e70085SSatish Balay { 4481a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4498f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 450f4e70085SSatish Balay } 451f4e70085SSatish Balay 452f4e70085SSatish Balay /* 453f4e70085SSatish Balay This is a poor way of storing the column and value pointers 454f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 455f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 456f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 457f4e70085SSatish Balay at a time. 458f4e70085SSatish Balay */ 459f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 460f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 461f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 462f4e70085SSatish Balay 4638cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 464f4e70085SSatish Balay { 465f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 466f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 467f4e70085SSatish Balay 468f4e70085SSatish Balay if (matgetrowactive) { 469efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 470f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 471f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 472f4e70085SSatish Balay *ierr = 1; 473f4e70085SSatish Balay return; 474f4e70085SSatish Balay } 475f4e70085SSatish Balay 4760298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4770298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 478f4e70085SSatish Balay 479f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 480f4e70085SSatish Balay if (*ierr) return; 481f4e70085SSatish Balay 482f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 483f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 484f4e70085SSatish Balay matgetrowactive = 1; 485f4e70085SSatish Balay } 486f4e70085SSatish Balay 4878cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 488f4e70085SSatish Balay { 489f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 490f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 491f4e70085SSatish Balay if (!matgetrowactive) { 492efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 493f4e70085SSatish Balay "Must call MatGetRow() first"); 494f4e70085SSatish Balay *ierr = 1; 495f4e70085SSatish Balay return; 496f4e70085SSatish Balay } 4970298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4980298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 499f4e70085SSatish Balay 500f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 501f4e70085SSatish Balay matgetrowactive = 0; 502f4e70085SSatish Balay } 503f4e70085SSatish Balay 5048cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 505f4e70085SSatish Balay { 506f4e70085SSatish Balay PetscViewer v; 507f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 508f4e70085SSatish Balay *ierr = MatView(*mat,v); 509f4e70085SSatish Balay } 510f4e70085SSatish Balay 5118cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 512f7e310deSShri Abhyankar { 513f7e310deSShri Abhyankar PetscViewer v; 514f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 515112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 516f7e310deSShri Abhyankar } 517f7e310deSShri Abhyankar 5188cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 519f4e70085SSatish Balay { 520f4e70085SSatish Balay PetscScalar *mm; 521f4e70085SSatish Balay PetscInt m,n; 522f4e70085SSatish Balay 5238c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 524f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 525f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 526f4e70085SSatish Balay } 527f4e70085SSatish Balay 5288cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 529f4e70085SSatish Balay { 530f4e70085SSatish Balay PetscScalar *lx; 531f4e70085SSatish Balay PetscInt m,n; 532f4e70085SSatish Balay 533f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 534f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5358c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 536f4e70085SSatish Balay } 537f4e70085SSatish Balay 5388cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 53973a71a0fSBarry Smith { 54073a71a0fSBarry Smith PetscScalar *mm; 54173a71a0fSBarry Smith PetscInt m,n; 54273a71a0fSBarry Smith 5438c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 54473a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 54573a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 54673a71a0fSBarry Smith } 54773a71a0fSBarry Smith 5488cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 54973a71a0fSBarry Smith { 55073a71a0fSBarry Smith PetscScalar *lx; 55173a71a0fSBarry Smith PetscInt m,n; 55273a71a0fSBarry Smith 55373a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 55473a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5558c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 55673a71a0fSBarry Smith } 55773a71a0fSBarry Smith 5587067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5598572280aSBarry Smith { 5607067c7f7SBarry Smith const PetscScalar *mm; 5618572280aSBarry Smith PetscInt m,n; 5628572280aSBarry Smith 5638572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 5648572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5657067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 5668572280aSBarry Smith } 5678572280aSBarry Smith 5687067c7f7SBarry Smith 5697067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5708572280aSBarry Smith { 5717067c7f7SBarry Smith const PetscScalar *lx; 5728572280aSBarry Smith PetscInt m,n; 5738572280aSBarry Smith 5748572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5757067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 5768572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 5778572280aSBarry Smith } 5788572280aSBarry Smith 579390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 58035bd34faSBarry Smith { 58135bd34faSBarry Smith const char *tname; 58235bd34faSBarry Smith 5833ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 58435bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 58535bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 58635bd34faSBarry Smith } 58735bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 58835bd34faSBarry Smith } 58935bd34faSBarry Smith 590390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetfactor_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatFactorType *ftype,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 5915dffd610SBarry Smith { 5925dffd610SBarry Smith char *t; 5935dffd610SBarry Smith FIXCHAR(outtype,len,t); 5949be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5955dffd610SBarry Smith FREECHAR(outtype,t); 5965dffd610SBarry Smith } 5975dffd610SBarry Smith 598390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matconvert_(Mat *mat,char* outtype PETSC_MIXED_LEN(len),MatReuse *reuse,Mat *M,PetscErrorCode *ierr PETSC_END_LEN(len)) 599f4e70085SSatish Balay { 600f4e70085SSatish Balay char *t; 601f4e70085SSatish Balay FIXCHAR(outtype,len,t); 602f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 603f4e70085SSatish Balay FREECHAR(outtype,t); 604f4e70085SSatish Balay } 605f4e70085SSatish Balay 606f4e70085SSatish Balay /* 6077dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 608f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 6097dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 610f4e70085SSatish Balay */ 6117dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 612f4e70085SSatish Balay { 613f4e70085SSatish Balay Mat *lsmat; 614f4e70085SSatish Balay PetscInt i; 615f4e70085SSatish Balay 616f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 6177dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 618de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 619f4e70085SSatish Balay smat[i] = lsmat[i]; 620f4e70085SSatish Balay } 621f4e70085SSatish Balay *ierr = PetscFree(lsmat); 622f4e70085SSatish Balay } else { 6237dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 624f4e70085SSatish Balay } 625f4e70085SSatish Balay } 626f4e70085SSatish Balay 6277d6bfa3bSBarry Smith /* 6287d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 629de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 630de7ef04eSHong Zhang the array is freed 631de7ef04eSHong Zhang */ 632de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 633de7ef04eSHong Zhang { 634de7ef04eSHong Zhang PetscInt i; 635de7ef04eSHong Zhang 636de7ef04eSHong Zhang for (i=0; i<*n; i++) { 637de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 638de7ef04eSHong Zhang } 639de7ef04eSHong Zhang } 640de7ef04eSHong Zhang 641de7ef04eSHong Zhang /* 642de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6437d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6447dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6457d6bfa3bSBarry Smith */ 646de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6477d6bfa3bSBarry Smith { 648de7ef04eSHong Zhang Mat *lsmat; 6497d6bfa3bSBarry Smith PetscInt i; 6507d6bfa3bSBarry Smith 651de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 652de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 653de7ef04eSHong Zhang lsmat[i] = smat[i]; 6547d6bfa3bSBarry Smith } 655de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 656df750dc8SHong Zhang } 657df750dc8SHong Zhang 6588cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 65917ede90eSSatish Balay { 66017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 66117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 66217ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 66317ede90eSSatish Balay } 66417ede90eSSatish Balay 6658cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 66617ede90eSSatish Balay { 66717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 66817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 66917ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 67017ede90eSSatish Balay } 67117ede90eSSatish Balay 6728cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 67317ede90eSSatish Balay { 67417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 67517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 67617ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 67717ede90eSSatish Balay } 67817ede90eSSatish Balay 6798cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 680d25a37e1SJed Brown { 681d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 682d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 683d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 684d25a37e1SJed Brown } 685d25a37e1SJed Brown 6868cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 687f4e70085SSatish Balay { 6882b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6892b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6902b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 691f4e70085SSatish Balay } 692f4e70085SSatish Balay 6938cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 694f4e70085SSatish Balay { 6952b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6962b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6972b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 698f4e70085SSatish Balay } 699f4e70085SSatish Balay 7008cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 701f4e70085SSatish Balay { 7022b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 7032b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 7042b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 705f4e70085SSatish Balay } 706f4e70085SSatish Balay 7078cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 708f4e70085SSatish Balay { 7092b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 7102b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 7112b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 712f4e70085SSatish Balay } 713f4e70085SSatish Balay 7148cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 71517ede90eSSatish Balay { 71617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 71717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 71817ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 71917ede90eSSatish Balay } 72017ede90eSSatish Balay 7218cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 72217ede90eSSatish Balay { 72317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 72417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 72517ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 72617ede90eSSatish Balay } 7271eea217eSSatish Balay 728390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 7291eea217eSSatish Balay { 7301eea217eSSatish Balay char *t; 7311eea217eSSatish Balay 7321eea217eSSatish Balay FIXCHAR(prefix,len,t); 7331eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 7341eea217eSSatish Balay FREECHAR(prefix,t); 7351eea217eSSatish Balay } 7361eea217eSSatish Balay 737d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 738812c3f48SMatthew Knepley { 739260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 740d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 741812c3f48SMatthew Knepley } 7421eea217eSSatish Balay 7434d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7445ba43861SSatish Balay { 7454d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7465ba43861SSatish Balay } 7475ba43861SSatish Balay 7484d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 74922688b47SSatish Balay { 7504d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 75122688b47SSatish Balay } 75222688b47SSatish Balay 7534d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 75422688b47SSatish Balay { 7554d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 75622688b47SSatish Balay } 75722688b47SSatish Balay 7584d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 75922688b47SSatish Balay { 760954bb437SSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(row); 761954bb437SSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(col); 7624d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 76322688b47SSatish Balay } 76422688b47SSatish Balay 7654d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 76622688b47SSatish Balay { 7674d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 76822688b47SSatish Balay } 76922688b47SSatish Balay 7704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 77122688b47SSatish Balay { 7724d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 77322688b47SSatish Balay } 77422688b47SSatish Balay 7754d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 77622688b47SSatish Balay { 7774d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 77822688b47SSatish Balay } 77922688b47SSatish Balay 7804d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 78122688b47SSatish Balay { 7824d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 78322688b47SSatish Balay } 78422688b47SSatish Balay 7854d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 78622688b47SSatish Balay { 7874d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 78822688b47SSatish Balay } 78922688b47SSatish Balay 7904d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 79122688b47SSatish Balay { 7924d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 79322688b47SSatish Balay } 79422688b47SSatish Balay 7954d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 79622688b47SSatish Balay { 7974d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 79822688b47SSatish Balay } 79922688b47SSatish Balay 8004d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 80122688b47SSatish Balay { 8024d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 80322688b47SSatish Balay } 804