1 2 static char help[] = "Tests DMCreateMatrix for DMComposite.\n\n"; 3 4 #include <petscdmredundant.h> 5 #include <petscdm.h> 6 #include <petscdmda.h> 7 #include <petscdmcomposite.h> 8 #include <petscpf.h> 9 10 int main(int argc,char **argv) 11 { 12 ISLocalToGlobalMapping *ltog,ltogs; 13 PetscMPIInt size; 14 DM packer; 15 DM da,dmred; 16 Mat M; 17 PetscInt i; 18 19 PetscFunctionBeginUser; 20 PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 21 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 22 23 PetscCall(DMCompositeCreate(PETSC_COMM_WORLD,&packer)); 24 25 PetscCall(DMRedundantCreate(PETSC_COMM_WORLD,0,5,&dmred)); 26 PetscCall(DMCompositeAddDM(packer,dmred)); 27 PetscCall(DMGetLocalToGlobalMapping(dmred,<ogs)); 28 PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of dmred\n")); 29 PetscCall(ISLocalToGlobalMappingView(ltogs,PETSC_VIEWER_STDOUT_WORLD)); 30 PetscCall(DMDestroy(&dmred)); 31 32 PetscCall(DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_MIRROR,DM_BOUNDARY_MIRROR,DMDA_STENCIL_STAR,3,3,PETSC_DECIDE,PETSC_DECIDE,2,1,NULL,NULL,&da)); 33 PetscCall(DMSetFromOptions(da)); 34 PetscCall(DMSetUp(da)); 35 PetscCall(DMCompositeAddDM(packer,da)); 36 PetscCall(DMGetLocalToGlobalMapping(da,<ogs)); 37 PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of da\n")); 38 PetscCall(ISLocalToGlobalMappingView(ltogs,PETSC_VIEWER_STDOUT_WORLD)); 39 PetscCall(DMDestroy(&da)); 40 41 PetscCall(DMSetMatType(packer,MATNEST)); 42 PetscCall(DMSetFromOptions(packer)); 43 PetscCall(DMCreateMatrix(packer,&M)); 44 PetscCall(MatView(M,NULL)); 45 PetscCall(MatDestroy(&M)); 46 47 /* get the global numbering for each subvector element */ 48 PetscCall(DMCompositeGetISLocalToGlobalMappings(packer,<og)); 49 PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of dmred vector\n")); 50 PetscCall(ISLocalToGlobalMappingView(ltog[0],PETSC_VIEWER_STDOUT_WORLD)); 51 PetscCall(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of da vector\n")); 52 PetscCall(ISLocalToGlobalMappingView(ltog[1],PETSC_VIEWER_STDOUT_WORLD)); 53 for (i=0; i<2; i++) PetscCall(ISLocalToGlobalMappingDestroy(<og[i])); 54 55 PetscCall(PetscFree(ltog)); 56 PetscCall(DMDestroy(&packer)); 57 PetscCall(PetscFinalize()); 58 return 0; 59 } 60 61 /*TEST 62 63 test: 64 suffix: composite_nest_l2g 65 nsize: {{1 2}separate output} 66 67 TEST*/ 68