Actual source code: ex248.c
2: static char help[] = "Tests MatSeqAIJKron.\n\n";
4: #include <petscmat.h>
6: int main(int argc,char **argv)
7: {
8: Mat A,B,C,K,Ad,Bd;
9: const PetscScalar *Bv;
10: PetscInt n = 10, m = 20, p = 7, q = 17;
11: PetscBool flg;
12: PetscErrorCode ierr;
14: PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr;
15: MatCreateDense(PETSC_COMM_SELF,m,n,m,n,NULL,&Ad);
16: MatCreateDense(PETSC_COMM_SELF,p,q,p,q,NULL,&Bd);
17: MatSetRandom(Ad,NULL);
18: MatSetRandom(Bd,NULL);
19: MatChop(Ad,0.2);
20: MatChop(Bd,0.2);
21: MatConvert(Ad,MATAIJ,MAT_INITIAL_MATRIX,&A);
22: MatConvert(Bd,MATAIJ,MAT_INITIAL_MATRIX,&B);
23: MatSeqAIJKron(A,B,MAT_INITIAL_MATRIX,&C);
24: MatViewFromOptions(A,NULL,"-A_view");
25: MatViewFromOptions(B,NULL,"-B_view");
26: MatViewFromOptions(C,NULL,"-C_view");
27: MatDenseGetArrayRead(Bd,&Bv);
28: MatCreateKAIJ(A,p,q,NULL,Bv,&K);
29: MatDenseRestoreArrayRead(Bd,&Bv);
30: MatMultEqual(C,K,10,&flg);
31: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"K*x != C*x");
32: MatScale(A,1.3);
33: MatScale(B,0.3);
34: MatScale(Bd,0.3);
35: MatSeqAIJKron(A,B,MAT_REUSE_MATRIX,&C);
36: MatDenseGetArrayRead(Bd,&Bv);
37: MatKAIJSetT(K,p,q,Bv);
38: MatDenseRestoreArrayRead(Bd,&Bv);
39: MatMultEqual(C,K,10,&flg);
40: if (!flg) SETERRQ(PETSC_COMM_SELF,PETSC_ERR_PLIB,"K*x != C*x");
41: MatDestroy(&K);
42: MatDestroy(&C);
43: MatDestroy(&B);
44: MatDestroy(&A);
45: MatDestroy(&Bd);
46: MatDestroy(&Ad);
47: PetscFinalize();
48: return ierr;
49: }
51: /*TEST
53: test:
54: suffix: 1
55: nsize: 1
56: output_file: output/ex101.out
58: TEST*/