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*/