1c4762a1bSJed Brown static char help[] = "Test section ordering for FEM discretizations\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdmplex.h> 4c4762a1bSJed Brown #include <petscds.h> 5c4762a1bSJed Brown 630602db0SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 7c4762a1bSJed Brown { 8c4762a1bSJed Brown PetscFunctionBegin; 9*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreate(comm, dm)); 10*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetType(*dm, DMPLEX)); 11*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetFromOptions(*dm)); 12*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMViewFromOptions(*dm, NULL, "-dm_view")); 13c4762a1bSJed Brown PetscFunctionReturn(0); 14c4762a1bSJed Brown } 15c4762a1bSJed Brown 1630602db0SMatthew G. Knepley static PetscErrorCode TestLocalDofOrder(DM dm) 17c4762a1bSJed Brown { 18c4762a1bSJed Brown PetscFE fe[3]; 19c4762a1bSJed Brown PetscSection s; 2030602db0SMatthew G. Knepley PetscBool simplex; 21c4762a1bSJed Brown PetscInt dim, Nf, f; 22c4762a1bSJed Brown 23c4762a1bSJed Brown PetscFunctionBegin; 24*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetDimension(dm, &dim)); 25*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMPlexIsSimplex(dm, &simplex)); 26*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFECreateDefault(PETSC_COMM_SELF, dim, dim, simplex, "field0_", -1, &fe[0])); 27*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "field1_", -1, &fe[1])); 28*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "field2_", -1, &fe[2])); 29c4762a1bSJed Brown 30*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetField(dm, 0, NULL, (PetscObject) fe[0])); 31*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetField(dm, 1, NULL, (PetscObject) fe[1])); 32*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMSetField(dm, 2, NULL, (PetscObject) fe[2])); 33*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMCreateDS(dm)); 34*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetLocalSection(dm, &s)); 35*5f80ce2aSJacob Faibussowitsch CHKERRQ(PetscObjectViewFromOptions((PetscObject) s, NULL, "-dof_view")); 36c4762a1bSJed Brown 37*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMGetNumFields(dm, &Nf)); 38*5f80ce2aSJacob Faibussowitsch for (f = 0; f < Nf; ++f) CHKERRQ(PetscFEDestroy(&fe[f])); 39c4762a1bSJed Brown PetscFunctionReturn(0); 40c4762a1bSJed Brown } 41c4762a1bSJed Brown 42c4762a1bSJed Brown int main(int argc, char **argv) 43c4762a1bSJed Brown { 44c4762a1bSJed Brown DM dm; 45c4762a1bSJed Brown PetscErrorCode ierr; 46c4762a1bSJed Brown 47c4762a1bSJed Brown ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 48*5f80ce2aSJacob Faibussowitsch CHKERRQ(CreateMesh(PETSC_COMM_WORLD, &dm)); 49*5f80ce2aSJacob Faibussowitsch CHKERRQ(TestLocalDofOrder(dm)); 50*5f80ce2aSJacob Faibussowitsch CHKERRQ(DMDestroy(&dm)); 51c4762a1bSJed Brown ierr = PetscFinalize(); 52c4762a1bSJed Brown return ierr; 53c4762a1bSJed Brown } 54c4762a1bSJed Brown 55c4762a1bSJed Brown /*TEST 56c4762a1bSJed Brown 57c4762a1bSJed Brown test: 58c4762a1bSJed Brown suffix: tri_pm 59c4762a1bSJed Brown requires: triangle 6030602db0SMatthew G. Knepley args: -dm_plex_box_faces 1,1 -field0_petscspace_degree 2 -field1_petscspace_degree 1 -field2_petscspace_degree 1 -dm_view -dof_view 61c4762a1bSJed Brown 62c4762a1bSJed Brown test: 63c4762a1bSJed Brown suffix: quad_pm 64c4762a1bSJed Brown requires: 6530602db0SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 1,1 -field0_petscspace_degree 2 -field1_petscspace_degree 1 -field2_petscspace_degree 1 -dm_view -dof_view 66c4762a1bSJed Brown 67c4762a1bSJed Brown test: 68c4762a1bSJed Brown suffix: tri_fm 69c4762a1bSJed Brown requires: triangle 7030602db0SMatthew G. Knepley args: -dm_coord_space 0 -dm_plex_box_faces 1,1 -field0_petscspace_degree 2 -field1_petscspace_degree 1 -field2_petscspace_degree 1 -petscsection_point_major 0 -dm_view -dof_view 71c4762a1bSJed Brown 72c4762a1bSJed Brown test: 73c4762a1bSJed Brown suffix: quad_fm 74c4762a1bSJed Brown requires: 7530602db0SMatthew G. Knepley args: -dm_coord_space 0 -dm_plex_simplex 0 -dm_plex_box_faces 1,1 -field0_petscspace_degree 2 -field1_petscspace_degree 1 -field2_petscspace_degree 1 -petscsection_point_major 0 -dm_view -dof_view 76c4762a1bSJed Brown 77c4762a1bSJed Brown TEST*/ 78