From 859566ac3b3f2d54999aa220ea8a56707d696e59 Mon Sep 17 00:00:00 2001 From: Peter Munch Date: Mon, 8 Mar 2021 13:24:56 +0100 Subject: [PATCH] Add new MappingQCache::initialize() function --- .../changes/incompatibilities/20210310Munch | 4 + doc/news/changes/minor/20210310Fehn | 6 + examples/step-65/step-65.cc | 2 +- include/deal.II/fe/mapping_q_cache.h | 56 +- source/fe/mapping_q_cache.cc | 151 ++- tests/mappings/mapping_q_cache_05.cc | 115 +++ tests/mappings/mapping_q_cache_05.output | 881 ++++++++++++++++++ 7 files changed, 1205 insertions(+), 10 deletions(-) create mode 100644 doc/news/changes/incompatibilities/20210310Munch create mode 100644 doc/news/changes/minor/20210310Fehn create mode 100644 tests/mappings/mapping_q_cache_05.cc create mode 100644 tests/mappings/mapping_q_cache_05.output diff --git a/doc/news/changes/incompatibilities/20210310Munch b/doc/news/changes/incompatibilities/20210310Munch new file mode 100644 index 0000000000..6a40d65ea5 --- /dev/null +++ b/doc/news/changes/incompatibilities/20210310Munch @@ -0,0 +1,4 @@ +Changed: The order of parameters has been switched in MappingQCache::initialize(), +with the Mapping now being the first argument. +
+(Peter Munch, 2020/05/23) diff --git a/doc/news/changes/minor/20210310Fehn b/doc/news/changes/minor/20210310Fehn new file mode 100644 index 0000000000..b01b92c6bb --- /dev/null +++ b/doc/news/changes/minor/20210310Fehn @@ -0,0 +1,6 @@ +New: MappingQCache has a new initialize function that takes +either a std::function or a dealii::Function for transforming +individual points. +
+(Niklas Fehn, Martin Kronbichler, Peter Munch, 2021/03/10) + diff --git a/examples/step-65/step-65.cc b/examples/step-65/step-65.cc index bd48400a88..de676392f9 100644 --- a/examples/step-65/step-65.cc +++ b/examples/step-65/step-65.cc @@ -633,7 +633,7 @@ namespace Step65 MappingQCache mapping(fe.degree + 1); { TimerOutput::Scope scope(timer, "Initialize mapping cache"); - mapping.initialize(triangulation, MappingQGeneric(fe.degree + 1)); + mapping.initialize(MappingQGeneric(fe.degree + 1), triangulation); } std::cout << " Memory consumption cache: " << 1e-6 * mapping.memory_consumption() << " MB" << std::endl; diff --git a/include/deal.II/fe/mapping_q_cache.h b/include/deal.II/fe/mapping_q_cache.h index 34ae3cf256..3f576d9f8f 100644 --- a/include/deal.II/fe/mapping_q_cache.h +++ b/include/deal.II/fe/mapping_q_cache.h @@ -19,6 +19,8 @@ #include +#include + #include #include @@ -76,11 +78,25 @@ public: /** * Initialize the data cache by computing the mapping support points for all - * cells (on all levels) of the given triangulation. Note that the cache is - * invalidated upon the signal Triangulation::Signals::any_change of the - * underlying triangulation. + * cells (on all levels) of the given triangulation. + * + * @note The cache is invalidated upon the signal + * Triangulation::Signals::any_change of the underlying triangulation. */ void + initialize(const Mapping & mapping, + const Triangulation &triangulation); + + /** + * Initialize the data cache by computing the mapping support points for all + * cells (on all levels) of the given triangulation. + * + * @note The cache is invalidated upon the signal + * Triangulation::Signals::any_change of the underlying triangulation. + * + * @deprecated Use initialize() version above instead. + */ + DEAL_II_DEPRECATED_EARLY void initialize(const Triangulation & triangulation, const MappingQGeneric &mapping); @@ -111,6 +127,40 @@ public: const typename Triangulation::cell_iterator &)> &compute_points_on_cell); + /** + * Initialize the data cache by computing the mapping support points for all + * cells (on all levels) of the given triangulation and a given @p mapping + * and transforming these points via the function @p transformation_function. + * + * The bool @p function_describes_relative_displacement indicates that + * the function @p transformation_function maps to absolute coordinates. + * If the parameter is set to true, the return value of the function is + * interpreted as relative deformation and the result is eventually added + * to the original point for the support points eventually used by this class. + * + * This function calls the previous function so the comments regarding + * threading listed above apply also here. + * + * @note The cache is invalidated upon the signal + * Triangulation::Signals::any_change of the underlying triangulation. + */ + void + initialize(const Mapping & mapping, + const Triangulation &tria, + const std::function( + const typename Triangulation::cell_iterator &, + const Point &)> & transformation_function, + const bool function_describes_relative_displacement); + + /** + * The same as above but taking a dealii::Function object. + */ + void + initialize(const Mapping & mapping, + const Triangulation &tria, + const Function & transformation_function, + const bool function_describes_relative_displacement); + /** * Return the memory consumption (in bytes) of the cache. */ diff --git a/source/fe/mapping_q_cache.cc b/source/fe/mapping_q_cache.cc index 96271efab4..8d62b9eef3 100644 --- a/source/fe/mapping_q_cache.cc +++ b/source/fe/mapping_q_cache.cc @@ -16,6 +16,10 @@ #include #include +#include +#include +#include +#include #include #include @@ -70,18 +74,63 @@ MappingQCache::preserves_vertex_locations() const +template +void +MappingQCache::initialize( + const Mapping & mapping, + const Triangulation &triangulation) +{ + // FE and FEValues in the case they are needed + FE_Nothing fe; + Threads::ThreadLocalStorage>> + fe_values_all; + + this->initialize( + triangulation, + [&](const typename Triangulation::cell_iterator &cell) { + const auto mapping_q_generic = + dynamic_cast *>(&mapping); + if (mapping_q_generic != nullptr && + this->get_degree() == mapping_q_generic->get_degree()) + { + return mapping_q_generic->compute_mapping_support_points(cell); + } + else + { + // get FEValues (thread-safe); in the case that this thread has not + // created a an FEValues object yet, this helper-function also + // creates one with the right quadrature rule + auto &fe_values = fe_values_all.get(); + if (fe_values.get() == nullptr) + { + QGaussLobatto quadrature_gl(this->polynomial_degree + 1); + + std::vector> quadrature_points; + for (const auto i : + FETools::hierarchic_to_lexicographic_numbering( + this->polynomial_degree)) + quadrature_points.push_back(quadrature_gl.point(i)); + Quadrature quadrature(quadrature_points); + + fe_values = std::make_unique>( + mapping, fe, quadrature, update_quadrature_points); + } + + fe_values->reinit(cell); + return fe_values->get_quadrature_points(); + } + }); +} + + + template void MappingQCache::initialize( const Triangulation & triangulation, const MappingQGeneric &mapping) { - AssertDimension(this->get_degree(), mapping.get_degree()); - initialize(triangulation, - [&mapping](const typename Triangulation::cell_iterator &cell) - -> std::vector> { - return mapping.compute_mapping_support_points(cell); - }); + this->initialize(mapping, triangulation); } @@ -125,6 +174,96 @@ MappingQCache::initialize( +template +void +MappingQCache::initialize( + const Mapping & mapping, + const Triangulation &tria, + const std::function( + const typename Triangulation::cell_iterator &, + const Point &)> & transformation_function, + const bool function_describes_relative_displacement) +{ + // FE and FEValues in the case they are needed + FE_Nothing fe; + Threads::ThreadLocalStorage>> + fe_values_all; + + this->initialize( + tria, + [&](const typename Triangulation::cell_iterator &cell) { + std::vector> points; + + const auto mapping_q_generic = + dynamic_cast *>(&mapping); + + if (mapping_q_generic != nullptr && + this->get_degree() == mapping_q_generic->get_degree()) + { + points = mapping_q_generic->compute_mapping_support_points(cell); + } + else + { + // get FEValues (thread-safe); in the case that this thread has not + // created a an FEValues object yet, this helper-function also + // creates one with the right quadrature rule + auto &fe_values = fe_values_all.get(); + if (fe_values.get() == nullptr) + { + QGaussLobatto quadrature_gl(this->polynomial_degree + 1); + + std::vector> quadrature_points; + for (const auto i : + FETools::hierarchic_to_lexicographic_numbering( + this->polynomial_degree)) + quadrature_points.push_back(quadrature_gl.point(i)); + Quadrature quadrature(quadrature_points); + + fe_values = std::make_unique>( + mapping, fe, quadrature, update_quadrature_points); + } + + fe_values->reinit(cell); + points = fe_values->get_quadrature_points(); + } + + for (auto &p : points) + if (function_describes_relative_displacement) + p += transformation_function(cell, p); + else + p = transformation_function(cell, p); + + return points; + }); +} + + + +template +void +MappingQCache::initialize( + const Mapping & mapping, + const Triangulation &tria, + const Function & transformation_function, + const bool function_describes_relative_displacement) +{ + AssertDimension(transformation_function.n_components, spacedim); + + this->initialize( + mapping, + tria, + [&](const typename Triangulation::cell_iterator &, + const Point &point) -> Point { + Point new_point; + for (int c = 0; c < spacedim; ++c) + new_point[c] = transformation_function.value(point, c); + return new_point; + }, + function_describes_relative_displacement); +} + + + template std::size_t MappingQCache::memory_consumption() const diff --git a/tests/mappings/mapping_q_cache_05.cc b/tests/mappings/mapping_q_cache_05.cc new file mode 100644 index 0000000000..46c692f782 --- /dev/null +++ b/tests/mappings/mapping_q_cache_05.cc @@ -0,0 +1,115 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2019 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. +// +// --------------------------------------------------------------------- + +// Test MappingQCache initialization with point lambda/Function + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include "../tests.h" + +template +class Solution : public Function +{ +public: + Solution(const bool is_displacement_function) + : Function(dim) + , is_displacement_function(is_displacement_function) + {} + + double + value(const Point &point, const unsigned int compontent) const + { + return std::sin(point[compontent] * 0.5 * numbers::PI) - + (is_displacement_function ? point[compontent] : 0.0); + } + +private: + const bool is_displacement_function; +}; + +static int counter = 0; + +template +void +do_test(const unsigned int degree, + const Fu & fu, + const bool is_displacement_function) +{ + Triangulation tria; + GridGenerator::subdivided_hyper_cube(tria, 4); + + MappingQGeneric mapping(degree); + MappingQCache mapping_cache(degree); + mapping_cache.initialize(mapping, tria, fu, is_displacement_function); + + { + DataOut data_out; + + data_out.attach_triangulation(tria); + + data_out.build_patches(mapping_cache, + 2, + DataOut::CurvedCellRegion::curved_inner_cells); + +#if false + std::ofstream output("test." + std::to_string(counter++) + ".vtk"); + data_out.write_vtk(output); +#else + data_out.write_vtk(deallog.get_file_stream()); +#endif + } +} + + +int +main() +{ + initlog(); + do_test<2>(3, Solution<2>(true), true); + do_test<2>(3, Solution<2>(false), false); + do_test<2>(3, + [](const typename Triangulation<2>::cell_iterator &, + const Point<2> &p) -> Point<2> { + Point<2> result; + + for (unsigned int compontent = 0; compontent < 2; ++compontent) + result[compontent] = + std::sin(p[compontent] * 0.5 * numbers::PI) - p[compontent]; + + return result; + }, + true); + do_test<2>(3, + [](const typename Triangulation<2>::cell_iterator &, + const Point<2> &p) -> Point<2> { + Point<2> result; + + for (unsigned int compontent = 0; compontent < 2; ++compontent) + result[compontent] = + std::sin(p[compontent] * 0.5 * numbers::PI); + + return result; + }, + false); +} diff --git a/tests/mappings/mapping_q_cache_05.output b/tests/mappings/mapping_q_cache_05.output new file mode 100644 index 0000000000..9cac63099d --- /dev/null +++ b/tests/mappings/mapping_q_cache_05.output @@ -0,0 +1,881 @@ + +# vtk DataFile Version 3.0 +#This file was generated +ASCII +DATASET UNSTRUCTURED_GRID + +POINTS 144 double +0.00000 0.00000 0 +0.195088 0.00000 0 +0.382683 0.00000 0 +0.00000 0.195088 0 +0.195088 0.195088 0 +0.382683 0.195088 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.382683 0.00000 0 +0.555563 0.00000 0 +0.707107 0.00000 0 +0.382683 0.195088 0 +0.555563 0.195088 0 +0.707107 0.195088 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.707107 0.00000 0 +0.831459 0.00000 0 +0.923880 0.00000 0 +0.707107 0.195088 0 +0.831459 0.195088 0 +0.923880 0.195088 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.923880 0.00000 0 +0.980773 0.00000 0 +1.00000 0.00000 0 +0.923880 0.195088 0 +0.980773 0.195088 0 +1.00000 0.195088 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.00000 0.555563 0 +0.195088 0.555563 0 +0.382683 0.555563 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.382683 0.555563 0 +0.555563 0.555563 0 +0.707107 0.555563 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.707107 0.555563 0 +0.831459 0.555563 0 +0.923880 0.555563 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.923880 0.555563 0 +0.980773 0.555563 0 +1.00000 0.555563 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.00000 0.831459 0 +0.195088 0.831459 0 +0.382683 0.831459 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.382683 0.831459 0 +0.555563 0.831459 0 +0.707107 0.831459 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.707107 0.831459 0 +0.831459 0.831459 0 +0.923880 0.831459 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.923880 0.831459 0 +0.980773 0.831459 0 +1.00000 0.831459 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.00000 0.980773 0 +0.195088 0.980773 0 +0.382683 0.980773 0 +0.00000 1.00000 0 +0.195088 1.00000 0 +0.382683 1.00000 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.382683 0.980773 0 +0.555563 0.980773 0 +0.707107 0.980773 0 +0.382683 1.00000 0 +0.555563 1.00000 0 +0.707107 1.00000 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.707107 0.980773 0 +0.831459 0.980773 0 +0.923880 0.980773 0 +0.707107 1.00000 0 +0.831459 1.00000 0 +0.923880 1.00000 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.923880 0.980773 0 +0.980773 0.980773 0 +1.00000 0.980773 0 +0.923880 1.00000 0 +0.980773 1.00000 0 +1.00000 1.00000 0 + +CELLS 64 320 +4 0 1 4 3 +4 1 2 5 4 +4 3 4 7 6 +4 4 5 8 7 +4 9 10 13 12 +4 10 11 14 13 +4 12 13 16 15 +4 13 14 17 16 +4 18 19 22 21 +4 19 20 23 22 +4 21 22 25 24 +4 22 23 26 25 +4 27 28 31 30 +4 28 29 32 31 +4 30 31 34 33 +4 31 32 35 34 +4 36 37 40 39 +4 37 38 41 40 +4 39 40 43 42 +4 40 41 44 43 +4 45 46 49 48 +4 46 47 50 49 +4 48 49 52 51 +4 49 50 53 52 +4 54 55 58 57 +4 55 56 59 58 +4 57 58 61 60 +4 58 59 62 61 +4 63 64 67 66 +4 64 65 68 67 +4 66 67 70 69 +4 67 68 71 70 +4 72 73 76 75 +4 73 74 77 76 +4 75 76 79 78 +4 76 77 80 79 +4 81 82 85 84 +4 82 83 86 85 +4 84 85 88 87 +4 85 86 89 88 +4 90 91 94 93 +4 91 92 95 94 +4 93 94 97 96 +4 94 95 98 97 +4 99 100 103 102 +4 100 101 104 103 +4 102 103 106 105 +4 103 104 107 106 +4 108 109 112 111 +4 109 110 113 112 +4 111 112 115 114 +4 112 113 116 115 +4 117 118 121 120 +4 118 119 122 121 +4 120 121 124 123 +4 121 122 125 124 +4 126 127 130 129 +4 127 128 131 130 +4 129 130 133 132 +4 130 131 134 133 +4 135 136 139 138 +4 136 137 140 139 +4 138 139 142 141 +4 139 140 143 142 + +CELL_TYPES 64 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +POINT_DATA 144 +# vtk DataFile Version 3.0 +#This file was generated +ASCII +DATASET UNSTRUCTURED_GRID + +POINTS 144 double +0.00000 0.00000 0 +0.195088 0.00000 0 +0.382683 0.00000 0 +0.00000 0.195088 0 +0.195088 0.195088 0 +0.382683 0.195088 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.382683 0.00000 0 +0.555563 0.00000 0 +0.707107 0.00000 0 +0.382683 0.195088 0 +0.555563 0.195088 0 +0.707107 0.195088 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.707107 0.00000 0 +0.831459 0.00000 0 +0.923880 0.00000 0 +0.707107 0.195088 0 +0.831459 0.195088 0 +0.923880 0.195088 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.923880 0.00000 0 +0.980773 0.00000 0 +1.00000 0.00000 0 +0.923880 0.195088 0 +0.980773 0.195088 0 +1.00000 0.195088 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.00000 0.555563 0 +0.195088 0.555563 0 +0.382683 0.555563 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.382683 0.555563 0 +0.555563 0.555563 0 +0.707107 0.555563 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.707107 0.555563 0 +0.831459 0.555563 0 +0.923880 0.555563 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.923880 0.555563 0 +0.980773 0.555563 0 +1.00000 0.555563 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.00000 0.831459 0 +0.195088 0.831459 0 +0.382683 0.831459 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.382683 0.831459 0 +0.555563 0.831459 0 +0.707107 0.831459 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.707107 0.831459 0 +0.831459 0.831459 0 +0.923880 0.831459 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.923880 0.831459 0 +0.980773 0.831459 0 +1.00000 0.831459 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.00000 0.980773 0 +0.195088 0.980773 0 +0.382683 0.980773 0 +0.00000 1.00000 0 +0.195088 1.00000 0 +0.382683 1.00000 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.382683 0.980773 0 +0.555563 0.980773 0 +0.707107 0.980773 0 +0.382683 1.00000 0 +0.555563 1.00000 0 +0.707107 1.00000 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.707107 0.980773 0 +0.831459 0.980773 0 +0.923880 0.980773 0 +0.707107 1.00000 0 +0.831459 1.00000 0 +0.923880 1.00000 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.923880 0.980773 0 +0.980773 0.980773 0 +1.00000 0.980773 0 +0.923880 1.00000 0 +0.980773 1.00000 0 +1.00000 1.00000 0 + +CELLS 64 320 +4 0 1 4 3 +4 1 2 5 4 +4 3 4 7 6 +4 4 5 8 7 +4 9 10 13 12 +4 10 11 14 13 +4 12 13 16 15 +4 13 14 17 16 +4 18 19 22 21 +4 19 20 23 22 +4 21 22 25 24 +4 22 23 26 25 +4 27 28 31 30 +4 28 29 32 31 +4 30 31 34 33 +4 31 32 35 34 +4 36 37 40 39 +4 37 38 41 40 +4 39 40 43 42 +4 40 41 44 43 +4 45 46 49 48 +4 46 47 50 49 +4 48 49 52 51 +4 49 50 53 52 +4 54 55 58 57 +4 55 56 59 58 +4 57 58 61 60 +4 58 59 62 61 +4 63 64 67 66 +4 64 65 68 67 +4 66 67 70 69 +4 67 68 71 70 +4 72 73 76 75 +4 73 74 77 76 +4 75 76 79 78 +4 76 77 80 79 +4 81 82 85 84 +4 82 83 86 85 +4 84 85 88 87 +4 85 86 89 88 +4 90 91 94 93 +4 91 92 95 94 +4 93 94 97 96 +4 94 95 98 97 +4 99 100 103 102 +4 100 101 104 103 +4 102 103 106 105 +4 103 104 107 106 +4 108 109 112 111 +4 109 110 113 112 +4 111 112 115 114 +4 112 113 116 115 +4 117 118 121 120 +4 118 119 122 121 +4 120 121 124 123 +4 121 122 125 124 +4 126 127 130 129 +4 127 128 131 130 +4 129 130 133 132 +4 130 131 134 133 +4 135 136 139 138 +4 136 137 140 139 +4 138 139 142 141 +4 139 140 143 142 + +CELL_TYPES 64 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +POINT_DATA 144 +# vtk DataFile Version 3.0 +#This file was generated +ASCII +DATASET UNSTRUCTURED_GRID + +POINTS 144 double +0.00000 0.00000 0 +0.195088 0.00000 0 +0.382683 0.00000 0 +0.00000 0.195088 0 +0.195088 0.195088 0 +0.382683 0.195088 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.382683 0.00000 0 +0.555563 0.00000 0 +0.707107 0.00000 0 +0.382683 0.195088 0 +0.555563 0.195088 0 +0.707107 0.195088 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.707107 0.00000 0 +0.831459 0.00000 0 +0.923880 0.00000 0 +0.707107 0.195088 0 +0.831459 0.195088 0 +0.923880 0.195088 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.923880 0.00000 0 +0.980773 0.00000 0 +1.00000 0.00000 0 +0.923880 0.195088 0 +0.980773 0.195088 0 +1.00000 0.195088 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.00000 0.555563 0 +0.195088 0.555563 0 +0.382683 0.555563 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.382683 0.555563 0 +0.555563 0.555563 0 +0.707107 0.555563 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.707107 0.555563 0 +0.831459 0.555563 0 +0.923880 0.555563 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.923880 0.555563 0 +0.980773 0.555563 0 +1.00000 0.555563 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.00000 0.831459 0 +0.195088 0.831459 0 +0.382683 0.831459 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.382683 0.831459 0 +0.555563 0.831459 0 +0.707107 0.831459 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.707107 0.831459 0 +0.831459 0.831459 0 +0.923880 0.831459 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.923880 0.831459 0 +0.980773 0.831459 0 +1.00000 0.831459 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.00000 0.980773 0 +0.195088 0.980773 0 +0.382683 0.980773 0 +0.00000 1.00000 0 +0.195088 1.00000 0 +0.382683 1.00000 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.382683 0.980773 0 +0.555563 0.980773 0 +0.707107 0.980773 0 +0.382683 1.00000 0 +0.555563 1.00000 0 +0.707107 1.00000 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.707107 0.980773 0 +0.831459 0.980773 0 +0.923880 0.980773 0 +0.707107 1.00000 0 +0.831459 1.00000 0 +0.923880 1.00000 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.923880 0.980773 0 +0.980773 0.980773 0 +1.00000 0.980773 0 +0.923880 1.00000 0 +0.980773 1.00000 0 +1.00000 1.00000 0 + +CELLS 64 320 +4 0 1 4 3 +4 1 2 5 4 +4 3 4 7 6 +4 4 5 8 7 +4 9 10 13 12 +4 10 11 14 13 +4 12 13 16 15 +4 13 14 17 16 +4 18 19 22 21 +4 19 20 23 22 +4 21 22 25 24 +4 22 23 26 25 +4 27 28 31 30 +4 28 29 32 31 +4 30 31 34 33 +4 31 32 35 34 +4 36 37 40 39 +4 37 38 41 40 +4 39 40 43 42 +4 40 41 44 43 +4 45 46 49 48 +4 46 47 50 49 +4 48 49 52 51 +4 49 50 53 52 +4 54 55 58 57 +4 55 56 59 58 +4 57 58 61 60 +4 58 59 62 61 +4 63 64 67 66 +4 64 65 68 67 +4 66 67 70 69 +4 67 68 71 70 +4 72 73 76 75 +4 73 74 77 76 +4 75 76 79 78 +4 76 77 80 79 +4 81 82 85 84 +4 82 83 86 85 +4 84 85 88 87 +4 85 86 89 88 +4 90 91 94 93 +4 91 92 95 94 +4 93 94 97 96 +4 94 95 98 97 +4 99 100 103 102 +4 100 101 104 103 +4 102 103 106 105 +4 103 104 107 106 +4 108 109 112 111 +4 109 110 113 112 +4 111 112 115 114 +4 112 113 116 115 +4 117 118 121 120 +4 118 119 122 121 +4 120 121 124 123 +4 121 122 125 124 +4 126 127 130 129 +4 127 128 131 130 +4 129 130 133 132 +4 130 131 134 133 +4 135 136 139 138 +4 136 137 140 139 +4 138 139 142 141 +4 139 140 143 142 + +CELL_TYPES 64 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +POINT_DATA 144 +# vtk DataFile Version 3.0 +#This file was generated +ASCII +DATASET UNSTRUCTURED_GRID + +POINTS 144 double +0.00000 0.00000 0 +0.195088 0.00000 0 +0.382683 0.00000 0 +0.00000 0.195088 0 +0.195088 0.195088 0 +0.382683 0.195088 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.382683 0.00000 0 +0.555563 0.00000 0 +0.707107 0.00000 0 +0.382683 0.195088 0 +0.555563 0.195088 0 +0.707107 0.195088 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.707107 0.00000 0 +0.831459 0.00000 0 +0.923880 0.00000 0 +0.707107 0.195088 0 +0.831459 0.195088 0 +0.923880 0.195088 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.923880 0.00000 0 +0.980773 0.00000 0 +1.00000 0.00000 0 +0.923880 0.195088 0 +0.980773 0.195088 0 +1.00000 0.195088 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.00000 0.382683 0 +0.195088 0.382683 0 +0.382683 0.382683 0 +0.00000 0.555563 0 +0.195088 0.555563 0 +0.382683 0.555563 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.382683 0.382683 0 +0.555563 0.382683 0 +0.707107 0.382683 0 +0.382683 0.555563 0 +0.555563 0.555563 0 +0.707107 0.555563 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.707107 0.382683 0 +0.831459 0.382683 0 +0.923880 0.382683 0 +0.707107 0.555563 0 +0.831459 0.555563 0 +0.923880 0.555563 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.923880 0.382683 0 +0.980773 0.382683 0 +1.00000 0.382683 0 +0.923880 0.555563 0 +0.980773 0.555563 0 +1.00000 0.555563 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.00000 0.707107 0 +0.195088 0.707107 0 +0.382683 0.707107 0 +0.00000 0.831459 0 +0.195088 0.831459 0 +0.382683 0.831459 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.382683 0.707107 0 +0.555563 0.707107 0 +0.707107 0.707107 0 +0.382683 0.831459 0 +0.555563 0.831459 0 +0.707107 0.831459 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.707107 0.707107 0 +0.831459 0.707107 0 +0.923880 0.707107 0 +0.707107 0.831459 0 +0.831459 0.831459 0 +0.923880 0.831459 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.923880 0.707107 0 +0.980773 0.707107 0 +1.00000 0.707107 0 +0.923880 0.831459 0 +0.980773 0.831459 0 +1.00000 0.831459 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.00000 0.923880 0 +0.195088 0.923880 0 +0.382683 0.923880 0 +0.00000 0.980773 0 +0.195088 0.980773 0 +0.382683 0.980773 0 +0.00000 1.00000 0 +0.195088 1.00000 0 +0.382683 1.00000 0 +0.382683 0.923880 0 +0.555563 0.923880 0 +0.707107 0.923880 0 +0.382683 0.980773 0 +0.555563 0.980773 0 +0.707107 0.980773 0 +0.382683 1.00000 0 +0.555563 1.00000 0 +0.707107 1.00000 0 +0.707107 0.923880 0 +0.831459 0.923880 0 +0.923880 0.923880 0 +0.707107 0.980773 0 +0.831459 0.980773 0 +0.923880 0.980773 0 +0.707107 1.00000 0 +0.831459 1.00000 0 +0.923880 1.00000 0 +0.923880 0.923880 0 +0.980773 0.923880 0 +1.00000 0.923880 0 +0.923880 0.980773 0 +0.980773 0.980773 0 +1.00000 0.980773 0 +0.923880 1.00000 0 +0.980773 1.00000 0 +1.00000 1.00000 0 + +CELLS 64 320 +4 0 1 4 3 +4 1 2 5 4 +4 3 4 7 6 +4 4 5 8 7 +4 9 10 13 12 +4 10 11 14 13 +4 12 13 16 15 +4 13 14 17 16 +4 18 19 22 21 +4 19 20 23 22 +4 21 22 25 24 +4 22 23 26 25 +4 27 28 31 30 +4 28 29 32 31 +4 30 31 34 33 +4 31 32 35 34 +4 36 37 40 39 +4 37 38 41 40 +4 39 40 43 42 +4 40 41 44 43 +4 45 46 49 48 +4 46 47 50 49 +4 48 49 52 51 +4 49 50 53 52 +4 54 55 58 57 +4 55 56 59 58 +4 57 58 61 60 +4 58 59 62 61 +4 63 64 67 66 +4 64 65 68 67 +4 66 67 70 69 +4 67 68 71 70 +4 72 73 76 75 +4 73 74 77 76 +4 75 76 79 78 +4 76 77 80 79 +4 81 82 85 84 +4 82 83 86 85 +4 84 85 88 87 +4 85 86 89 88 +4 90 91 94 93 +4 91 92 95 94 +4 93 94 97 96 +4 94 95 98 97 +4 99 100 103 102 +4 100 101 104 103 +4 102 103 106 105 +4 103 104 107 106 +4 108 109 112 111 +4 109 110 113 112 +4 111 112 115 114 +4 112 113 116 115 +4 117 118 121 120 +4 118 119 122 121 +4 120 121 124 123 +4 121 122 125 124 +4 126 127 130 129 +4 127 128 131 130 +4 129 130 133 132 +4 130 131 134 133 +4 135 136 139 138 +4 136 137 140 139 +4 138 139 142 141 +4 139 140 143 142 + +CELL_TYPES 64 + 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 +POINT_DATA 144 -- 2.39.5