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