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 6*30602db0SMatthew G. Knepley static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 7c4762a1bSJed Brown { 8c4762a1bSJed Brown PetscErrorCode ierr; 9c4762a1bSJed Brown 10c4762a1bSJed Brown PetscFunctionBegin; 11*30602db0SMatthew G. Knepley ierr = DMCreate(comm, dm);CHKERRQ(ierr); 12*30602db0SMatthew G. Knepley ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr); 13*30602db0SMatthew G. Knepley ierr = DMSetFromOptions(*dm);CHKERRQ(ierr); 14c4762a1bSJed Brown ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr); 15c4762a1bSJed Brown PetscFunctionReturn(0); 16c4762a1bSJed Brown } 17c4762a1bSJed Brown 18*30602db0SMatthew G. Knepley static PetscErrorCode TestLocalDofOrder(DM dm) 19c4762a1bSJed Brown { 20c4762a1bSJed Brown PetscFE fe[3]; 21c4762a1bSJed Brown PetscSection s; 22*30602db0SMatthew G. Knepley PetscBool simplex; 23c4762a1bSJed Brown PetscInt dim, Nf, f; 24c4762a1bSJed Brown PetscErrorCode ierr; 25c4762a1bSJed Brown 26c4762a1bSJed Brown PetscFunctionBegin; 27c4762a1bSJed Brown ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr); 28*30602db0SMatthew G. Knepley ierr = DMPlexIsSimplex(dm, &simplex);CHKERRQ(ierr); 29*30602db0SMatthew G. Knepley ierr = PetscFECreateDefault(PETSC_COMM_SELF, dim, dim, simplex, "field0_", -1, &fe[0]);CHKERRQ(ierr); 30*30602db0SMatthew G. Knepley ierr = PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "field1_", -1, &fe[1]);CHKERRQ(ierr); 31*30602db0SMatthew G. Knepley ierr = PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "field2_", -1, &fe[2]);CHKERRQ(ierr); 32c4762a1bSJed Brown 33c4762a1bSJed Brown ierr = DMSetField(dm, 0, NULL, (PetscObject) fe[0]);CHKERRQ(ierr); 34c4762a1bSJed Brown ierr = DMSetField(dm, 1, NULL, (PetscObject) fe[1]);CHKERRQ(ierr); 35c4762a1bSJed Brown ierr = DMSetField(dm, 2, NULL, (PetscObject) fe[2]);CHKERRQ(ierr); 36c4762a1bSJed Brown ierr = DMCreateDS(dm);CHKERRQ(ierr); 37c4762a1bSJed Brown ierr = DMGetLocalSection(dm, &s);CHKERRQ(ierr); 38c4762a1bSJed Brown ierr = PetscObjectViewFromOptions((PetscObject) s, NULL, "-dof_view");CHKERRQ(ierr); 39c4762a1bSJed Brown 40c4762a1bSJed Brown ierr = DMGetNumFields(dm, &Nf);CHKERRQ(ierr); 41c4762a1bSJed Brown for (f = 0; f < Nf; ++f) {ierr = PetscFEDestroy(&fe[f]);CHKERRQ(ierr);} 42c4762a1bSJed Brown PetscFunctionReturn(0); 43c4762a1bSJed Brown } 44c4762a1bSJed Brown 45c4762a1bSJed Brown int main(int argc, char **argv) 46c4762a1bSJed Brown { 47c4762a1bSJed Brown DM dm; 48c4762a1bSJed Brown PetscErrorCode ierr; 49c4762a1bSJed Brown 50c4762a1bSJed Brown ierr = PetscInitialize(&argc, &argv, NULL, help);if (ierr) return ierr; 51*30602db0SMatthew G. Knepley ierr = CreateMesh(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr); 52*30602db0SMatthew G. Knepley ierr = TestLocalDofOrder(dm);CHKERRQ(ierr); 53c4762a1bSJed Brown ierr = DMDestroy(&dm);CHKERRQ(ierr); 54c4762a1bSJed Brown ierr = PetscFinalize(); 55c4762a1bSJed Brown return ierr; 56c4762a1bSJed Brown } 57c4762a1bSJed Brown 58c4762a1bSJed Brown /*TEST 59c4762a1bSJed Brown 60c4762a1bSJed Brown test: 61c4762a1bSJed Brown suffix: tri_pm 62c4762a1bSJed Brown requires: triangle 63*30602db0SMatthew 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 64c4762a1bSJed Brown 65c4762a1bSJed Brown test: 66c4762a1bSJed Brown suffix: quad_pm 67c4762a1bSJed Brown requires: 68*30602db0SMatthew 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 69c4762a1bSJed Brown 70c4762a1bSJed Brown test: 71c4762a1bSJed Brown suffix: tri_fm 72c4762a1bSJed Brown requires: triangle 73*30602db0SMatthew 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 74c4762a1bSJed Brown 75c4762a1bSJed Brown test: 76c4762a1bSJed Brown suffix: quad_fm 77c4762a1bSJed Brown requires: 78*30602db0SMatthew 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 79c4762a1bSJed Brown 80c4762a1bSJed Brown TEST*/ 81