Actual source code: ex86.c

petsc-3.3-p6 2013-02-11
  1: static char help[] = "Testing MatCreateMPIAIJConcatenateSeqAIJ().\n\n";

  3: #include <petscmat.h>
  6: int main(int argc,char **argv)
  7: {
  9:   Mat            seqaijmat,mpiaijmat;
 10:   PetscMPIInt    rank;
 11:   PetscScalar    value[3];
 12:   PetscInt       i,col[3],n=10;

 14:   PetscInitialize(&argc,&argv,(char *)0,help);
 15:   MPI_Comm_rank(PETSC_COMM_WORLD,&rank);

 17:   /* Create seqaij matrices of size n by (n+rank) */
 18:   MatCreate(PETSC_COMM_SELF,&seqaijmat);
 19:   MatSetSizes(seqaijmat,n+rank,PETSC_DECIDE,PETSC_DECIDE,n);
 20:   MatSetFromOptions(seqaijmat);
 21:   MatSeqAIJSetPreallocation(seqaijmat,3,PETSC_NULL);
 22:   value[0] = -1.0; value[1] = 2.0; value[2] = -1.0;
 23:   for (i=1; i<n-1; i++) {
 24:     col[0] = i-1; col[1] = i; col[2] = i+1;
 25:     MatSetValues(seqaijmat,1,&i,3,col,value,INSERT_VALUES);
 26:   }
 27:   i = n - 1; col[0] = n - 2; col[1] = n - 1;
 28:   MatSetValues(seqaijmat,1,&i,2,col,value,INSERT_VALUES);
 29:   i = 0; col[0] = 0; col[1] = 1; value[0] = 2.0; value[1] = -1.0;
 30:   MatSetValues(seqaijmat,1,&i,2,col,value,INSERT_VALUES);
 31:   MatAssemblyBegin(seqaijmat,MAT_FINAL_ASSEMBLY);
 32:   MatAssemblyEnd(seqaijmat,MAT_FINAL_ASSEMBLY);
 33: 
 34:   /* Concatenate seqaij matrices into a single mpiaij matrix */
 35:   MatCreateMPIAIJConcatenateSeqAIJ(PETSC_COMM_WORLD,seqaijmat,PETSC_DECIDE,MAT_INITIAL_MATRIX,&mpiaijmat);

 37:   MatDestroy(&seqaijmat);
 38:   MatDestroy(&mpiaijmat);
 39:   PetscFinalize();
 40:   return 0;
 41: }
 42: