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