xref: /petsc/src/vec/is/tests/ex7.c (revision 633354d9cb03a0dcc5a871fca002dba4b1523513)
1*633354d9SStefano Zampini static char help[] = "Tests ISLocalToGlobalMappingGetInfo() and ISLocalToGlobalMappingGetNodeInfo().\n\n";
2*633354d9SStefano Zampini 
3*633354d9SStefano Zampini #include <petscis.h>
4*633354d9SStefano Zampini #include <petscviewer.h>
5*633354d9SStefano Zampini 
6*633354d9SStefano Zampini int main(int argc, char **argv)
7*633354d9SStefano Zampini {
8*633354d9SStefano Zampini   ISLocalToGlobalMapping ltog = NULL;
9*633354d9SStefano Zampini   PetscInt              *p, *ns, **ids;
10*633354d9SStefano Zampini   PetscInt               i, j, n, np, bs = 1, test = 0;
11*633354d9SStefano Zampini   PetscViewer            viewer;
12*633354d9SStefano Zampini   PetscMPIInt            rank, size;
13*633354d9SStefano Zampini 
14*633354d9SStefano Zampini   PetscCall(PetscInitialize(&argc, &argv, (char *)0, help));
15*633354d9SStefano Zampini   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
16*633354d9SStefano Zampini   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
17*633354d9SStefano Zampini   PetscCall(PetscOptionsGetInt(NULL, NULL, "-test", &test, NULL));
18*633354d9SStefano Zampini   PetscCall(PetscOptionsGetInt(NULL, NULL, "-bs", &bs, NULL));
19*633354d9SStefano Zampini   switch (test) {
20*633354d9SStefano Zampini   case 1: /* quads */
21*633354d9SStefano Zampini     if (size > 1) {
22*633354d9SStefano Zampini       if (size == 4) {
23*633354d9SStefano Zampini         if (rank == 0) {
24*633354d9SStefano Zampini           PetscInt id[4] = {0, 1, 2, 3};
25*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 4, id, PETSC_COPY_VALUES, &ltog));
26*633354d9SStefano Zampini         } else if (rank == 1) {
27*633354d9SStefano Zampini           PetscInt id[4] = {2, 3, 6, 7};
28*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 4, id, PETSC_COPY_VALUES, &ltog));
29*633354d9SStefano Zampini         } else if (rank == 2) {
30*633354d9SStefano Zampini           PetscInt id[4] = {1, 4, 3, 5};
31*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 4, id, PETSC_COPY_VALUES, &ltog));
32*633354d9SStefano Zampini         } else if (rank == 3) {
33*633354d9SStefano Zampini           PetscInt id[8] = {3, 5, 7, 8};
34*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 4, id, PETSC_COPY_VALUES, &ltog));
35*633354d9SStefano Zampini         }
36*633354d9SStefano Zampini       } else {
37*633354d9SStefano Zampini         if (rank == 0) {
38*633354d9SStefano Zampini           PetscInt id[8] = {0, 1, 2, 3, 1, 4, 3, 5};
39*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 8, id, PETSC_COPY_VALUES, &ltog));
40*633354d9SStefano Zampini         } else if (rank == size - 1) {
41*633354d9SStefano Zampini           PetscInt id[8] = {2, 3, 6, 7, 3, 5, 7, 8};
42*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 8, id, PETSC_COPY_VALUES, &ltog));
43*633354d9SStefano Zampini         } else {
44*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 0, NULL, PETSC_COPY_VALUES, &ltog));
45*633354d9SStefano Zampini         }
46*633354d9SStefano Zampini       }
47*633354d9SStefano Zampini     } else {
48*633354d9SStefano Zampini       PetscInt id[16] = {0, 1, 2, 3, 1, 4, 3, 5, 2, 3, 6, 7, 3, 5, 7, 8};
49*633354d9SStefano Zampini       PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 16, id, PETSC_COPY_VALUES, &ltog));
50*633354d9SStefano Zampini     }
51*633354d9SStefano Zampini     break;
52*633354d9SStefano Zampini   case 2: /* mix quads and tets with holes */
53*633354d9SStefano Zampini     if (size > 1) {
54*633354d9SStefano Zampini       if (size == 4) {
55*633354d9SStefano Zampini         if (rank == 0) {
56*633354d9SStefano Zampini           PetscInt id[3] = {1, 2, 3};
57*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 3, id, PETSC_COPY_VALUES, &ltog));
58*633354d9SStefano Zampini         } else if (rank == 1) {
59*633354d9SStefano Zampini           PetscInt id[4] = {1, 4, 5, 3};
60*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 4, id, PETSC_COPY_VALUES, &ltog));
61*633354d9SStefano Zampini         } else if (rank == 2) {
62*633354d9SStefano Zampini           PetscInt id[3] = {3, 6, 2};
63*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 3, id, PETSC_COPY_VALUES, &ltog));
64*633354d9SStefano Zampini         } else if (rank == 3) {
65*633354d9SStefano Zampini           PetscInt id[3] = {3, 5, 8};
66*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 3, id, PETSC_COPY_VALUES, &ltog));
67*633354d9SStefano Zampini         }
68*633354d9SStefano Zampini       } else {
69*633354d9SStefano Zampini         if (rank == 0) {
70*633354d9SStefano Zampini           PetscInt id[9] = {1, 2, 3, 3, 5, 8, 3, 6, 2};
71*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 9, id, PETSC_COPY_VALUES, &ltog));
72*633354d9SStefano Zampini         } else if (rank == size - 1) {
73*633354d9SStefano Zampini           PetscInt id[4] = {5, 3, 1, 4};
74*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 4, id, PETSC_COPY_VALUES, &ltog));
75*633354d9SStefano Zampini         } else {
76*633354d9SStefano Zampini           PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 0, NULL, PETSC_COPY_VALUES, &ltog));
77*633354d9SStefano Zampini         }
78*633354d9SStefano Zampini       }
79*633354d9SStefano Zampini     } else {
80*633354d9SStefano Zampini       PetscInt id[13] = {1, 2, 3, 1, 4, 5, 3, 6, 3, 2, 5, 3, 8};
81*633354d9SStefano Zampini       PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 13, id, PETSC_COPY_VALUES, &ltog));
82*633354d9SStefano Zampini     }
83*633354d9SStefano Zampini     break;
84*633354d9SStefano Zampini   default:
85*633354d9SStefano Zampini     PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 0, NULL, PETSC_COPY_VALUES, &ltog));
86*633354d9SStefano Zampini     break;
87*633354d9SStefano Zampini   }
88*633354d9SStefano Zampini   PetscCall(PetscViewerASCIIGetStdout(PetscObjectComm((PetscObject)ltog), &viewer));
89*633354d9SStefano Zampini   PetscCall(ISLocalToGlobalMappingView(ltog, viewer));
90*633354d9SStefano Zampini   PetscCall(PetscViewerASCIIPrintf(viewer, "GETINFO OUTPUT\n"));
91*633354d9SStefano Zampini   PetscCall(PetscViewerASCIIPushSynchronized(viewer));
92*633354d9SStefano Zampini   PetscCall(ISLocalToGlobalMappingGetInfo(ltog, &np, &p, &ns, &ids));
93*633354d9SStefano Zampini   PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, "[%d] Local NP %" PetscInt_FMT "\n", rank, np));
94*633354d9SStefano Zampini   for (i = 0; i < np; i++) {
95*633354d9SStefano Zampini     PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, "[%d]   procs[%" PetscInt_FMT "] = %" PetscInt_FMT ", shared %" PetscInt_FMT "\n", rank, i, p[i], ns[i]));
96*633354d9SStefano Zampini     for (j = 0; j < ns[i]; j++) { PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, "[%d]     ids[%" PetscInt_FMT "] = %" PetscInt_FMT "\n", rank, j, ids[i][j])); }
97*633354d9SStefano Zampini   }
98*633354d9SStefano Zampini   PetscCall(PetscViewerFlush(viewer));
99*633354d9SStefano Zampini   PetscCall(ISLocalToGlobalMappingRestoreInfo(ltog, &np, &p, &ns, &ids));
100*633354d9SStefano Zampini   PetscCall(PetscViewerASCIIPrintf(viewer, "GETNODEINFO OUTPUT\n"));
101*633354d9SStefano Zampini   PetscCall(PetscViewerASCIIPushSynchronized(viewer));
102*633354d9SStefano Zampini   PetscCall(ISLocalToGlobalMappingGetNodeInfo(ltog, &n, &ns, &ids));
103*633354d9SStefano Zampini   PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, "[%d] Local N %" PetscInt_FMT "\n", rank, n));
104*633354d9SStefano Zampini   for (i = 0; i < n; i++) {
105*633354d9SStefano Zampini     PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, "[%d]   sharedby[%" PetscInt_FMT "] = %" PetscInt_FMT "\n", rank, i, ns[i]));
106*633354d9SStefano Zampini     for (j = 0; j < ns[i]; j++) { PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, "[%d]     ids[%" PetscInt_FMT "] = %" PetscInt_FMT "\n", rank, j, ids[i][j])); }
107*633354d9SStefano Zampini   }
108*633354d9SStefano Zampini   PetscCall(PetscViewerFlush(viewer));
109*633354d9SStefano Zampini   PetscCall(ISLocalToGlobalMappingRestoreNodeInfo(ltog, &n, &ns, &ids));
110*633354d9SStefano Zampini   PetscCall(ISLocalToGlobalMappingDestroy(&ltog));
111*633354d9SStefano Zampini   PetscCall(PetscFinalize());
112*633354d9SStefano Zampini   return 0;
113*633354d9SStefano Zampini }
114*633354d9SStefano Zampini 
115*633354d9SStefano Zampini /*TEST
116*633354d9SStefano Zampini 
117*633354d9SStefano Zampini    test:
118*633354d9SStefano Zampini      suffix: ltog_info
119*633354d9SStefano Zampini      nsize: {{1 2 3 4 5}separate output}
120*633354d9SStefano Zampini      args: -bs {{1 3}separate output} -test {{0 1 2}separate output}
121*633354d9SStefano Zampini 
122*633354d9SStefano Zampini TEST*/
123