From 172d06f1648edd1c8c22bae65e17de881b02ada3 Mon Sep 17 00:00:00 2001 From: Peter Munch Date: Thu, 26 Nov 2020 10:40:48 +0100 Subject: [PATCH] Simplex: create tests.h for common utility (test) functions --- tests/simplex/matrix_free_02.cc | 110 +--------------------------- tests/simplex/simplex_grids.h | 125 ++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 108 deletions(-) create mode 100644 tests/simplex/simplex_grids.h diff --git a/tests/simplex/matrix_free_02.cc b/tests/simplex/matrix_free_02.cc index 84f58b9d01..7cb9ade094 100644 --- a/tests/simplex/matrix_free_02.cc +++ b/tests/simplex/matrix_free_02.cc @@ -47,115 +47,9 @@ #include "../tests.h" -using namespace dealii; - -namespace dealii -{ - namespace GridGenerator - { - template - void - subdivided_hyper_rectangle_with_simplices_mix( - Triangulation & tria, - const std::vector &repetitions, - const Point & p1, - const Point & p2, - const bool colorize = false) - { - AssertDimension(dim, spacedim); - - AssertThrow(colorize == false, ExcNotImplemented()); - - std::vector> vertices; - std::vector> cells; - - if (dim == 2) - { - // determine cell sizes - const Point dx((p2[0] - p1[0]) / repetitions[0], - (p2[1] - p1[1]) / repetitions[1]); - - // create vertices - for (unsigned int j = 0; j <= repetitions[1]; ++j) - for (unsigned int i = 0; i <= repetitions[0]; ++i) - vertices.push_back( - Point(p1[0] + dx[0] * i, p1[1] + dx[1] * j)); - - // create cells - for (unsigned int j = 0; j < repetitions[1]; ++j) - for (unsigned int i = 0; i < repetitions[0]; ++i) - { - // create reference QUAD cell - std::array quad{{ - (j + 0) * (repetitions[0] + 1) + i + 0, // - (j + 0) * (repetitions[0] + 1) + i + 1, // - (j + 1) * (repetitions[0] + 1) + i + 0, // - (j + 1) * (repetitions[0] + 1) + i + 1 // - }}; // - - if (j < repetitions[1] / 2 && i < repetitions[0] / 2) - { - CellData quad_; - quad_.vertices = {quad[0], quad[1], quad[2], quad[3]}; - cells.push_back(quad_); - - continue; - } +#include "./simplex_grids.h" - // TRI cell 0 - { - CellData tri; - tri.vertices = {quad[0], quad[1], quad[2]}; - cells.push_back(tri); - } - - // TRI cell 1 - { - CellData tri; - tri.vertices = {quad[3], quad[2], quad[1]}; - cells.push_back(tri); - } - } - } - else - { - AssertThrow(colorize == false, ExcNotImplemented()); - } - - // actually create triangulation - tria.create_triangulation(vertices, cells, SubCellData()); - } - - - template - void - subdivided_hyper_cube_with_simplices_mix(Triangulation &tria, - const unsigned int repetitions, - const double p1 = 0.0, - const double p2 = 1.0, - const bool colorize = false) - { - if (dim == 2) - { - subdivided_hyper_rectangle_with_simplices_mix( - tria, {{repetitions, repetitions}}, {p1, p1}, {p2, p2}, colorize); - } - else if (dim == 3) - { - subdivided_hyper_rectangle_with_simplices_mix( - tria, - {{repetitions, repetitions, repetitions}}, - {p1, p1, p1}, - {p2, p2, p2}, - colorize); - } - else - { - AssertThrow(false, ExcNotImplemented()) - } - } - } // namespace GridGenerator -} // namespace dealii +using namespace dealii; template class PoissonOperator diff --git a/tests/simplex/simplex_grids.h b/tests/simplex/simplex_grids.h new file mode 100644 index 0000000000..0164b2d674 --- /dev/null +++ b/tests/simplex/simplex_grids.h @@ -0,0 +1,125 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 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 + +namespace dealii +{ + namespace GridGenerator + { + template + void + subdivided_hyper_rectangle_with_simplices_mix( + Triangulation & tria, + const std::vector &repetitions, + const Point & p1, + const Point & p2, + const bool colorize = false) + { + AssertDimension(dim, spacedim); + + AssertThrow(colorize == false, ExcNotImplemented()); + + std::vector> vertices; + std::vector> cells; + + if (dim == 2) + { + // determine cell sizes + const Point dx((p2[0] - p1[0]) / repetitions[0], + (p2[1] - p1[1]) / repetitions[1]); + + // create vertices + for (unsigned int j = 0; j <= repetitions[1]; ++j) + for (unsigned int i = 0; i <= repetitions[0]; ++i) + vertices.push_back( + Point(p1[0] + dx[0] * i, p1[1] + dx[1] * j)); + + // create cells + for (unsigned int j = 0; j < repetitions[1]; ++j) + for (unsigned int i = 0; i < repetitions[0]; ++i) + { + // create reference QUAD cell + std::array quad{{ + (j + 0) * (repetitions[0] + 1) + i + 0, // + (j + 0) * (repetitions[0] + 1) + i + 1, // + (j + 1) * (repetitions[0] + 1) + i + 0, // + (j + 1) * (repetitions[0] + 1) + i + 1 // + }}; // + + if (j < repetitions[1] / 2 && i < repetitions[0] / 2) + { + CellData quad_; + quad_.vertices = {quad[0], quad[1], quad[2], quad[3]}; + cells.push_back(quad_); + + continue; + } + + // TRI cell 0 + { + CellData tri; + tri.vertices = {quad[0], quad[1], quad[2]}; + cells.push_back(tri); + } + + // TRI cell 1 + { + CellData tri; + tri.vertices = {quad[3], quad[2], quad[1]}; + cells.push_back(tri); + } + } + } + else + { + AssertThrow(colorize == false, ExcNotImplemented()); + } + + // actually create triangulation + tria.create_triangulation(vertices, cells, SubCellData()); + } + + + template + void + subdivided_hyper_cube_with_simplices_mix(Triangulation &tria, + const unsigned int repetitions, + const double p1 = 0.0, + const double p2 = 1.0, + const bool colorize = false) + { + if (dim == 2) + { + subdivided_hyper_rectangle_with_simplices_mix( + tria, {{repetitions, repetitions}}, {p1, p1}, {p2, p2}, colorize); + } + else if (dim == 3) + { + subdivided_hyper_rectangle_with_simplices_mix( + tria, + {{repetitions, repetitions, repetitions}}, + {p1, p1, p1}, + {p2, p2, p2}, + colorize); + } + else + { + AssertThrow(false, ExcNotImplemented()) + } + } + } // namespace GridGenerator +} // namespace dealii -- 2.39.5