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