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*/