/*MPI SpMV for unequal matrix partitioning*/ #include #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { Vec x,y; Mat A; PetscViewer fd; int rank, global_row_size, global_col_size,ierr, fd1; PetscBool PetscPreLoad = PETSC_FALSE; PetscInt fileheader[4]; char filein[PETSC_MAX_PATH_LEN] ; /*binary .dat matrix file obtained from mtx-->dat python script PetscInt bs; int m, n,M,N, total_ranks; PetscInitialize(&argc,&args,(char *)0,help); MPI_Comm_rank(PETSC_COMM_WORLD,&rank); MPI_Comm_size(MPI_COMM_WORLD,&total_ranks); PetscPrintf (PETSC_COMM_WORLD,"Total ranks is %d\n", total_ranks); CHKERRQ(PetscOptionsGetString(NULL,"-fin",filein,PETSC_MAX_PATH_LEN,NULL)); //Filename from command prompt CHKERRQ(PetscViewerBinaryOpen(PETSC_COMM_WORLD,filein,FILE_MODE_READ,&fd)); //Send it to the petscviewer CHKERRQ(MatCreate(PETSC_COMM_WORLD,&A)); if (rank ==0) { PetscPrintf (PETSC_COMM_WORLD,"\n On rank %d ", rank); CHKERRQ(MatSetSizes(A, 15, PETSC_DETERMINE, 20, 20)); CHKERRQ(MatSetType(A, MATMPIBAIJ)); //CHKERRQ( MatMPIBAIJSetPreallocation(A,1,1,NULL,10,NULL)); CHKERRQ( MatLoad(A,fd)); //CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE)); } else { PetscPrintf (PETSC_COMM_WORLD,"\n On rank %d ", rank); CHKERRQ( MatSetSizes(A, 5, PETSC_DETERMINE, 20, 20) ); CHKERRQ(MatSetType(A, MATMPIBAIJ)); // CHKERRQ( MatMPIBAIJSetPreallocation(A,1,1,NULL,10,NULL)); CHKERRQ(MatLoad(A,fd)); // CHKERRQ(MatSetOption(A,MAT_NEW_NONZERO_ALLOCATION_ERR,PETSC_FALSE)); } CHKERRQ(MatDestroy(&A)) CHKERRQ(PetscFinalize()); return 0; }