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; PetscBool flg,Test_MatMatMult=PETSC_FALSE,mats_view=PETSC_FALSE; PetscScalar *v; PetscMPIInt rank,size; PetscCall(PetscInitialize(&argc,&args,(char*)0,help)); PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); PetscCall(PetscOptionsHasName(NULL,NULL,"-mats_view",&mats_view)); /* Get local block or element size*/ PetscCall(PetscOptionsGetInt(NULL,NULL,"-m",&m,NULL)); n = m; PetscCall(PetscOptionsGetInt(NULL,NULL,"-n",&n,NULL)); PetscCall(MatCreate(PETSC_COMM_WORLD,&C)); PetscCall(MatSetSizes(C,m,n,PETSC_DECIDE,PETSC_DECIDE)); PetscCall(MatSetType(C,MATELEMENTAL)); PetscCall(MatSetFromOptions(C)); PetscCall(MatSetUp(C)); PetscCall(PetscOptionsHasName(NULL,NULL,"-row_oriented",&flg)); if (flg) PetscCall(MatSetOption(C,MAT_ROW_ORIENTED,PETSC_TRUE)); PetscCall(MatGetOwnershipIS(C,&isrows,&iscols)); PetscCall(PetscOptionsHasName(NULL,NULL,"-Cexp_view_ownership",&flg)); if (flg) { /* View ownership of explicit C */ IS tmp; PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Ownership of explicit C:\n")); PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Row index set:\n")); PetscCall(ISOnComm(isrows,PETSC_COMM_WORLD,PETSC_USE_POINTER,&tmp)); PetscCall(ISView(tmp,PETSC_VIEWER_STDOUT_WORLD)); PetscCall(ISDestroy(&tmp)); PetscCall(PetscPrintf(PETSC_COMM_WORLD,"Column index set:\n")); PetscCall(ISOnComm(iscols,PETSC_COMM_WORLD,PETSC_USE_POINTER,&tmp)); PetscCall(ISView(tmp,PETSC_VIEWER_STDOUT_WORLD)); PetscCall(ISDestroy(&tmp)); } /* Set local matrix entries */ PetscCall(ISGetLocalSize(isrows,&nrows)); PetscCall(ISGetIndices(isrows,&rows)); PetscCall(ISGetLocalSize(iscols,&ncols)); PetscCall(ISGetIndices(iscols,&cols)); PetscCall(PetscMalloc1(nrows*ncols,&v)); for (i=0; i