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