Actual source code: ex95.c

  1: static char help[] = "Testing MatMerge_SeqsToMPI().\n\n";

 3:  #include petscmat.h

  7: int main(int argc,char **argv)
  8: {
  9:   Mat            A,B;
 10:   MatScalar      a[1],alpha;
 11:   PetscMPIInt    size,rank;
 12:   PetscInt       m,n,i,col, prid;

 15:   PetscInitialize(&argc,&argv,(char *)0,help);
 16:   MPI_Comm_size(PETSC_COMM_WORLD,&size);
 17:   MPI_Comm_rank(PETSC_COMM_WORLD,&rank);
 18:   prid = size;
 19:   PetscOptionsGetInt(PETSC_NULL,"-prid",&prid,PETSC_NULL);

 21:   m = n = 10*size;
 22:   MatCreate(PETSC_COMM_SELF,&A);
 23:   MatSetSizes(A,PETSC_DETERMINE,PETSC_DETERMINE,m,n);
 24:   MatSetType(A,MATSEQAIJ);

 26:   a[0] = rank+1;
 27:   for (i=0; i<m-rank; i++){
 28:     col = i+rank;
 29:     MatSetValues(A,1,&i,1,&col,a,INSERT_VALUES);
 30:   }
 31:   MatAssemblyBegin(A,MAT_FINAL_ASSEMBLY);
 32:   MatAssemblyEnd(A,MAT_FINAL_ASSEMBLY);
 33: 
 34:   if (rank == prid){
 35:     PetscPrintf(PETSC_COMM_SELF,"[%d] A: \n",rank);
 36:     MatView(A,PETSC_VIEWER_STDOUT_SELF);
 37:   }

 39:   /* Test MatMerge_SeqsToMPI */
 40:   MatMerge_SeqsToMPI(PETSC_COMM_WORLD,A,PETSC_DECIDE,PETSC_DECIDE,MAT_INITIAL_MATRIX,&B);

 42:   /* Test MAT_REUSE_MATRIX */
 43:   alpha = 0.1;
 44:   for (i=0; i<3; i++){
 45:     MatScale(A,alpha);
 46:     MatMerge_SeqsToMPI(PETSC_COMM_WORLD,A,PETSC_DECIDE,PETSC_DECIDE,MAT_REUSE_MATRIX,&B);
 47:   }
 48:   MatView(B, PETSC_VIEWER_STDOUT_WORLD);
 49:   MatDestroy(B);
 50:   MatDestroy(A);
 51: 
 52:   PetscFinalize();
 53:   return(0);
 54: }