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 CHKERRQ(PetscInitialize(&argc,&argv,(char*)0,help)); 20 CHKERRMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); 21 22 CHKERRQ(DMCompositeCreate(PETSC_COMM_WORLD,&packer)); 23 24 CHKERRQ(DMRedundantCreate(PETSC_COMM_WORLD,0,5,&dmred)); 25 CHKERRQ(DMCompositeAddDM(packer,dmred)); 26 CHKERRQ(DMGetLocalToGlobalMapping(dmred,<ogs)); 27 CHKERRQ(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of dmred\n")); 28 CHKERRQ(ISLocalToGlobalMappingView(ltogs,PETSC_VIEWER_STDOUT_WORLD)); 29 CHKERRQ(DMDestroy(&dmred)); 30 31 CHKERRQ(DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_MIRROR,DM_BOUNDARY_MIRROR,DMDA_STENCIL_STAR,3,3,PETSC_DECIDE,PETSC_DECIDE,2,1,NULL,NULL,&da)); 32 CHKERRQ(DMSetFromOptions(da)); 33 CHKERRQ(DMSetUp(da)); 34 CHKERRQ(DMCompositeAddDM(packer,da)); 35 CHKERRQ(DMGetLocalToGlobalMapping(da,<ogs)); 36 CHKERRQ(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of da\n")); 37 CHKERRQ(ISLocalToGlobalMappingView(ltogs,PETSC_VIEWER_STDOUT_WORLD)); 38 CHKERRQ(DMDestroy(&da)); 39 40 CHKERRQ(DMSetMatType(packer,MATNEST)); 41 CHKERRQ(DMSetFromOptions(packer)); 42 CHKERRQ(DMCreateMatrix(packer,&M)); 43 CHKERRQ(MatView(M,NULL)); 44 CHKERRQ(MatDestroy(&M)); 45 46 /* get the global numbering for each subvector element */ 47 CHKERRQ(DMCompositeGetISLocalToGlobalMappings(packer,<og)); 48 CHKERRQ(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of dmred vector\n")); 49 CHKERRQ(ISLocalToGlobalMappingView(ltog[0],PETSC_VIEWER_STDOUT_WORLD)); 50 CHKERRQ(PetscViewerASCIIPrintf(PETSC_VIEWER_STDOUT_WORLD,"Local to global mapping of da vector\n")); 51 CHKERRQ(ISLocalToGlobalMappingView(ltog[1],PETSC_VIEWER_STDOUT_WORLD)); 52 for (i=0; i<2; i++) CHKERRQ(ISLocalToGlobalMappingDestroy(<og[i])); 53 54 CHKERRQ(PetscFree(ltog)); 55 CHKERRQ(DMDestroy(&packer)); 56 CHKERRQ(PetscFinalize()); 57 return 0; 58 } 59 60 /*TEST 61 62 test: 63 suffix: composite_nest_l2g 64 nsize: {{1 2}separate output} 65 66 TEST*/ 67