--- /dev/null
+Changed: The order of parameters has been switched in MappingQCache::initialize(),
+with the Mapping now being the first argument.
+<br>
+(Peter Munch, 2020/05/23)
--- /dev/null
+New: MappingQCache has a new initialize function that takes
+either a std::function or a dealii::Function for transforming
+individual points.
+<br>
+(Niklas Fehn, Martin Kronbichler, Peter Munch, 2021/03/10)
+
MappingQCache<dim> mapping(fe.degree + 1);
{
TimerOutput::Scope scope(timer, "Initialize mapping cache");
- mapping.initialize(triangulation, MappingQGeneric<dim>(fe.degree + 1));
+ mapping.initialize(MappingQGeneric<dim>(fe.degree + 1), triangulation);
}
std::cout << " Memory consumption cache: "
<< 1e-6 * mapping.memory_consumption() << " MB" << std::endl;
#include <deal.II/base/config.h>
+#include <deal.II/base/function.h>
+
#include <deal.II/fe/mapping_q_generic.h>
#include <deal.II/grid/tria.h>
/**
* 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<dim, spacedim> & mapping,
+ const Triangulation<dim, spacedim> &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<dim, spacedim> & triangulation,
const MappingQGeneric<dim, spacedim> &mapping);
const typename Triangulation<dim, spacedim>::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<dim, spacedim> & mapping,
+ const Triangulation<dim, spacedim> &tria,
+ const std::function<Point<spacedim>(
+ const typename Triangulation<dim, spacedim>::cell_iterator &,
+ const Point<spacedim> &)> & transformation_function,
+ const bool function_describes_relative_displacement);
+
+ /**
+ * The same as above but taking a dealii::Function object.
+ */
+ void
+ initialize(const Mapping<dim, spacedim> & mapping,
+ const Triangulation<dim, spacedim> &tria,
+ const Function<spacedim> & transformation_function,
+ const bool function_describes_relative_displacement);
+
/**
* Return the memory consumption (in bytes) of the cache.
*/
#include <deal.II/base/memory_consumption.h>
#include <deal.II/base/work_stream.h>
+#include <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_tools.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_q1.h>
#include <deal.II/fe/mapping_q_cache.h>
#include <functional>
+template <int dim, int spacedim>
+void
+MappingQCache<dim, spacedim>::initialize(
+ const Mapping<dim, spacedim> & mapping,
+ const Triangulation<dim, spacedim> &triangulation)
+{
+ // FE and FEValues in the case they are needed
+ FE_Nothing<dim, spacedim> fe;
+ Threads::ThreadLocalStorage<std::unique_ptr<FEValues<dim, spacedim>>>
+ fe_values_all;
+
+ this->initialize(
+ triangulation,
+ [&](const typename Triangulation<dim, spacedim>::cell_iterator &cell) {
+ const auto mapping_q_generic =
+ dynamic_cast<const MappingQGeneric<dim, spacedim> *>(&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<dim> quadrature_gl(this->polynomial_degree + 1);
+
+ std::vector<Point<dim>> quadrature_points;
+ for (const auto i :
+ FETools::hierarchic_to_lexicographic_numbering<dim>(
+ this->polynomial_degree))
+ quadrature_points.push_back(quadrature_gl.point(i));
+ Quadrature<dim> quadrature(quadrature_points);
+
+ fe_values = std::make_unique<FEValues<dim, spacedim>>(
+ mapping, fe, quadrature, update_quadrature_points);
+ }
+
+ fe_values->reinit(cell);
+ return fe_values->get_quadrature_points();
+ }
+ });
+}
+
+
+
template <int dim, int spacedim>
void
MappingQCache<dim, spacedim>::initialize(
const Triangulation<dim, spacedim> & triangulation,
const MappingQGeneric<dim, spacedim> &mapping)
{
- AssertDimension(this->get_degree(), mapping.get_degree());
- initialize(triangulation,
- [&mapping](const typename Triangulation<dim>::cell_iterator &cell)
- -> std::vector<Point<spacedim>> {
- return mapping.compute_mapping_support_points(cell);
- });
+ this->initialize(mapping, triangulation);
}
+template <int dim, int spacedim>
+void
+MappingQCache<dim, spacedim>::initialize(
+ const Mapping<dim, spacedim> & mapping,
+ const Triangulation<dim, spacedim> &tria,
+ const std::function<Point<spacedim>(
+ const typename Triangulation<dim, spacedim>::cell_iterator &,
+ const Point<spacedim> &)> & transformation_function,
+ const bool function_describes_relative_displacement)
+{
+ // FE and FEValues in the case they are needed
+ FE_Nothing<dim, spacedim> fe;
+ Threads::ThreadLocalStorage<std::unique_ptr<FEValues<dim, spacedim>>>
+ fe_values_all;
+
+ this->initialize(
+ tria,
+ [&](const typename Triangulation<dim, spacedim>::cell_iterator &cell) {
+ std::vector<Point<spacedim>> points;
+
+ const auto mapping_q_generic =
+ dynamic_cast<const MappingQGeneric<dim, spacedim> *>(&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<dim> quadrature_gl(this->polynomial_degree + 1);
+
+ std::vector<Point<dim>> quadrature_points;
+ for (const auto i :
+ FETools::hierarchic_to_lexicographic_numbering<dim>(
+ this->polynomial_degree))
+ quadrature_points.push_back(quadrature_gl.point(i));
+ Quadrature<dim> quadrature(quadrature_points);
+
+ fe_values = std::make_unique<FEValues<dim, spacedim>>(
+ 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 <int dim, int spacedim>
+void
+MappingQCache<dim, spacedim>::initialize(
+ const Mapping<dim, spacedim> & mapping,
+ const Triangulation<dim, spacedim> &tria,
+ const Function<spacedim> & transformation_function,
+ const bool function_describes_relative_displacement)
+{
+ AssertDimension(transformation_function.n_components, spacedim);
+
+ this->initialize(
+ mapping,
+ tria,
+ [&](const typename Triangulation<dim, spacedim>::cell_iterator &,
+ const Point<spacedim> &point) -> Point<spacedim> {
+ Point<spacedim> 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 <int dim, int spacedim>
std::size_t
MappingQCache<dim, spacedim>::memory_consumption() const
--- /dev/null
+// ---------------------------------------------------------------------
+//
+// 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 <deal.II/fe/fe_nothing.h>
+#include <deal.II/fe/fe_q.h>
+#include <deal.II/fe/fe_values.h>
+#include <deal.II/fe/mapping_q_cache.h>
+#include <deal.II/fe/mapping_q_generic.h>
+
+#include <deal.II/grid/grid_generator.h>
+#include <deal.II/grid/tria.h>
+
+#include <deal.II/numerics/data_out.h>
+
+#include "../tests.h"
+
+template <int dim>
+class Solution : public Function<dim>
+{
+public:
+ Solution(const bool is_displacement_function)
+ : Function<dim>(dim)
+ , is_displacement_function(is_displacement_function)
+ {}
+
+ double
+ value(const Point<dim> &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 <int dim, typename Fu>
+void
+do_test(const unsigned int degree,
+ const Fu & fu,
+ const bool is_displacement_function)
+{
+ Triangulation<dim> tria;
+ GridGenerator::subdivided_hyper_cube(tria, 4);
+
+ MappingQGeneric<dim> mapping(degree);
+ MappingQCache<dim> mapping_cache(degree);
+ mapping_cache.initialize(mapping, tria, fu, is_displacement_function);
+
+ {
+ DataOut<dim> data_out;
+
+ data_out.attach_triangulation(tria);
+
+ data_out.build_patches(mapping_cache,
+ 2,
+ DataOut<dim>::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);
+}
--- /dev/null
+
+# 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