#include #include #include "mpi.h" #define RUNKSP #ifdef RUNKSP int main(int argc, char* argv[]){ /*----------------------------------------------------------------------------- * Declare vars and objects *-----------------------------------------------------------------------------*/ Vec rhs,sol,ex_sol; Mat MM; KSP ksp; PC pc; PetscReal norm; PetscInt i,j,nrows,ncols,its,tb=1000,tt; tt = tb; PetscErrorCode ierr; const PetscInt *rows; const PetscInt *cols; IS isrows,iscols; PetscBool flg = PETSC_TRUE; PetscScalar* v; PetscRandom rand; PetscScalar rval; int procid,size; /*----------------------------------------------------------------------------- * Init petsc *-----------------------------------------------------------------------------*/ PetscInitialize(&argc,&argv,NULL,NULL); MPI_Comm_rank(MPI_COMM_WORLD,&procid); MPI_Comm_size(MPI_COMM_WORLD,&size); ierr = PetscOptionsGetInt(NULL,"-tb",&tb, NULL); CHKERRQ(ierr); ierr = PetscOptionsGetInt(NULL,"-tt",&tt, NULL); CHKERRQ(ierr); ierr = PetscRandomCreate(PETSC_COMM_WORLD,&rand);CHKERRQ(ierr); ierr = PetscRandomSetFromOptions(rand);CHKERRQ(ierr); /*----------------------------------------------------------------------------- * Set up Matrix MM *-----------------------------------------------------------------------------*/ ierr = MatCreate(PETSC_COMM_WORLD,&MM);CHKERRQ(ierr); ierr = MatSetSizes(MM,PETSC_DECIDE,PETSC_DECIDE,tt,tb);CHKERRQ(ierr); ierr = MatSetType(MM,MATELEMENTAL);CHKERRQ(ierr); ierr = MatSetFromOptions(MM);CHKERRQ(ierr); ierr = MatSetUp(MM);CHKERRQ(ierr); /*----------------------------------------------------------------------------- * Set Local Values to Matrix MM *-----------------------------------------------------------------------------*/ ierr=MatGetOwnershipIS(MM,&isrows,&iscols); ierr=ISGetLocalSize(isrows,&nrows); ierr=ISGetIndices(isrows,&rows); ierr=ISGetLocalSize(iscols,&ncols); ierr=ISGetIndices(iscols,&cols); ierr=PetscMalloc1(nrows*ncols,&v); for (i=0; i