Reference documentation for deal.II version 9.1.0-pre
data_out_base.h
1 // ---------------------------------------------------------------------
2 //
3 // Copyright (C) 1999 - 2018 by the deal.II authors
4 //
5 // This file is part of the deal.II library.
6 //
7 // The deal.II library is free software; you can use it, redistribute
8 // it, and/or modify it under the terms of the GNU Lesser General
9 // Public License as published by the Free Software Foundation; either
10 // version 2.1 of the License, or (at your option) any later version.
11 // The full text of the license can be found in the file LICENSE.md at
12 // the top level directory of deal.II.
13 //
14 // ---------------------------------------------------------------------
15 
16 #ifndef dealii_data_out_base_h
17 #define dealii_data_out_base_h
18 
19 
20 #include <deal.II/base/config.h>
21 
22 #include <deal.II/base/geometry_info.h>
23 #include <deal.II/base/mpi.h>
24 #include <deal.II/base/point.h>
25 #include <deal.II/base/table.h>
26 
27 #include <deal.II/numerics/data_component_interpretation.h>
28 
29 #include <limits>
30 #include <string>
31 #include <tuple>
32 #include <typeinfo>
33 #include <vector>
34 
35 // Only include the Tecplot API header if the appropriate files
36 // were detected by configure
37 #ifdef DEAL_II_HAVE_TECPLOT
38 # include <string.h>
39 
40 # include "TECIO.h"
41 #endif
42 
43 #include <ostream>
44 
45 DEAL_II_NAMESPACE_OPEN
46 
47 
48 class ParameterHandler;
49 class XDMFEntry;
50 
216 namespace DataOutBase
217 {
242  template <int dim, int spacedim = dim>
243  struct Patch
244  {
248  static const unsigned int space_dim = spacedim;
249 
263 
270  unsigned int neighbors[dim > 0 ? GeometryInfo<dim>::faces_per_cell : 1];
271 
276  unsigned int patch_index;
277 
283  unsigned int n_subdivisions;
284 
307 
321 
326  Patch();
327 
332  bool
333  operator==(const Patch &patch) const;
334 
341  std::size_t
342  memory_consumption() const;
343 
347  void
348  swap(Patch<dim, spacedim> &other_patch);
349 
353  static const unsigned int no_neighbor = numbers::invalid_unsigned_int;
354 
365  int,
366  int,
367  << "It is not possible to have a structural dimension of " << arg1
368  << " to be larger than the space dimension of the surrounding"
369  << " space " << arg2);
371  };
372 
373 
374 
392  template <int spacedim>
393  struct Patch<0, spacedim>
394  {
398  static const unsigned int space_dim = spacedim;
399 
409 
414  static unsigned int neighbors[1];
415 
420  unsigned int patch_index;
421 
431  static unsigned int n_subdivisions;
432 
454 
468 
473  Patch();
474 
479  bool
480  operator==(const Patch &patch) const;
481 
488  std::size_t
489  memory_consumption() const;
490 
494  void swap(Patch<0, spacedim> &other_patch);
495 
499  static const unsigned int no_neighbor = numbers::invalid_unsigned_int;
500 
511  int,
512  int,
513  << "It is not possible to have a structural dimension of " << arg1
514  << " to be larger than the space dimension of the surrounding"
515  << " space " << arg2);
517  };
518 
519 
531  template <typename FlagsType>
533  {
541  static void
542  declare_parameters(ParameterHandler &prm);
543 
551  void
552  parse_parameters(const ParameterHandler &prm);
553 
560  std::size_t
561  memory_consumption() const;
562  };
563 
564 
565  template <typename FlagsType>
566  void
568  {}
569 
570 
571  template <typename FlagsType>
572  void
574  {}
575 
576 
577  template <typename FlagsType>
578  std::size_t
580  {
581  return sizeof(FlagsType);
582  }
583 
584 
590  struct DXFlags : public OutputFlagsBase<DXFlags>
591  {
606 
611 
617 
621  DXFlags(const bool write_neighbors = false,
622  const bool int_binary = false,
623  const bool coordinates_binary = false,
624  const bool data_binary = false);
625 
630  static void
631  declare_parameters(ParameterHandler &prm);
632 
639  void
640  parse_parameters(const ParameterHandler &prm);
641  };
642 
648  struct UcdFlags : public OutputFlagsBase<UcdFlags>
649  {
660 
664  UcdFlags(const bool write_preamble = false);
665 
670  static void
671  declare_parameters(ParameterHandler &prm);
672 
679  void
680  parse_parameters(const ParameterHandler &prm);
681  };
682 
688  struct GnuplotFlags : public OutputFlagsBase<GnuplotFlags>
689  {
694  GnuplotFlags();
695 
699  GnuplotFlags(const std::vector<std::string> &space_dimension_labels);
700 
716  std::vector<std::string> space_dimension_labels;
717 
722  std::size_t
723  memory_consumption() const;
724 
729  DeclExceptionMsg(ExcNotEnoughSpaceDimensionLabels,
730  "There should be at least one space dimension per spatial "
731  "dimension (extras are ignored).");
732  };
733 
740  struct PovrayFlags : public OutputFlagsBase<PovrayFlags>
741  {
747  bool smooth;
748 
755 
763 
767  PovrayFlags(const bool smooth = false,
768  const bool bicubic_patch = false,
769  const bool external_data = false);
770 
775  static void
776  declare_parameters(ParameterHandler &prm);
777 
784  void
785  parse_parameters(const ParameterHandler &prm);
786  };
787 
788 
795  struct EpsFlags : public OutputFlagsBase<EpsFlags>
796  {
803  unsigned int height_vector;
804 
809  unsigned int color_vector;
810 
816  enum SizeType
817  {
821  height
822  };
823 
828 
836  unsigned int size;
837 
841  double line_width;
842 
848  double azimut_angle;
849 
873  double turn_angle;
874 
885  double z_scaling;
886 
893  bool draw_mesh;
894 
912 
922 
926  struct RgbValues
927  {
928  float red;
929  float green;
930  float blue;
931 
936  bool
937  is_grey() const;
938  };
939 
947  using ColorFunction = RgbValues (*)(const double value,
948  const double min_value,
949  const double max_value);
950 
957 
958 
967  static RgbValues
968  default_color_function(const double value,
969  const double min_value,
970  const double max_value);
971 
977  static RgbValues
978  grey_scale_color_function(const double value,
979  const double min_value,
980  const double max_value);
981 
988  static RgbValues
989  reverse_grey_scale_color_function(const double value,
990  const double min_value,
991  const double max_value);
992 
996  EpsFlags(const unsigned int height_vector = 0,
997  const unsigned int color_vector = 0,
998  const SizeType size_type = width,
999  const unsigned int size = 300,
1000  const double line_width = 0.5,
1001  const double azimut_angle = 60,
1002  const double turn_angle = 30,
1003  const double z_scaling = 1.0,
1004  const bool draw_mesh = true,
1005  const bool draw_cells = true,
1006  const bool shade_cells = true,
1007  const ColorFunction color_function = &default_color_function);
1008 
1016  static void
1017  declare_parameters(ParameterHandler &prm);
1018 
1025  void
1026  parse_parameters(const ParameterHandler &prm);
1027  };
1028 
1035  struct GmvFlags : public OutputFlagsBase<GmvFlags>
1036  {};
1037 
1043  struct TecplotFlags : public OutputFlagsBase<TecplotFlags>
1044  {
1051 
1056  const char *zone_name;
1057 
1064 
1068  TecplotFlags(const char * tecplot_binary_file_name = nullptr,
1069  const char * zone_name = nullptr,
1070  const double solution_time = -1.0);
1071 
1076  std::size_t
1077  memory_consumption() const;
1078  };
1079 
1085  struct VtkFlags : public OutputFlagsBase<VtkFlags>
1086  {
1097  double time;
1098 
1109  unsigned int cycle;
1110 
1118 
1124  {
1142  default_compression
1143  };
1144 
1150 
1169 
1173  VtkFlags(
1174  const double time = std::numeric_limits<double>::min(),
1175  const unsigned int cycle = std::numeric_limits<unsigned int>::min(),
1176  const bool print_date_and_time = true,
1177  const ZlibCompressionLevel compression_level = best_compression,
1178  const bool write_higher_order_cells = false);
1179  };
1180 
1181 
1187  struct SvgFlags : public OutputFlagsBase<SvgFlags>
1188  {
1192  unsigned int height;
1193 
1198  unsigned int width;
1199 
1206  unsigned int height_vector;
1207 
1211  int azimuth_angle, polar_angle;
1212 
1213  unsigned int line_thickness;
1214 
1218  bool margin;
1219 
1224 
1228  SvgFlags(const unsigned int height_vector = 0,
1229  const int azimuth_angle = 37,
1230  const int polar_angle = 45,
1231  const unsigned int line_thickness = 1,
1232  const bool margin = true,
1233  const bool draw_colorbar = true);
1234  };
1235 
1236 
1244  : public OutputFlagsBase<Deal_II_IntermediateFlags>
1245  {
1252  static const unsigned int format_version;
1253  };
1254 
1261  {
1271 
1277 
1281  DataOutFilterFlags(const bool filter_duplicate_vertices = false,
1282  const bool xdmf_hdf5_output = false);
1283 
1288  static void
1289  declare_parameters(ParameterHandler &prm);
1290 
1297  void
1298  parse_parameters(const ParameterHandler &prm);
1299 
1304  std::size_t
1305  memory_consumption() const;
1306  };
1307 
1330  {
1331  public:
1335  DataOutFilter();
1336 
1342 
1348  template <int dim>
1349  void
1350  write_point(const unsigned int index, const Point<dim> &p);
1351 
1355  template <int dim>
1356  void
1357  write_cell(const unsigned int index,
1358  const unsigned int start,
1359  const unsigned int d1,
1360  const unsigned int d2,
1361  const unsigned int d3);
1362 
1369  void
1370  write_data_set(const std::string & name,
1371  const unsigned int dimension,
1372  const unsigned int set_num,
1373  const Table<2, double> &data_vectors);
1374 
1379  void
1380  fill_node_data(std::vector<double> &node_data) const;
1381 
1386  void
1387  fill_cell_data(const unsigned int local_node_offset,
1388  std::vector<unsigned int> &cell_data) const;
1389 
1393  std::string
1394  get_data_set_name(const unsigned int set_num) const;
1395 
1399  unsigned int
1400  get_data_set_dim(const unsigned int set_num) const;
1401 
1406  const double *
1407  get_data_set(const unsigned int set_num) const;
1408 
1413  unsigned int
1414  n_nodes() const;
1415 
1420  unsigned int
1421  n_cells() const;
1422 
1427  unsigned int
1428  n_data_sets() const;
1429 
1433  void
1434  flush_points();
1435 
1439  void
1440  flush_cells();
1441 
1442 
1443  private:
1447  struct Point3Comp
1448  {
1449  bool
1450  operator()(const Point<3> &one, const Point<3> &two) const
1451  {
1452  /*
1453  * The return statement below is an optimized version of the following
1454  * code:
1455  *
1456  * for (unsigned int d=0; d<3; ++d)
1457  * {
1458  * if (one(d) < two(d))
1459  * return true;
1460  * else if (one(d) > two(d))
1461  * return false;
1462  * }
1463  * return false;
1464  */
1465 
1466  return (one(0) < two(0) ||
1467  (!(two(0) < one(0)) &&
1468  (one(1) < two(1) || (!(two(1) < one(1)) && one(2) < two(2)))));
1469  }
1470  };
1471 
1472  using Map3DPoint = std::multimap<Point<3>, unsigned int, Point3Comp>;
1473 
1478 
1485  unsigned int node_dim;
1486 
1493  unsigned int vertices_per_cell;
1494 
1498  Map3DPoint existing_points;
1499 
1503  std::map<unsigned int, unsigned int> filtered_points;
1504 
1508  std::map<unsigned int, unsigned int> filtered_cells;
1509 
1513  std::vector<std::string> data_set_names;
1514 
1518  std::vector<unsigned int> data_set_dims;
1519 
1523  std::vector<std::vector<double>> data_sets;
1524 
1528  void
1529  internal_add_cell(const unsigned int cell_index,
1530  const unsigned int pt_index);
1531  };
1532 
1533 
1538  {
1581 
1586 
1591 
1596 
1601 
1606  };
1607 
1613  template <int dim, int spacedim>
1614  DEAL_II_DEPRECATED void
1615  write_dx(
1616  const std::vector<Patch<dim, spacedim>> &patches,
1617  const std::vector<std::string> & data_names,
1618  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1619  & nonscalar_data_ranges,
1620  const DXFlags &flags,
1621  std::ostream & out);
1622 
1626  template <int dim, int spacedim>
1627  void
1628  write_dx(
1629  const std::vector<Patch<dim, spacedim>> &patches,
1630  const std::vector<std::string> & data_names,
1631  const std::vector<
1632  std::tuple<unsigned int,
1633  unsigned int,
1634  std::string,
1636  & nonscalar_data_ranges,
1637  const DXFlags &flags,
1638  std::ostream & out);
1639 
1645  template <int spacedim>
1646  DEAL_II_DEPRECATED void
1647  write_eps(
1648  const std::vector<Patch<2, spacedim>> &patches,
1649  const std::vector<std::string> & data_names,
1650  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1651  & nonscalar_data_ranges,
1652  const EpsFlags &flags,
1653  std::ostream & out);
1654 
1662  template <int dim, int spacedim>
1663  DEAL_II_DEPRECATED void
1664  write_eps(
1665  const std::vector<Patch<dim, spacedim>> &patches,
1666  const std::vector<std::string> & data_names,
1667  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1668  & nonscalar_data_ranges,
1669  const EpsFlags &flags,
1670  std::ostream & out);
1671 
1716  template <int spacedim>
1717  void
1718  write_eps(
1719  const std::vector<Patch<2, spacedim>> &patches,
1720  const std::vector<std::string> & data_names,
1721  const std::vector<
1722  std::tuple<unsigned int,
1723  unsigned int,
1724  std::string,
1726  & nonscalar_data_ranges,
1727  const EpsFlags &flags,
1728  std::ostream & out);
1729 
1737  template <int dim, int spacedim>
1738  DEAL_II_DEPRECATED void
1739  write_eps(
1740  const std::vector<Patch<dim, spacedim>> &patches,
1741  const std::vector<std::string> & data_names,
1742  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1743  & nonscalar_data_ranges,
1744  const EpsFlags &flags,
1745  std::ostream & out);
1746 
1752  template <int dim, int spacedim>
1753  void
1754  write_eps(
1755  const std::vector<Patch<dim, spacedim>> &patches,
1756  const std::vector<std::string> & data_names,
1757  const std::vector<
1758  std::tuple<unsigned int,
1759  unsigned int,
1760  std::string,
1762  & nonscalar_data_ranges,
1763  const EpsFlags &flags,
1764  std::ostream & out);
1765 
1771  template <int dim, int spacedim>
1772  DEAL_II_DEPRECATED void
1773  write_gmv(
1774  const std::vector<Patch<dim, spacedim>> &patches,
1775  const std::vector<std::string> & data_names,
1776  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1777  & nonscalar_data_ranges,
1778  const GmvFlags &flags,
1779  std::ostream & out);
1780 
1790  template <int dim, int spacedim>
1791  void
1792  write_gmv(
1793  const std::vector<Patch<dim, spacedim>> &patches,
1794  const std::vector<std::string> & data_names,
1795  const std::vector<
1796  std::tuple<unsigned int,
1797  unsigned int,
1798  std::string,
1800  & nonscalar_data_ranges,
1801  const GmvFlags &flags,
1802  std::ostream & out);
1803 
1809  template <int dim, int spacedim>
1810  DEAL_II_DEPRECATED void
1811  write_gnuplot(
1812  const std::vector<Patch<dim, spacedim>> &patches,
1813  const std::vector<std::string> & data_names,
1814  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1815  & nonscalar_data_ranges,
1816  const GnuplotFlags &flags,
1817  std::ostream & out);
1818 
1875  template <int dim, int spacedim>
1876  void
1877  write_gnuplot(
1878  const std::vector<Patch<dim, spacedim>> &patches,
1879  const std::vector<std::string> & data_names,
1880  const std::vector<
1881  std::tuple<unsigned int,
1882  unsigned int,
1883  std::string,
1885  & nonscalar_data_ranges,
1886  const GnuplotFlags &flags,
1887  std::ostream & out);
1888 
1895  template <int dim, int spacedim>
1896  DEAL_II_DEPRECATED void
1897  write_povray(
1898  const std::vector<Patch<dim, spacedim>> &patches,
1899  const std::vector<std::string> & data_names,
1900  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1901  & nonscalar_data_ranges,
1902  const PovrayFlags &flags,
1903  std::ostream & out);
1904 
1950  template <int dim, int spacedim>
1951  void
1952  write_povray(
1953  const std::vector<Patch<dim, spacedim>> &patches,
1954  const std::vector<std::string> & data_names,
1955  const std::vector<
1956  std::tuple<unsigned int,
1957  unsigned int,
1958  std::string,
1960  & nonscalar_data_ranges,
1961  const PovrayFlags &flags,
1962  std::ostream & out);
1963 
1972  template <int dim, int spacedim>
1973  DEAL_II_DEPRECATED void
1974  write_tecplot(
1975  const std::vector<Patch<dim, spacedim>> &patches,
1976  const std::vector<std::string> & data_names,
1977  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
1978  & nonscalar_data_ranges,
1979  const TecplotFlags &flags,
1980  std::ostream & out);
1981 
1988  template <int dim, int spacedim>
1989  void
1990  write_tecplot(
1991  const std::vector<Patch<dim, spacedim>> &patches,
1992  const std::vector<std::string> & data_names,
1993  const std::vector<
1994  std::tuple<unsigned int,
1995  unsigned int,
1996  std::string,
1998  & nonscalar_data_ranges,
1999  const TecplotFlags &flags,
2000  std::ostream & out);
2001 
2008  template <int dim, int spacedim>
2009  DEAL_II_DEPRECATED void
2011  const std::vector<Patch<dim, spacedim>> &patches,
2012  const std::vector<std::string> & data_names,
2013  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2014  & nonscalar_data_ranges,
2015  const TecplotFlags &flags,
2016  std::ostream & out);
2017 
2037  template <int dim, int spacedim>
2038  void
2040  const std::vector<Patch<dim, spacedim>> &patches,
2041  const std::vector<std::string> & data_names,
2042  const std::vector<
2043  std::tuple<unsigned int,
2044  unsigned int,
2045  std::string,
2047  & nonscalar_data_ranges,
2048  const TecplotFlags &flags,
2049  std::ostream & out);
2050 
2057  template <int dim, int spacedim>
2058  DEAL_II_DEPRECATED void
2059  write_ucd(
2060  const std::vector<Patch<dim, spacedim>> &patches,
2061  const std::vector<std::string> & data_names,
2062  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2063  & nonscalar_data_ranges,
2064  const UcdFlags &flags,
2065  std::ostream & out);
2066 
2081  template <int dim, int spacedim>
2082  void
2083  write_ucd(
2084  const std::vector<Patch<dim, spacedim>> &patches,
2085  const std::vector<std::string> & data_names,
2086  const std::vector<
2087  std::tuple<unsigned int,
2088  unsigned int,
2089  std::string,
2091  & nonscalar_data_ranges,
2092  const UcdFlags &flags,
2093  std::ostream & out);
2094 
2102  template <int dim, int spacedim>
2103  DEAL_II_DEPRECATED void
2104  write_vtk(
2105  const std::vector<Patch<dim, spacedim>> &patches,
2106  const std::vector<std::string> & data_names,
2107  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2108  & nonscalar_data_ranges,
2109  const VtkFlags &flags,
2110  std::ostream & out);
2111 
2131  template <int dim, int spacedim>
2132  void
2133  write_vtk(
2134  const std::vector<Patch<dim, spacedim>> &patches,
2135  const std::vector<std::string> & data_names,
2136  const std::vector<
2137  std::tuple<unsigned int,
2138  unsigned int,
2139  std::string,
2141  & nonscalar_data_ranges,
2142  const VtkFlags &flags,
2143  std::ostream & out);
2144 
2152  template <int dim, int spacedim>
2153  DEAL_II_DEPRECATED void
2154  write_vtu(
2155  const std::vector<Patch<dim, spacedim>> &patches,
2156  const std::vector<std::string> & data_names,
2157  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2158  & nonscalar_data_ranges,
2159  const VtkFlags &flags,
2160  std::ostream & out);
2161 
2185  template <int dim, int spacedim>
2186  void
2187  write_vtu(
2188  const std::vector<Patch<dim, spacedim>> &patches,
2189  const std::vector<std::string> & data_names,
2190  const std::vector<
2191  std::tuple<unsigned int,
2192  unsigned int,
2193  std::string,
2195  & nonscalar_data_ranges,
2196  const VtkFlags &flags,
2197  std::ostream & out);
2198 
2204  void
2205  write_vtu_header(std::ostream &out, const VtkFlags &flags);
2206 
2213  void
2214  write_vtu_footer(std::ostream &out);
2215 
2224  template <int dim, int spacedim>
2225  DEAL_II_DEPRECATED void
2227  const std::vector<Patch<dim, spacedim>> &patches,
2228  const std::vector<std::string> & data_names,
2229  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2230  & nonscalar_data_ranges,
2231  const VtkFlags &flags,
2232  std::ostream & out);
2233 
2240  template <int dim, int spacedim>
2241  void
2243  const std::vector<Patch<dim, spacedim>> &patches,
2244  const std::vector<std::string> & data_names,
2245  const std::vector<
2246  std::tuple<unsigned int,
2247  unsigned int,
2248  std::string,
2250  & nonscalar_data_ranges,
2251  const VtkFlags &flags,
2252  std::ostream & out);
2253 
2264  DEAL_II_DEPRECATED
2265  void
2267  std::ostream & out,
2268  const std::vector<std::string> &piece_names,
2269  const std::vector<std::string> &data_names,
2270  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2271  &nonscalar_data_ranges);
2272 
2314  void
2316  std::ostream & out,
2317  const std::vector<std::string> &piece_names,
2318  const std::vector<std::string> &data_names,
2319  const std::vector<
2320  std::tuple<unsigned int,
2321  unsigned int,
2322  std::string,
2324  &nonscalar_data_ranges);
2325 
2376  void
2378  std::ostream & out,
2379  const std::vector<std::pair<double, std::string>> &times_and_names);
2380 
2392  void
2393  write_visit_record(std::ostream & out,
2394  const std::vector<std::string> &piece_names);
2395 
2423  void
2424  write_visit_record(std::ostream & out,
2425  const std::vector<std::vector<std::string>> &piece_names);
2426 
2459  void
2461  std::ostream &out,
2462  const std::vector<std::pair<double, std::vector<std::string>>>
2463  &times_and_piece_names);
2464 
2470  template <int spacedim>
2471  DEAL_II_DEPRECATED void
2472  write_svg(
2473  const std::vector<Patch<2, spacedim>> &patches,
2474  const std::vector<std::string> & data_names,
2475  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2476  & nonscalar_data_ranges,
2477  const SvgFlags &flags,
2478  std::ostream & out);
2479 
2500  template <int spacedim>
2501  void
2502  write_svg(
2503  const std::vector<Patch<2, spacedim>> &patches,
2504  const std::vector<std::string> & data_names,
2505  const std::vector<
2506  std::tuple<unsigned int,
2507  unsigned int,
2508  std::string,
2510  & nonscalar_data_ranges,
2511  const SvgFlags &flags,
2512  std::ostream & out);
2513 
2525  template <int dim, int spacedim>
2526  DEAL_II_DEPRECATED void
2528  const std::vector<Patch<dim, spacedim>> &patches,
2529  const std::vector<std::string> & data_names,
2530  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2531  & nonscalar_data_ranges,
2532  const Deal_II_IntermediateFlags &flags,
2533  std::ostream & out);
2534 
2572  template <int dim, int spacedim>
2573  void
2575  const std::vector<Patch<dim, spacedim>> &patches,
2576  const std::vector<std::string> & data_names,
2577  const std::vector<
2578  std::tuple<unsigned int,
2579  unsigned int,
2580  std::string,
2582  & nonscalar_data_ranges,
2583  const Deal_II_IntermediateFlags &flags,
2584  std::ostream & out);
2585 
2590  template <int dim, int spacedim>
2591  void
2592  write_hdf5_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2593  const DataOutFilter & data_filter,
2594  const std::string & filename,
2595  MPI_Comm comm);
2596 
2604  template <int dim, int spacedim>
2605  void
2606  write_hdf5_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2607  const DataOutFilter & data_filter,
2608  const bool write_mesh_file,
2609  const std::string & mesh_filename,
2610  const std::string &solution_filename,
2611  MPI_Comm comm);
2612 
2621  template <int dim, int spacedim>
2622  DEAL_II_DEPRECATED void
2624  const std::vector<Patch<dim, spacedim>> &patches,
2625  const std::vector<std::string> & data_names,
2626  const std::vector<std::tuple<unsigned int, unsigned int, std::string>>
2627  & nonscalar_data_ranges,
2628  DataOutFilter &filtered_data);
2629 
2636  template <int dim, int spacedim>
2637  void
2639  const std::vector<Patch<dim, spacedim>> &patches,
2640  const std::vector<std::string> & data_names,
2641  const std::vector<
2642  std::tuple<unsigned int,
2643  unsigned int,
2644  std::string,
2646  & nonscalar_data_ranges,
2647  DataOutFilter &filtered_data);
2648 
2660  std::pair<unsigned int, unsigned int>
2661  determine_intermediate_format_dimensions(std::istream &input);
2662 
2674  OutputFormat
2675  parse_output_format(const std::string &format_name);
2676 
2682  std::string
2684 
2703  std::string
2704  default_suffix(const OutputFormat output_format);
2705 
2715  int,
2716  int,
2717  << "The number of points in this data set is " << arg1
2718  << ", but we expected " << arg2
2719  << " in each space direction.");
2724  "You are trying to write graphical data into a file, but "
2725  "no data is available in the intermediate format that "
2726  "the DataOutBase functions require. Did you forget to "
2727  "call a function such as DataOut::build_patches()?");
2732  "The error code of one of the Tecplot functions was "
2733  "not zero as expected.");
2738  char *,
2739  << "There was an error opening Tecplot file " << arg1
2740  << " for output.");
2741 
2743 } // namespace DataOutBase
2744 
2745 
2746 
2854 template <int dim, int spacedim = dim>
2856 {
2857 public:
2861  DataOutInterface();
2862 
2867  virtual ~DataOutInterface() = default;
2868 
2873  void
2874  write_dx(std::ostream &out) const;
2875 
2880  void
2881  write_eps(std::ostream &out) const;
2882 
2887  void
2888  write_gmv(std::ostream &out) const;
2889 
2894  void
2895  write_gnuplot(std::ostream &out) const;
2896 
2901  void
2902  write_povray(std::ostream &out) const;
2903 
2908  void
2909  write_tecplot(std::ostream &out) const;
2910 
2916  void
2917  write_tecplot_binary(std::ostream &out) const;
2918 
2923  void
2924  write_ucd(std::ostream &out) const;
2925 
2937  void
2938  write_vtk(std::ostream &out) const;
2939 
2954  void
2955  write_vtu(std::ostream &out) const;
2956 
2965  void
2966  write_vtu_in_parallel(const char *filename, MPI_Comm comm) const;
2967 
3001  void
3002  write_pvtu_record(std::ostream & out,
3003  const std::vector<std::string> &piece_names) const;
3004 
3009  void
3010  write_svg(std::ostream &out) const;
3011 
3022  void
3023  write_deal_II_intermediate(std::ostream &out) const;
3024 
3030  XDMFEntry
3031  create_xdmf_entry(const DataOutBase::DataOutFilter &data_filter,
3032  const std::string & h5_filename,
3033  const double cur_time,
3034  MPI_Comm comm) const;
3035 
3041  XDMFEntry
3042  create_xdmf_entry(const DataOutBase::DataOutFilter &data_filter,
3043  const std::string & h5_mesh_filename,
3044  const std::string & h5_solution_filename,
3045  const double cur_time,
3046  MPI_Comm comm) const;
3047 
3072  void
3073  write_xdmf_file(const std::vector<XDMFEntry> &entries,
3074  const std::string & filename,
3075  MPI_Comm comm) const;
3076 
3091  void
3093  const std::string & filename,
3094  MPI_Comm comm) const;
3095 
3103  void
3105  const bool write_mesh_file,
3106  const std::string & mesh_filename,
3107  const std::string & solution_filename,
3108  MPI_Comm comm) const;
3109 
3116  void
3117  write_filtered_data(DataOutBase::DataOutFilter &filtered_data) const;
3118 
3119 
3128  void
3129  write(std::ostream & out,
3130  const DataOutBase::OutputFormat output_format =
3132 
3137  void
3138  set_default_format(const DataOutBase::OutputFormat default_format);
3139 
3140 
3145  template <typename FlagType>
3146  void
3147  set_flags(const FlagType &flags);
3148 
3149 
3157  std::string
3158  default_suffix(const DataOutBase::OutputFormat output_format =
3160 
3175  static void
3176  declare_parameters(ParameterHandler &prm);
3177 
3185  void
3186  parse_parameters(ParameterHandler &prm);
3187 
3193  std::size_t
3194  memory_consumption() const;
3195 
3196 protected:
3204  virtual const std::vector<DataOutBase::Patch<dim, spacedim>> &
3205  get_patches() const = 0;
3206 
3211  virtual std::vector<std::string>
3212  get_dataset_names() const = 0;
3213 
3221  DEAL_II_DEPRECATED
3222  virtual std::vector<std::tuple<unsigned int, unsigned int, std::string>>
3223  get_vector_data_ranges() const;
3224 
3243  virtual std::vector<
3244  std::tuple<unsigned int,
3245  unsigned int,
3246  std::string,
3248  get_nonscalar_data_ranges() const;
3249 
3256  void
3257  validate_dataset_names() const;
3258 
3259 
3265  unsigned int default_subdivisions;
3266 
3267 private:
3274 
3280 
3286 
3292 
3298 
3304 
3310 
3316 
3322 
3328 
3334 };
3335 
3336 
3337 
3386 template <int dim, int spacedim = dim>
3387 class DataOutReader : public DataOutInterface<dim, spacedim>
3388 {
3389 public:
3395  void
3396  read(std::istream &in);
3397 
3421  void
3422  merge(const DataOutReader<dim, spacedim> &other);
3423 
3428  "You are trying to merge two sets of patches for which the "
3429  "declared names of the variables do not match.");
3434  "You are trying to merge two sets of patches for which the "
3435  "number of subdivisions or the number of vector components "
3436  "do not match.");
3440  DeclException4(ExcIncompatibleDimensions,
3441  int,
3442  int,
3443  int,
3444  int,
3445  << "Either the dimensions <" << arg1 << "> and <" << arg2
3446  << "> or the space dimensions <" << arg3 << "> and <" << arg4
3447  << "> do not match!");
3448 
3449 protected:
3458  virtual const std::vector<::DataOutBase::Patch<dim, spacedim>> &
3459  get_patches() const override;
3460 
3467  virtual std::vector<std::string>
3468  get_dataset_names() const override;
3469 
3488  virtual std::vector<
3489  std::tuple<unsigned int,
3490  unsigned int,
3491  std::string,
3493  get_nonscalar_data_ranges() const override;
3494 
3495 private:
3500  std::vector<::DataOutBase::Patch<dim, spacedim>> patches;
3501  std::vector<std::string> dataset_names;
3502 
3507  std::vector<
3508  std::tuple<unsigned int,
3509  unsigned int,
3510  std::string,
3513 };
3514 
3515 
3516 
3525 {
3526 public:
3530  XDMFEntry();
3531 
3537  XDMFEntry(const std::string &filename,
3538  const double time,
3539  const unsigned int nodes,
3540  const unsigned int cells,
3541  const unsigned int dim);
3542 
3547  XDMFEntry(const std::string &mesh_filename,
3548  const std::string &solution_filename,
3549  const double time,
3550  const unsigned int nodes,
3551  const unsigned int cells,
3552  const unsigned int dim);
3553 
3557  XDMFEntry(const std::string &mesh_filename,
3558  const std::string &solution_filename,
3559  const double time,
3560  const unsigned int nodes,
3561  const unsigned int cells,
3562  const unsigned int dim,
3563  const unsigned int spacedim);
3564 
3568  void
3569  add_attribute(const std::string &attr_name, const unsigned int dimension);
3570 
3574  template <class Archive>
3575  void
3576  serialize(Archive &ar, const unsigned int /*version*/)
3577  {
3578  ar &valid &h5_sol_filename &h5_mesh_filename &entry_time &num_nodes
3579  &num_cells &dimension &attribute_dims;
3580  }
3581 
3586  std::string
3587  get_xdmf_content(const unsigned int indent_level) const;
3588 
3589 private:
3593  bool valid;
3594 
3598  std::string h5_sol_filename;
3599 
3603  std::string h5_mesh_filename;
3604 
3608  double entry_time;
3609 
3613  unsigned int num_nodes;
3614 
3618  unsigned int num_cells;
3619 
3623  unsigned int dimension;
3624 
3629  unsigned int space_dimension;
3630 
3634  std::map<std::string, unsigned int> attribute_dims;
3635 };
3636 
3637 
3638 
3639 /* -------------------- inline functions ------------------- */
3640 
3641 namespace DataOutBase
3642 {
3643  inline bool
3645  {
3646  return (red == green) && (red == blue);
3647  }
3648 
3649 
3650  /* -------------------- template functions ------------------- */
3651 
3660  template <int dim, int spacedim>
3661  std::ostream &
3662  operator<<(std::ostream &out, const Patch<dim, spacedim> &patch);
3663 
3664 
3665 
3674  template <int dim, int spacedim>
3675  std::istream &
3676  operator>>(std::istream &in, Patch<dim, spacedim> &patch);
3677 } // namespace DataOutBase
3678 
3679 
3680 DEAL_II_NAMESPACE_CLOSE
3681 
3682 #endif
RgbValues(*)(const double value, const double min_value, const double max_value) ColorFunction
static const unsigned int invalid_unsigned_int
Definition: types.h:173
std::size_t memory_consumption() const
unsigned int space_dimension
static::ExceptionBase & ExcIncompatiblePatchLists()
unsigned int height_vector
void write_vtu_footer(std::ostream &out)
static void declare_parameters(ParameterHandler &prm)
#define DeclException2(Exception2, type1, type2, outsequence)
Definition: exceptions.h:420
void write_vtu_main(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const VtkFlags &flags, std::ostream &out)
std::map< unsigned int, unsigned int > filtered_cells
void write_gmv(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const GmvFlags &flags, std::ostream &out)
void write_visit_record(std::ostream &out, const std::vector< std::string > &piece_names)
unsigned int num_cells
std::pair< unsigned int, unsigned int > determine_intermediate_format_dimensions(std::istream &input)
void swap(Patch< dim, spacedim > &other_patch)
void write_vtu_header(std::ostream &out, const VtkFlags &flags)
void write_svg(const std::vector< Patch< 2, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const SvgFlags &flags, std::ostream &out)
std::vector< std::tuple< unsigned int, unsigned int, std::string, DataComponentInterpretation::DataComponentInterpretation > > nonscalar_data_ranges
void write_pvd_record(std::ostream &out, const std::vector< std::pair< double, std::string >> &times_and_names)
TableIndices< 2 > merge(const TableIndices< 2 > &previous_indices, const unsigned int new_index, const unsigned int position)
double entry_time
ZlibCompressionLevel compression_level
unsigned int default_subdivisions
std::vector< unsigned int > data_set_dims
Point< spacedim > vertices[GeometryInfo< dim >::vertices_per_cell]
std::vector< std::vector< double > > data_sets
std::map< std::string, unsigned int > attribute_dims
void write_filtered_data(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, DataOutFilter &filtered_data)
void write_hdf5_parallel(const std::vector< Patch< dim, spacedim >> &patches, const DataOutFilter &data_filter, const std::string &filename, MPI_Comm comm)
void write_tecplot(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const TecplotFlags &flags, std::ostream &out)
const char * tecplot_binary_file_name
void write_deal_II_intermediate(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const Deal_II_IntermediateFlags &flags, std::ostream &out)
static::ExceptionBase & ExcNoPatches()
DataOutBase::PovrayFlags povray_flags
static::ExceptionBase & ExcIncompatibleDatasetNames()
DataOutBase::DataOutFilterFlags flags
std::string default_suffix(const OutputFormat output_format)
unsigned int patch_index
std::istream & operator>>(std::istream &in, Patch< dim, spacedim > &patch)
std::vector< std::string > space_dimension_labels
void serialize(Archive &ar, const unsigned int)
#define DeclException1(Exception1, type1, outsequence)
Definition: exceptions.h:408
std::vector< std::string > data_set_names
void parse_parameters(const ParameterHandler &prm)
void write_vtu(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const VtkFlags &flags, std::ostream &out)
void write_tecplot_binary(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const TecplotFlags &flags, std::ostream &out)
std::size_t memory_consumption() const
DataOutBase::Deal_II_IntermediateFlags deal_II_intermediate_flags
#define DeclExceptionMsg(Exception, defaulttext)
Definition: exceptions.h:397
std::vector<::DataOutBase::Patch< dim, spacedim > > patches
OutputFormat parse_output_format(const std::string &format_name)
void write_dx(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const DXFlags &flags, std::ostream &out)
ColorFunction color_function
unsigned int n_subdivisions
DataOutBase::TecplotFlags tecplot_flags
Scale to given width.
DataOutBase::SvgFlags svg_flags
unsigned int dimension
std::string h5_sol_filename
std::string h5_mesh_filename
static::ExceptionBase & ExcInvalidDatasetSize(int arg1, int arg2)
void write_povray(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const PovrayFlags &flags, std::ostream &out)
static const unsigned int no_neighbor
DataOutBase::GmvFlags gmv_flags
DataOutBase::VtkFlags vtk_flags
void write_ucd(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const UcdFlags &flags, std::ostream &out)
static const unsigned int format_version
static const unsigned int space_dim
DataOutBase::GnuplotFlags gnuplot_flags
bool operator==(const Patch &patch) const
unsigned int num_nodes
#define DeclException4(Exception4, type1, type2, type3, type4, outsequence)
Definition: exceptions.h:444
unsigned int color_vector
static::ExceptionBase & ExcInvalidCombinationOfDimensions(int arg1, int arg2)
DataOutBase::OutputFormat default_fmt
DataOutBase::EpsFlags eps_flags
std::map< unsigned int, unsigned int > filtered_points
static unsigned int n_subdivisions
void write_pvtu_record(std::ostream &out, const std::vector< std::string > &piece_names, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges)
unsigned int neighbors[dim > 0?GeometryInfo< dim >::faces_per_cell:1]
std::string get_output_format_names()
Table< 2, float > data
DataOutBase::UcdFlags ucd_flags
unsigned int height_vector
void write_gnuplot(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const GnuplotFlags &flags, std::ostream &out)
void write_vtk(const std::vector< Patch< dim, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const VtkFlags &flags, std::ostream &out)
void write_eps(const std::vector< Patch< 2, spacedim >> &patches, const std::vector< std::string > &data_names, const std::vector< std::tuple< unsigned int, unsigned int, std::string >> &nonscalar_data_ranges, const EpsFlags &flags, std::ostream &out)
static::ExceptionBase & ExcErrorOpeningTecplotFile(char *arg1)
DataOutBase::DXFlags dx_flags
static::ExceptionBase & ExcTecplotAPIError()