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