Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}
Esempio n. 3
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);
}