TEST_F(TestOp, D2) { PetscErrorCode ierr; Op d2; ierr = OpCreate(comm, &d2); ASSERT_EQ(0, ierr); ierr = OpSetD2(d2); ASSERT_EQ(0, ierr); if(getenv("SHOW_DEBUG")) { ierr = OpView(d2, PETSC_VIEWER_STDOUT_SELF); ASSERT_EQ(0, ierr); } Mat M1; ierr = BSSCreateR1Mat(this->bss, &M1); ASSERT_EQ(0, ierr); ierr = BSSD2R1Mat(bss, M1); ASSERT_EQ(0, ierr); Mat M2; ierr = BSSCreateR1Mat(bss, &M2); ASSERT_EQ(0, ierr); ierr = BSSOpMat(bss, d2, M2); ASSERT_EQ(0, ierr); MatAXPY(M1, -1.0, M2, DIFFERENT_NONZERO_PATTERN); PetscReal a; MatNorm(M1, NORM_1, &a); ASSERT_DOUBLE_EQ(0.0, a); OpDestroy(&d2); MatDestroy(&M1); MatDestroy(&M2); }
PetscErrorCode RunSample() { PetscErrorCode ierr; Op op; PetscInt pgrid[3],smooth[2] = {3,1},two = 2,maxsamples = 6,repeat = 5,nsamples,(*gridsize)[3],addquadpts; PetscReal local[2] = {100,10000}; PetscReal mintime = 1; PetscLogDouble memused,memavail; PetscMPIInt nranks; MPI_Comm comm = PETSC_COMM_WORLD; PetscFunctionBegin; ierr = PetscOptionsBegin(comm,NULL,"FMG Performance Sampler options",NULL);CHKERRQ(ierr); ierr = PetscOptionsRealArray("-local","range of local problem sizes","",local,&two,NULL);CHKERRQ(ierr); if (two == 1) local[1] = local[0]; ierr = PetscOptionsInt("-maxsamples","maximum number of samples across range","",maxsamples,&maxsamples,NULL);CHKERRQ(ierr); ierr = PetscOptionsInt("-repeat","Minimum number of repetitions for each problem size","",repeat,&repeat,NULL);CHKERRQ(ierr); ierr = PetscOptionsReal("-mintime","Minimum interval (in seconds) for repeatedly solving each problem size","",mintime,&mintime,NULL);CHKERRQ(ierr); two = 2; ierr = PetscOptionsIntArray("-smooth","V- and F-cycle pre,post smoothing","",smooth,&two,NULL);CHKERRQ(ierr); addquadpts = 0; ierr = PetscOptionsInt("-add_quad_pts","Number of additional quadrature points","",addquadpts,&addquadpts,NULL);CHKERRQ(ierr); ierr = PetscOptionsEnd();CHKERRQ(ierr); ierr = OpCreateFromOptions(comm,&op);CHKERRQ(ierr); ierr = OpSetAddQuadPts(op,addquadpts);CHKERRQ(ierr); ierr = MPI_Comm_size(comm,&nranks);CHKERRQ(ierr); ierr = ProcessGridFindSquarest(nranks,pgrid);CHKERRQ(ierr); ierr = PetscPrintf(comm,"Finite Element FAS Performance Sampler on process grid [%D %D %D] = %d\n",pgrid[0],pgrid[1],pgrid[2],nranks);CHKERRQ(ierr); ierr = SampleGridRangeCreate(nranks,(PetscReal)local[0],(PetscReal)local[1],maxsamples,&nsamples,(PetscInt**)&gridsize);CHKERRQ(ierr); ierr = MemoryGetUsage(&memused,&memavail);CHKERRQ(ierr); ierr = ReportMemoryUsage(comm,memused,memavail);CHKERRQ(ierr); ierr = PetscPrintf(comm,"Small Test G[%5D%5D%5D]\n",gridsize[nsamples-1][0],gridsize[nsamples-1][1],gridsize[nsamples-1][2]);CHKERRQ(ierr); ierr = SampleOnGrid(comm,op,gridsize[nsamples-1],smooth,1,0,NULL,NULL,PETSC_FALSE);CHKERRQ(ierr); ierr = PetscPrintf(comm,"Large Test G[%5D%5D%5D]\n",gridsize[0][0],gridsize[0][1],gridsize[0][2]);CHKERRQ(ierr); ierr = SampleOnGrid(comm,op,gridsize[0],smooth,1,0,&memused,&memavail,PETSC_TRUE);CHKERRQ(ierr); ierr = ReportMemoryUsage(comm,memused,memavail);CHKERRQ(ierr); ierr = PetscPrintf(comm,"Starting performance sampling\n");CHKERRQ(ierr); for (PetscInt i=nsamples-1; i>=0; i--) { ierr = SampleOnGrid(comm,op,gridsize[i],smooth,repeat,mintime,NULL,NULL,PETSC_FALSE);CHKERRQ(ierr); } ierr = PetscFree(gridsize);CHKERRQ(ierr); ierr = OpDestroy(&op);CHKERRQ(ierr); PetscFunctionReturn(0); }
TEST_F(TestOp, Vne) { PetscErrorCode ierr; PF pf; PotCreate(comm, &pf); PotSetCoulombNE(pf, 1, 0.0, 1.0); Op vne; OpCreate(comm, &vne); OpSetPF(vne, pf); Mat M1; BSSCreateR1Mat(bss, &M1); BSSENR1Mat(bss, 1, 0.0, M1); Mat M2; BSSCreateR1Mat(bss, &M2); BSSOpMat(bss, vne, M2); if(getenv("SHOW_DEBUG")) { ierr = OpView(vne, PETSC_VIEWER_STDOUT_SELF); ASSERT_EQ(0, ierr); } ierr = MatAXPY(M1, -1.0, M2, DIFFERENT_NONZERO_PATTERN); ASSERT_EQ(0, ierr); PetscReal a; ierr = MatNorm(M1, NORM_1, &a);ASSERT_EQ(0, ierr); ASSERT_DOUBLE_EQ(0.0, a); MatDestroy(&M1); MatDestroy(&M2); OpDestroy(&vne); }