From b66475714f45754946112583687f6f07b2edc198 Mon Sep 17 00:00:00 2001 From: Timo Heister Date: Fri, 16 Sep 2016 17:16:30 -0400 Subject: [PATCH] add DofTools::write_gnuplot_dof_support_point_info - add DofTools::write_gnuplot_dof_support_point_info - add tests --- doc/doxygen/images/support_point_dofs1.png | Bin 0 -> 24742 bytes doc/doxygen/images/support_point_dofs2.png | Bin 0 -> 7371 bytes doc/news/changes.h | 10 ++- include/deal.II/dofs/dof_tools.h | 39 ++++++++- source/dofs/dof_tools.cc | 78 +++++++++++++++++ source/dofs/dof_tools.inst.in | 6 ++ ...write_gnuplot_dof_support_point_info_01.cc | 74 ++++++++++++++++ ...e_gnuplot_dof_support_point_info_01.output | 33 ++++++++ ...write_gnuplot_dof_support_point_info_02.cc | 79 +++++++++++++++++ ...e_gnuplot_dof_support_point_info_02.output | 47 ++++++++++ ...write_gnuplot_dof_support_point_info_03.cc | 80 ++++++++++++++++++ ...e_gnuplot_dof_support_point_info_03.output | 47 ++++++++++ 12 files changed, 491 insertions(+), 2 deletions(-) create mode 100644 doc/doxygen/images/support_point_dofs1.png create mode 100644 doc/doxygen/images/support_point_dofs2.png create mode 100644 tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.cc create mode 100644 tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.output create mode 100644 tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.cc create mode 100644 tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.output create mode 100644 tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.cc create mode 100644 tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.output diff --git a/doc/doxygen/images/support_point_dofs1.png b/doc/doxygen/images/support_point_dofs1.png new file mode 100644 index 0000000000000000000000000000000000000000..e96acf45f79cdc749c427acb562d54633d5eb554 GIT binary patch literal 24742 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 literal 0 HcmV?d00001 diff --git a/doc/doxygen/images/support_point_dofs2.png b/doc/doxygen/images/support_point_dofs2.png new file mode 100644 index 0000000000000000000000000000000000000000..75697ea53c02c37a5a3c61af95649460795e62d2 GIT binary patch literal 7371 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 +
  • New: DoFTools::write_gnuplot_dof_support_point_info outputs + support point locations and dof indices to a format readable by + gnuplot. +
    + (Timo Heister, 2016/09/16) +
  • +
  • Fixed: The CMake macros DEAL_II_(ADD_TEST|SETUP_TARGET) now enforce a stricter CMAKE_BUILD_TYPE handling. This helps to avoid situations where targets with different build flavors might accidentally get linked against each other.
    (Matthias Maier, 2016/09/08) +
  • Improved: the doxygen documentation now contains nicely formatted boxes containing the text message of each exception. Several messages haven been clarified and improved.
    (Timo Heister, 2016/09/06) -
  • +
  • Fixed: Reimplement copy_triangulation and load in dealii::parallel::shared::Triangulation, this avoids the loss of diff --git a/include/deal.II/dofs/dof_tools.h b/include/deal.II/dofs/dof_tools.h index ef07a09839..1816cca7a2 100644 --- a/include/deal.II/dofs/dof_tools.h +++ b/include/deal.II/dofs/dof_tools.h @@ -29,6 +29,8 @@ #include #include #include +#include + DEAL_II_NAMESPACE_OPEN @@ -51,7 +53,6 @@ namespace GridTools template struct PeriodicFacePair; } -//TODO: map_support_points_to_dofs should generate a multimap, rather than just a map, since several dofs may be located at the same support point /** * This is a collection of functions operating on, and manipulating the @@ -2188,6 +2189,11 @@ namespace DoFTools * Just as with the function above, it is assumed that the finite element in * use here actually supports the notion of support points of all its * components. + * + * @todo This function should generate a multimap, rather than just a map, + * since several dofs may be located at the same support point. Currently, + * only the last value in the map returned by map_dofs_to_support_points() for + * each point will be returned. */ template void @@ -2196,6 +2202,37 @@ namespace DoFTools const DoFHandlerType &dof_handler, std::map, types::global_dof_index, Comp> &point_to_index_map); + /** + * Generate text output readable by gnuplot with point data based on the + * given map @p support_points. For each support point location, a string + * label containing a list of all DoFs from the map is generated. The map + * can be generated with a call to map_dofs_to_support_points() and is useful + * to visualize location and global numbering of unknowns. + * + * An example for the format of each line in the output is: + * @code + * x [y] [z] "dof1, dof2" + * @endcode + * where x, y, and z (present only in corresponding dimension) are the + * coordinates of the support point, followed by a list of DoF numbers. + * + * The points with labels can be plotted as follows in gnuplot: + * @code + * plot "./points.gpl" using 1:2:3 with labels point offset 1,1 + * @endcode + * + * Examples (this also includes the grid written separately using GridOut): + *

    + * @image html support_point_dofs1.png + * @image html support_point_dofs2.png + *

    + */ + template + void + write_gnuplot_dof_support_point_info(std::ostream &out, + const std::map > &support_points); + + /** * Map a coupling table from the user friendly organization by components to * the organization by blocks. Specializations of this function for diff --git a/source/dofs/dof_tools.cc b/source/dofs/dof_tools.cc index aadfb77635..bc666ba5c9 100644 --- a/source/dofs/dof_tools.cc +++ b/source/dofs/dof_tools.cc @@ -54,6 +54,40 @@ namespace DoFTools { namespace internal { + /** + * Comparison functor struct to compare two Points and return if one is + * "less" than the other one. This can be used to use Point as a key in + * std::map. + * + * Comparison is done by comparing values in each dimension in ascending + * order (first x, then y, etc.). Note that comparisons are done without an + * epsilon, so points need to have identical floating point components to be + * considered equal. + */ + template + struct ComparisonHelper + { + /** + * Comparison operator. + * + * Return true if @lhs is considered less than @rhs. + */ + bool operator() (const Point &lhs, + const Point &rhs) const + { + for (unsigned int d=0; d + void + write_gnuplot_dof_support_point_info(std::ostream &out, + const std::map > &support_points) + { + AssertThrow (out, ExcIO()); + + typedef std::map< types::global_dof_index, Point > + dof_map_t; + + typedef std::map, std::vector, typename internal::ComparisonHelper > + point_map_t; + + point_map_t point_map; + + // convert to map point -> list of DoFs + for (typename dof_map_t::const_iterator it = support_points.begin(); + it!=support_points.end(); + ++it) + { + std::vector &v = point_map[it->second]; + v.push_back(it->first); + } + + // print the newly created map: + for (typename point_map_t::iterator it = point_map.begin(); + it!=point_map.end(); + ++it) + { + out << it->first << " \""; + const std::vector &v = it->second; + for (unsigned int i=0; i < v.size(); ++i) + { + if (i>0) + out << ", "; + out << v[i]; + } + + out << "\"\n"; + } + + out << std::flush; + } + template void diff --git a/source/dofs/dof_tools.inst.in b/source/dofs/dof_tools.inst.in index 8495a6ff4d..a11b5b3077 100644 --- a/source/dofs/dof_tools.inst.in +++ b/source/dofs/dof_tools.inst.in @@ -688,6 +688,12 @@ for (deal_II_dimension : DIMENSIONS) #endif + template + void + DoFTools::write_gnuplot_dof_support_point_info(std::ostream &, + const std::map > &); + + template void DoFTools::convert_couplings_to_blocks ( diff --git a/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.cc b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.cc new file mode 100644 index 0000000000..ebcc47f785 --- /dev/null +++ b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.cc @@ -0,0 +1,74 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2016 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 at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + +// Check DoFTools::write_gnuplot_dof_support_point_info with two +// cells and a Stokes Taylor-Hood element. + +#include "../tests.h" + +#include +#include + +#include +#include +#include +#include + +#include +#include +#include + +template +void +test () +{ + std::ostream &out = deallog.get_file_stream(); + + Triangulation triangulation; + const int velocity_degree = 2; + + std::vector rep(dim, 1); + rep[0]=2; + GridGenerator::subdivided_hyper_rectangle(triangulation, + rep, + Point(), + Point(2.0,1.0)); + FESystem fe (FE_Q(velocity_degree), dim, + FE_Q(velocity_degree-1), 1); + + DoFHandler dof_handler (triangulation); + dof_handler.distribute_dofs (fe); + + out << "plot '-' using 1:2 with lines, '-' with labels point pt 2 offset 1,1" << std::endl; + GridOut().write_gnuplot (triangulation, deallog.get_file_stream()); + out << "e" << std::endl; + + std::map > support_points; + DoFTools::map_dofs_to_support_points (MappingQ1(), + dof_handler, + support_points); + DoFTools::write_gnuplot_dof_support_point_info(deallog.get_file_stream(), + support_points); + out << "e" << std::endl; +} + + + +int main() +{ + initlog(); + test<2>(); +} + diff --git a/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.output b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.output new file mode 100644 index 0000000000..fadd5dff4e --- /dev/null +++ b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_01.output @@ -0,0 +1,33 @@ + +plot '-' using 1:2 with lines, '-' with labels point pt 2 offset 1,1 +0.00000 0.00000 0 0 +1.00000 0.00000 0 0 +1.00000 1.00000 0 0 +0.00000 1.00000 0 0 +0.00000 0.00000 0 0 + + +1.00000 0.00000 0 0 +2.00000 0.00000 0 0 +2.00000 1.00000 0 0 +1.00000 1.00000 0 0 +1.00000 0.00000 0 0 + + +e +0.00000 0.00000 "0, 1, 2" +0.00000 0.500000 "12, 13" +0.00000 1.00000 "6, 7, 8" +0.500000 0.00000 "16, 17" +0.500000 0.500000 "20, 21" +0.500000 1.00000 "18, 19" +1.00000 0.00000 "3, 4, 5" +1.00000 0.500000 "14, 15" +1.00000 1.00000 "9, 10, 11" +1.50000 0.00000 "30, 31" +1.50000 0.500000 "34, 35" +1.50000 1.00000 "32, 33" +2.00000 0.00000 "22, 23, 24" +2.00000 0.500000 "28, 29" +2.00000 1.00000 "25, 26, 27" +e diff --git a/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.cc b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.cc new file mode 100644 index 0000000000..623259d923 --- /dev/null +++ b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.cc @@ -0,0 +1,79 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2016 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 at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + +// Check DoFTools::write_gnuplot_dof_support_point_info with a mapping + +#include "../tests.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +template +void +test () +{ + std::ostream &out = deallog.get_file_stream(); + + Point center; + + Triangulation triangulation; + GridGenerator::quarter_hyper_shell(triangulation, center, 0.5, 1.0); + + static const PolarManifold manifold(center); + triangulation.set_manifold (0, manifold); + triangulation.set_all_manifold_ids_on_boundary(0); + triangulation.set_all_manifold_ids(0); + + FE_Q fe (2); + + DoFHandler dof_handler (triangulation); + dof_handler.distribute_dofs (fe); + + MappingManifold mapping; + + std::map > support_points; + DoFTools::map_dofs_to_support_points (mapping, + dof_handler, + support_points); + + out << "set view equal xy" << std::endl + << "plot '-' using 1:2 with lines, '-' with labels point pt 2 offset 1,1" << std::endl; + GridOut().write_gnuplot (triangulation, deallog.get_file_stream()); + out << "e" << std::endl; + + DoFTools::write_gnuplot_dof_support_point_info(deallog.get_file_stream(), + support_points); + out << "e" << std::endl; +} + + + +int main() +{ + initlog(); + test<2>(); +} + diff --git a/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.output b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.output new file mode 100644 index 0000000000..f51627f212 --- /dev/null +++ b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_02.output @@ -0,0 +1,47 @@ + +set view equal xy +plot '-' using 1:2 with lines, '-' with labels point pt 2 offset 1,1 +1.00000 0.00000 0 0 +0.866025 0.500000 0 0 +0.433013 0.250000 0 0 +0.500000 0.00000 0 0 +1.00000 0.00000 0 0 + + +0.866025 0.500000 0 0 +0.500000 0.866025 0 0 +0.250000 0.433013 0 0 +0.433013 0.250000 0 0 +0.866025 0.500000 0 0 + + +0.500000 0.866025 0 0 +0.00000 1.00000 0 0 +0.00000 0.500000 0 0 +0.250000 0.433013 0 0 +0.500000 0.866025 0 0 + + +e +3.06162e-17 0.500000 "16" +4.59243e-17 0.750000 "17" +6.12323e-17 1.00000 "15" +0.129410 0.482963 "19" +0.194114 0.724444 "20" +0.250000 0.433013 "10" +0.258819 0.965926 "18" +0.353553 0.353553 "13" +0.375000 0.649519 "11" +0.433013 0.250000 "3" +0.482963 0.129410 "7" +0.500000 0.00000 "2" +0.500000 0.866025 "9" +0.530330 0.530330 "14" +0.649519 0.375000 "5" +0.707107 0.707107 "12" +0.724444 0.194114 "8" +0.750000 0.00000 "4" +0.866025 0.500000 "1" +0.965926 0.258819 "6" +1.00000 0.00000 "0" +e diff --git a/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.cc b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.cc new file mode 100644 index 0000000000..d80e908d9a --- /dev/null +++ b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.cc @@ -0,0 +1,80 @@ +// --------------------------------------------------------------------- +// +// Copyright (C) 2016 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 at +// the top level of the deal.II distribution. +// +// --------------------------------------------------------------------- + +// Check DoFTools::write_gnuplot_dof_support_point_info with a mapping + +#include "../tests.h" + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +template +void +test () +{ + std::ostream &out = deallog.get_file_stream(); + + Point center; + + Triangulation triangulation; + GridGenerator::quarter_hyper_shell(triangulation, center, 0.5, 1.0); + + static const PolarManifold manifold(center); + triangulation.set_manifold (0, manifold); + triangulation.set_all_manifold_ids_on_boundary(0); + triangulation.set_all_manifold_ids(0); + + FE_Q fe (2); + + DoFHandler dof_handler (triangulation); + dof_handler.distribute_dofs (fe); + + MappingQ mapping(3); + + std::map > support_points; + DoFTools::map_dofs_to_support_points (mapping, + dof_handler, + support_points); + + out << "set view equal xy" << std::endl + << "plot '-' using 1:2 with lines, '-' with labels point pt 2 offset 1,1" << std::endl; + GridOut().write_gnuplot (triangulation, deallog.get_file_stream()); + out << "e" << std::endl; + + DoFTools::write_gnuplot_dof_support_point_info(deallog.get_file_stream(), + support_points); + out << "e" << std::endl; +} + + + +int main() +{ + initlog(); + test<2>(); +} + diff --git a/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.output b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.output new file mode 100644 index 0000000000..e27f1e9d7e --- /dev/null +++ b/tests/dofs/dof_tools_write_gnuplot_dof_support_point_info_03.output @@ -0,0 +1,47 @@ + +set view equal xy +plot '-' using 1:2 with lines, '-' with labels point pt 2 offset 1,1 +1.00000 0.00000 0 0 +0.866025 0.500000 0 0 +0.433013 0.250000 0 0 +0.500000 0.00000 0 0 +1.00000 0.00000 0 0 + + +0.866025 0.500000 0 0 +0.500000 0.866025 0 0 +0.250000 0.433013 0 0 +0.433013 0.250000 0 0 +0.866025 0.500000 0 0 + + +0.500000 0.866025 0 0 +0.00000 1.00000 0 0 +0.00000 0.500000 0 0 +0.250000 0.433013 0 0 +0.500000 0.866025 0 0 + + +e +0.00000 0.500000 "16" +0.00000 1.00000 "15" +5.74034e-17 0.750000 "17" +0.129404 0.482944 "19" +0.194107 0.724416 "20" +0.250000 0.433013 "10" +0.258809 0.965888 "18" +0.353540 0.353540 "13" +0.375000 0.649519 "11" +0.433013 0.250000 "3" +0.482944 0.129404 "7" +0.500000 0.00000 "2" +0.500000 0.866025 "9" +0.530309 0.530309 "14" +0.649519 0.375000 "5" +0.707079 0.707079 "12" +0.724416 0.194107 "8" +0.750000 0.00000 "4" +0.866025 0.500000 "1" +0.965888 0.258809 "6" +1.00000 0.00000 "0" +e -- 2.39.5