Actual source code: ex6.c

  1: static char help[] = "Tests ISRenumber.\n\n";

  3: #include <petscis.h>

  5: PetscErrorCode TestRenumber(IS is, IS mult)
  6: {
  7:   IS       nis;
  8:   PetscInt N;

 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(PETSC_SUCCESS);
 24: }

 26: int main(int argc, char **argv)
 27: {
 28:   IS          is;
 29:   PetscMPIInt size, rank;

 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));

 36:   for (PetscInt c = 0; c < 3; c++) {
 37:     IS mult = NULL;

 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));

 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));

 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));

 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: }

 84: /*TEST

 86:   test:
 87:     suffix: 1
 88:     nsize: {{1 2}separate output}

 90: TEST*/