From ec713c276ee1ac3cf09f34d6b7c1c26ff86187c6 Mon Sep 17 00:00:00 2001 From: Konrad Simon Date: Thu, 28 Jan 2021 14:01:57 +0100 Subject: [PATCH] Added 2d and 3d tes mesh with nonstandard faces to test orientation issue for vector elements. Also added conformity tests for FEs. --- .../changes/incompatibilities/20210128Simon | 5 + include/deal.II/grid/grid_generator.h | 52 ++ source/grid/grid_generator.cc | 348 ++++++++++++ tests/fe/fe_conformity_dim_2_fe_abf.cc | 96 ++++ tests/fe/fe_conformity_dim_2_fe_abf.output | 193 +++++++ tests/fe/fe_conformity_dim_2_fe_bdm.cc | 93 ++++ tests/fe/fe_conformity_dim_2_fe_bdm.output | 385 +++++++++++++ tests/fe/fe_conformity_dim_2_fe_nedelec.cc | 93 ++++ .../fe/fe_conformity_dim_2_fe_nedelec.output | 481 ++++++++++++++++ tests/fe/fe_conformity_dim_2_fe_nedelec_sz.cc | 90 +++ .../fe_conformity_dim_2_fe_nedelec_sz.output | 481 ++++++++++++++++ tests/fe/fe_conformity_dim_2_fe_q.cc | 77 +++ tests/fe/fe_conformity_dim_2_fe_q.output | 385 +++++++++++++ tests/fe/fe_conformity_dim_2_fe_rt.cc | 93 ++++ tests/fe/fe_conformity_dim_2_fe_rt.output | 481 ++++++++++++++++ tests/fe/fe_conformity_dim_2_fe_rt_nodal.cc | 90 +++ .../fe/fe_conformity_dim_2_fe_rt_nodal.output | 481 ++++++++++++++++ tests/fe/fe_conformity_fill_vector_random.h | 86 +++ tests/fe/fe_conformity_test.h | 518 ++++++++++++++++++ ...erator_non_standard_orientation_mesh_2d.cc | 105 ++++ ...or_non_standard_orientation_mesh_2d.output | 71 +++ ...erator_non_standard_orientation_mesh_3d.cc | 110 ++++ ...or_non_standard_orientation_mesh_3d.output | 171 ++++++ 23 files changed, 4985 insertions(+) create mode 100644 doc/news/changes/incompatibilities/20210128Simon create mode 100644 tests/fe/fe_conformity_dim_2_fe_abf.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_abf.output create mode 100644 tests/fe/fe_conformity_dim_2_fe_bdm.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_bdm.output create mode 100644 tests/fe/fe_conformity_dim_2_fe_nedelec.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_nedelec.output create mode 100644 tests/fe/fe_conformity_dim_2_fe_nedelec_sz.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_nedelec_sz.output create mode 100644 tests/fe/fe_conformity_dim_2_fe_q.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_q.output create mode 100644 tests/fe/fe_conformity_dim_2_fe_rt.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_rt.output create mode 100644 tests/fe/fe_conformity_dim_2_fe_rt_nodal.cc create mode 100644 tests/fe/fe_conformity_dim_2_fe_rt_nodal.output create mode 100644 tests/fe/fe_conformity_fill_vector_random.h create mode 100644 tests/fe/fe_conformity_test.h create mode 100644 tests/grid/grid_generator_non_standard_orientation_mesh_2d.cc create mode 100644 tests/grid/grid_generator_non_standard_orientation_mesh_2d.output create mode 100644 tests/grid/grid_generator_non_standard_orientation_mesh_3d.cc create mode 100644 tests/grid/grid_generator_non_standard_orientation_mesh_3d.output diff --git a/doc/news/changes/incompatibilities/20210128Simon b/doc/news/changes/incompatibilities/20210128Simon new file mode 100644 index 0000000000..dd64ebce8c --- /dev/null +++ b/doc/news/changes/incompatibilities/20210128Simon @@ -0,0 +1,5 @@ +Added a simple mesh for debugging purposes that consists +of two cubes where one of them can be chosen to have one face +either flipped or rotated. +
+(Konrad Simon, 2021/01/28) diff --git a/include/deal.II/grid/grid_generator.h b/include/deal.II/grid/grid_generator.h index d17c7e5d02..1ba64fd9b9 100644 --- a/include/deal.II/grid/grid_generator.h +++ b/include/deal.II/grid/grid_generator.h @@ -768,6 +768,58 @@ namespace GridGenerator const Point & center = Point(), const double radius = 1.); + /** + * Generate a 2D mesh consisting of the unit square joined with a copy shifted + * by $s = (1,0)$. Depending on the flags passed either the right or the left + * square is rotated by $\pi/2$. This way one can generate a mesh in which one + * square possibly contains an edge that has the opposite tangential (and + * hence also opposite normal) orientation of the neighboring edge of the + * other square. + * + * This mesh is not overly useful from a practical point of view. For + * debugging purposes it can be used to check for orientation issues for + * vector- or tensor-valued finite elements. + * + * @note If rotate_left_square==rotate_right_square the mesh is consistently oriented. + * + * @param[out] tria The input triangulation. + * @param[in] rotate_left_square true if the left square is + * rotated by $\pi/2$. + * @param[in] rotate_right_square true if the right square is + * rotated by $\pi/2$. + */ + void non_standard_orientation_mesh(Triangulation<2> &tria, + const bool rotate_left_square, + const bool rotate_right_square); + + /** + * Generate a 3D mesh consisting of the unit cube joined with a copy shifted + * by $s = (1,0,0)$. Depending on the flags passed either the right or the + * left cube (when looking at the positively oriented (x,z)-plane) contains a + * face that is either not in standard orientation and/or is rotated by either + * $\pi/2$, $\pi$ or $3/2\pi$. + * + * This mesh is not overly useful from a practical point of view. For + * debugging purposes it can be used to check for orientation issues for + * vector- or tensor-valued finite elements. + * + * @param[out] tria The input triangulation. + * @param[in] face_orientation true if the face is the not in + * standard orientation. + * @param[in] face_flip true if the face is rotated by +180 + * degrees + * @param[in] face_rotation true if the face is rotated + * (additionally) by +90 degrees + * @param[in] manipulate_left_cube true if the left cube is + * to be re-ordered. If `false`, it is the right cube. + */ + void non_standard_orientation_mesh(Triangulation<3> &tria, + const bool face_orientation, + const bool face_flip, + const bool face_rotation, + const bool manipulate_left_cube); + + /** * Creates a hyper sphere, i.e., a surface of a ball in @p spacedim * dimensions. This function only exists for dim+1=spacedim in 2 and 3 space diff --git a/source/grid/grid_generator.cc b/source/grid/grid_generator.cc index b1d2070aaf..d0918d322e 100644 --- a/source/grid/grid_generator.cc +++ b/source/grid/grid_generator.cc @@ -4990,6 +4990,354 @@ namespace GridGenerator } + void non_standard_orientation_mesh(Triangulation<2> &tria, + const bool rotate_left_square, + const bool rotate_right_square) + { + constexpr unsigned int dim = 2; + + const unsigned int n_cells = 2; + std::vector> cells(n_cells); + + // Corner points of the cube [0,1]^2 + const std::vector> vertices = {Point(0, 0), // 0 + Point(1, 0), // 1 + Point(0, 1), // 2 + Point(1, 1), // 3 + Point(2, 0), // 4 + Point(2, 1)}; // 5 + + + // consistent orientation + unsigned int cell_vertices[n_cells][4] = {{0, 1, 2, 3}, // unit cube + {1, 4, 3, 5}}; // shifted cube + + // all 4 true-false combinations of (rotate_left_square | rotate_right_square) to a number 0..3 + unsigned int this_case = 2 * rotate_left_square + rotate_right_square; + + switch (this_case) + { + case /* rotate only right square */ 1: + { + cell_vertices[1][0] = 4; + cell_vertices[1][1] = 5; + cell_vertices[1][2] = 1; + cell_vertices[1][3] = 3; + break; + } + + case /* rotate only left square */ 2: + { + cell_vertices[0][0] = 1; + cell_vertices[0][1] = 3; + cell_vertices[0][2] = 0; + cell_vertices[0][3] = 2; + break; + } + + case /* rotate both squares (again consistent orientation) */ 3: + { + cell_vertices[0][0] = 1; + cell_vertices[0][1] = 3; + cell_vertices[0][2] = 0; + cell_vertices[0][3] = 2; + + cell_vertices[1][0] = 4; + cell_vertices[1][1] = 5; + cell_vertices[1][2] = 1; + cell_vertices[1][3] = 3; + break; + } + + default /* 0 */: + break; + } // switch + + cells.resize(n_cells, CellData()); + + for (unsigned int cell_index = 0; cell_index < n_cells; ++cell_index) + { + for (const unsigned int vertex_index : + GeometryInfo::vertex_indices()) + { + cells[cell_index].vertices[vertex_index] = + cell_vertices[cell_index][vertex_index]; + cells[cell_index].material_id = 0; + } + } + + tria.create_triangulation(vertices, cells, SubCellData()); + } + + + void non_standard_orientation_mesh(Triangulation<3> &tria, + const bool face_orientation, + const bool face_flip, + const bool face_rotation, + const bool manipulate_left_cube) + { + constexpr unsigned int dim = 3; + + const unsigned int n_cells = 2; + std::vector> cells(n_cells); + + // Corner points of the cube [0,1]^3 + const std::vector> vertices = {Point(0, 0, 0), // 0 + Point(1, 0, 0), // 1 + Point(0, 1, 0), // 2 + Point(1, 1, 0), // 3 + Point(0, 0, 1), // 4 + Point(1, 0, 1), // 5 + Point(0, 1, 1), // 6 + Point(1, 1, 1), // 7 + Point(2, 0, 0), // 8 + Point(2, 1, 0), // 9 + Point(2, 0, 1), // 10 + Point(2, 1, 1)}; // 11 + + unsigned int cell_vertices[n_cells][8] = { + {0, 1, 2, 3, 4, 5, 6, 7}, // unit cube + {1, 8, 3, 9, 5, 10, 7, 11}}; // shifted cube + + // binary to case number + const unsigned int this_case = + 4 * face_orientation + 2 * face_flip + face_rotation; + + if (manipulate_left_cube) + { + switch (this_case) + { + case 0: + { + cell_vertices[0][0] = 1; + cell_vertices[0][1] = 0; + cell_vertices[0][2] = 5; + cell_vertices[0][3] = 4; + cell_vertices[0][4] = 3; + cell_vertices[0][5] = 2; + cell_vertices[0][6] = 7; + cell_vertices[0][7] = 6; + break; + } + + case 1: + { + cell_vertices[0][0] = 5; + cell_vertices[0][1] = 4; + cell_vertices[0][2] = 7; + cell_vertices[0][3] = 6; + cell_vertices[0][4] = 1; + cell_vertices[0][5] = 0; + cell_vertices[0][6] = 3; + cell_vertices[0][7] = 2; + break; + } + + case 2: + { + cell_vertices[0][0] = 7; + cell_vertices[0][1] = 6; + cell_vertices[0][2] = 3; + cell_vertices[0][3] = 2; + cell_vertices[0][4] = 5; + cell_vertices[0][5] = 4; + cell_vertices[0][6] = 1; + cell_vertices[0][7] = 0; + break; + } + case 3: + { + cell_vertices[0][0] = 3; + cell_vertices[0][1] = 2; + cell_vertices[0][2] = 1; + cell_vertices[0][3] = 0; + cell_vertices[0][4] = 7; + cell_vertices[0][5] = 6; + cell_vertices[0][6] = 5; + cell_vertices[0][7] = 4; + break; + } + + case 4: + { + cell_vertices[0][0] = 0; + cell_vertices[0][1] = 1; + cell_vertices[0][2] = 2; + cell_vertices[0][3] = 3; + cell_vertices[0][4] = 4; + cell_vertices[0][5] = 5; + cell_vertices[0][6] = 6; + cell_vertices[0][7] = 7; + break; + } + + case 5: + { + cell_vertices[0][0] = 2; + cell_vertices[0][1] = 3; + cell_vertices[0][2] = 6; + cell_vertices[0][3] = 7; + cell_vertices[0][4] = 0; + cell_vertices[0][5] = 1; + cell_vertices[0][6] = 4; + cell_vertices[0][7] = 5; + break; + } + + case 6: + { + cell_vertices[0][0] = 6; + cell_vertices[0][1] = 7; + cell_vertices[0][2] = 4; + cell_vertices[0][3] = 5; + cell_vertices[0][4] = 2; + cell_vertices[0][5] = 3; + cell_vertices[0][6] = 0; + cell_vertices[0][7] = 1; + break; + } + + case 7: + { + cell_vertices[0][0] = 4; + cell_vertices[0][1] = 5; + cell_vertices[0][2] = 0; + cell_vertices[0][3] = 1; + cell_vertices[0][4] = 6; + cell_vertices[0][5] = 7; + cell_vertices[0][6] = 2; + cell_vertices[0][7] = 3; + break; + } + } // switch + } + else + { + switch (this_case) + { + case 0: + { + cell_vertices[1][0] = 8; + cell_vertices[1][1] = 1; + cell_vertices[1][2] = 10; + cell_vertices[1][3] = 5; + cell_vertices[1][4] = 9; + cell_vertices[1][5] = 3; + cell_vertices[1][6] = 11; + cell_vertices[1][7] = 7; + break; + } + + case 1: + { + cell_vertices[1][0] = 10; + cell_vertices[1][1] = 5; + cell_vertices[1][2] = 11; + cell_vertices[1][3] = 7; + cell_vertices[1][4] = 8; + cell_vertices[1][5] = 1; + cell_vertices[1][6] = 9; + cell_vertices[1][7] = 3; + break; + } + + case 2: + { + cell_vertices[1][0] = 11; + cell_vertices[1][1] = 7; + cell_vertices[1][2] = 9; + cell_vertices[1][3] = 3; + cell_vertices[1][4] = 10; + cell_vertices[1][5] = 5; + cell_vertices[1][6] = 8; + cell_vertices[1][7] = 1; + break; + } + + case 3: + { + cell_vertices[1][0] = 9; + cell_vertices[1][1] = 3; + cell_vertices[1][2] = 8; + cell_vertices[1][3] = 1; + cell_vertices[1][4] = 11; + cell_vertices[1][5] = 7; + cell_vertices[1][6] = 10; + cell_vertices[1][7] = 5; + break; + } + + case 4: + { + cell_vertices[1][0] = 1; + cell_vertices[1][1] = 8; + cell_vertices[1][2] = 3; + cell_vertices[1][3] = 9; + cell_vertices[1][4] = 5; + cell_vertices[1][5] = 10; + cell_vertices[1][6] = 7; + cell_vertices[1][7] = 11; + break; + } + + case 5: + { + cell_vertices[1][0] = 5; + cell_vertices[1][1] = 10; + cell_vertices[1][2] = 1; + cell_vertices[1][3] = 8; + cell_vertices[1][4] = 7; + cell_vertices[1][5] = 11; + cell_vertices[1][6] = 3; + cell_vertices[1][7] = 9; + break; + } + + case 6: + { + cell_vertices[1][0] = 7; + cell_vertices[1][1] = 11; + cell_vertices[1][2] = 5; + cell_vertices[1][3] = 10; + cell_vertices[1][4] = 3; + cell_vertices[1][5] = 9; + cell_vertices[1][6] = 1; + cell_vertices[1][7] = 8; + break; + } + + case 7: + { + cell_vertices[1][0] = 3; + cell_vertices[1][1] = 9; + cell_vertices[1][2] = 7; + cell_vertices[1][3] = 11; + cell_vertices[1][4] = 1; + cell_vertices[1][5] = 8; + cell_vertices[1][6] = 5; + cell_vertices[1][7] = 10; + break; + } + } // switch + } + + cells.resize(n_cells, CellData()); + + for (unsigned int cell_index = 0; cell_index < n_cells; ++cell_index) + { + for (const unsigned int vertex_index : + GeometryInfo::vertex_indices()) + { + cells[cell_index].vertices[vertex_index] = + cell_vertices[cell_index][vertex_index]; + cells[cell_index].material_id = 0; + } + } + + tria.create_triangulation(vertices, cells, SubCellData()); + } + + template void hyper_sphere(Triangulation &tria, diff --git a/tests/fe/fe_conformity_dim_2_fe_abf.cc b/tests/fe/fe_conformity_dim_2_fe_abf.cc new file mode 100644 index 0000000000..23f589c33d --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_abf.cc @@ -0,0 +1,96 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include +#include + +#include "../tests.h" + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + + constexpr int dim = 2; + + // Test only up to order 2 since the FE constructor will throw an + // exception for higher order + for (unsigned int fe_degree = 0; fe_degree < 2; ++fe_degree) + { + // H(div) conformal + FE_ABF fe(fe_degree); + + { + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/fe/fe_conformity_dim_2_fe_abf.output b/tests/fe/fe_conformity_dim_2_fe_abf.output new file mode 100644 index 0000000000..d896a99e0a --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_abf.output @@ -0,0 +1,193 @@ + +DEAL:: +DEAL::******* degree 0 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 6 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 6 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 6 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 6 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 8 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 8 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 8 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_ABF<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 8 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_dim_2_fe_bdm.cc b/tests/fe/fe_conformity_dim_2_fe_bdm.cc new file mode 100644 index 0000000000..f2be6936ff --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_bdm.cc @@ -0,0 +1,93 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include + +#include "../tests.h" + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + + constexpr int dim = 2; + + for (unsigned int fe_degree = 1; fe_degree < 5; ++fe_degree) + { + // H(div) conformal + FE_BDM fe(fe_degree); + + { + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/fe/fe_conformity_dim_2_fe_bdm.output b/tests/fe/fe_conformity_dim_2_fe_bdm.output new file mode 100644 index 0000000000..276451b5b4 --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_bdm.output @@ -0,0 +1,385 @@ + +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 8 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 8 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 8 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 8 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 14 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 14 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 14 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 14 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 2 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 22 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 6 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 22 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 6 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 22 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 6 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 22 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 6 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 32 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 32 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 32 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_BDM<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 32 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_dim_2_fe_nedelec.cc b/tests/fe/fe_conformity_dim_2_fe_nedelec.cc new file mode 100644 index 0000000000..cacbea376d --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_nedelec.cc @@ -0,0 +1,93 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include + +#include "../tests.h" + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + + constexpr int dim = 2; + + for (unsigned int fe_degree = 0; fe_degree < 5; ++fe_degree) + { + // H(curl) conformal + FE_Nedelec fe(fe_degree); + + { + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/fe/fe_conformity_dim_2_fe_nedelec.output b/tests/fe/fe_conformity_dim_2_fe_nedelec.output new file mode 100644 index 0000000000..01a5e24d47 --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_nedelec.output @@ -0,0 +1,481 @@ + +DEAL:: +DEAL::******* degree 0 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Nedelec<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_dim_2_fe_nedelec_sz.cc b/tests/fe/fe_conformity_dim_2_fe_nedelec_sz.cc new file mode 100644 index 0000000000..eaec8b5e4d --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_nedelec_sz.cc @@ -0,0 +1,90 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include + +#include "../tests.h" + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + constexpr int dim = 2; + + for (unsigned int fe_degree = 0; fe_degree < 5; ++fe_degree) + { + // H(curl) conformal + FE_NedelecSZ fe(fe_degree); + + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/tests/fe/fe_conformity_dim_2_fe_nedelec_sz.output b/tests/fe/fe_conformity_dim_2_fe_nedelec_sz.output new file mode 100644 index 0000000000..75e9bc80f1 --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_nedelec_sz.output @@ -0,0 +1,481 @@ + +DEAL:: +DEAL::******* degree 0 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_NedelecSZ<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Tangential jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Tangential jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_dim_2_fe_q.cc b/tests/fe/fe_conformity_dim_2_fe_q.cc new file mode 100644 index 0000000000..81f4ae1146 --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_q.cc @@ -0,0 +1,77 @@ +#include + + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + + constexpr int dim = 2; + + for (unsigned int fe_degree = 1; fe_degree < 5; ++fe_degree) + { + // H1 conformal + FE_Q fe(fe_degree); + + { + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/fe/fe_conformity_dim_2_fe_q.output b/tests/fe/fe_conformity_dim_2_fe_q.output new file mode 100644 index 0000000000..160f42034c --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_q.output @@ -0,0 +1,385 @@ + +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(1) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 0 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(1) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 0 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(1) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 0 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(1) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 0 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(2) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 9 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 1 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(2) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 9 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 1 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(2) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 9 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 1 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(2) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 9 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 1 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(3) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 6 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(3) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 6 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(3) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 6 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(3) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 16 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 6 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(4) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 25 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 9 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 7 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(4) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 25 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 9 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 7 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(4) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 25 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 9 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 7 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_Q<2>(4) +DEAL:: is_primitive : 1 +DEAL:: n_dofs_per_cell : 25 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 9 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 1 +DEAL:: +DEAL:: first_line_index : 4 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 2 +DEAL:: first_face_quad_index: 7 +DEAL:: +DEAL:: n_components : 1 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Function jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Function jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_dim_2_fe_rt.cc b/tests/fe/fe_conformity_dim_2_fe_rt.cc new file mode 100644 index 0000000000..e6218c23df --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_rt.cc @@ -0,0 +1,93 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include + +#include "../tests.h" + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + + constexpr int dim = 2; + + for (unsigned int fe_degree = 0; fe_degree < 5; ++fe_degree) + { + // H(div) conformal + FE_RaviartThomas fe(fe_degree); + + { + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} diff --git a/tests/fe/fe_conformity_dim_2_fe_rt.output b/tests/fe/fe_conformity_dim_2_fe_rt.output new file mode 100644 index 0000000000..d1298b0098 --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_rt.output @@ -0,0 +1,481 @@ + +DEAL:: +DEAL::******* degree 0 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomas<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_dim_2_fe_rt_nodal.cc b/tests/fe/fe_conformity_dim_2_fe_rt_nodal.cc new file mode 100644 index 0000000000..2ee2ff2403 --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_rt_nodal.cc @@ -0,0 +1,90 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#include + +#include "../tests.h" + +// STL +#include +#include + +// My test headers +#include "fe_conformity_test.h" + +#define PRECISION 4 + +int +main(int, char **) +{ + std::ofstream logfile("output"); + dealii::deallog << std::setprecision(PRECISION); + dealii::deallog << std::fixed; + logfile << std::setprecision(PRECISION); + logfile << std::fixed; + dealii::deallog.attach(logfile); + + try + { + using namespace FEConforimityTest; + constexpr int dim = 2; + + for (unsigned int fe_degree = 0; fe_degree < 5; ++fe_degree) + { + // H(div) conformal + FE_RaviartThomasNodal fe(fe_degree); + + for (unsigned int this_switch = 0; this_switch < (dim == 2 ? 4 : 8); + ++this_switch) + { + deallog << std::endl + << "******* degree " << fe_degree + << " ******* orientation case " << this_switch + << " *******" << std::endl; + + FEConformityTest fe_conformity_tester(fe, this_switch); + fe_conformity_tester.run(); + } + } // ++fe_degree + } + catch (std::exception &exc) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Exception on processing: " << std::endl + << exc.what() << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + + return 1; + } + catch (...) + { + std::cerr << std::endl + << std::endl + << "----------------------------------------------------" + << std::endl; + std::cerr << "Unknown exception!" << std::endl + << "Aborting!" << std::endl + << "----------------------------------------------------" + << std::endl; + return 1; + } + + return 0; +} \ No newline at end of file diff --git a/tests/fe/fe_conformity_dim_2_fe_rt_nodal.output b/tests/fe/fe_conformity_dim_2_fe_rt_nodal.output new file mode 100644 index 0000000000..efac6afbfb --- /dev/null +++ b/tests/fe/fe_conformity_dim_2_fe_rt_nodal.output @@ -0,0 +1,481 @@ + +DEAL:: +DEAL::******* degree 0 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 0 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(0) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 4 +DEAL:: n_dofs_per_face : 1 +DEAL:: n_dofs_per_quad : 0 +DEAL:: n_dofs_per_line : 1 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 4 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 1 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 1 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(1) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 12 +DEAL:: n_dofs_per_face : 2 +DEAL:: n_dofs_per_quad : 4 +DEAL:: n_dofs_per_line : 2 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 8 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 2 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 2 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(2) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 24 +DEAL:: n_dofs_per_face : 3 +DEAL:: n_dofs_per_quad : 12 +DEAL:: n_dofs_per_line : 3 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 12 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 3 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 3 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(3) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 40 +DEAL:: n_dofs_per_face : 4 +DEAL:: n_dofs_per_quad : 24 +DEAL:: n_dofs_per_line : 4 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 16 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 4 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 0 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 1 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 1 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 2 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 0 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL:: +DEAL::******* degree 4 ******* orientation case 3 ******* +DEAL::Element Info: +DEAL:: name : FE_RaviartThomasNodal<2>(4) +DEAL:: is_primitive : 0 +DEAL:: n_dofs_per_cell : 60 +DEAL:: n_dofs_per_face : 5 +DEAL:: n_dofs_per_quad : 40 +DEAL:: n_dofs_per_line : 5 +DEAL:: n_dofs_per_vertex : 0 +DEAL:: +DEAL:: first_line_index : 0 +DEAL:: first_quad_index : 20 +DEAL:: first_face_line_index: 0 +DEAL:: first_face_quad_index: 5 +DEAL:: +DEAL:: n_components : 2 +DEAL:: n_blocks : 1 +DEAL:: n_base_elements : 1 +DEAL:: +DEAL::Normal jumps (at quad points) in cell 0_0: at face 2 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 +DEAL::Normal jumps (at quad points) in cell 1_0: at face 3 +DEAL:: interface jumps: 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 diff --git a/tests/fe/fe_conformity_fill_vector_random.h b/tests/fe/fe_conformity_fill_vector_random.h new file mode 100644 index 0000000000..319dfcedc3 --- /dev/null +++ b/tests/fe/fe_conformity_fill_vector_random.h @@ -0,0 +1,86 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include + +namespace FEConforimityTest +{ + using namespace dealii; + + /* + * Generate a random double number between [a,b) + */ + class RandomNumberDouble + { + public: + RandomNumberDouble() = delete; + + RandomNumberDouble(const double _a, const double _b); + + double + generate(); + + private: + double a, b; + + std::uniform_real_distribution uniform_distribution; + + uint64_t timeSeed; + + std::seed_seq seed_sequence; + + std::mt19937_64 rng; + }; + + + RandomNumberDouble::RandomNumberDouble(const double _a, const double _b) + : a(_a) + , b(_b) + , uniform_distribution(a, b) + , timeSeed( + std::chrono::high_resolution_clock::now().time_since_epoch().count()) + , seed_sequence({uint32_t(timeSeed & 0xffffffff), uint32_t(timeSeed >> 32)}) + { + rng.seed(seed_sequence); + } + + double + RandomNumberDouble::generate() + { + return uniform_distribution(rng); + } + + + void + fill_vector_randomly(Vector &this_vector, double a = 0, double b = 1) + { + RandomNumberDouble random_double_generator(a, b); + + for (auto &v : this_vector) + { + v = random_double_generator.generate(); + } + } +} // namespace FEConforimityTest \ No newline at end of file diff --git a/tests/fe/fe_conformity_test.h b/tests/fe/fe_conformity_test.h new file mode 100644 index 0000000000..53fc59e2f1 --- /dev/null +++ b/tests/fe/fe_conformity_test.h @@ -0,0 +1,518 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 1998 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + +#pragma once + +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +// STL +#include +#include +#include +#include +#include +#include + +// My test headers +#include "fe_conformity_fill_vector_random.h" + +namespace FEConforimityTest +{ + using namespace dealii; + + template + class FEConformityTest + { + public: + FEConformityTest(const FiniteElement &fe, + const unsigned int config_switch); + + void + run(); + + private: + void + make_grid(); + + void + make_dofs(); + + void + run_test(); + + void + get_function_jump(const FEInterfaceValues &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps); + + void + get_normal_jump(const FEInterfaceValues &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps); + + void + get_tangential_jump(const FEInterfaceValues &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps); + + SmartPointer> fe_ptr; + Triangulation triangulation; + DoFHandler dof_handler; + AffineConstraints constraints; + + Vector random_fe_funtion; + + const unsigned int config_switch; + + const bool plot_mesh_properties = false; + }; + + template + FEConformityTest::FEConformityTest(const FiniteElement &_fe, + const unsigned int config_switch) + : fe_ptr(&_fe) + , dof_handler(triangulation) + , config_switch(config_switch) + { + deallog + << "Element Info: " << std::endl + << " name : " << fe_ptr->get_name() << std::endl + << " is_primitive : " << fe_ptr->is_primitive() << std::endl + << " n_dofs_per_cell : " << fe_ptr->dofs_per_cell << std::endl + << " n_dofs_per_face : " << fe_ptr->dofs_per_face << std::endl + << " n_dofs_per_quad : " << fe_ptr->dofs_per_quad << std::endl + << " n_dofs_per_line : " << fe_ptr->dofs_per_line << std::endl + << " n_dofs_per_vertex : " << fe_ptr->dofs_per_vertex << std::endl + << std::endl + << " first_line_index : " << fe_ptr->first_line_index << std::endl + << " first_quad_index : " << fe_ptr->first_quad_index << std::endl + << " first_face_line_index: " << fe_ptr->first_face_line_index + << std::endl + << " first_face_quad_index: " << fe_ptr->first_face_quad_index + << std::endl + << std::endl + << " n_components : " << fe_ptr->n_components() << std::endl + << " n_blocks : " << fe_ptr->n_blocks() << std::endl + << " n_base_elements : " << fe_ptr->n_base_elements() << std::endl + << std::endl; + + if (dim == 2) + AssertThrow(config_switch < 4, + ExcMessage("If dim=2 the config witch must be < 4.")); + + if (dim == 3) + AssertThrow(config_switch < 8, + ExcMessage("If dim=3 the config witch must be < 8.")); + } + + + + template <> + void + FEConformityTest<3>::make_grid() + { + triangulation.clear(); + + bool face_orientation = (((config_switch / 4) % 2) == 1); + bool face_flip = (((config_switch / 2) % 2) == 1); + bool face_rotation = ((config_switch % 2) == 1); + + bool manipulate_first_cube = true; + + GridGenerator::non_standard_orientation_mesh(triangulation, + face_orientation, + face_flip, + face_rotation, + manipulate_first_cube); + + // GridTools::distort_random(/* factor */ 0.15, + // triangulation_coarse, + // /* keep_boundary */ false); + + triangulation.refine_global(0); + + if (plot_mesh_properties) + { + deallog << std::endl + << "3D Mesh properties: " << std::endl + << std::endl; + for (const auto &cell : triangulation.active_cell_iterators()) + { + CellId current_cell_id(cell->id()); + + deallog + << "CellId = " << current_cell_id << std::endl + << " {face_index -> face_orientation | face_flip | face_rotation}: " + << std::endl; + for (unsigned int face_index = 0; + face_index < GeometryInfo<3>::faces_per_cell; + ++face_index) + { + deallog << " {" << face_index << " -> " + << cell->face_orientation(face_index) << " | " + << cell->face_flip(face_index) << " | " + << cell->face_rotation(face_index) << "}" << std::endl; + } // face_index + + deallog << " {line_index -> line_orientation}: " << std::endl; + for (unsigned int line_index = 0; + line_index < GeometryInfo<3>::lines_per_cell; + ++line_index) + { + deallog << " {" << line_index << " -> " + << cell->line_orientation(line_index) << "}" + << std::endl; + } // line_index + } // cell + } // plot_mesh_properties + } // make_grid<3>() + + + template <> + void + FEConformityTest<2>::make_grid() + { + triangulation.clear(); + + const bool rotate_left_square = (((config_switch / 2) % 2) == 1); + const bool rotate_right_square = ((config_switch % 2) == 1); + + GridGenerator::non_standard_orientation_mesh(triangulation, + rotate_left_square, + rotate_right_square); + + // GridTools::distort_random(/* factor */ 0.15, + // triangulation_coarse, + // /* keep_boundary */ false); + + triangulation.refine_global(0); + + if (plot_mesh_properties) + { + deallog << std::endl + << "2D Mesh properties: " << std::endl + << std::endl; + for (const auto &cell : triangulation.active_cell_iterators()) + { + CellId current_cell_id(cell->id()); + + deallog << "CellId = " << current_cell_id << std::endl + << " {face_index -> face_orientation}: " << std::endl; + for (unsigned int face_index = 0; + face_index < GeometryInfo<2>::faces_per_cell; + ++face_index) + { + deallog << " {" << face_index << " -> " + << cell->face_orientation(face_index) << "}" + << std::endl; + } // face_index + + deallog << " {line_index -> line_orientation}: " << std::endl; + for (unsigned int line_index = 0; + line_index < GeometryInfo<2>::lines_per_cell; + ++line_index) + { + deallog << " {" << line_index << " -> " + << cell->line_orientation(line_index) << "}" + << std::endl; + } // line_index + } // cell + } // plot_mesh_properties + } // make_grid<2>() + + + template + void + FEConformityTest::make_dofs() + { + dof_handler.clear(); + constraints.clear(); + + dof_handler.distribute_dofs(*fe_ptr); + + { // Constraints + constraints.clear(); + DoFTools::make_hanging_node_constraints(dof_handler, constraints); + constraints.close(); + } + + random_fe_funtion.reinit(dof_handler.n_dofs()); + + // Fill vector with pseudo-random values + fill_vector_randomly(random_fe_funtion, /* min */ -5.0, /* max */ 5.0); + } // make_dofs() + + + + template + void + FEConformityTest::get_function_jump( + const FEInterfaceValues &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps) + { + const unsigned n_q = fe_interface_values.n_quadrature_points; + + Assert(jumps.size() == n_q, + ExcMessage( + "Length of \"jumps\" and number of quad points must coincide")); + + std::array, 2> face_values; + for (unsigned i = 0; i < 2; ++i) + { + face_values[i].resize(n_q); + fe_interface_values.get_fe_face_values(i).get_function_values( + dof_vector, face_values[i]); + } + + for (unsigned int q = 0; q < n_q; ++q) + jumps[q] = face_values[0][q] - face_values[1][q]; + } // get_function_jump() + + + + template + void + FEConformityTest::get_normal_jump( + const FEInterfaceValues &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps) + { + const unsigned n_q = fe_interface_values.n_quadrature_points; + + Assert(jumps.size() == n_q, + ExcMessage( + "Length of \"jumps\" and number of quad points must coincide")); + + const FEValuesExtractors::Vector normal_flux(0); + + std::array>, 2> face_values; + for (unsigned i = 0; i < 2; ++i) + { + face_values[i].resize(n_q); + + const auto &fe_face_values = fe_interface_values.get_fe_face_values(i); + + fe_face_values[normal_flux].get_function_values(dof_vector, + face_values[i]); + } + + const std::vector> interface_normals = + fe_interface_values.get_normal_vectors(); + + for (unsigned int q = 0; q < n_q; ++q) + { + jumps[q] = + (face_values[0][q] - face_values[1][q]) * interface_normals[q]; + } + } // get_normal_jump() + + + + template <> + void + FEConformityTest<2>::get_tangential_jump( + const FEInterfaceValues<2> &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps) + { + const unsigned n_q = fe_interface_values.n_quadrature_points; + + Assert(jumps.size() == n_q, + ExcMessage( + "Length of \"jumps\" and number of quad points must coincide")); + + const FEValuesExtractors::Vector tangent_flux(0); + + std::array>, 2> face_values; + for (unsigned i = 0; i < 2; ++i) + { + face_values[i].resize(n_q); + + const auto &fe_face_values = fe_interface_values.get_fe_face_values(i); + + fe_face_values[tangent_flux].get_function_values(dof_vector, + face_values[i]); + } + + const std::vector> interface_normals = + fe_interface_values.get_normal_vectors(); + + for (unsigned int q = 0; q < n_q; ++q) + jumps[q] = cross_product_2d(face_values[0][q] - face_values[1][q]) * + interface_normals[q]; + } // get_tangential_jump() + + + + template <> + void + FEConformityTest<3>::get_tangential_jump( + const FEInterfaceValues<3> &fe_interface_values, + const Vector & dof_vector, + std::vector & jumps) + { + const unsigned n_q = fe_interface_values.n_quadrature_points; + + Assert(jumps.size() == n_q, + ExcMessage( + "Length of \"jumps\" and number of quad points must coincide")); + + const FEValuesExtractors::Vector tangent_flux(0); + + std::array>, 2> face_values; + for (unsigned i = 0; i < 2; ++i) + { + face_values[i].resize(n_q); + + const auto &fe_face_values = fe_interface_values.get_fe_face_values(i); + + fe_face_values[tangent_flux].get_function_values(dof_vector, + face_values[i]); + } + + const std::vector> interface_normals = + fe_interface_values.get_normal_vectors(); + + for (unsigned int q = 0; q < n_q; ++q) + jumps[q] = cross_product_3d(face_values[0][q] - face_values[1][q], + interface_normals[q]) + .norm(); + } // get_tangential_jump() + + + + template + void + FEConformityTest::run_test() + { + QGauss interface_quad_rule(fe_ptr->degree + 2); + const unsigned int n_interface_q_points = interface_quad_rule.size(); + + const UpdateFlags interface_update_flags = + (update_values | update_quadrature_points | update_JxW_values | + update_normal_vectors); + + FEInterfaceValues fe_interface_values(*fe_ptr, + interface_quad_rule, + interface_update_flags); + + std::vector interface_jumps(n_interface_q_points); + + // Loop over all (two) cells and faces. If at inner face check for + // appropriate jumps. + for (const auto &cell : dof_handler.active_cell_iterators()) + { + for (unsigned int face_index = 0; + face_index < GeometryInfo::faces_per_cell; + ++face_index) + { + if (cell->face(face_index)->at_boundary()) + continue; + + fe_interface_values.reinit( + cell, + face_index, + /* sub_face_no */ numbers::invalid_unsigned_int, + /* cell_neighbor */ cell->neighbor(face_index), + /* face_no_neighbor */ cell->neighbor_face_no(face_index), + /* sub_face_no_neighbor */ numbers::invalid_unsigned_int); + + switch (fe_ptr->conforming_space) + { + case FiniteElementData::Conformity::H1: + { + get_function_jump(fe_interface_values, + random_fe_funtion, + interface_jumps); + + deallog << "Function jumps (at quad points) in cell " + << cell->id().to_string() << " at face " + << face_index << std::endl; + + break; + } // H1 + + case FiniteElementData::Conformity::Hdiv: + { + get_normal_jump(fe_interface_values, + random_fe_funtion, + interface_jumps); + + deallog << "Normal jumps (at quad points) in cell " + << cell->id().to_string() << " at face " + << face_index << std::endl; + + break; + } // case H(div) + + case FiniteElementData::Conformity::Hcurl: + { + get_tangential_jump(fe_interface_values, + random_fe_funtion, + interface_jumps); + + deallog << "Tangential jumps (at quad points) in cell " + << cell->id().to_string() << " at face " + << face_index << std::endl; + break; + } // case H(curl) + + default: + break; + } // switch (fe_ptr->conforming_space) + + // loop over quad_points and print jumps + deallog << " interface jumps: "; + for (unsigned int q = 0; q < n_interface_q_points; ++q) + { + deallog << interface_jumps[q] << " "; + } + deallog << std::endl; + } // face_index + } // cell + } // run_test() + + + + template + void + FEConformityTest::run() + { + make_grid(); + make_dofs(); + run_test(); + } +} // namespace FEConforimityTest \ No newline at end of file diff --git a/tests/grid/grid_generator_non_standard_orientation_mesh_2d.cc b/tests/grid/grid_generator_non_standard_orientation_mesh_2d.cc new file mode 100644 index 0000000000..0ac6b74634 --- /dev/null +++ b/tests/grid/grid_generator_non_standard_orientation_mesh_2d.cc @@ -0,0 +1,105 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2003 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +/* + * Small test to analyse the equivalence of the normal component + * on the element edges for the Raviart-Thomas elements. + */ + + + +#include "../tests.h" + +#define PRECISION 8 + +#include + +// STL +#include + +std::ofstream logfile("output"); + +using namespace dealii; + +template +void +plot_all_info(const Triangulation &tria) +{ + for (const auto &cell : tria.active_cell_iterators()) + { + CellId current_cell_id(cell->id()); + + deallog << "CellId = " << current_cell_id << std::endl + << " {line_index -> face_orientation}: " << std::endl; + for (unsigned int face_index = 0; + face_index < GeometryInfo::faces_per_cell; + ++face_index) + { + deallog << " {" << face_index << " -> " + << cell->face_orientation(face_index) << "} " << std::endl; + } // face_index + + // in 2D faces that are not consistently oriented should of course be also + // lines with the same property + deallog << " line orientation: { "; + for (unsigned int line_index = 0; + line_index < GeometryInfo::lines_per_cell; + ++line_index) + { + deallog << cell->line_orientation(line_index) << " "; + } // line_index + deallog << "}" << std::endl << std::endl; + } // cell +} + + +int +main(int /*argc*/, char ** /*argv*/) +{ + deallog << std::setprecision(PRECISION); + deallog << std::fixed; + deallog.attach(logfile); + + /* + * 3D test only + */ + const int dim = 2; + Triangulation tria_test; + + deallog << "Testing 2D mesh for orientation tests:" << std::endl; + + for (unsigned int config_switch = 0; config_switch < 4; ++config_switch) + { + tria_test.clear(); + + bool rotate_left_square = (((config_switch / 2) % 2) == 1); + bool rotate_right_square = ((config_switch % 2) == 1); + + bool manipulate_first_cube = true; + + GridGenerator::non_standard_orientation_mesh(tria_test, + rotate_left_square, + rotate_right_square); + + plot_all_info(tria_test); + + deallog << "****************" << std::endl; + } // config_switch++ + + deallog << "Testing 2D orientation mesh done." << std::endl; + + return 0; +} diff --git a/tests/grid/grid_generator_non_standard_orientation_mesh_2d.output b/tests/grid/grid_generator_non_standard_orientation_mesh_2d.output new file mode 100644 index 0000000000..08e30eb5d5 --- /dev/null +++ b/tests/grid/grid_generator_non_standard_orientation_mesh_2d.output @@ -0,0 +1,71 @@ + +DEAL::Testing 2D mesh for orientation tests: +DEAL::CellId = 0_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {line_index -> face_orientation}: +DEAL:: {0 -> 1} +DEAL:: {1 -> 1} +DEAL:: {2 -> 1} +DEAL:: {3 -> 1} +DEAL:: line orientation: { 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::Testing 2D orientation mesh done. diff --git a/tests/grid/grid_generator_non_standard_orientation_mesh_3d.cc b/tests/grid/grid_generator_non_standard_orientation_mesh_3d.cc new file mode 100644 index 0000000000..cc5d5f5439 --- /dev/null +++ b/tests/grid/grid_generator_non_standard_orientation_mesh_3d.cc @@ -0,0 +1,110 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2003 - 2020 by the deal.II authors +// +// This file is part of the deal.II library. +// +// The deal.II library is free software; you can use it, redistribute +// it, and/or modify it under the terms of the GNU Lesser General +// Public License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// The full text of the license can be found in the file LICENSE.md at +// the top level directory of deal.II. +// +// --------------------------------------------------------------------- + + +/* + * Small test to analyse the equivalence of the normal component + * on the element edges for the Raviart-Thomas elements. + */ + + + +#include "../tests.h" + +#define PRECISION 8 + +#include + +// STL +#include + +std::ofstream logfile("output"); + + +using namespace dealii; + +template +void +plot_all_info(const Triangulation &tria) +{ + for (const auto &cell : tria.active_cell_iterators()) + { + CellId current_cell_id(cell->id()); + + deallog << "CellId = " << current_cell_id << std::endl + << " {index -> face_orientation | face_flip | face_rotation}: " + << std::endl; + for (unsigned int face_index = 0; + face_index < GeometryInfo::faces_per_cell; + ++face_index) + { + deallog << " {" << face_index << " -> " + << cell->face_orientation(face_index) << " | " + << cell->face_flip(face_index) << " | " + << cell->face_rotation(face_index) << " } " << std::endl; + } // face_index + + deallog << " line orientation: { "; + for (unsigned int line_index = 0; + line_index < GeometryInfo::lines_per_cell; + ++line_index) + { + deallog << cell->line_orientation(line_index) << " "; + } // line_index + deallog << "}" << std::endl << std::endl; + } // cell +} + + +int +main(int /*argc*/, char ** /*argv*/) +{ + deallog << std::setprecision(PRECISION); + deallog << std::fixed; + deallog.attach(logfile); + + /* + * 3D test only + */ + const int dim = 3; + Triangulation tria_test; + + deallog << "Testing 3D mesh for orientation tests:" << std::endl; + + for (unsigned int config_switch = 0; config_switch < 8; ++config_switch) + { + tria_test.clear(); + + bool face_orientation = (((config_switch / 4) % 2) == 1); + bool face_flip = (((config_switch / 2) % 2) == 1); + bool face_rotation = ((config_switch % 2) == 1); + + bool manipulate_first_cube = true; + + GridGenerator::non_standard_orientation_mesh(tria_test, + face_orientation, + face_flip, + face_rotation, + manipulate_first_cube); + + plot_all_info(tria_test); + + deallog << "****************" << std::endl; + } // config_switch++ + + deallog << "Testing 3D orientation mesh done." << std::endl; + + return 0; +} diff --git a/tests/grid/grid_generator_non_standard_orientation_mesh_3d.output b/tests/grid/grid_generator_non_standard_orientation_mesh_3d.output new file mode 100644 index 0000000000..5fd236a0fa --- /dev/null +++ b/tests/grid/grid_generator_non_standard_orientation_mesh_3d.output @@ -0,0 +1,171 @@ + +DEAL::Testing 3D mesh for orientation tests: +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 0 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 0 | 0 | 1 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 0 1 0 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 0 | 1 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 0 1 1 1 0 1 1 1 0 1 0 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 0 | 1 | 1 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 0 1 1 1 0 1 1 1 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 1 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 0 1 1 1 0 1 1 1 1 1 1 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 1 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 0 1 1 1 0 1 1 1 0 1 0 1 } +DEAL:: +DEAL::**************** +DEAL::CellId = 0_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 0 | 0 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 1 1 1 1 } +DEAL:: +DEAL::CellId = 1_0: +DEAL:: {index -> face_orientation | face_flip | face_rotation}: +DEAL:: {0 -> 1 | 1 | 1 } +DEAL:: {1 -> 1 | 0 | 0 } +DEAL:: {2 -> 1 | 0 | 0 } +DEAL:: {3 -> 1 | 0 | 0 } +DEAL:: {4 -> 1 | 0 | 0 } +DEAL:: {5 -> 1 | 0 | 0 } +DEAL:: line orientation: { 1 1 1 1 1 1 1 1 0 1 0 1 } +DEAL:: +DEAL::**************** +DEAL::Testing 3D orientation mesh done. -- 2.39.5