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