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 508c778c55SBarry Smith #define matdenserestorearray_ MATDENSERESTOREARRAY 51f4e70085SSatish Balay #define matconvert_ MATCONVERT 527dae84e0SHong Zhang #define matcreatesubmatrices_ MATCREATESUBMATRICES 5317ede90eSSatish Balay #define matzerorowscolumns_ MATZEROROWSCOLUMNS 5417ede90eSSatish Balay #define matzerorowscolumnsis_ MATZEROROWSCOLUMNSIS 5517ede90eSSatish Balay #define matzerorowsstencil_ MATZEROROWSSTENCIL 56d25a37e1SJed Brown #define matzerorowscolumnsstencil_ MATZEROROWSCOLUMNSSTENCIL 57f4e70085SSatish Balay #define matzerorows_ MATZEROROWS 58f4e70085SSatish Balay #define matzerorowsis_ MATZEROROWSIS 59f4e70085SSatish Balay #define matzerorowslocal_ MATZEROROWSLOCAL 60f4e70085SSatish Balay #define matzerorowslocalis_ MATZEROROWSLOCALIS 6117ede90eSSatish Balay #define matzerorowscolumnslocal_ MATZEROROWSCOLUMNSLOCAL 6217ede90eSSatish Balay #define matzerorowscolumnslocalis_ MATZEROROWSCOLUMNSLOCALIS 631eea217eSSatish Balay #define matsetoptionsprefix_ MATSETOPTIONSPREFIX 64fcc9d04bSBarry Smith #define matcreatevecs_ MATCREATEVECS 65c9d5ca86SBarry Smith #define matnullspaceremove_ MATNULLSPACEREMOVE 665ba43861SSatish Balay #define matgetinfo_ MATGETINFO 6722688b47SSatish Balay #define matlufactor_ MATLUFACTOR 6822688b47SSatish Balay #define matilufactor_ MATILUFACTOR 6922688b47SSatish Balay #define matlufactorsymbolic_ MATLUFACTORSYMBOLIC 7022688b47SSatish Balay #define matlufactornumeric_ MATLUFACTORNUMERIC 7122688b47SSatish Balay #define matcholeskyfactor_ MATCHOLESKYFACTOR 7222688b47SSatish Balay #define matcholeskyfactorsymbolic_ MATCHOLESKYFACTORSYMBOLIC 7322688b47SSatish Balay #define matcholeskyfactornumeric_ MATCHOLESKYFACTORNUMERIC 7422688b47SSatish Balay #define matilufactorsymbolic_ MATILUFACTORSYMBOLIC 7522688b47SSatish Balay #define maticcfactorsymbolic_ MATICCFACTORSYMBOLIC 7622688b47SSatish Balay #define maticcfactor_ MATICCFACTOR 7722688b47SSatish Balay #define matfactorinfoinitialize_ MATFACTORINFOINITIALIZE 78b22b330cSBarry Smith #define matnullspacesetfunction_ MATNULLSPACESETFUNCTION 790905d9aaSJed Brown #define matfindnonzerorows_ MATFINDNONZEROROWS 803be0408cSBarry Smith #define matgetsize00_ MATGETSIZE00 813be0408cSBarry Smith #define matgetsize10_ MATGETSIZE10 823be0408cSBarry Smith #define matgetsize01_ MATGETSIZE01 833be0408cSBarry Smith #define matgetlocalsize00_ MATGETLOCALSIZE00 843be0408cSBarry Smith #define matgetlocalsize10_ MATGETLOCALSIZE10 853be0408cSBarry Smith #define matgetlocalsize01_ MATGETLOCALSIZE01 86260663b8SBarry Smith #define matgetnullspace_ MATGETNULLSPACE 87260663b8SBarry Smith #define matsetnullspace_ MATSETNULLSPACE 88260663b8SBarry Smith #define matgetownershiprange_ MATGETOWNERSHIPRANGE 89*afc39838SBarry Smith #define matgetownershiprangecolumn_ MATGETOWNERSHIPRANGECOLUMN 90f4e70085SSatish Balay #elif !defined(PETSC_HAVE_FORTRAN_UNDERSCORE) 914d03fd2bSBarry Smith #define matsetvalues_ matsetvalues 921006886cSSatish Balay #define matsetvaluesnnnn_ matsetvaluesnnnn 933b494cfeSSatish Balay #define matsetvalues0_ matsetvalues0 941b266c99SBarry Smith #define matsetvaluesnn1_ matsetvaluesnn1 954d03fd2bSBarry Smith #define matsetvalues11_ matsetvalues11 964d03fd2bSBarry Smith #define matsetvaluesn1_ matsetvaluesn1 974d03fd2bSBarry Smith #define matsetvalues1n_ matsetvalues1n 984d03fd2bSBarry Smith #define matsetvalueslocal_ matsetvalueslocal 993b494cfeSSatish Balay #define matsetvalueslocal0_ matsetvalueslocal0 1004d03fd2bSBarry Smith #define matsetvalueslocal11_ matsetvalueslocal11 1014d03fd2bSBarry Smith #define matsetvalueslocal11nn_ matsetvalueslocal11nn 1024d03fd2bSBarry Smith #define matsetvalueslocal111_ matsetvalueslocal111 1034d03fd2bSBarry Smith #define matsetvalueslocal1n_ matsetvalueslocal1n 1044d03fd2bSBarry Smith #define matsetvalueslocaln1_ matsetvalueslocaln1 1054d03fd2bSBarry Smith #define matsetvaluesblocked_ matsetvaluesblocked 1063b494cfeSSatish Balay #define matsetvaluesblocked0_ matsetvaluesblocked0 1070aee3464SBarry Smith #define matsetvaluesblocked2_ matsetvaluesblocked2 1084d03fd2bSBarry Smith #define matsetvaluesblocked11_ matsetvaluesblocked11 1094d03fd2bSBarry Smith #define matsetvaluesblocked111_ matsetvaluesblocked111 1104d03fd2bSBarry Smith #define matsetvaluesblocked1n_ matsetvaluesblocked1n 11124aa916eSSatish Balay #define matsetvaluesblockedn1_ matsetvaluesblockedn1 1124d03fd2bSBarry Smith #define matsetvaluesblockedlocal_ matsetvaluesblockedlocal 1133b494cfeSSatish Balay #define matsetvaluesblockedlocal0_ matsetvaluesblockedlocal0 1144d03fd2bSBarry Smith #define matsetvaluesblockedlocal11_ matsetvaluesblockedlocal11 1154d03fd2bSBarry Smith #define matsetvaluesblockedlocal111_ matsetvaluesblockedlocal111 1164d03fd2bSBarry Smith #define matsetvaluesblockedlocal1n_ matsetvaluesblockedlocal1n 11724aa916eSSatish Balay #define matsetvaluesblockedlocaln1_ matsetvaluesblockedlocaln1 11887bcf4e0SBarry Smith #define matgetrowmin_ matgetrowmin 11987bcf4e0SBarry Smith #define matgetrowminabs_ matgetrowminabs 1205928be6bSBarry Smith #define matgetrowmax_ matgetrowmax 1215928be6bSBarry Smith #define matgetrowmaxabs_ matgetrowmaxabs 1225928be6bSBarry Smith #define matdestroymatrices_ matdestroymatrices 123df750dc8SHong Zhang #define matdestroysubmatrices_ matdestroysubmatrices 1245dffd610SBarry Smith #define matgetfactor_ matgetfactor 12535bd34faSBarry Smith #define matfactorgetsolverpackage_ matfactorgetsolverpackage 126fcc9d04bSBarry Smith #define matcreatevecs_ matcreatevecs 127f4e70085SSatish Balay #define matgetrowij_ matgetrowij 128f4e70085SSatish Balay #define matrestorerowij_ matrestorerowij 129f4e70085SSatish Balay #define matgetrow_ matgetrow 130f4e70085SSatish Balay #define matrestorerow_ matrestorerow 131f4e70085SSatish Balay #define matview_ matview 132f7e310deSShri Abhyankar #define matload_ matload 1338c778c55SBarry Smith #define matseqaijgetarray_ matseqaijgetarray 1348c778c55SBarry Smith #define matseqaijrestorearray_ matseqaijrestorearray 1358c778c55SBarry Smith #define matdensegetarray_ matdensegetarray 1368c778c55SBarry Smith #define matdenserestorearray_ matdenserestorearray 137f4e70085SSatish Balay #define matconvert_ matconvert 1387dae84e0SHong Zhang #define matcreatesubmatrices_ matcreatesubmatrices 13917ede90eSSatish Balay #define matzerorowscolumns_ matzerorowscolumns 14017ede90eSSatish Balay #define matzerorowscolumnsis_ matzerorowscolumnsis 14117ede90eSSatish Balay #define matzerorowsstencil_ matzerorowsstencil 142d25a37e1SJed Brown #define matzerorowscolumnsstencil_ matzerorowscolumnsstencil 143f4e70085SSatish Balay #define matzerorows_ matzerorows 144f4e70085SSatish Balay #define matzerorowsis_ matzerorowsis 145f4e70085SSatish Balay #define matzerorowslocal_ matzerorowslocal 146f4e70085SSatish Balay #define matzerorowslocalis_ matzerorowslocalis 14717ede90eSSatish Balay #define matzerorowscolumnslocal_ matzerorowscolumnslocal 14817ede90eSSatish Balay #define matzerorowscolumnslocalis_ matzerorowscolumnslocalis 1491eea217eSSatish Balay #define matsetoptionsprefix_ matsetoptionsprefix 150812c3f48SMatthew Knepley #define matnullspaceremove_ matnullspaceremove 1515ba43861SSatish Balay #define matgetinfo_ matgetinfo 15222688b47SSatish Balay #define matlufactor_ matlufactor 15322688b47SSatish Balay #define matilufactor_ matilufactor 15422688b47SSatish Balay #define matlufactorsymbolic_ matlufactorsymbolic 15522688b47SSatish Balay #define matlufactornumeric_ matlufactornumeric 15622688b47SSatish Balay #define matcholeskyfactor_ matcholeskyfactor 15722688b47SSatish Balay #define matcholeskyfactorsymbolic_ matcholeskyfactorsymbolic 15822688b47SSatish Balay #define matcholeskyfactornumeric_ matcholeskyfactornumeric 15922688b47SSatish Balay #define matilufactorsymbolic_ matilufactorsymbolic 16022688b47SSatish Balay #define maticcfactorsymbolic_ maticcfactorsymbolic 16122688b47SSatish Balay #define maticcfactor_ maticcfactor 16222688b47SSatish Balay #define matfactorinfoinitialize_ matfactorinfoinitialize 163b22b330cSBarry Smith #define matnullspacesetfunction_ matnullspacesetfunction 1640905d9aaSJed Brown #define matfindnonzerorows_ matfindnonzerorows 1653be0408cSBarry Smith #define matgetsize00_ matgetsize00 1663be0408cSBarry Smith #define matgetsize10_ matgetsize10 1673be0408cSBarry Smith #define matgetsize01_ matgetsize01 1683be0408cSBarry Smith #define matgetlocalsize00_ matgetlocalsize00 1693be0408cSBarry Smith #define matgetlocalsize10_ matgetlocalsize10 1703be0408cSBarry Smith #define matgetlocalsize01_ matgetlocalsize01 171260663b8SBarry Smith #define matgetnullspace_ matgetnullspace 172260663b8SBarry Smith #define matsetnullspace_ matsetnullspace 173260663b8SBarry Smith #define matgetownershiprange_ matgetownershiprange 174*afc39838SBarry Smith #define matgetownershiprangecolumn_ matgetownershiprangecolumn 175f4e70085SSatish Balay #endif 176f4e70085SSatish Balay 177260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 178260663b8SBarry Smith { 179260663b8SBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(nullsp); 180260663b8SBarry Smith *ierr = MatSetNullSpace(*mat,*nullsp); 181260663b8SBarry Smith } 182260663b8SBarry Smith 183260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetnullspace_(Mat *mat, MatNullSpace *nullsp, int *ierr) 184260663b8SBarry Smith { 185260663b8SBarry Smith MatNullSpace sp; 186260663b8SBarry Smith *ierr = MatGetNullSpace(*mat,&sp);if (*ierr) return; 187260663b8SBarry Smith if (!sp) { 188260663b8SBarry Smith *nullsp = (MatNullSpace) -1; 189260663b8SBarry Smith } else { 190260663b8SBarry Smith *nullsp = sp; 191260663b8SBarry Smith } 192260663b8SBarry Smith } 193260663b8SBarry Smith 194260663b8SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprange_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 195260663b8SBarry Smith { 196260663b8SBarry Smith CHKFORTRANNULLINTEGER(m); 197260663b8SBarry Smith CHKFORTRANNULLINTEGER(n); 198260663b8SBarry Smith *ierr = MatGetOwnershipRange(*mat,m,n); 199260663b8SBarry Smith } 200260663b8SBarry Smith 201*afc39838SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetownershiprangecolumn_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 202*afc39838SBarry Smith { 203*afc39838SBarry Smith CHKFORTRANNULLINTEGER(m); 204*afc39838SBarry Smith CHKFORTRANNULLINTEGER(n); 205*afc39838SBarry Smith *ierr = MatGetOwnershipRangeColumn(*mat,m,n); 206*afc39838SBarry Smith } 207*afc39838SBarry Smith 2083be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2093be0408cSBarry Smith { 2103be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2113be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2123be0408cSBarry Smith *ierr = MatGetSize(*mat,m,n); 2133be0408cSBarry Smith } 2143be0408cSBarry Smith 2153be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2163be0408cSBarry Smith { 2173be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2183be0408cSBarry Smith } 2193be0408cSBarry Smith 2203be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2213be0408cSBarry Smith { 2223be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2233be0408cSBarry Smith } 2243be0408cSBarry Smith 2253be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2263be0408cSBarry Smith { 2273be0408cSBarry Smith matgetsize_(mat,m,n,ierr); 2283be0408cSBarry Smith } 2293be0408cSBarry Smith 2303be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2313be0408cSBarry Smith { 2323be0408cSBarry Smith CHKFORTRANNULLINTEGER(m); 2333be0408cSBarry Smith CHKFORTRANNULLINTEGER(n); 2343be0408cSBarry Smith *ierr = MatGetLocalSize(*mat,m,n); 2353be0408cSBarry Smith } 2363be0408cSBarry Smith 2373be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize00_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2383be0408cSBarry Smith { 2393be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2403be0408cSBarry Smith } 2413be0408cSBarry Smith 2423be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize10_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2433be0408cSBarry Smith { 2443be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2453be0408cSBarry Smith } 2463be0408cSBarry Smith 2473be0408cSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetlocalsize01_(Mat *mat,PetscInt *m,PetscInt *n, int *ierr ) 2483be0408cSBarry Smith { 2493be0408cSBarry Smith matgetlocalsize_(mat,m,n,ierr); 2503be0408cSBarry Smith } 2513be0408cSBarry Smith 2524d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2534d03fd2bSBarry Smith *ierr = MatSetValuesBlocked(*mat,*m,idxm,*n,idxn,v,*addv); 2544d03fd2bSBarry Smith } 2554d03fd2bSBarry Smith 256cee688dbSBarry 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)){ 257cee688dbSBarry Smith PetscScalar *fa; 2580aee3464SBarry Smith *ierr = F90Array2dAccess(y,MPIU_SCALAR,(void**)&fa PETSC_F90_2PTR_PARAM(ptrd));if (*ierr) return; 259cee688dbSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,fa,addv,ierr); 260cee688dbSBarry Smith } 261cee688dbSBarry Smith 2623b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2633b494cfeSSatish Balay matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2643b494cfeSSatish Balay } 2653b494cfeSSatish Balay 2664d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2674d03fd2bSBarry Smith matsetvaluesblocked_(mat,m,idxm,n,idxn,v,addv,ierr); 2684d03fd2bSBarry Smith } 2694d03fd2bSBarry Smith 2704d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblocked111_(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 matsetvaluesblocked1n_(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 matsetvaluesblockedn1_(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 matsetvaluesblockedlocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 2834d03fd2bSBarry Smith { 2844d03fd2bSBarry Smith *ierr = MatSetValuesBlockedLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 2854d03fd2bSBarry Smith } 2864d03fd2bSBarry Smith 2873b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2883b494cfeSSatish Balay matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2893b494cfeSSatish Balay } 2903b494cfeSSatish Balay 2914d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ){ 2924d03fd2bSBarry Smith matsetvaluesblockedlocal_(mat,m,idxm,n,idxn,v,addv,ierr); 2934d03fd2bSBarry Smith } 2944d03fd2bSBarry Smith 2954d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesblockedlocal111_(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 matsetvaluesblockedlocal1n_(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 matsetvaluesblockedlocaln1_(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 matsetvalues_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3084d03fd2bSBarry Smith { 3094d03fd2bSBarry Smith *ierr = MatSetValues(*mat,*m,idxm,*n,idxn,v,*addv); 3104d03fd2bSBarry Smith } 3114d03fd2bSBarry Smith 3121b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnnnn_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3131b266c99SBarry Smith { 3141b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3151b266c99SBarry Smith } 3161b266c99SBarry Smith 3173b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalues0_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3183b494cfeSSatish Balay { 3193b494cfeSSatish Balay matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3203b494cfeSSatish Balay } 3213b494cfeSSatish Balay 3221b266c99SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesnn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3231b266c99SBarry Smith { 3241b266c99SBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3251b266c99SBarry Smith } 3261b266c99SBarry Smith 3274d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues11_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3284d03fd2bSBarry Smith { 3294d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3304d03fd2bSBarry Smith } 3314d03fd2bSBarry Smith 3324d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvaluesn1_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3334d03fd2bSBarry Smith { 3344d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3354d03fd2bSBarry Smith } 3364d03fd2bSBarry Smith 3374d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalues1n_(Mat *mat,PetscInt *m, PetscInt idxm[],PetscInt *n, PetscInt idxn[], PetscScalar v[],InsertMode *addv, int *ierr ) 3384d03fd2bSBarry Smith { 3394d03fd2bSBarry Smith matsetvalues_(mat,m,idxm,n,idxn,v,addv,ierr); 3404d03fd2bSBarry Smith } 3414d03fd2bSBarry Smith 3424d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3434d03fd2bSBarry Smith { 3444d03fd2bSBarry Smith *ierr = MatSetValuesLocal(*mat,*nrow,irow,*ncol,icol,y,*addv); 3454d03fd2bSBarry Smith } 3464d03fd2bSBarry Smith 3473b494cfeSSatish Balay PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal0_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3483b494cfeSSatish Balay { 3493b494cfeSSatish Balay matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3503b494cfeSSatish Balay } 3513b494cfeSSatish Balay 3524d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3534d03fd2bSBarry Smith { 3544d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3554d03fd2bSBarry Smith } 3564d03fd2bSBarry Smith 3574d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal11nn_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3584d03fd2bSBarry Smith { 3594d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3604d03fd2bSBarry Smith } 3614d03fd2bSBarry Smith 3624d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal111_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3634d03fd2bSBarry Smith { 3644d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3654d03fd2bSBarry Smith } 3664d03fd2bSBarry Smith 3674d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocal1n_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3684d03fd2bSBarry Smith { 3694d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3704d03fd2bSBarry Smith } 3714d03fd2bSBarry Smith 3724d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetvalueslocaln1_(Mat *mat,PetscInt *nrow, PetscInt irow[],PetscInt *ncol, PetscInt icol[], PetscScalar y[],InsertMode *addv, int *ierr ) 3734d03fd2bSBarry Smith { 3744d03fd2bSBarry Smith matsetvalueslocal_(mat,nrow,irow,ncol,icol,y,addv,ierr); 3754d03fd2bSBarry Smith } 3764d03fd2bSBarry Smith 37787bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmin_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 37887bcf4e0SBarry Smith { 37987bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 38087bcf4e0SBarry Smith *ierr = MatGetRowMin(*mat,*v,idx); 38187bcf4e0SBarry Smith } 3824d03fd2bSBarry Smith 38387bcf4e0SBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowminabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 38487bcf4e0SBarry Smith { 38587bcf4e0SBarry Smith CHKFORTRANNULLINTEGER(idx); 38687bcf4e0SBarry Smith *ierr = MatGetRowMinAbs(*mat,*v,idx); 38787bcf4e0SBarry Smith } 38887bcf4e0SBarry Smith 3895928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmax_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3905928be6bSBarry Smith { 3915928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3925928be6bSBarry Smith *ierr = MatGetRowMax(*mat,*v,idx); 3935928be6bSBarry Smith } 3945928be6bSBarry Smith 3955928be6bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetrowmaxabs_(Mat *mat,Vec *v,PetscInt idx[], int *ierr ) 3965928be6bSBarry Smith { 3975928be6bSBarry Smith CHKFORTRANNULLINTEGER(idx); 3985928be6bSBarry Smith *ierr = MatGetRowMaxAbs(*mat,*v,idx); 3995928be6bSBarry Smith } 4005928be6bSBarry Smith 401b22b330cSBarry Smith static PetscErrorCode ournullfunction(MatNullSpace sp,Vec x,void *ctx) 402b22b330cSBarry Smith { 403b22b330cSBarry Smith PetscErrorCode ierr = 0; 404b22b330cSBarry Smith (*(void (PETSC_STDCALL *)(MatNullSpace*,Vec*,void*,PetscErrorCode*))(((PetscObject)sp)->fortran_func_pointers[0]))(&sp,&x,ctx,&ierr);CHKERRQ(ierr); 405b22b330cSBarry Smith return 0; 406b22b330cSBarry Smith } 407b22b330cSBarry Smith 4088cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspacesetfunction_(MatNullSpace *sp, PetscErrorCode (*rem)(MatNullSpace,Vec,void*),void *ctx,PetscErrorCode *ierr) 409b22b330cSBarry Smith { 410b22b330cSBarry Smith PetscObjectAllocateFortranPointers(*sp,1); 411b22b330cSBarry Smith ((PetscObject)*sp)->fortran_func_pointers[0] = (PetscVoidFunction)rem; 41226fbe8dcSKarl Rupp 413b22b330cSBarry Smith *ierr = MatNullSpaceSetFunction(*sp,ournullfunction,ctx); 414b22b330cSBarry Smith } 415b22b330cSBarry Smith 416d2da0f5dSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcreatevecs_(Mat *mat,Vec *right,Vec *left, int *ierr) 4177c54600cSBarry Smith { 4187c54600cSBarry Smith CHKFORTRANNULLOBJECT(right); 4197c54600cSBarry Smith CHKFORTRANNULLOBJECT(left); 4202a7a6963SBarry Smith *ierr = MatCreateVecs(*mat,right,left); 4217c54600cSBarry Smith } 4227c54600cSBarry Smith 4238cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed,PetscInt *n,PetscInt *ia,size_t *iia, 424ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 425f4e70085SSatish Balay { 4261a83f524SJed Brown const PetscInt *IA,*JA; 4278f7157efSSatish Balay *ierr = MatGetRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done);if (*ierr) return; 4281a83f524SJed Brown *iia = PetscIntAddressToFortran(ia,(PetscInt*)IA); 4291a83f524SJed Brown *jja = PetscIntAddressToFortran(ja,(PetscInt*)JA); 430f4e70085SSatish Balay } 431f4e70085SSatish Balay 4328cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerowij_(Mat *B,PetscInt *shift,PetscBool *sym,PetscBool *blockcompressed, PetscInt *n,PetscInt *ia,size_t *iia, 433ace3abfcSBarry Smith PetscInt *ja,size_t *jja,PetscBool *done,PetscErrorCode *ierr) 434f4e70085SSatish Balay { 4351a83f524SJed Brown const PetscInt *IA = PetscIntAddressFromFortran(ia,*iia),*JA = PetscIntAddressFromFortran(ja,*jja); 4368f7157efSSatish Balay *ierr = MatRestoreRowIJ(*B,*shift,*sym,*blockcompressed,n,&IA,&JA,done); 437f4e70085SSatish Balay } 438f4e70085SSatish Balay 439f4e70085SSatish Balay /* 440f4e70085SSatish Balay This is a poor way of storing the column and value pointers 441f4e70085SSatish Balay generated by MatGetRow() to be returned with MatRestoreRow() 442f4e70085SSatish Balay but there is not natural,good place else to store them. Hence 443f4e70085SSatish Balay Fortran programmers can only have one outstanding MatGetRows() 444f4e70085SSatish Balay at a time. 445f4e70085SSatish Balay */ 446f4e70085SSatish Balay static PetscErrorCode matgetrowactive = 0; 447f4e70085SSatish Balay static const PetscInt *my_ocols = 0; 448f4e70085SSatish Balay static const PetscScalar *my_ovals = 0; 449f4e70085SSatish Balay 4508cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matgetrow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 451f4e70085SSatish Balay { 452f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 453f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 454f4e70085SSatish Balay 455f4e70085SSatish Balay if (matgetrowactive) { 456efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatGetRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 457f4e70085SSatish Balay "Cannot have two MatGetRow() active simultaneously\n\ 458f4e70085SSatish Balay call MatRestoreRow() before calling MatGetRow() a second time"); 459f4e70085SSatish Balay *ierr = 1; 460f4e70085SSatish Balay return; 461f4e70085SSatish Balay } 462f4e70085SSatish Balay 4630298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4640298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 465f4e70085SSatish Balay 466f4e70085SSatish Balay *ierr = MatGetRow(*mat,*row,ncols,oocols,oovals); 467f4e70085SSatish Balay if (*ierr) return; 468f4e70085SSatish Balay 469f4e70085SSatish Balay if (oocols) { *ierr = PetscMemcpy(cols,my_ocols,(*ncols)*sizeof(PetscInt)); if (*ierr) return;} 470f4e70085SSatish Balay if (oovals) { *ierr = PetscMemcpy(vals,my_ovals,(*ncols)*sizeof(PetscScalar)); if (*ierr) return;} 471f4e70085SSatish Balay matgetrowactive = 1; 472f4e70085SSatish Balay } 473f4e70085SSatish Balay 4748cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matrestorerow_(Mat *mat,PetscInt *row,PetscInt *ncols,PetscInt *cols,PetscScalar *vals,PetscErrorCode *ierr) 475f4e70085SSatish Balay { 476f4e70085SSatish Balay const PetscInt **oocols = &my_ocols; 477f4e70085SSatish Balay const PetscScalar **oovals = &my_ovals; 478f4e70085SSatish Balay if (!matgetrowactive) { 479efca3c55SSatish Balay PetscError(PETSC_COMM_SELF,__LINE__,"MatRestoreRow_Fortran",__FILE__,PETSC_ERR_ARG_WRONGSTATE,PETSC_ERROR_INITIAL, 480f4e70085SSatish Balay "Must call MatGetRow() first"); 481f4e70085SSatish Balay *ierr = 1; 482f4e70085SSatish Balay return; 483f4e70085SSatish Balay } 4840298fd71SBarry Smith CHKFORTRANNULLINTEGER(cols); if (!cols) oocols = NULL; 4850298fd71SBarry Smith CHKFORTRANNULLSCALAR(vals); if (!vals) oovals = NULL; 486f4e70085SSatish Balay 487f4e70085SSatish Balay *ierr = MatRestoreRow(*mat,*row,ncols,oocols,oovals); 488f4e70085SSatish Balay matgetrowactive = 0; 489f4e70085SSatish Balay } 490f4e70085SSatish Balay 4918cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matview_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 492f4e70085SSatish Balay { 493f4e70085SSatish Balay PetscViewer v; 494f4e70085SSatish Balay PetscPatchDefaultViewers_Fortran(vin,v); 495f4e70085SSatish Balay *ierr = MatView(*mat,v); 496f4e70085SSatish Balay } 497f4e70085SSatish Balay 4988cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matload_(Mat *mat,PetscViewer *vin,PetscErrorCode *ierr) 499f7e310deSShri Abhyankar { 500f7e310deSShri Abhyankar PetscViewer v; 501f7e310deSShri Abhyankar PetscPatchDefaultViewers_Fortran(vin,v); 502112444f4SShri Abhyankar *ierr = MatLoad(*mat,v); 503f7e310deSShri Abhyankar } 504f7e310deSShri Abhyankar 5058cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijgetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 506f4e70085SSatish Balay { 507f4e70085SSatish Balay PetscScalar *mm; 508f4e70085SSatish Balay PetscInt m,n; 509f4e70085SSatish Balay 5108c778c55SBarry Smith *ierr = MatSeqAIJGetArray(*mat,&mm); if (*ierr) return; 511f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 512f91d1997SBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 513f4e70085SSatish Balay } 514f4e70085SSatish Balay 5158cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matseqaijrestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 516f4e70085SSatish Balay { 517f4e70085SSatish Balay PetscScalar *lx; 518f4e70085SSatish Balay PetscInt m,n; 519f4e70085SSatish Balay 520f4e70085SSatish Balay *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 521f4e70085SSatish Balay *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5228c778c55SBarry Smith *ierr = MatSeqAIJRestoreArray(*mat,&lx);if (*ierr) return; 523f4e70085SSatish Balay } 524f4e70085SSatish Balay 5258cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdensegetarray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 52673a71a0fSBarry Smith { 52773a71a0fSBarry Smith PetscScalar *mm; 52873a71a0fSBarry Smith PetscInt m,n; 52973a71a0fSBarry Smith 5308c778c55SBarry Smith *ierr = MatDenseGetArray(*mat,&mm); if (*ierr) return; 53173a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 53273a71a0fSBarry Smith *ierr = PetscScalarAddressToFortran((PetscObject)*mat,1,fa,mm,m*n,ia); if (*ierr) return; 53373a71a0fSBarry Smith } 53473a71a0fSBarry Smith 5358cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matdenserestorearray_(Mat *mat,PetscScalar *fa,size_t *ia,PetscErrorCode *ierr) 53673a71a0fSBarry Smith { 53773a71a0fSBarry Smith PetscScalar *lx; 53873a71a0fSBarry Smith PetscInt m,n; 53973a71a0fSBarry Smith 54073a71a0fSBarry Smith *ierr = MatGetSize(*mat,&m,&n); if (*ierr) return; 54173a71a0fSBarry Smith *ierr = PetscScalarAddressFromFortran((PetscObject)*mat,fa,*ia,m*n,&lx);if (*ierr) return; 5428c778c55SBarry Smith *ierr = MatDenseRestoreArray(*mat,&lx);if (*ierr) return; 54373a71a0fSBarry Smith } 54473a71a0fSBarry Smith 545390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorgetsolverpackage_(Mat *mat,char* name PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 54635bd34faSBarry Smith { 54735bd34faSBarry Smith const char *tname; 54835bd34faSBarry Smith 54935bd34faSBarry Smith *ierr = MatFactorGetSolverPackage(*mat,&tname);if (*ierr) return; 55035bd34faSBarry Smith if (name != PETSC_NULL_CHARACTER_Fortran) { 55135bd34faSBarry Smith *ierr = PetscStrncpy(name,tname,len);if (*ierr) return; 55235bd34faSBarry Smith } 55335bd34faSBarry Smith FIXRETURNCHAR(PETSC_TRUE,name,len); 55435bd34faSBarry Smith } 55535bd34faSBarry Smith 556390e1bf2SBarry 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)) 5575dffd610SBarry Smith { 5585dffd610SBarry Smith char *t; 5595dffd610SBarry Smith FIXCHAR(outtype,len,t); 5609be81726SHong Zhang *ierr = MatGetFactor(*mat,t,*ftype,M); 5615dffd610SBarry Smith FREECHAR(outtype,t); 5625dffd610SBarry Smith } 5635dffd610SBarry Smith 564390e1bf2SBarry 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)) 565f4e70085SSatish Balay { 566f4e70085SSatish Balay char *t; 567f4e70085SSatish Balay FIXCHAR(outtype,len,t); 568f4e70085SSatish Balay *ierr = MatConvert(*mat,t,*reuse,M); 569f4e70085SSatish Balay FREECHAR(outtype,t); 570f4e70085SSatish Balay } 571f4e70085SSatish Balay 572f4e70085SSatish Balay /* 5737dae84e0SHong Zhang MatCreateSubmatrices() is slightly different from C since the 574f4e70085SSatish Balay Fortran provides the array to hold the submatrix objects,while in C that 5757dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 576f4e70085SSatish Balay */ 5777dae84e0SHong Zhang PETSC_EXTERN void PETSC_STDCALL matcreatesubmatrices_(Mat *mat,PetscInt *n,IS *isrow,IS *iscol,MatReuse *scall,Mat *smat,PetscErrorCode *ierr) 578f4e70085SSatish Balay { 579f4e70085SSatish Balay Mat *lsmat; 580f4e70085SSatish Balay PetscInt i; 581f4e70085SSatish Balay 582f4e70085SSatish Balay if (*scall == MAT_INITIAL_MATRIX) { 5837dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&lsmat); 584de7ef04eSHong Zhang for (i=0; i<=*n; i++) { /* lsmat[*n] might be a dummy matrix for saving data struc */ 585f4e70085SSatish Balay smat[i] = lsmat[i]; 586f4e70085SSatish Balay } 587f4e70085SSatish Balay *ierr = PetscFree(lsmat); 588f4e70085SSatish Balay } else { 5897dae84e0SHong Zhang *ierr = MatCreateSubMatrices(*mat,*n,isrow,iscol,*scall,&smat); 590f4e70085SSatish Balay } 591f4e70085SSatish Balay } 592f4e70085SSatish Balay 5937d6bfa3bSBarry Smith /* 5947d6bfa3bSBarry Smith MatDestroyMatrices() is slightly different from C since the 595de7ef04eSHong Zhang Fortran does not free the array of matrix objects, while in C that 596de7ef04eSHong Zhang the array is freed 597de7ef04eSHong Zhang */ 598de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroymatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 599de7ef04eSHong Zhang { 600de7ef04eSHong Zhang PetscInt i; 601de7ef04eSHong Zhang 602de7ef04eSHong Zhang for (i=0; i<*n; i++) { 603de7ef04eSHong Zhang *ierr = MatDestroy(&smat[i]);if (*ierr) return; 604de7ef04eSHong Zhang } 605de7ef04eSHong Zhang } 606de7ef04eSHong Zhang 607de7ef04eSHong Zhang /* 608de7ef04eSHong Zhang MatDestroySubMatrices() is slightly different from C since the 6097d6bfa3bSBarry Smith Fortran provides the array to hold the submatrix objects, while in C that 6107dae84e0SHong Zhang array is allocated by the MatCreateSubmatrices() 6117d6bfa3bSBarry Smith */ 612de7ef04eSHong Zhang PETSC_EXTERN void PETSC_STDCALL matdestroysubmatrices_(PetscInt *n,Mat *smat,PetscErrorCode *ierr) 6137d6bfa3bSBarry Smith { 614de7ef04eSHong Zhang Mat *lsmat; 6157d6bfa3bSBarry Smith PetscInt i; 6167d6bfa3bSBarry Smith 617de7ef04eSHong Zhang *ierr = PetscMalloc1(*n+1,&lsmat); 618de7ef04eSHong Zhang for (i=0; i<=*n; i++) { 619de7ef04eSHong Zhang lsmat[i] = smat[i]; 6207d6bfa3bSBarry Smith } 621de7ef04eSHong Zhang *ierr = MatDestroySubMatrices(*n,&lsmat); 622df750dc8SHong Zhang } 623df750dc8SHong Zhang 6248cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumns_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 62517ede90eSSatish Balay { 62617ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 62717ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 62817ede90eSSatish Balay *ierr = MatZeroRowsColumns(*mat,*numRows,rows,*diag,*x,*b); 62917ede90eSSatish Balay } 63017ede90eSSatish Balay 6318cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 63217ede90eSSatish Balay { 63317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 63417ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 63517ede90eSSatish Balay *ierr = MatZeroRowsColumnsIS(*mat,*is,*diag,*x,*b); 63617ede90eSSatish Balay } 63717ede90eSSatish Balay 6388cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 63917ede90eSSatish Balay { 64017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 64117ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 64217ede90eSSatish Balay *ierr = MatZeroRowsStencil(*mat,*numRows,rows,*diag,*x,*b); 64317ede90eSSatish Balay } 64417ede90eSSatish Balay 6458cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnsstencil_(Mat *mat,PetscInt *numRows,MatStencil *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 646d25a37e1SJed Brown { 647d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(x); 648d25a37e1SJed Brown CHKFORTRANNULLOBJECTDEREFERENCE(b); 649d25a37e1SJed Brown *ierr = MatZeroRowsColumnsStencil(*mat,*numRows,rows,*diag,*x,*b); 650d25a37e1SJed Brown } 651d25a37e1SJed Brown 6528cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorows_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 653f4e70085SSatish Balay { 6542b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6552b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6562b40b63fSBarry Smith *ierr = MatZeroRows(*mat,*numRows,rows,*diag,*x,*b); 657f4e70085SSatish Balay } 658f4e70085SSatish Balay 6598cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowsis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 660f4e70085SSatish Balay { 6612b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6622b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6632b40b63fSBarry Smith *ierr = MatZeroRowsIS(*mat,*is,*diag,*x,*b); 664f4e70085SSatish Balay } 665f4e70085SSatish Balay 6668cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 667f4e70085SSatish Balay { 6682b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6692b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6702b40b63fSBarry Smith *ierr = MatZeroRowsLocal(*mat,*numRows,rows,*diag,*x,*b); 671f4e70085SSatish Balay } 672f4e70085SSatish Balay 6738cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 674f4e70085SSatish Balay { 6752b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(x); 6762b40b63fSBarry Smith CHKFORTRANNULLOBJECTDEREFERENCE(b); 6772b40b63fSBarry Smith *ierr = MatZeroRowsLocalIS(*mat,*is,*diag,*x,*b); 678f4e70085SSatish Balay } 679f4e70085SSatish Balay 6808cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocal_(Mat *mat,PetscInt *numRows,PetscInt *rows,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 68117ede90eSSatish Balay { 68217ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 68317ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 68417ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocal(*mat,*numRows,rows,*diag,*x,*b); 68517ede90eSSatish Balay } 68617ede90eSSatish Balay 6878cc058d9SJed Brown PETSC_EXTERN void PETSC_STDCALL matzerorowscolumnslocalis_(Mat *mat,IS *is,PetscScalar *diag,Vec *x,Vec *b,PetscErrorCode *ierr) 68817ede90eSSatish Balay { 68917ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(x); 69017ede90eSSatish Balay CHKFORTRANNULLOBJECTDEREFERENCE(b); 69117ede90eSSatish Balay *ierr = MatZeroRowsColumnsLocalIS(*mat,*is,*diag,*x,*b); 69217ede90eSSatish Balay } 6931eea217eSSatish Balay 694390e1bf2SBarry Smith PETSC_EXTERN void PETSC_STDCALL matsetoptionsprefix_(Mat *mat,char* prefix PETSC_MIXED_LEN(len),PetscErrorCode *ierr PETSC_END_LEN(len)) 6951eea217eSSatish Balay { 6961eea217eSSatish Balay char *t; 6971eea217eSSatish Balay 6981eea217eSSatish Balay FIXCHAR(prefix,len,t); 6991eea217eSSatish Balay *ierr = MatSetOptionsPrefix(*mat,t); 7001eea217eSSatish Balay FREECHAR(prefix,t); 7011eea217eSSatish Balay } 7021eea217eSSatish Balay 703d0195637SJed Brown PETSC_EXTERN void PETSC_STDCALL matnullspaceremove_(MatNullSpace *sp,Vec *vec,PetscErrorCode *ierr) 704812c3f48SMatthew Knepley { 705260663b8SBarry Smith CHKFORTRANNULLOBJECT(*sp) 706d0195637SJed Brown *ierr = MatNullSpaceRemove(*sp,*vec); 707812c3f48SMatthew Knepley } 7081eea217eSSatish Balay 7094d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matgetinfo_(Mat *mat,MatInfoType *flag,MatInfo *info, int *ierr) 7105ba43861SSatish Balay { 7114d03fd2bSBarry Smith *ierr = MatGetInfo(*mat,*flag,info); 7125ba43861SSatish Balay } 7135ba43861SSatish Balay 7144d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 71522688b47SSatish Balay { 7164d03fd2bSBarry Smith *ierr = MatLUFactor(*mat,*row,*col,info); 71722688b47SSatish Balay } 71822688b47SSatish Balay 7194d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactor_(Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 72022688b47SSatish Balay { 7214d03fd2bSBarry Smith *ierr = MatILUFactor(*mat,*row,*col,info); 72222688b47SSatish Balay } 72322688b47SSatish Balay 7244d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 72522688b47SSatish Balay { 7264d03fd2bSBarry Smith *ierr = MatLUFactorSymbolic(*fact,*mat,*row,*col,info); 72722688b47SSatish Balay } 72822688b47SSatish Balay 7294d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matlufactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 73022688b47SSatish Balay { 7314d03fd2bSBarry Smith *ierr = MatLUFactorNumeric(*fact,*mat,info); 73222688b47SSatish Balay } 73322688b47SSatish Balay 7344d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactor_(Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 73522688b47SSatish Balay { 7364d03fd2bSBarry Smith *ierr = MatCholeskyFactor(*mat,*perm,info); 73722688b47SSatish Balay } 73822688b47SSatish Balay 7394d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 74022688b47SSatish Balay { 7414d03fd2bSBarry Smith *ierr = MatCholeskyFactorSymbolic(*fact,*mat,*perm,info); 74222688b47SSatish Balay } 74322688b47SSatish Balay 7444d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matcholeskyfactornumeric_(Mat *fact,Mat *mat,const MatFactorInfo *info, int *ierr) 74522688b47SSatish Balay { 7464d03fd2bSBarry Smith *ierr = MatCholeskyFactorNumeric(*fact,*mat,info); 74722688b47SSatish Balay } 74822688b47SSatish Balay 7494d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matilufactorsymbolic_(Mat *fact,Mat *mat,IS *row,IS *col,const MatFactorInfo *info, int *ierr) 75022688b47SSatish Balay { 7514d03fd2bSBarry Smith *ierr = MatILUFactorSymbolic(*fact,*mat,*row,*col,info); 75222688b47SSatish Balay } 75322688b47SSatish Balay 7544d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactorsymbolic_(Mat *fact,Mat *mat,IS *perm,const MatFactorInfo *info, int *ierr) 75522688b47SSatish Balay { 7564d03fd2bSBarry Smith *ierr = MatICCFactorSymbolic(*fact,*mat,*perm,info); 75722688b47SSatish Balay } 75822688b47SSatish Balay 7594d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL maticcfactor_(Mat *mat,IS *row,const MatFactorInfo *info, int *ierr) 76022688b47SSatish Balay { 7614d03fd2bSBarry Smith *ierr = MatICCFactor(*mat,*row,info); 76222688b47SSatish Balay } 76322688b47SSatish Balay 7644d03fd2bSBarry Smith PETSC_EXTERN void PETSC_STDCALL matfactorinfoinitialize_(MatFactorInfo *info, int *ierr) 76522688b47SSatish Balay { 7664d03fd2bSBarry Smith *ierr = MatFactorInfoInitialize(info); 76722688b47SSatish Balay } 768