static char help[] = "Test interface of Elemental. \n\n"; #include int main(int argc,char **args) { Mat C,Caij; PetscInt i,j,m = 5,n,nrows,ncols; const PetscInt *rows,*cols; IS isrows,iscols; PetscErrorCode ierr; PetscBool flg,Test_MatMatMult=PETSC_FALSE,mats_view=PETSC_FALSE; PetscScalar *v; PetscMPIInt rank,size; ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); CHKERRQ(PetscOptionsHasName(NULL,NULL,"-mats_view",&mats_view)); /* Get local block or element size*/ CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL)); n = m; CHKERRQ(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); CHKERRQ(MatCreate(PETSC_COMM_WORLD,&C)); CHKERRQ(MatSetSizes(C,m,n,PETSC_DECIDE,PETSC_DECIDE)); CHKERRQ(MatSetType(C,MATELEMENTAL)); CHKERRQ(MatSetFromOptions(C)); CHKERRQ(MatSetUp(C)); CHKERRQ(PetscOptionsHasName(NULL,NULL,"-row_oriented",&flg)); if (flg) CHKERRQ(MatSetOption(C,MAT_ROW_ORIENTED,PETSC_TRUE)); CHKERRQ(MatGetOwnershipIS(C,&isrows,&iscols)); CHKERRQ(PetscOptionsHasName(NULL,NULL,"-Cexp_view_ownership",&flg)); if (flg) { /* View ownership of explicit C */ IS tmp; CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"Ownership of explicit C:\n")); CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"Row index set:\n")); CHKERRQ(ISOnComm(isrows,PETSC_COMM_WORLD,PETSC_USE_POINTER,&tmp)); CHKERRQ(ISView(tmp,PETSC_VIEWER_STDOUT_WORLD)); CHKERRQ(ISDestroy(&tmp)); CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"Column index set:\n")); CHKERRQ(ISOnComm(iscols,PETSC_COMM_WORLD,PETSC_USE_POINTER,&tmp)); CHKERRQ(ISView(tmp,PETSC_VIEWER_STDOUT_WORLD)); CHKERRQ(ISDestroy(&tmp)); } /* Set local matrix entries */ CHKERRQ(ISGetLocalSize(isrows,&nrows)); CHKERRQ(ISGetIndices(isrows,&rows)); CHKERRQ(ISGetLocalSize(iscols,&ncols)); CHKERRQ(ISGetIndices(iscols,&cols)); CHKERRQ(PetscMalloc1(nrows*ncols,&v)); for (i=0; i