deal.II version GIT relicensing-6809-ge913b9bb34 2026-09-25 17:20:01+00:00
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Loading...
Searching...
No Matches
data_out_base.h
Go to the documentation of this file.
1// -----------------------------------------------------------------------------
2//
3// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception OR LGPL-2.1-or-later
4// Copyright (C) 1999 - 2026 by the deal.II authors
5//
6// This file is part of the deal.II library.
7//
8// Detailed license information governing the source code and contributions
9// can be found in LICENSE.md and CONTRIBUTING.md at the top level directory.
10//
11// -----------------------------------------------------------------------------
12
13#ifndef dealii_data_out_base_h
14#define dealii_data_out_base_h
15
16
17#include <deal.II/base/config.h>
18
22#include <deal.II/base/point.h>
23#include <deal.II/base/table.h>
24
26
28
29// To be able to serialize XDMFEntry
30#include <boost/serialization/map.hpp>
31
32#include <limits>
33#include <ostream>
34#include <string>
35#include <tuple>
36#include <typeinfo>
37#include <variant>
38#include <vector>
39
41
42// Forward declarations
43#ifndef DOXYGEN
45
46class XDMFEntry;
47#endif
48
198namespace DataOutBase
199{
231
232
255 template <int dim, int spacedim = dim>
256 struct Patch
257 {
261 static const unsigned int space_dim = spacedim;
262
280 std::array<Point<spacedim>, GeometryInfo<dim>::vertices_per_cell> vertices;
281
292 std::array<unsigned int, GeometryInfo<dim>::faces_per_cell> neighbors;
293
298 unsigned int patch_index;
299
305 unsigned int n_subdivisions;
306
329
343
348
353 Patch();
354
359 bool
360 operator==(const Patch &patch) const;
361
368 std::size_t
369 memory_consumption() const;
370
374 void
375 swap(Patch<dim, spacedim> &other_patch) noexcept;
376
380 static const unsigned int no_neighbor = numbers::invalid_unsigned_int;
381
392 int,
393 int,
394 << "It is not possible to have a structural dimension of " << arg1
395 << " to be larger than the space dimension of the surrounding"
396 << " space " << arg2);
398 };
399
400
401
417 template <int spacedim>
418 struct Patch<0, spacedim>
419 {
423 static const unsigned int space_dim = spacedim;
424
434
439 static unsigned int neighbors[1];
440
445 unsigned int patch_index;
446
456 static const unsigned int n_subdivisions;
457
479
493
500
505 Patch();
506
511 bool
512 operator==(const Patch &patch) const;
513
520 std::size_t
521 memory_consumption() const;
522
526 void
527 swap(Patch<0, spacedim> &other_patch) noexcept;
528
532 static const unsigned int no_neighbor = numbers::invalid_unsigned_int;
533
544 int,
545 int,
546 << "It is not possible to have a structural dimension of " << arg1
547 << " to be larger than the space dimension of the surrounding"
548 << " space " << arg2);
550 };
551
552
564 template <typename FlagsType>
566 {
574 static void
576
584 void
586
593 std::size_t
595 };
596
597
598 template <typename FlagsType>
599 void
602
603
604 template <typename FlagsType>
605 void
608
609
610 template <typename FlagsType>
611 std::size_t
613 {
614 return sizeof(FlagsType);
615 }
616
617
623 struct DXFlags : public OutputFlagsBase<DXFlags>
624 {
639
644
650
654 DXFlags(const bool write_neighbors = false,
655 const bool int_binary = false,
656 const bool coordinates_binary = false,
657 const bool data_binary = false);
658
663 static void
665
672 void
674 };
675
681 struct UcdFlags : public OutputFlagsBase<UcdFlags>
682 {
693
697 UcdFlags(const bool write_preamble = false);
698
703 static void
705
712 void
714 };
715
721 struct GnuplotFlags : public OutputFlagsBase<GnuplotFlags>
722 {
727 GnuplotFlags();
728
732 GnuplotFlags(const std::vector<std::string> &space_dimension_labels);
733
749 std::vector<std::string> space_dimension_labels;
750
755 std::size_t
756 memory_consumption() const;
757
763 "There should be at least one space dimension per spatial "
764 "dimension (extras are ignored).");
765 };
766
773 struct PovrayFlags : public OutputFlagsBase<PovrayFlags>
774 {
780 bool smooth;
781
788
796
800 PovrayFlags(const bool smooth = false,
801 const bool bicubic_patch = false,
802 const bool external_data = false);
803
808 static void
810
817 void
819 };
820
821
828 struct EpsFlags : public OutputFlagsBase<EpsFlags>
829 {
836 unsigned int height_vector;
837
842 unsigned int color_vector;
843
850 {
854 height
855 };
856
861
869 unsigned int size;
870
875
882
907
918 double z_scaling;
919
927
945
955
960 {
961 float red;
962 float green;
963 float blue;
964
969 bool
970 is_grey() const;
971 };
972
980 using ColorFunction = RgbValues (*)(const double value,
981 const double min_value,
982 const double max_value);
983
990
991
1000 static RgbValues
1001 default_color_function(const double value,
1002 const double min_value,
1003 const double max_value);
1004
1010 static RgbValues
1011 grey_scale_color_function(const double value,
1012 const double min_value,
1013 const double max_value);
1014
1021 static RgbValues
1022 reverse_grey_scale_color_function(const double value,
1023 const double min_value,
1024 const double max_value);
1025
1029 EpsFlags(const unsigned int height_vector = 0,
1030 const unsigned int color_vector = 0,
1031 const SizeType size_type = width,
1032 const unsigned int size = 300,
1033 const double line_width = 0.5,
1034 const double azimut_angle = 60,
1035 const double turn_angle = 30,
1036 const double z_scaling = 1.0,
1037 const bool draw_mesh = true,
1038 const bool draw_cells = true,
1039 const bool shade_cells = true,
1041
1049 static void
1051
1058 void
1060 };
1061
1068 struct GmvFlags : public OutputFlagsBase<GmvFlags>
1069 {};
1070
1087
1088
1094 struct CFFlags : public OutputFlagsBase<CFFlags>
1095 {
1096 using AttributeValue = std::variant<int, double, std::string>;
1097
1109 double time;
1110
1151
1175 std::map<std::string, std::vector<std::pair<std::string, AttributeValue>>>
1177
1182 explicit CFFlags(
1183 const double time = -std::numeric_limits<double>::infinity(),
1184 const bool keep_existing_file = false,
1185 const std::map<std::string,
1186 std::vector<std::pair<std::string, AttributeValue>>>
1187 &attributes = {});
1188 };
1189
1195 struct TecplotFlags : public OutputFlagsBase<TecplotFlags>
1196 {
1201 const char *zone_name;
1202
1209
1213 TecplotFlags(const char *zone_name = nullptr,
1214 const double solution_time = -1.0);
1215
1220 std::size_t
1221 memory_consumption() const;
1222 };
1223
1229 struct VtkFlags : public OutputFlagsBase<VtkFlags>
1230 {
1241 double time;
1242
1253 unsigned int cycle;
1254
1262
1268
1287
1309 std::map<std::string, std::string> physical_units;
1310
1315 explicit VtkFlags(
1316 const double time = std::numeric_limits<double>::lowest(),
1317 const unsigned int cycle = numbers::invalid_unsigned_int,
1318 const bool print_date_and_time = true,
1320 const bool write_higher_order_cells = false,
1321 const std::map<std::string, std::string> &physical_units = {});
1322 };
1323
1324
1330 struct SvgFlags : public OutputFlagsBase<SvgFlags>
1331 {
1335 unsigned int height;
1336
1341 unsigned int width;
1342
1349 unsigned int height_vector;
1350
1355
1356 unsigned int line_thickness;
1357
1362
1367
1371 SvgFlags(const unsigned int height_vector = 0,
1372 const int azimuth_angle = 37,
1373 const int polar_angle = 45,
1374 const unsigned int line_thickness = 1,
1375 const bool margin = true,
1376 const bool draw_colorbar = true);
1377 };
1378
1379
1387 : public OutputFlagsBase<Deal_II_IntermediateFlags>
1388 {
1395 static const unsigned int format_version;
1396 };
1397
1404 {
1415
1421
1426 const bool xdmf_hdf5_output = false);
1427
1432 static void
1434
1441 void
1443
1448 std::size_t
1450 };
1451
1484 {
1485 public:
1489 DataOutFilter();
1490
1496
1502 template <int dim>
1503 void
1504 write_point(const unsigned int index, const Point<dim> &p);
1505
1509 template <int dim>
1510 void
1511 write_cell(const unsigned int index,
1512 const unsigned int start,
1513 const std::array<unsigned int, dim> &offsets);
1514
1519 template <int dim>
1520 void
1521 write_cell_single(const unsigned int index,
1522 const unsigned int start,
1523 const unsigned int n_points,
1524 const ReferenceCell<dim> &reference_cell);
1525
1532 void
1533 write_data_set(const std::string &name,
1534 const unsigned int dimension,
1535 const unsigned int set_num,
1536 const Table<2, double> &data_vectors);
1537
1542 void
1543 fill_node_data(std::vector<double> &node_data) const;
1544
1549 void
1550 fill_cell_data(const unsigned int local_node_offset,
1551 std::vector<unsigned int> &cell_data) const;
1552
1556 std::string
1557 get_data_set_name(const unsigned int set_num) const;
1558
1562 unsigned int
1563 get_data_set_dim(const unsigned int set_num) const;
1564
1569 const double *
1570 get_data_set(const unsigned int set_num) const;
1571
1576 unsigned int
1577 n_nodes() const;
1578
1583 unsigned int
1584 n_cells() const;
1585
1590 unsigned int
1591 n_data_sets() const;
1592
1596 void
1597 flush_points();
1598
1602 void
1603 flush_cells();
1604
1605
1606 private:
1611 {
1612 bool
1613 operator()(const Point<3> &one, const Point<3> &two) const
1614 {
1615 /*
1616 * The return statement below is an optimized version of the following
1617 * code:
1618 *
1619 * for (unsigned int d=0; d<3; ++d)
1620 * {
1621 * if (one(d) < two(d))
1622 * return true;
1623 * else if (one(d) > two(d))
1624 * return false;
1625 * }
1626 * return false;
1627 */
1628
1629 return (one[0] < two[0] ||
1630 (!(two[0] < one[0]) &&
1631 (one[1] < two[1] || (!(two[1] < one[1]) && one[2] < two[2]))));
1632 }
1633 };
1634
1635 using Map3DPoint = std::multimap<Point<3>, unsigned int, Point3Comp>;
1636
1641
1648 unsigned int node_dim;
1649
1654 unsigned int num_cells;
1655
1660
1664 std::map<unsigned int, unsigned int> filtered_points;
1665
1669 std::map<unsigned int, unsigned int> filtered_cells;
1670
1674 std::vector<std::string> data_set_names;
1675
1679 std::vector<unsigned int> data_set_dims;
1680
1684 std::vector<std::vector<double>> data_sets;
1685
1689 void
1690 internal_add_cell(const unsigned int cell_index,
1691 const unsigned int pt_index);
1692 };
1693
1694
1699 {
1704
1709
1714
1719
1724
1729
1734
1739
1744
1749
1754
1759
1764
1769
1774 };
1775
1776
1780 template <int dim, int spacedim>
1781 void
1782 write_dx(
1783 const std::vector<Patch<dim, spacedim>> &patches,
1784 const std::vector<std::string> &data_names,
1785 const std::vector<
1786 std::tuple<unsigned int,
1787 unsigned int,
1788 std::string,
1790 &nonscalar_data_ranges,
1791 const DXFlags &flags,
1792 std::ostream &out);
1793
1838 template <int spacedim>
1839 void
1840 write_eps(
1841 const std::vector<Patch<2, spacedim>> &patches,
1842 const std::vector<std::string> &data_names,
1843 const std::vector<
1844 std::tuple<unsigned int,
1845 unsigned int,
1846 std::string,
1848 &nonscalar_data_ranges,
1849 const EpsFlags &flags,
1850 std::ostream &out);
1851
1857 template <int dim, int spacedim>
1858 void
1859 write_eps(
1860 const std::vector<Patch<dim, spacedim>> &patches,
1861 const std::vector<std::string> &data_names,
1862 const std::vector<
1863 std::tuple<unsigned int,
1864 unsigned int,
1865 std::string,
1867 &nonscalar_data_ranges,
1868 const EpsFlags &flags,
1869 std::ostream &out);
1870
1871
1881 template <int dim, int spacedim>
1882 void
1883 write_gmv(
1884 const std::vector<Patch<dim, spacedim>> &patches,
1885 const std::vector<std::string> &data_names,
1886 const std::vector<
1887 std::tuple<unsigned int,
1888 unsigned int,
1889 std::string,
1891 &nonscalar_data_ranges,
1892 const GmvFlags &flags,
1893 std::ostream &out);
1894
1950 template <int dim, int spacedim>
1951 void
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 GnuplotFlags &flags,
1962 std::ostream &out);
1963
2009 template <int dim, int spacedim>
2010 void
2012 const std::vector<Patch<dim, spacedim>> &patches,
2013 const std::vector<std::string> &data_names,
2014 const std::vector<
2015 std::tuple<unsigned int,
2016 unsigned int,
2017 std::string,
2019 &nonscalar_data_ranges,
2020 const PovrayFlags &flags,
2021 std::ostream &out);
2022
2029 template <int dim, int spacedim>
2030 void
2032 const std::vector<Patch<dim, spacedim>> &patches,
2033 const std::vector<std::string> &data_names,
2034 const std::vector<
2035 std::tuple<unsigned int,
2036 unsigned int,
2037 std::string,
2039 &nonscalar_data_ranges,
2040 const TecplotFlags &flags,
2041 std::ostream &out);
2042
2057 template <int dim, int spacedim>
2058 void
2059 write_ucd(
2060 const std::vector<Patch<dim, spacedim>> &patches,
2061 const std::vector<std::string> &data_names,
2062 const std::vector<
2063 std::tuple<unsigned int,
2064 unsigned int,
2065 std::string,
2067 &nonscalar_data_ranges,
2068 const UcdFlags &flags,
2069 std::ostream &out);
2070
2090 template <int dim, int spacedim>
2091 void
2092 write_vtk(
2093 const std::vector<Patch<dim, spacedim>> &patches,
2094 const std::vector<std::string> &data_names,
2095 const std::vector<
2096 std::tuple<unsigned int,
2097 unsigned int,
2098 std::string,
2100 &nonscalar_data_ranges,
2101 const VtkFlags &flags,
2102 std::ostream &out);
2103
2104
2128 template <int dim, int spacedim>
2129 void
2130 write_vtu(
2131 const std::vector<Patch<dim, spacedim>> &patches,
2132 const std::vector<std::string> &data_names,
2133 const std::vector<
2134 std::tuple<unsigned int,
2135 unsigned int,
2136 std::string,
2138 &nonscalar_data_ranges,
2139 const VtkFlags &flags,
2140 std::ostream &out);
2141
2147 void
2148 write_vtu_header(std::ostream &out, const VtkFlags &flags);
2149
2156 void
2157 write_vtu_footer(std::ostream &out);
2158
2165 template <int dim, int spacedim>
2166 void
2168 const std::vector<Patch<dim, spacedim>> &patches,
2169 const std::vector<std::string> &data_names,
2170 const std::vector<
2171 std::tuple<unsigned int,
2172 unsigned int,
2173 std::string,
2175 &nonscalar_data_ranges,
2176 const VtkFlags &flags,
2177 std::ostream &out);
2178
2220 void
2222 std::ostream &out,
2223 const std::vector<std::string> &piece_names,
2224 const std::vector<std::string> &data_names,
2225 const std::vector<
2226 std::tuple<unsigned int,
2227 unsigned int,
2228 std::string,
2230 &nonscalar_data_ranges,
2231 const VtkFlags &flags);
2232
2281 void
2283 std::ostream &out,
2284 const std::vector<std::pair<double, std::string>> &times_and_names);
2285
2297 void
2298 write_visit_record(std::ostream &out,
2299 const std::vector<std::string> &piece_names);
2300
2328 void
2329 write_visit_record(std::ostream &out,
2330 const std::vector<std::vector<std::string>> &piece_names);
2331
2364 void
2366 std::ostream &out,
2367 const std::vector<std::pair<double, std::vector<std::string>>>
2368 &times_and_piece_names);
2369
2390 template <int spacedim>
2391 void
2392 write_svg(
2393 const std::vector<Patch<2, spacedim>> &patches,
2394 const std::vector<std::string> &data_names,
2395 const std::vector<
2396 std::tuple<unsigned int,
2397 unsigned int,
2398 std::string,
2400 &nonscalar_data_ranges,
2401 const SvgFlags &flags,
2402 std::ostream &out);
2403
2441 template <int dim, int spacedim>
2442 void
2444 const std::vector<Patch<dim, spacedim>> &patches,
2445 const std::vector<std::string> &data_names,
2446 const std::vector<
2447 std::tuple<unsigned int,
2448 unsigned int,
2449 std::string,
2451 &nonscalar_data_ranges,
2452 const Deal_II_IntermediateFlags &flags,
2453 std::ostream &out);
2454
2463 template <int dim, int spacedim>
2464 void
2466 const std::vector<Patch<dim, spacedim>> &patches,
2467 const std::vector<std::string> &data_names,
2468 const std::vector<
2469 std::tuple<unsigned int,
2470 unsigned int,
2471 std::string,
2473 &nonscalar_data_ranges,
2474 const Deal_II_IntermediateFlags &flags,
2475 const std::string &filename,
2476 const MPI_Comm comm,
2477 const CompressionLevel compression);
2478
2483 template <int dim, int spacedim>
2484 void
2485 write_hdf5_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2486 const DataOutFilter &data_filter,
2487 const DataOutBase::Hdf5Flags &flags,
2488 const std::string &filename,
2489 const MPI_Comm comm);
2490
2498 template <int dim, int spacedim>
2499 void
2500 write_hdf5_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2501 const DataOutFilter &data_filter,
2502 const DataOutBase::Hdf5Flags &flags,
2503 const bool write_mesh_file,
2504 const std::string &mesh_filename,
2505 const std::string &solution_filename,
2506 const MPI_Comm comm);
2507
2512 template <int dim, int spacedim>
2513 void
2514 write_cf_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2515 const DataOutFilter &data_filter,
2516 const DataOutBase::CFFlags &flags,
2517 const std::string &filename,
2518 const MPI_Comm comm);
2519
2526 template <int dim, int spacedim>
2527 void
2529 const std::vector<Patch<dim, spacedim>> &patches,
2530 const std::vector<std::string> &data_names,
2531 const std::vector<
2532 std::tuple<unsigned int,
2533 unsigned int,
2534 std::string,
2536 &nonscalar_data_ranges,
2537 DataOutFilter &filtered_data);
2538
2550 std::pair<unsigned int, unsigned int>
2551 determine_intermediate_format_dimensions(std::istream &input);
2552
2565 parse_output_format(const std::string &format_name);
2566
2572 std::string
2574
2594 std::string
2595 default_suffix(const OutputFormat output_format);
2596
2606 int,
2607 int,
2608 << "The number of points in this data set is " << arg1
2609 << ", but we expected " << arg2
2610 << " in each space direction.");
2615 "You are trying to write graphical data into a file, but "
2616 "no data is available in the intermediate format that "
2617 "the DataOutBase functions require. Did you forget to "
2618 "call a function such as DataOut::build_patches()?");
2623 "The error code of one of the Tecplot functions was "
2624 "not zero as expected.");
2629 char *,
2630 << "There was an error opening Tecplot file " << arg1
2631 << " for output.");
2632
2634} // namespace DataOutBase
2635
2636
2637
2748template <int dim, int spacedim = dim>
2750{
2751public:
2756
2761 virtual ~DataOutInterface() = default;
2762
2767 void
2768 write_dx(std::ostream &out) const;
2769
2774 void
2775 write_eps(std::ostream &out) const;
2776
2781 void
2782 write_gmv(std::ostream &out) const;
2783
2788 void
2789 write_gnuplot(std::ostream &out) const;
2790
2795 void
2796 write_povray(std::ostream &out) const;
2797
2802 void
2803 write_tecplot(std::ostream &out) const;
2804
2809 void
2810 write_ucd(std::ostream &out) const;
2811
2823 void
2824 write_vtk(std::ostream &out) const;
2825
2840 void
2841 write_vtu(std::ostream &out) const;
2842
2853 void
2854 write_vtu_in_parallel(const std::string &filename, const MPI_Comm comm) const;
2855
2889 void
2890 write_pvtu_record(std::ostream &out,
2891 const std::vector<std::string> &piece_names) const;
2892
2954 std::string
2956 const std::string &directory,
2957 const std::string &filename_without_extension,
2958 const unsigned int counter,
2959 const MPI_Comm mpi_communicator,
2960 const unsigned int n_digits_for_counter = numbers::invalid_unsigned_int,
2961 const unsigned int n_groups = 0) const;
2962
2967 void
2968 write_svg(std::ostream &out) const;
2969
2980 void
2981 write_deal_II_intermediate(std::ostream &out) const;
2982
2989 void
2991 const std::string &filename,
2992 const MPI_Comm comm,
2993 const DataOutBase::CompressionLevel compression) const;
2994
3000 XDMFEntry
3002 const std::string &h5_filename,
3003 const double cur_time,
3004 const MPI_Comm comm) const;
3005
3011 XDMFEntry
3013 const std::string &h5_mesh_filename,
3014 const std::string &h5_solution_filename,
3015 const double cur_time,
3016 const MPI_Comm comm) const;
3017
3042 void
3043 write_xdmf_file(const std::vector<XDMFEntry> &entries,
3044 const std::string &filename,
3045 const MPI_Comm comm) const;
3046
3061 void
3063 const std::string &filename,
3064 const MPI_Comm comm) const;
3065
3073 void
3075 const bool write_mesh_file,
3076 const std::string &mesh_filename,
3077 const std::string &solution_filename,
3078 const MPI_Comm comm) const;
3079
3120 void
3122 const std::string &filename,
3123 const MPI_Comm comm) const;
3124
3131 void
3132 write_filtered_data(DataOutBase::DataOutFilter &filtered_data) const;
3133
3134
3143 void
3144 write(std::ostream &out,
3145 const DataOutBase::OutputFormat output_format =
3147
3152 void
3153 set_default_format(const DataOutBase::OutputFormat default_format);
3154
3155
3160 template <typename FlagType>
3161 void
3162 set_flags(const FlagType &flags);
3163
3164
3172 std::string
3173 default_suffix(const DataOutBase::OutputFormat output_format =
3175
3190 static void
3192
3200 void
3202
3208 std::size_t
3209 memory_consumption() const;
3210
3211protected:
3219 virtual const std::vector<DataOutBase::Patch<dim, spacedim>> &
3220 get_patches() const = 0;
3221
3226 virtual std::vector<std::string>
3228
3247 virtual std::vector<
3248 std::tuple<unsigned int,
3249 unsigned int,
3250 std::string,
3253
3260 void
3261 validate_dataset_names() const;
3262
3263
3270
3271private:
3278
3284
3290
3296
3302
3308
3314
3320
3326
3332
3338
3344
3350};
3351
3352
3353
3399template <int dim, int spacedim = dim>
3400class DataOutReader : public DataOutInterface<dim, spacedim>
3401{
3402public:
3408 void
3409 read(std::istream &in);
3410
3416 void
3417 read_whole_parallel_file(std::istream &in);
3418
3440 void
3441 merge(const DataOutReader<dim, spacedim> &other);
3442
3447 "You are trying to merge two sets of patches for which the "
3448 "declared names of the variables do not match.");
3453 "You are trying to merge two sets of patches for which the "
3454 "number of subdivisions or the number of vector components "
3455 "do not match.");
3460 int,
3461 int,
3462 int,
3463 int,
3464 << "Either the dimensions <" << arg1 << "> and <" << arg2
3465 << "> or the space dimensions <" << arg3 << "> and <" << arg4
3466 << "> do not match!");
3467
3468protected:
3477 virtual const std::vector<::DataOutBase::Patch<dim, spacedim>> &
3478 get_patches() const override;
3479
3486 virtual std::vector<std::string>
3487 get_dataset_names() const override;
3488
3507 virtual std::vector<
3508 std::tuple<unsigned int,
3509 unsigned int,
3510 std::string,
3512 get_nonscalar_data_ranges() const override;
3513
3514private:
3519 std::vector<::DataOutBase::Patch<dim, spacedim>> patches;
3520 std::vector<std::string> dataset_names;
3521
3526 std::vector<
3527 std::tuple<unsigned int,
3528 unsigned int,
3529 std::string,
3532};
3533
3534
3535
3544{
3545public:
3549 XDMFEntry();
3550
3556 template <int dim>
3557 XDMFEntry(const std::string &filename,
3558 const double time,
3559 const std::uint64_t nodes,
3560 const std::uint64_t cells,
3561 const unsigned int dim_,
3562 const ReferenceCell<dim> &cell_type);
3563
3568 template <int dim>
3569 XDMFEntry(const std::string &mesh_filename,
3570 const std::string &solution_filename,
3571 const double time,
3572 const std::uint64_t nodes,
3573 const std::uint64_t cells,
3574 const unsigned int dim_,
3575 const ReferenceCell<dim> &cell_type);
3576
3580 template <int dim>
3581 XDMFEntry(const std::string &mesh_filename,
3582 const std::string &solution_filename,
3583 const double time,
3584 const std::uint64_t nodes,
3585 const std::uint64_t cells,
3586 const unsigned int dim_,
3587 const unsigned int spacedim,
3588 const ReferenceCell<dim> &cell_type);
3589
3593 void
3594 add_attribute(const std::string &attr_name, const unsigned int dimension);
3595
3601 template <class Archive>
3602 void
3603 serialize(Archive &ar, const unsigned int /*version*/)
3604 {
3608 }
3609
3614 std::string
3615 get_xdmf_content(const unsigned int indent_level) const;
3616
3617private:
3621 bool valid;
3622
3626 std::string h5_sol_filename;
3627
3631 std::string h5_mesh_filename;
3632
3637
3641 std::uint64_t num_nodes;
3642
3646 std::uint64_t num_cells;
3647
3651 unsigned int dimension;
3652
3657 unsigned int space_dimension;
3658
3671 std::string cell_type_name;
3672
3678
3682 std::map<std::string, unsigned int> attribute_dims;
3683};
3684
3685
3686
3687/* -------------------- inline functions ------------------- */
3688
3689namespace DataOutBase
3690{
3691 inline bool
3693 {
3694 return (red == green) && (red == blue);
3695 }
3696
3697
3698 /* -------------------- template functions ------------------- */
3699
3706 template <int dim, int spacedim>
3707 std::ostream &
3708 operator<<(std::ostream &out, const Patch<dim, spacedim> &patch);
3709
3710
3711
3718 template <int dim, int spacedim>
3719 std::istream &
3720 operator>>(std::istream &in, Patch<dim, spacedim> &patch);
3721} // namespace DataOutBase
3722
3723
3725
3726#endif
const double * get_data_set(const unsigned int set_num) const
std::map< unsigned int, unsigned int > filtered_points
std::string get_data_set_name(const unsigned int set_num) const
std::multimap< Point< 3 >, unsigned int, Point3Comp > Map3DPoint
void internal_add_cell(const unsigned int cell_index, const unsigned int pt_index)
void write_cell(const unsigned int index, const unsigned int start, const std::array< unsigned int, dim > &offsets)
std::vector< unsigned int > data_set_dims
unsigned int n_nodes() const
void fill_node_data(std::vector< double > &node_data) const
std::vector< std::vector< double > > data_sets
unsigned int get_data_set_dim(const unsigned int set_num) const
void write_data_set(const std::string &name, const unsigned int dimension, const unsigned int set_num, const Table< 2, double > &data_vectors)
std::map< unsigned int, unsigned int > filtered_cells
std::vector< std::string > data_set_names
void fill_cell_data(const unsigned int local_node_offset, std::vector< unsigned int > &cell_data) const
void write_point(const unsigned int index, const Point< dim > &p)
void write_cell_single(const unsigned int index, const unsigned int start, const unsigned int n_points, const ReferenceCell< dim > &reference_cell)
unsigned int n_cells() const
DataOutBase::DataOutFilterFlags flags
unsigned int n_data_sets() const
XDMFEntry create_xdmf_entry(const DataOutBase::DataOutFilter &data_filter, const std::string &h5_filename, const double cur_time, const MPI_Comm comm) const
virtual std::vector< std::tuple< unsigned int, unsigned int, std::string, DataComponentInterpretation::DataComponentInterpretation > > get_nonscalar_data_ranges() const
unsigned int default_subdivisions
void parse_parameters(ParameterHandler &prm)
DataOutBase::Deal_II_IntermediateFlags deal_II_intermediate_flags
void write_filtered_data(DataOutBase::DataOutFilter &filtered_data) const
void write_cf_parallel(const DataOutBase::DataOutFilter &data_filter, const std::string &filename, const MPI_Comm comm) const
void write_pvtu_record(std::ostream &out, const std::vector< std::string > &piece_names) const
static void declare_parameters(ParameterHandler &prm)
virtual std::vector< std::string > get_dataset_names() const =0
DataOutBase::TecplotFlags tecplot_flags
void write_ucd(std::ostream &out) const
void write_povray(std::ostream &out) const
std::string default_suffix(const DataOutBase::OutputFormat output_format=DataOutBase::default_format) const
void write_xdmf_file(const std::vector< XDMFEntry > &entries, const std::string &filename, const MPI_Comm comm) const
DataOutBase::GmvFlags gmv_flags
std::size_t memory_consumption() const
void set_default_format(const DataOutBase::OutputFormat default_format)
DataOutBase::Hdf5Flags hdf5_flags
DataOutBase::PovrayFlags povray_flags
DataOutBase::UcdFlags ucd_flags
void write(std::ostream &out, const DataOutBase::OutputFormat output_format=DataOutBase::default_format) const
DataOutBase::OutputFormat default_fmt
DataOutBase::GnuplotFlags gnuplot_flags
void write_gnuplot(std::ostream &out) const
virtual ~DataOutInterface()=default
DataOutBase::CFFlags cf_flags
void write_vtu(std::ostream &out) const
void write_hdf5_parallel(const DataOutBase::DataOutFilter &data_filter, const std::string &filename, const MPI_Comm comm) const
void write_tecplot(std::ostream &out) const
void write_deal_II_intermediate_in_parallel(const std::string &filename, const MPI_Comm comm, const DataOutBase::CompressionLevel compression) const
void write_svg(std::ostream &out) const
void write_vtu_in_parallel(const std::string &filename, const MPI_Comm comm) const
DataOutBase::SvgFlags svg_flags
void validate_dataset_names() const
void set_flags(const FlagType &flags)
void write_vtk(std::ostream &out) const
virtual const std::vector< DataOutBase::Patch< dim, spacedim > > & get_patches() const =0
DataOutBase::VtkFlags vtk_flags
void write_gmv(std::ostream &out) const
std::string write_vtu_with_pvtu_record(const std::string &directory, const std::string &filename_without_extension, const unsigned int counter, const MPI_Comm mpi_communicator, const unsigned int n_digits_for_counter=numbers::invalid_unsigned_int, const unsigned int n_groups=0) const
DataOutBase::EpsFlags eps_flags
void write_eps(std::ostream &out) const
DataOutBase::DXFlags dx_flags
void write_dx(std::ostream &out) const
void write_deal_II_intermediate(std::ostream &out) const
void merge(const DataOutReader< dim, spacedim > &other)
void read_whole_parallel_file(std::istream &in)
std::vector< std::tuple< unsigned int, unsigned int, std::string, DataComponentInterpretation::DataComponentInterpretation > > nonscalar_data_ranges
virtual const std::vector<::DataOutBase::Patch< dim, spacedim > > & get_patches() const override
void read(std::istream &in)
virtual std::vector< std::tuple< unsigned int, unsigned int, std::string, DataComponentInterpretation::DataComponentInterpretation > > get_nonscalar_data_ranges() const override
virtual std::vector< std::string > get_dataset_names() const override
std::vector< std::string > dataset_names
std::vector<::DataOutBase::Patch< dim, spacedim > > patches
Definition point.h:111
std::uint64_t num_nodes
unsigned int dimension
unsigned int n_vertices_per_cell
std::string h5_sol_filename
void serialize(Archive &ar, const unsigned int)
std::string cell_type_name
double entry_time
std::string h5_mesh_filename
std::string get_xdmf_content(const unsigned int indent_level) const
void add_attribute(const std::string &attr_name, const unsigned int dimension)
std::uint64_t num_cells
std::map< std::string, unsigned int > attribute_dims
unsigned int space_dimension
#define DEAL_II_NAMESPACE_OPEN
Definition config.h:38
#define DEAL_II_NAMESPACE_CLOSE
Definition config.h:39
unsigned int cell_index
static ::ExceptionBase & ExcIncompatiblePatchLists()
#define DeclException4(Exception4, type1, type2, type3, type4, outsequence)
static ::ExceptionBase & ExcNotEnoughSpaceDimensionLabels()
static ::ExceptionBase & ExcInvalidCombinationOfDimensions(int arg1, int arg2)
static ::ExceptionBase & ExcNoPatches()
static ::ExceptionBase & ExcTecplotAPIError()
#define DeclException2(Exception2, type1, type2, outsequence)
static ::ExceptionBase & ExcIncompatibleDimensions(int arg1, int arg2, int arg3, int arg4)
#define DeclExceptionMsg(Exception, defaulttext)
static ::ExceptionBase & ExcIncompatibleDatasetNames()
#define DeclException1(Exception1, type1, outsequence)
static ::ExceptionBase & ExcInvalidDatasetSize(int arg1, int arg2)
static ::ExceptionBase & ExcErrorOpeningTecplotFile(char *arg1)
const MPI_Comm comm
Definition mpi.cc:912
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const EpsFlags &flags, std::ostream &out)
std::pair< unsigned int, unsigned int > determine_intermediate_format_dimensions(std::istream &input)
std::ostream & operator<<(std::ostream &out, const Patch< dim, spacedim > &patch)
void write_deal_II_intermediate_in_parallel(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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const Deal_II_IntermediateFlags &flags, const std::string &filename, const MPI_Comm comm, const CompressionLevel compression)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const UcdFlags &flags, std::ostream &out)
void write_cf_parallel(const std::vector< Patch< dim, spacedim > > &patches, const DataOutFilter &data_filter, const DataOutBase::CFFlags &flags, const std::string &filename, const MPI_Comm comm)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const DXFlags &flags, std::ostream &out)
void write_vtu_header(std::ostream &out, const VtkFlags &flags)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const VtkFlags &flags, std::ostream &out)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const GmvFlags &flags, std::ostream &out)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const VtkFlags &flags, std::ostream &out)
void write_pvd_record(std::ostream &out, const std::vector< std::pair< double, std::string > > &times_and_names)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const Deal_II_IntermediateFlags &flags, std::ostream &out)
void write_vtu_footer(std::ostream &out)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const TecplotFlags &flags, std::ostream &out)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, DataOutFilter &filtered_data)
OutputFormat parse_output_format(const std::string &format_name)
void write_hdf5_parallel(const std::vector< Patch< dim, spacedim > > &patches, const DataOutFilter &data_filter, const DataOutBase::Hdf5Flags &flags, const std::string &filename, const MPI_Comm comm)
std::istream & operator>>(std::istream &in, Patch< dim, spacedim > &patch)
std::string get_output_format_names()
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const SvgFlags &flags, std::ostream &out)
void write_visit_record(std::ostream &out, const std::vector< std::string > &piece_names)
std::string default_suffix(const OutputFormat output_format)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const PovrayFlags &flags, std::ostream &out)
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, DataComponentInterpretation::DataComponentInterpretation > > &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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const VtkFlags &flags, std::ostream &out)
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, DataComponentInterpretation::DataComponentInterpretation > > &nonscalar_data_ranges, const VtkFlags &flags)
constexpr unsigned int invalid_unsigned_int
Definition types.h:228
std::map< std::string, std::vector< std::pair< std::string, AttributeValue > > > attributes
std::variant< int, double, std::string > AttributeValue
void parse_parameters(const ParameterHandler &prm)
static void declare_parameters(ParameterHandler &prm)
static void declare_parameters(ParameterHandler &prm)
std::size_t memory_consumption() const
void parse_parameters(const ParameterHandler &prm)
bool operator()(const Point< 3 > &one, const Point< 3 > &two) const
static const unsigned int format_version
static void declare_parameters(ParameterHandler &prm)
static RgbValues default_color_function(const double value, const double min_value, const double max_value)
void parse_parameters(const ParameterHandler &prm)
ColorFunction color_function
RgbValues(*)(const double value, const double min_value, const double max_value) ColorFunction
static RgbValues grey_scale_color_function(const double value, const double min_value, const double max_value)
unsigned int color_vector
static RgbValues reverse_grey_scale_color_function(const double value, const double min_value, const double max_value)
@ width
Scale to given width.
@ height
Scale to given height.
unsigned int height_vector
std::vector< std::string > space_dimension_labels
std::size_t memory_consumption() const
DataOutBase::CompressionLevel compression_level
std::size_t memory_consumption() const
static void declare_parameters(ParameterHandler &prm)
void parse_parameters(const ParameterHandler &prm)
static const unsigned int n_subdivisions
static const ReferenceCell< 0 > reference_cell
std::size_t memory_consumption() const
unsigned int patch_index
Table< 2, float > data
static const unsigned int no_neighbor
bool operator==(const Patch &patch) const
ReferenceCell< dim > reference_cell
void swap(Patch< dim, spacedim > &other_patch) noexcept
static const unsigned int space_dim
unsigned int n_subdivisions
std::array< Point< spacedim >, GeometryInfo< dim >::vertices_per_cell > vertices
std::array< unsigned int, GeometryInfo< dim >::faces_per_cell > neighbors
static void declare_parameters(ParameterHandler &prm)
void parse_parameters(const ParameterHandler &prm)
unsigned int line_thickness
std::size_t memory_consumption() const
void parse_parameters(const ParameterHandler &prm)
static void declare_parameters(ParameterHandler &prm)
std::map< std::string, std::string > physical_units
DataOutBase::CompressionLevel compression_level