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, <og)); 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, <og)); 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, <og)); 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, <og)); 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, <og)); 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, <og)); 43*633354d9SStefano Zampini } else { 44*633354d9SStefano Zampini PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 0, NULL, PETSC_COPY_VALUES, <og)); 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, <og)); 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, <og)); 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, <og)); 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, <og)); 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, <og)); 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, <og)); 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, <og)); 75*633354d9SStefano Zampini } else { 76*633354d9SStefano Zampini PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, bs, 0, NULL, PETSC_COPY_VALUES, <og)); 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, <og)); 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, <og)); 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(<og)); 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