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 6d71ae5a4SJacob Faibussowitsch static PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 7d71ae5a4SJacob Faibussowitsch { 8c4762a1bSJed Brown PetscFunctionBegin; 99566063dSJacob Faibussowitsch PetscCall(DMCreate(comm, dm)); 109566063dSJacob Faibussowitsch PetscCall(DMSetType(*dm, DMPLEX)); 119566063dSJacob Faibussowitsch PetscCall(DMSetFromOptions(*dm)); 129566063dSJacob Faibussowitsch PetscCall(DMViewFromOptions(*dm, NULL, "-dm_view")); 13*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 14c4762a1bSJed Brown } 15c4762a1bSJed Brown 16d71ae5a4SJacob Faibussowitsch static PetscErrorCode TestLocalDofOrder(DM dm) 17d71ae5a4SJacob Faibussowitsch { 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; 249566063dSJacob Faibussowitsch PetscCall(DMGetDimension(dm, &dim)); 259566063dSJacob Faibussowitsch PetscCall(DMPlexIsSimplex(dm, &simplex)); 269566063dSJacob Faibussowitsch PetscCall(PetscFECreateDefault(PETSC_COMM_SELF, dim, dim, simplex, "field0_", -1, &fe[0])); 279566063dSJacob Faibussowitsch PetscCall(PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "field1_", -1, &fe[1])); 289566063dSJacob Faibussowitsch PetscCall(PetscFECreateDefault(PETSC_COMM_SELF, dim, 1, simplex, "field2_", -1, &fe[2])); 29c4762a1bSJed Brown 309566063dSJacob Faibussowitsch PetscCall(DMSetField(dm, 0, NULL, (PetscObject)fe[0])); 319566063dSJacob Faibussowitsch PetscCall(DMSetField(dm, 1, NULL, (PetscObject)fe[1])); 329566063dSJacob Faibussowitsch PetscCall(DMSetField(dm, 2, NULL, (PetscObject)fe[2])); 339566063dSJacob Faibussowitsch PetscCall(DMCreateDS(dm)); 349566063dSJacob Faibussowitsch PetscCall(DMGetLocalSection(dm, &s)); 359566063dSJacob Faibussowitsch PetscCall(PetscObjectViewFromOptions((PetscObject)s, NULL, "-dof_view")); 36c4762a1bSJed Brown 379566063dSJacob Faibussowitsch PetscCall(DMGetNumFields(dm, &Nf)); 389566063dSJacob Faibussowitsch for (f = 0; f < Nf; ++f) PetscCall(PetscFEDestroy(&fe[f])); 39*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 40c4762a1bSJed Brown } 41c4762a1bSJed Brown 42d71ae5a4SJacob Faibussowitsch int main(int argc, char **argv) 43d71ae5a4SJacob Faibussowitsch { 44c4762a1bSJed Brown DM dm; 45c4762a1bSJed Brown 46327415f7SBarry Smith PetscFunctionBeginUser; 479566063dSJacob Faibussowitsch PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 489566063dSJacob Faibussowitsch PetscCall(CreateMesh(PETSC_COMM_WORLD, &dm)); 499566063dSJacob Faibussowitsch PetscCall(TestLocalDofOrder(dm)); 509566063dSJacob Faibussowitsch PetscCall(DMDestroy(&dm)); 519566063dSJacob Faibussowitsch PetscCall(PetscFinalize()); 52b122ec5aSJacob Faibussowitsch return 0; 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