Actual source code: ex222.c
1: static char help[] = "Tests MatComputeOperator() and MatComputeOperatorTranspose()\n\n";
3: #include <petscmat.h>
5: int main(int argc,char **argv)
6: {
7: Mat A,Ae,Aet;
8: char filename[PETSC_MAX_PATH_LEN];
9: char expltype[128],*etype = NULL;
10: PetscInt bs = 1;
11: PetscBool flg, check = PETSC_TRUE;
13: PetscInitialize(&argc,&argv,(char*) 0,help);
15: PetscOptionsGetString(NULL,NULL,"-expl_type",expltype,sizeof(expltype),&flg);
16: if (flg) {
17: PetscStrallocpy(expltype,&etype);
18: }
19: PetscOptionsGetString(NULL,NULL,"-f",filename,sizeof(filename),&flg);
20: PetscOptionsGetInt(NULL,NULL,"-bs",&bs,NULL);
21: if (!flg) {
22: PetscInt M = 13,N = 6;
24: PetscOptionsGetInt(NULL,NULL,"-M",&M,NULL);
25: PetscOptionsGetInt(NULL,NULL,"-N",&N,NULL);
26: MatCreateDense(PETSC_COMM_WORLD,PETSC_DECIDE,PETSC_DECIDE,M,N,NULL,&A);
27: MatSetBlockSize(A,bs);
28: MatSetRandom(A,NULL);
29: } else {
30: PetscViewer viewer;
32: PetscViewerBinaryOpen(PETSC_COMM_WORLD,filename,FILE_MODE_READ,&viewer);
33: MatCreate(PETSC_COMM_WORLD,&A);
34: MatSetBlockSize(A,bs);
35: MatSetFromOptions(A);
36: MatLoad(A,viewer);
37: PetscViewerDestroy(&viewer);
38: }
39: PetscObjectSetName((PetscObject)A,"Matrix");
40: MatViewFromOptions(A,NULL,"-view_expl");
42: MatComputeOperator(A,etype,&Ae);
43: PetscObjectSetName((PetscObject)Ae,"Explicit matrix");
44: MatViewFromOptions(Ae,NULL,"-view_expl");
46: PetscOptionsGetBool(NULL,NULL,"-check",&check,NULL);
47: if (check) {
48: Mat A2;
49: PetscReal err,tol = PETSC_SMALL;
51: PetscOptionsGetReal(NULL,NULL,"-tol",&tol,NULL);
52: MatConvert(A,etype,MAT_INITIAL_MATRIX,&A2);
53: MatAXPY(A2,-1.0,Ae,DIFFERENT_NONZERO_PATTERN);
54: MatNorm(A2,NORM_FROBENIUS,&err);
55: if (err > tol) {
56: PetscPrintf(PETSC_COMM_WORLD,"Error %g > %g (type %s)\n",(double)err,(double)tol,etype);
57: }
58: MatDestroy(&A2);
59: }
61: MatComputeOperatorTranspose(A,etype,&Aet);
62: PetscObjectSetName((PetscObject)Aet,"Explicit matrix transpose");
63: MatViewFromOptions(Aet,NULL,"-view_expl");
65: PetscFree(etype);
66: MatDestroy(&Ae);
67: MatDestroy(&Aet);
68: MatDestroy(&A);
69: PetscFinalize();
70: return 0;
71: }
73: /*TEST
75: test:
76: output_file: output/ex222_null.out
78: testset:
79: suffix: matexpl_rect
80: output_file: output/ex222_null.out
81: nsize: {{1 3}}
82: args: -expl_type {{dense aij baij}}
84: testset:
85: suffix: matexpl_square
86: output_file: output/ex222_null.out
87: nsize: {{1 3}}
88: args: -bs {{1 2 3}} -M 36 -N 36 -expl_type {{dense aij baij sbaij}}
90: TEST*/