1c4762a1bSJed Brown static char help[] = "Tests for periodic mesh output\n\n"; 2c4762a1bSJed Brown 3c4762a1bSJed Brown #include <petscdmplex.h> 4c4762a1bSJed Brown 530602db0SMatthew G. Knepley PetscErrorCode CheckMesh(DM dm) 6c4762a1bSJed Brown { 7c4762a1bSJed Brown PetscReal detJ, J[9], refVol = 1.0; 8c4762a1bSJed Brown PetscReal vol; 9c4762a1bSJed Brown PetscInt dim, depth, d, cStart, cEnd, c; 10c4762a1bSJed Brown PetscErrorCode ierr; 11c4762a1bSJed Brown 12c4762a1bSJed Brown PetscFunctionBegin; 13c4762a1bSJed Brown ierr = DMGetDimension(dm, &dim);CHKERRQ(ierr); 14c4762a1bSJed Brown ierr = DMPlexGetDepth(dm, &depth);CHKERRQ(ierr); 15c4762a1bSJed Brown for (d = 0; d < dim; ++d) { 16c4762a1bSJed Brown refVol *= 2.0; 17c4762a1bSJed Brown } 18c4762a1bSJed Brown ierr = DMPlexGetHeightStratum(dm, 0, &cStart, &cEnd);CHKERRQ(ierr); 19c4762a1bSJed Brown for (c = cStart; c < cEnd; ++c) { 20c4762a1bSJed Brown ierr = DMPlexComputeCellGeometryFEM(dm, c, NULL, NULL, J, NULL, &detJ);CHKERRQ(ierr); 212c71b3e2SJacob Faibussowitsch PetscCheckFalse(detJ <= 0.0,PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Mesh cell %d is inverted, |J| = %g", c, detJ); 22c4762a1bSJed Brown if (depth > 1) { 23c4762a1bSJed Brown ierr = DMPlexComputeCellGeometryFVM(dm, c, &vol, NULL, NULL);CHKERRQ(ierr); 242c71b3e2SJacob Faibussowitsch PetscCheckFalse(vol <= 0.0,PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Mesh cell %d is inverted, vol = %g", c, vol); 25c4762a1bSJed Brown } 26c4762a1bSJed Brown } 27c4762a1bSJed Brown PetscFunctionReturn(0); 28c4762a1bSJed Brown } 29c4762a1bSJed Brown 3030602db0SMatthew G. Knepley PetscErrorCode CreateMesh(MPI_Comm comm, DM *dm) 31c4762a1bSJed Brown { 32c4762a1bSJed Brown PetscErrorCode ierr; 33c4762a1bSJed Brown 34c4762a1bSJed Brown PetscFunctionBegin; 3530602db0SMatthew G. Knepley ierr = DMCreate(comm, dm);CHKERRQ(ierr); 3630602db0SMatthew G. Knepley ierr = DMSetType(*dm, DMPLEX);CHKERRQ(ierr); 3730602db0SMatthew G. Knepley ierr = DMSetFromOptions(*dm);CHKERRQ(ierr); 38c4762a1bSJed Brown ierr = DMViewFromOptions(*dm, NULL, "-dm_view");CHKERRQ(ierr); 39c4762a1bSJed Brown PetscFunctionReturn(0); 40c4762a1bSJed Brown } 41c4762a1bSJed Brown 42c4762a1bSJed Brown int main(int argc, char **argv) 43c4762a1bSJed Brown { 4430602db0SMatthew G. Knepley DM dm; 45c4762a1bSJed Brown PetscErrorCode ierr; 46c4762a1bSJed Brown 47c4762a1bSJed Brown ierr = PetscInitialize(&argc, &argv, NULL,help);if (ierr) return ierr; 4830602db0SMatthew G. Knepley ierr = CreateMesh(PETSC_COMM_WORLD, &dm);CHKERRQ(ierr); 4930602db0SMatthew G. Knepley ierr = CheckMesh(dm);CHKERRQ(ierr); 5030602db0SMatthew G. Knepley ierr = DMDestroy(&dm);CHKERRQ(ierr); 51c4762a1bSJed Brown ierr = PetscFinalize(); 52c4762a1bSJed Brown return ierr; 53c4762a1bSJed Brown } 54c4762a1bSJed Brown 55c4762a1bSJed Brown /*TEST 56c4762a1bSJed Brown 57c4762a1bSJed Brown test: 58c4762a1bSJed Brown suffix: 0 5930602db0SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 3,1,0 -dm_plex_box_bd periodic,none -dm_view ::ascii_info_detail 60c4762a1bSJed Brown test: 61c4762a1bSJed Brown suffix: 1 62c4762a1bSJed Brown nsize: 2 63*e600fa54SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 3,1,0 -dm_plex_box_bd periodic,none -petscpartitioner_type simple -dm_view ::ascii_info_detail 64c4762a1bSJed Brown test: 65c4762a1bSJed Brown suffix: 2 66c4762a1bSJed Brown nsize: 2 67*e600fa54SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -petscpartitioner_type simple -dm_view ::ascii_info_detail 68c4762a1bSJed Brown test: 69c4762a1bSJed Brown suffix: 3 70c4762a1bSJed Brown nsize: 4 71*e600fa54SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -petscpartitioner_type simple -dm_view ::ascii_info_detail 72c4762a1bSJed Brown test: 73c4762a1bSJed Brown suffix: 4 74c4762a1bSJed Brown nsize: 2 75*e600fa54SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 3,1,0 -dm_plex_box_bd periodic,none -dm_plex_periodic_cut -petscpartitioner_type simple -dm_view ::ascii_info_detail 76c4762a1bSJed Brown test: 77c4762a1bSJed Brown suffix: 5 78c4762a1bSJed Brown nsize: 2 79*e600fa54SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -dm_plex_periodic_cut -petscpartitioner_type simple -dm_view ::ascii_info_detail 80c4762a1bSJed Brown test: 81c4762a1bSJed Brown suffix: 6 82c4762a1bSJed Brown nsize: 4 83*e600fa54SMatthew G. Knepley args: -dm_plex_simplex 0 -dm_plex_box_faces 6,2,0 -dm_plex_box_bd periodic,none -dm_plex_periodic_cut -petscpartitioner_type simple -dm_view ::ascii_info_detail 84c4762a1bSJed Brown 85c4762a1bSJed Brown TEST*/ 86