1 static char help[] = "Tests ISRenumber.\n\n"; 2 3 #include <petscis.h> 4 5 PetscErrorCode TestRenumber(IS is, IS mult) 6 { 7 IS nis; 8 PetscInt N; 9 10 PetscFunctionBegin; 11 CHKERRQ(PetscPrintf(PetscObjectComm((PetscObject)is),"\n-----------------\n")); 12 CHKERRQ(PetscPrintf(PetscObjectComm((PetscObject)is),"\nInitial\n")); 13 CHKERRQ(ISView(is,NULL)); 14 if (mult) { 15 CHKERRQ(PetscPrintf(PetscObjectComm((PetscObject)is),"\nMult\n")); 16 CHKERRQ(ISView(mult,NULL)); 17 } 18 CHKERRQ(ISRenumber(is,mult,&N,NULL)); 19 CHKERRQ(PetscPrintf(PetscObjectComm((PetscObject)is),"\nRenumbered, unique entries %" PetscInt_FMT "\n",N)); 20 CHKERRQ(ISRenumber(is,mult,NULL,&nis)); 21 CHKERRQ(ISView(nis,NULL)); 22 CHKERRQ(ISDestroy(&nis)); 23 PetscFunctionReturn(0); 24 } 25 26 int main(int argc, char **argv) 27 { 28 IS is; 29 PetscErrorCode ierr; 30 PetscMPIInt size, rank; 31 32 ierr = PetscInitialize(&argc, &argv, NULL, help); if (ierr) return ierr; 33 CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 34 CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 35 36 for (PetscInt c = 0; c < 3; c++) { 37 IS mult = NULL; 38 39 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,0,0,0,&is)); 40 if (c) { 41 PetscInt n; 42 CHKERRQ(ISGetLocalSize(is,&n)); 43 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,n,c-2,0,&mult)); 44 } 45 CHKERRQ(TestRenumber(is,mult)); 46 CHKERRQ(ISDestroy(&is)); 47 CHKERRQ(ISDestroy(&mult)); 48 49 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,2,-rank-1,-4,&is)); 50 if (c) { 51 PetscInt n; 52 CHKERRQ(ISGetLocalSize(is,&n)); 53 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,n,c-2,0,&mult)); 54 } 55 CHKERRQ(TestRenumber(is,mult)); 56 CHKERRQ(ISDestroy(&is)); 57 CHKERRQ(ISDestroy(&mult)); 58 59 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,10,4+rank,2,&is)); 60 if (c) { 61 PetscInt n; 62 CHKERRQ(ISGetLocalSize(is,&n)); 63 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,n,c-2,1,&mult)); 64 } 65 CHKERRQ(TestRenumber(is,mult)); 66 CHKERRQ(ISDestroy(&is)); 67 CHKERRQ(ISDestroy(&mult)); 68 69 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,10,-rank-1,2,&is)); 70 if (c) { 71 PetscInt n; 72 CHKERRQ(ISGetLocalSize(is,&n)); 73 CHKERRQ(ISCreateStride(PETSC_COMM_WORLD,n,c-2,1,&mult)); 74 } 75 CHKERRQ(TestRenumber(is,mult)); 76 CHKERRQ(ISDestroy(&is)); 77 CHKERRQ(ISDestroy(&mult)); 78 } 79 /* Finalize */ 80 ierr = PetscFinalize(); 81 return ierr; 82 } 83 84 /*TEST 85 86 test: 87 suffix: 1 88 nsize: {{1 2}separate output} 89 90 TEST*/ 91