1c4762a1bSJed Brown static char help[] = "Create a Plex sphere from quads and create a P1 section\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdmplex.h> 4c4762a1bSJed Brown 5c4762a1bSJed Brown static PetscErrorCode SetupSection(DM dm) 6c4762a1bSJed Brown { 7c4762a1bSJed Brown PetscSection s; 8c4762a1bSJed Brown PetscInt vStart, vEnd, v; 9c4762a1bSJed Brown 10c4762a1bSJed Brown PetscFunctionBeginUser; 115f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexGetDepthStratum(dm, 0, &vStart, &vEnd)); 125f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionCreate(PetscObjectComm((PetscObject) dm), &s)); 135f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionSetNumFields(s, 1)); 145f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionSetFieldComponents(s, 0, 1)); 155f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionSetChart(s, vStart, vEnd)); 16c4762a1bSJed Brown for (v = vStart; v < vEnd; ++v) { 175f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionSetDof(s, v, 1)); 185f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionSetFieldDof(s, v, 0, 1)); 19c4762a1bSJed Brown } 205f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionSetUp(s)); 215f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetLocalSection(dm, s)); 225f80ce2aSJacob Faibussowitsch CHKERRQ(PetscSectionDestroy(&s)); 23c4762a1bSJed Brown PetscFunctionReturn(0); 24c4762a1bSJed Brown } 25c4762a1bSJed Brown 26c4762a1bSJed Brown int main(int argc, char **argv) 27c4762a1bSJed Brown { 28c4762a1bSJed Brown DM dm; 29c4762a1bSJed Brown Vec u; 30c4762a1bSJed Brown 31*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscInitialize(&argc, &argv, NULL,help)); 325f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(PETSC_COMM_WORLD, &dm)); 335f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(dm, DMPLEX)); 345f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(dm)); 355f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectSetName((PetscObject) dm, "Sphere")); 365f80ce2aSJacob Faibussowitsch CHKERRQ(DMViewFromOptions(dm, NULL, "-dm_view")); 3730602db0SMatthew G. Knepley 385f80ce2aSJacob Faibussowitsch CHKERRQ(SetupSection(dm)); 395f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetGlobalVector(dm, &u)); 405f80ce2aSJacob Faibussowitsch CHKERRQ(VecSet(u, 2)); 415f80ce2aSJacob Faibussowitsch CHKERRQ(VecViewFromOptions(u, NULL, "-vec_view")); 425f80ce2aSJacob Faibussowitsch CHKERRQ(DMRestoreGlobalVector(dm, &u)); 435f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 44*b122ec5aSJacob Faibussowitsch CHKERRQ(PetscFinalize()); 45*b122ec5aSJacob Faibussowitsch return 0; 46c4762a1bSJed Brown } 47c4762a1bSJed Brown 48c4762a1bSJed Brown /*TEST 49c4762a1bSJed Brown 5030602db0SMatthew G. Knepley testset: 51c4762a1bSJed Brown requires: !__float128 5230602db0SMatthew G. Knepley args: -dm_plex_shape sphere -dm_view 53c4762a1bSJed Brown 54c4762a1bSJed Brown test: 5530602db0SMatthew G. Knepley suffix: 2d_quad 5630602db0SMatthew G. Knepley args: -dm_plex_simplex 0 57c4762a1bSJed Brown 58c4762a1bSJed Brown test: 59c4762a1bSJed Brown suffix: 2d_tri 6030602db0SMatthew G. Knepley args: 61c4762a1bSJed Brown 62c4762a1bSJed Brown test: 63c4762a1bSJed Brown suffix: 3d_tri 6430602db0SMatthew G. Knepley args: -dm_plex_dim 3 6530602db0SMatthew G. Knepley 6630602db0SMatthew G. Knepley testset: 67c4762a1bSJed Brown requires: !__float128 68e600fa54SMatthew G. Knepley args: -dm_plex_shape sphere -petscpartitioner_type simple -dm_view 6930602db0SMatthew G. Knepley 7030602db0SMatthew G. Knepley test: 7130602db0SMatthew G. Knepley suffix: 2d_quad_parallel 7230602db0SMatthew G. Knepley nsize: 2 7330602db0SMatthew G. Knepley args: -dm_plex_simplex 0 7430602db0SMatthew G. Knepley 7530602db0SMatthew G. Knepley test: 7630602db0SMatthew G. Knepley suffix: 2d_tri_parallel 7730602db0SMatthew G. Knepley nsize: 2 78c4762a1bSJed Brown 79c4762a1bSJed Brown test: 80c4762a1bSJed Brown suffix: 3d_tri_parallel 81c4762a1bSJed Brown nsize: 2 8230602db0SMatthew G. Knepley args: -dm_plex_dim 3 83c4762a1bSJed Brown 84c4762a1bSJed Brown TEST*/ 85