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: }