1 2 static char help[] = "Demonstrates using ISLocalToGlobalMappings with block size.\n\n"; 3 4 #include <petscis.h> 5 #include <petscviewer.h> 6 7 int main(int argc,char **argv) 8 { 9 PetscInt i,n = 4,indices[] = {0,3,9,12},m = 2,input[] = {0,2}; 10 PetscInt output[2],inglobals[13],outlocals[13]; 11 ISLocalToGlobalMapping mapping; 12 13 PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 14 15 /* 16 Create a local to global mapping. Each processor independently 17 creates a mapping 18 */ 19 PetscCall(PetscIntView(n,indices,PETSC_VIEWER_STDOUT_WORLD)); 20 PetscCall(ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD,2,n,indices,PETSC_COPY_VALUES,&mapping)); 21 22 /* 23 Map a set of local indices to their global values 24 */ 25 PetscCall(PetscIntView(m,input,PETSC_VIEWER_STDOUT_WORLD)); 26 PetscCall(ISLocalToGlobalMappingApply(mapping,m,input,output)); 27 PetscCall(PetscIntView(m,output,PETSC_VIEWER_STDOUT_WORLD)); 28 29 /* 30 Map some global indices to local, retaining the ones without a local index by -1 31 */ 32 for (i=0; i<13; i++) inglobals[i] = i; 33 PetscCall(PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD)); 34 PetscCall(ISGlobalToLocalMappingApply(mapping,IS_GTOLM_MASK,13,inglobals,NULL,outlocals)); 35 PetscCall(PetscIntView(13,outlocals,PETSC_VIEWER_STDOUT_WORLD)); 36 37 /* 38 Map some block global indices to local, dropping the ones without a local index. 39 */ 40 PetscCall(PetscIntView(13,inglobals,PETSC_VIEWER_STDOUT_WORLD)); 41 PetscCall(ISGlobalToLocalMappingApplyBlock(mapping,IS_GTOLM_DROP,13,inglobals,&m,outlocals)); 42 PetscCall(PetscIntView(m,outlocals,PETSC_VIEWER_STDOUT_WORLD)); 43 44 /* 45 Free the space used by the local to global mapping 46 */ 47 PetscCall(ISLocalToGlobalMappingDestroy(&mapping)); 48 49 PetscCall(PetscFinalize()); 50 return 0; 51 } 52 53 /*TEST 54 55 test: 56 57 TEST*/ 58