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 91afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 92f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 934d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 941006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 953b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 961b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 974d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 984d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 994d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 1004d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 1013b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1024d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1034d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1044d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1054d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1064d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1074d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1083b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1090aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1104d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1114d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1124d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 11324aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1144d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1153b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1164d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1174d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1184d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 11924aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 12087bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 12187bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1225928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1235928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1245928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 125df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1265dffd610SBarry Smith #define matgetfactor_ matgetfactor 12735bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 128fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 129f4e70085SSatish Balay #define matgetrowij_ matgetrowij 130f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 131f4e70085SSatish Balay #define matgetrow_ matgetrow 132f4e70085SSatish Balay #define matrestorerow_ matrestorerow 133f4e70085SSatish Balay #define matview_ matview 134f7e310deSShri Abhyankar #define matload_ matload 1358c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1368c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1378c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1388572280aSBarry Smith #define matdensegetarrayread_ matdensegetarrayread 1398c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 1408572280aSBarry Smith #define matdenserestorearrayread_ matdenserestorearrayread 141f4e70085SSatish Balay #define matconvert_ matconvert 1427dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 14317ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 14417ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 14517ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 146d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 147f4e70085SSatish Balay #define matzerorows_ matzerorows 148f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 149f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 150f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 15117ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 15217ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1531eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 154812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1555ba43861SSatish Balay #define matgetinfo_ matgetinfo 15622688b47SSatish Balay #define matlufactor_ matlufactor 15722688b47SSatish Balay #define matilufactor_ matilufactor 15822688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 15922688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 16022688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 16122688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 16222688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 16322688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 16422688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 16522688b47SSatish Balay #define maticcfactor_ maticcfactor 16622688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 167b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1680905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 1693be0408cSBarry Smith #define matgetsize00_ matgetsize00 1703be0408cSBarry Smith #define matgetsize10_ matgetsize10 1713be0408cSBarry Smith #define matgetsize01_ matgetsize01 1723be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1733be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1743be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 175260663b8SBarry Smith #define matgetnullspace_ matgetnullspace 176260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 177260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 178afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 179f4e70085SSatish Balay #endif 180f4e70085SSatish Balay 181260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 182260663b8SBarry Smith { 183260663b8SBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(nullsp); 184260663b8SBarry Smith *ierr = MatSetNullSpace(*mat,*nullsp); 185260663b8SBarry Smith } 186260663b8SBarry Smith 187260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 188260663b8SBarry Smith { 189260663b8SBarry Smith MatNullSpace sp; 190260663b8SBarry Smith *ierr = MatGetNullSpace(*mat,&sp);if (*ierr) return; 191260663b8SBarry Smith if (!sp) { 192260663b8SBarry Smith *nullsp = (MatNullSpace) -1; 193260663b8SBarry Smith } else { 194260663b8SBarry Smith *nullsp = sp; 195260663b8SBarry Smith } 196260663b8SBarry Smith } 197260663b8SBarry Smith 198260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 199260663b8SBarry Smith { 200260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 201260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 202260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 203260663b8SBarry Smith } 204260663b8SBarry Smith 205afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 206afc39838SBarry Smith { 207afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 208afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 209afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 210afc39838SBarry Smith } 211afc39838SBarry Smith 2123be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2133be0408cSBarry Smith { 2143be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2153be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2163be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2173be0408cSBarry Smith } 2183be0408cSBarry Smith 2193be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2203be0408cSBarry Smith { 2213be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2223be0408cSBarry Smith } 2233be0408cSBarry Smith 2243be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2253be0408cSBarry Smith { 2263be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2273be0408cSBarry Smith } 2283be0408cSBarry Smith 2293be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2303be0408cSBarry Smith { 2313be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2323be0408cSBarry Smith } 2333be0408cSBarry Smith 2343be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2353be0408cSBarry Smith { 2363be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2373be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2383be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2393be0408cSBarry Smith } 2403be0408cSBarry Smith 2413be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2423be0408cSBarry Smith { 2433be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2443be0408cSBarry Smith } 2453be0408cSBarry Smith 2463be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2473be0408cSBarry Smith { 2483be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2493be0408cSBarry Smith } 2503be0408cSBarry Smith 2513be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2523be0408cSBarry Smith { 2533be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2543be0408cSBarry Smith } 2553be0408cSBarry Smith 2564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2574d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2584d03fd2bSBarry Smith } 2594d03fd2bSBarry Smith 260cee688dbSBarry 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)){ 261cee688dbSBarry Smith PetscScalar *fa; 2620aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 263cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 264cee688dbSBarry Smith } 265cee688dbSBarry Smith 2663b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2673b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2683b494cfeSSatish Balay } 2693b494cfeSSatish Balay 2704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2714d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2724d03fd2bSBarry Smith } 2734d03fd2bSBarry Smith 2744d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2754d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2764d03fd2bSBarry Smith } 2774d03fd2bSBarry Smith 2784d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2794d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2804d03fd2bSBarry Smith } 2814d03fd2bSBarry Smith 2824d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2834d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2844d03fd2bSBarry Smith } 2854d03fd2bSBarry Smith 2864d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2874d03fd2bSBarry Smith { 2884d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2894d03fd2bSBarry Smith } 2904d03fd2bSBarry Smith 2913b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2923b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2933b494cfeSSatish Balay } 2943b494cfeSSatish Balay 2954d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2964d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2974d03fd2bSBarry Smith } 2984d03fd2bSBarry Smith 2994d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3004d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3014d03fd2bSBarry Smith } 3024d03fd2bSBarry Smith 3034d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3044d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3054d03fd2bSBarry Smith } 3064d03fd2bSBarry Smith 3074d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocaln1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 3084d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 3094d03fd2bSBarry Smith } 3104d03fd2bSBarry Smith 3114d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3124d03fd2bSBarry Smith { 3134d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3144d03fd2bSBarry Smith } 3154d03fd2bSBarry Smith 3161b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3171b266c99SBarry Smith { 3181b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3191b266c99SBarry Smith } 3201b266c99SBarry Smith 3213b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3223b494cfeSSatish Balay { 3233b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3243b494cfeSSatish Balay } 3253b494cfeSSatish Balay 3261b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3271b266c99SBarry Smith { 3281b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3291b266c99SBarry Smith } 3301b266c99SBarry Smith 3314d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3324d03fd2bSBarry Smith { 3334d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3344d03fd2bSBarry Smith } 3354d03fd2bSBarry Smith 3364d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3374d03fd2bSBarry Smith { 3384d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3394d03fd2bSBarry Smith } 3404d03fd2bSBarry Smith 3414d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3424d03fd2bSBarry Smith { 3434d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3444d03fd2bSBarry Smith } 3454d03fd2bSBarry Smith 3464d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3474d03fd2bSBarry Smith { 3484d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3494d03fd2bSBarry Smith } 3504d03fd2bSBarry Smith 3513b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3523b494cfeSSatish Balay { 3533b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3543b494cfeSSatish Balay } 3553b494cfeSSatish Balay 3564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3574d03fd2bSBarry Smith { 3584d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3594d03fd2bSBarry Smith } 3604d03fd2bSBarry Smith 3614d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3624d03fd2bSBarry Smith { 3634d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3644d03fd2bSBarry Smith } 3654d03fd2bSBarry Smith 3664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3674d03fd2bSBarry Smith { 3684d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3694d03fd2bSBarry Smith } 3704d03fd2bSBarry Smith 3714d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3724d03fd2bSBarry Smith { 3734d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3744d03fd2bSBarry Smith } 3754d03fd2bSBarry Smith 3764d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3774d03fd2bSBarry Smith { 3784d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3794d03fd2bSBarry Smith } 3804d03fd2bSBarry Smith 38187bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 38287bcf4e0SBarry Smith { 38387bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 38487bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 38587bcf4e0SBarry Smith } 3864d03fd2bSBarry Smith 38787bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 38887bcf4e0SBarry Smith { 38987bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 39087bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 39187bcf4e0SBarry Smith } 39287bcf4e0SBarry Smith 3935928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3945928be6bSBarry Smith { 3955928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3965928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 3975928be6bSBarry Smith } 3985928be6bSBarry Smith 3995928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 4005928be6bSBarry Smith { 4015928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 4025928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 4035928be6bSBarry Smith } 4045928be6bSBarry Smith 405b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 406b22b330cSBarry Smith { 407b22b330cSBarry Smith PetscErrorCode ierr = 0; 408b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 409b22b330cSBarry Smith return 0; 410b22b330cSBarry Smith } 411b22b330cSBarry Smith 4128cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 413b22b330cSBarry Smith { 414b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 415b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 41626fbe8dcSKarl Rupp 417b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 418b22b330cSBarry Smith } 419b22b330cSBarry Smith 420d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4217c54600cSBarry Smith { 4227c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4237c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4242a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4257c54600cSBarry Smith } 4267c54600cSBarry Smith 4278cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 428ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 429f4e70085SSatish Balay { 4301a83f524SJed Brown const PetscInt *IA,*JA; 4318f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4321a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4331a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 434f4e70085SSatish Balay } 435f4e70085SSatish Balay 4368cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(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 = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4408f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 441f4e70085SSatish Balay } 442f4e70085SSatish Balay 443f4e70085SSatish Balay /* 444f4e70085SSatish Balay This is a poor way of storing the column and value pointers 445f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 446f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 447f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 448f4e70085SSatish Balay at a time. 449f4e70085SSatish Balay */ 450f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 451f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 452f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 453f4e70085SSatish Balay 4548cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 455f4e70085SSatish Balay { 456f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 457f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 458f4e70085SSatish Balay 459f4e70085SSatish Balay if (matgetrowactive) { 460efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 461f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 462f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 463f4e70085SSatish Balay *ierr = 1; 464f4e70085SSatish Balay return; 465f4e70085SSatish Balay } 466f4e70085SSatish Balay 4670298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4680298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 469f4e70085SSatish Balay 470f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 471f4e70085SSatish Balay if (*ierr) return; 472f4e70085SSatish Balay 473f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 474f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 475f4e70085SSatish Balay matgetrowactive = 1; 476f4e70085SSatish Balay } 477f4e70085SSatish Balay 4788cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 479f4e70085SSatish Balay { 480f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 481f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 482f4e70085SSatish Balay if (!matgetrowactive) { 483efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 484f4e70085SSatish Balay "Must call MatGetRow() first"); 485f4e70085SSatish Balay *ierr = 1; 486f4e70085SSatish Balay return; 487f4e70085SSatish Balay } 4880298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4890298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 490f4e70085SSatish Balay 491f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 492f4e70085SSatish Balay matgetrowactive = 0; 493f4e70085SSatish Balay } 494f4e70085SSatish Balay 4958cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 496f4e70085SSatish Balay { 497f4e70085SSatish Balay PetscViewer v; 498f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 499f4e70085SSatish Balay *ierr = MatView(*mat,v); 500f4e70085SSatish Balay } 501f4e70085SSatish Balay 5028cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 503f7e310deSShri Abhyankar { 504f7e310deSShri Abhyankar PetscViewer v; 505f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 506112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 507f7e310deSShri Abhyankar } 508f7e310deSShri Abhyankar 5098cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 510f4e70085SSatish Balay { 511f4e70085SSatish Balay PetscScalar *mm; 512f4e70085SSatish Balay PetscInt m,n; 513f4e70085SSatish Balay 5148c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 515f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 516f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 517f4e70085SSatish Balay } 518f4e70085SSatish Balay 5198cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 520f4e70085SSatish Balay { 521f4e70085SSatish Balay PetscScalar *lx; 522f4e70085SSatish Balay PetscInt m,n; 523f4e70085SSatish Balay 524f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 525f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5268c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 527f4e70085SSatish Balay } 528f4e70085SSatish Balay 5298cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 53073a71a0fSBarry Smith { 53173a71a0fSBarry Smith PetscScalar *mm; 53273a71a0fSBarry Smith PetscInt m,n; 53373a71a0fSBarry Smith 5348c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 53573a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 53673a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 53773a71a0fSBarry Smith } 53873a71a0fSBarry Smith 5398cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 54073a71a0fSBarry Smith { 54173a71a0fSBarry Smith PetscScalar *lx; 54273a71a0fSBarry Smith PetscInt m,n; 54373a71a0fSBarry Smith 54473a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 54573a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5468c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 54773a71a0fSBarry Smith } 54873a71a0fSBarry Smith 5497067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdensegetarrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5508572280aSBarry Smith { 5517067c7f7SBarry Smith const PetscScalar *mm; 5528572280aSBarry Smith PetscInt m,n; 5538572280aSBarry Smith 5548572280aSBarry Smith *ierr = MatDenseGetArrayRead(*mat,&mm); if (*ierr) return; 5558572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5567067c7f7SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,(PetscScalar*)mm,m*n,ia); if (*ierr) return; 5578572280aSBarry Smith } 5588572280aSBarry Smith 5597067c7f7SBarry Smith 5607067c7f7SBarry Smith PETSC_EXTERN void PETSC_STDCALL matdenserestorearrayread_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 5618572280aSBarry Smith { 5627067c7f7SBarry Smith const PetscScalar *lx; 5638572280aSBarry Smith PetscInt m,n; 5648572280aSBarry Smith 5658572280aSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 5667067c7f7SBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,(PetscScalar**)&lx);if (*ierr) return; 5678572280aSBarry Smith *ierr = MatDenseRestoreArrayRead(*mat,&lx);if (*ierr) return; 5688572280aSBarry Smith } 5698572280aSBarry Smith 570390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 57135bd34faSBarry Smith { 57235bd34faSBarry Smith const char *tname; 57335bd34faSBarry Smith 5743ca39a21SBarry Smith *ierr = MatFactorGetSolverType(*mat,&tname);if (*ierr) return; 57535bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 57635bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 57735bd34faSBarry Smith } 57835bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 57935bd34faSBarry Smith } 58035bd34faSBarry Smith 581390e1bf2SBarry 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)) 5825dffd610SBarry Smith { 5835dffd610SBarry Smith char *t; 5845dffd610SBarry Smith FIXCHAR(outtype,len,t); 5859be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5865dffd610SBarry Smith FREECHAR(outtype,t); 5875dffd610SBarry Smith } 5885dffd610SBarry Smith 589390e1bf2SBarry 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)) 590f4e70085SSatish Balay { 591f4e70085SSatish Balay char *t; 592f4e70085SSatish Balay FIXCHAR(outtype,len,t); 593f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 594f4e70085SSatish Balay FREECHAR(outtype,t); 595f4e70085SSatish Balay } 596f4e70085SSatish Balay 597f4e70085SSatish Balay /* 5987dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 599f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 6007dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 601f4e70085SSatish Balay */ 6027dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 603f4e70085SSatish Balay { 604f4e70085SSatish Balay Mat *lsmat; 605f4e70085SSatish Balay PetscInt i; 606f4e70085SSatish Balay 607f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 6087dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 609de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 610f4e70085SSatish Balay smat[i] = lsmat[i]; 611f4e70085SSatish Balay } 612f4e70085SSatish Balay *ierr = PetscFree(lsmat); 613f4e70085SSatish Balay } else { 6147dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 615f4e70085SSatish Balay } 616f4e70085SSatish Balay } 617f4e70085SSatish Balay 6187d6bfa3bSBarry Smith /* 6197d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 620de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 621de7ef04eSHong Zhang the array is freed 622de7ef04eSHong Zhang */ 623de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 624de7ef04eSHong Zhang { 625de7ef04eSHong Zhang PetscInt i; 626de7ef04eSHong Zhang 627de7ef04eSHong Zhang for (i=0; i<*n; i++) { 628de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 629de7ef04eSHong Zhang } 630de7ef04eSHong Zhang } 631de7ef04eSHong Zhang 632de7ef04eSHong Zhang /* 633de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6347d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6357dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6367d6bfa3bSBarry Smith */ 637de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6387d6bfa3bSBarry Smith { 639de7ef04eSHong Zhang Mat *lsmat; 6407d6bfa3bSBarry Smith PetscInt i; 6417d6bfa3bSBarry Smith 642de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 643de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 644de7ef04eSHong Zhang lsmat[i] = smat[i]; 6457d6bfa3bSBarry Smith } 646de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 647df750dc8SHong Zhang } 648df750dc8SHong Zhang 6498cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 65017ede90eSSatish Balay { 65117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 65217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 65317ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 65417ede90eSSatish Balay } 65517ede90eSSatish Balay 6568cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 65717ede90eSSatish Balay { 65817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 65917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 66017ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 66117ede90eSSatish Balay } 66217ede90eSSatish Balay 6638cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 66417ede90eSSatish Balay { 66517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 66617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 66717ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 66817ede90eSSatish Balay } 66917ede90eSSatish Balay 6708cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 671d25a37e1SJed Brown { 672d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 673d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 674d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 675d25a37e1SJed Brown } 676d25a37e1SJed Brown 6778cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 678f4e70085SSatish Balay { 6792b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6802b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6812b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 682f4e70085SSatish Balay } 683f4e70085SSatish Balay 6848cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 685f4e70085SSatish Balay { 6862b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6872b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6882b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 689f4e70085SSatish Balay } 690f4e70085SSatish Balay 6918cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 692f4e70085SSatish Balay { 6932b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6942b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6952b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 696f4e70085SSatish Balay } 697f4e70085SSatish Balay 6988cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 699f4e70085SSatish Balay { 7002b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 7012b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 7022b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 703f4e70085SSatish Balay } 704f4e70085SSatish Balay 7058cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 70617ede90eSSatish Balay { 70717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 70817ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 70917ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 71017ede90eSSatish Balay } 71117ede90eSSatish Balay 7128cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 71317ede90eSSatish Balay { 71417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 71517ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 71617ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 71717ede90eSSatish Balay } 7181eea217eSSatish Balay 719390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 7201eea217eSSatish Balay { 7211eea217eSSatish Balay char *t; 7221eea217eSSatish Balay 7231eea217eSSatish Balay FIXCHAR(prefix,len,t); 7241eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 7251eea217eSSatish Balay FREECHAR(prefix,t); 7261eea217eSSatish Balay } 7271eea217eSSatish Balay 728d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 729812c3f48SMatthew Knepley { 730260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 731d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 732812c3f48SMatthew Knepley } 7331eea217eSSatish Balay 7344d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7355ba43861SSatish Balay { 7364d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7375ba43861SSatish Balay } 7385ba43861SSatish Balay 7394d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 74022688b47SSatish Balay { 7414d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 74222688b47SSatish Balay } 74322688b47SSatish Balay 7444d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 74522688b47SSatish Balay { 7464d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 74722688b47SSatish Balay } 74822688b47SSatish Balay 7494d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 75022688b47SSatish Balay { 751*954bb437SSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(row); 752*954bb437SSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(col); 7534d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 75422688b47SSatish Balay } 75522688b47SSatish Balay 7564d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 75722688b47SSatish Balay { 7584d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 75922688b47SSatish Balay } 76022688b47SSatish Balay 7614d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 76222688b47SSatish Balay { 7634d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 76422688b47SSatish Balay } 76522688b47SSatish Balay 7664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 76722688b47SSatish Balay { 7684d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 76922688b47SSatish Balay } 77022688b47SSatish Balay 7714d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 77222688b47SSatish Balay { 7734d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 77422688b47SSatish Balay } 77522688b47SSatish Balay 7764d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 77722688b47SSatish Balay { 7784d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 77922688b47SSatish Balay } 78022688b47SSatish Balay 7814d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 78222688b47SSatish Balay { 7834d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 78422688b47SSatish Balay } 78522688b47SSatish Balay 7864d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 78722688b47SSatish Balay { 7884d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 78922688b47SSatish Balay } 79022688b47SSatish Balay 7914d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 79222688b47SSatish Balay { 7934d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 79422688b47SSatish Balay } 795