static char help[] = "Tests sequential and parallel MatMatMult() and MatAXPY(...,SUBSET_NONZERO_PATTERN) \n\ Input arguments are:\n\ -f : file to load\n\n"; /* e.g., mpiexec -n 3 ./ex113 -f */ #include "petscmat.h" #include void save_sparse_matrix(Mat& mat, const char *fname) { int ierr=0; PetscViewer petsc_viewer; ierr = PetscViewerCreate (PETSC_COMM_WORLD, &petsc_viewer); ierr = PetscViewerASCIIOpen(PETSC_COMM_WORLD,fname,&petsc_viewer); ierr = PetscViewerSetFormat (petsc_viewer, PETSC_VIEWER_ASCII_MATLAB); ierr = MatView (mat, petsc_viewer); ierr = PetscViewerDestroy (petsc_viewer); } #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { Mat A,A1,A2,Mtmp,dstMat; PetscViewer viewer; PetscErrorCode ierr; PetscReal fill=4.0; char file[128]; PetscTruth flg; PetscInitialize(&argc,&args,(char *)0,help); /* Load the matrix A */ //ierr = PetscOptionsGetString(PETSC_NULL,"-f",file,127,&flg);CHKERRQ(ierr); //if (!flg) SETERRQ(1,"Must indicate a file name for matrix A with the -f option."); //sparse ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"F_bin.txt",FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = MatLoad(viewer,MATMPIAIJ,&A1);CHKERRQ(ierr); ierr = PetscViewerDestroy(viewer);CHKERRQ(ierr); //dense ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"tempA_bin.txt",FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = MatLoad(viewer,MATMPIDENSE,&A2);CHKERRQ(ierr); ierr = PetscViewerDestroy(viewer);CHKERRQ(ierr); //ierr = MatDuplicate(A,MAT_COPY_VALUES,&A1);CHKERRQ(ierr); //ierr = MatDuplicate(A,MAT_COPY_VALUES,&A2);CHKERRQ(ierr); ierr = MatMatMult(A1,A2,MAT_INITIAL_MATRIX,fill,&A);CHKERRQ(ierr); //ierr = MatMatMult(A,Mtmp,MAT_INITIAL_MATRIX,fill,&dstMat);CHKERRQ(ierr); //ierr = MatDestroy(Mtmp);CHKERRQ(ierr); std::cout<<"Finishing MatMatMult"<