Actual source code: ex122.c
1: static char help[] = "Test MatMatMult() for AIJ and Dense matrices.\n\n";
3: #include <petscmat.h>
5: int main(int argc,char **argv)
6: {
7: Mat A,B,C;
8: PetscInt M=10,N=5;
9: PetscRandom r;
10: PetscBool equal=PETSC_FALSE;
11: PetscReal fill = 1.0;
12: PetscInt nza,am,an;
14: PetscInitialize(&argc,&argv,(char*)0,help);
15: PetscOptionsGetInt(NULL,NULL,"-M",&M,NULL);
16: PetscOptionsGetInt(NULL,NULL,"-N",&N,NULL);
17: PetscOptionsGetReal(NULL,NULL,"-fill",&fill,NULL);
19: PetscRandomCreate(PETSC_COMM_WORLD,&r);
20: PetscRandomSetFromOptions(r);
22: /* create a aij matrix A */
23: MatCreate(PETSC_COMM_WORLD,&A);
24: MatSetSizes(A,PETSC_DECIDE,PETSC_DECIDE,N,M);
25: MatSetType(A,MATAIJ);
26: nza = (PetscInt)(.3*M); /* num of nozeros in each row of A */
27: MatSeqAIJSetPreallocation(A,nza,NULL);
28: MatMPIAIJSetPreallocation(A,nza,NULL,nza,NULL);
29: MatSetRandom(A,r);
31: /* create a dense matrix B */
32: MatGetLocalSize(A,&am,&an);
33: MatCreate(PETSC_COMM_WORLD,&B);
34: MatSetSizes(B,PETSC_DECIDE,am,N,PETSC_DECIDE);
35: MatSetType(B,MATDENSE);
36: MatSeqDenseSetPreallocation(B,NULL);
37: MatMPIDenseSetPreallocation(B,NULL);
38: MatSetRandom(B,r);
39: PetscRandomDestroy(&r);
40: MatAssemblyBegin(B,MAT_FINAL_ASSEMBLY);
41: MatAssemblyEnd(B,MAT_FINAL_ASSEMBLY);
43: /* Test MatMatMult() */
44: MatMatMult(B,A,MAT_INITIAL_MATRIX,fill,&C);
45: MatMatMult(B,A,MAT_REUSE_MATRIX,fill,&C);
46: MatMatMultEqual(B,A,C,10,&equal);
49: MatDestroy(&C);
50: MatDestroy(&B);
51: MatDestroy(&A);
52: PetscFinalize();
53: return 0;
54: }
56: /*TEST
58: test:
59: output_file: output/ex122.out
61: TEST*/