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