deal.II version GIT relicensing-7040-g409d9ea789 2026-11-06 04:40: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
239 {
243 mpi_io,
248 };
249
250
273 template <int dim, int spacedim = dim>
274 struct Patch
275 {
279 static const unsigned int space_dim = spacedim;
280
298 std::array<Point<spacedim>, GeometryInfo<dim>::vertices_per_cell> vertices;
299
310 std::array<unsigned int, GeometryInfo<dim>::faces_per_cell> neighbors;
311
316 unsigned int patch_index;
317
323 unsigned int n_subdivisions;
324
347
361
366
371 Patch();
372
377 bool
378 operator==(const Patch &patch) const;
379
386 std::size_t
387 memory_consumption() const;
388
392 void
393 swap(Patch<dim, spacedim> &other_patch) noexcept;
394
398 static const unsigned int no_neighbor = numbers::invalid_unsigned_int;
399
410 int,
411 int,
412 << "It is not possible to have a structural dimension of " << arg1
413 << " to be larger than the space dimension of the surrounding"
414 << " space " << arg2);
416 };
417
418
419
435 template <int spacedim>
436 struct Patch<0, spacedim>
437 {
441 static const unsigned int space_dim = spacedim;
442
452
457 static unsigned int neighbors[1];
458
463 unsigned int patch_index;
464
474 static const unsigned int n_subdivisions;
475
497
511
518
523 Patch();
524
529 bool
530 operator==(const Patch &patch) const;
531
538 std::size_t
539 memory_consumption() const;
540
544 void
545 swap(Patch<0, spacedim> &other_patch) noexcept;
546
550 static const unsigned int no_neighbor = numbers::invalid_unsigned_int;
551
562 int,
563 int,
564 << "It is not possible to have a structural dimension of " << arg1
565 << " to be larger than the space dimension of the surrounding"
566 << " space " << arg2);
568 };
569
570
582 template <typename FlagsType>
584 {
592 static void
594
602 void
604
611 std::size_t
613 };
614
615
616 template <typename FlagsType>
617 void
620
621
622 template <typename FlagsType>
623 void
626
627
628 template <typename FlagsType>
629 std::size_t
631 {
632 return sizeof(FlagsType);
633 }
634
635
641 struct DXFlags : public OutputFlagsBase<DXFlags>
642 {
657
662
668
672 DXFlags(const bool write_neighbors = false,
673 const bool int_binary = false,
674 const bool coordinates_binary = false,
675 const bool data_binary = false);
676
681 static void
683
690 void
692 };
693
699 struct UcdFlags : public OutputFlagsBase<UcdFlags>
700 {
711
715 UcdFlags(const bool write_preamble = false);
716
721 static void
723
730 void
732 };
733
739 struct GnuplotFlags : public OutputFlagsBase<GnuplotFlags>
740 {
745 GnuplotFlags();
746
750 GnuplotFlags(const std::vector<std::string> &space_dimension_labels);
751
767 std::vector<std::string> space_dimension_labels;
768
773 std::size_t
774 memory_consumption() const;
775
781 "There should be at least one space dimension per spatial "
782 "dimension (extras are ignored).");
783 };
784
791 struct PovrayFlags : public OutputFlagsBase<PovrayFlags>
792 {
798 bool smooth;
799
806
814
818 PovrayFlags(const bool smooth = false,
819 const bool bicubic_patch = false,
820 const bool external_data = false);
821
826 static void
828
835 void
837 };
838
839
846 struct EpsFlags : public OutputFlagsBase<EpsFlags>
847 {
854 unsigned int height_vector;
855
860 unsigned int color_vector;
861
868 {
872 height
873 };
874
879
887 unsigned int size;
888
893
900
925
936 double z_scaling;
937
945
963
973
978 {
979 float red;
980 float green;
981 float blue;
982
987 bool
988 is_grey() const;
989 };
990
998 using ColorFunction = RgbValues (*)(const double value,
999 const double min_value,
1000 const double max_value);
1001
1008
1009
1018 static RgbValues
1019 default_color_function(const double value,
1020 const double min_value,
1021 const double max_value);
1022
1028 static RgbValues
1029 grey_scale_color_function(const double value,
1030 const double min_value,
1031 const double max_value);
1032
1039 static RgbValues
1040 reverse_grey_scale_color_function(const double value,
1041 const double min_value,
1042 const double max_value);
1043
1047 EpsFlags(const unsigned int height_vector = 0,
1048 const unsigned int color_vector = 0,
1049 const SizeType size_type = width,
1050 const unsigned int size = 300,
1051 const double line_width = 0.5,
1052 const double azimut_angle = 60,
1053 const double turn_angle = 30,
1054 const double z_scaling = 1.0,
1055 const bool draw_mesh = true,
1056 const bool draw_cells = true,
1057 const bool shade_cells = true,
1059
1067 static void
1069
1076 void
1078 };
1079
1086 struct GmvFlags : public OutputFlagsBase<GmvFlags>
1087 {};
1088
1105
1106
1112 struct CFFlags : public OutputFlagsBase<CFFlags>
1113 {
1114 using AttributeValue = std::variant<int, double, std::string>;
1115
1127 double time;
1128
1169
1193 std::map<std::string, std::vector<std::pair<std::string, AttributeValue>>>
1195
1200 explicit CFFlags(
1201 const double time = -std::numeric_limits<double>::infinity(),
1202 const bool keep_existing_file = false,
1203 const std::map<std::string,
1204 std::vector<std::pair<std::string, AttributeValue>>>
1205 &attributes = {});
1206 };
1207
1213 struct TecplotFlags : public OutputFlagsBase<TecplotFlags>
1214 {
1219 const char *zone_name;
1220
1227
1231 TecplotFlags(const char *zone_name = nullptr,
1232 const double solution_time = -1.0);
1233
1238 std::size_t
1239 memory_consumption() const;
1240 };
1241
1247 struct VtkFlags : public OutputFlagsBase<VtkFlags>
1248 {
1259 double time;
1260
1271 unsigned int cycle;
1272
1280
1286
1305
1327 std::map<std::string, std::string> physical_units;
1328
1333 explicit VtkFlags(
1334 const double time = std::numeric_limits<double>::lowest(),
1335 const unsigned int cycle = numbers::invalid_unsigned_int,
1336 const bool print_date_and_time = true,
1338 const bool write_higher_order_cells = false,
1339 const std::map<std::string, std::string> &physical_units = {});
1340 };
1341
1342
1348 struct SvgFlags : public OutputFlagsBase<SvgFlags>
1349 {
1353 unsigned int height;
1354
1359 unsigned int width;
1360
1367 unsigned int height_vector;
1368
1373
1374 unsigned int line_thickness;
1375
1380
1385
1389 SvgFlags(const unsigned int height_vector = 0,
1390 const int azimuth_angle = 37,
1391 const int polar_angle = 45,
1392 const unsigned int line_thickness = 1,
1393 const bool margin = true,
1394 const bool draw_colorbar = true);
1395 };
1396
1397
1405 : public OutputFlagsBase<Deal_II_IntermediateFlags>
1406 {
1413 static const unsigned int format_version;
1414 };
1415
1422 {
1433
1439
1444 const bool xdmf_hdf5_output = false);
1445
1450 static void
1452
1459 void
1461
1466 std::size_t
1468 };
1469
1502 {
1503 public:
1507 DataOutFilter();
1508
1514
1520 template <int dim>
1521 void
1522 write_point(const unsigned int index, const Point<dim> &p);
1523
1527 template <int dim>
1528 void
1529 write_cell(const unsigned int index,
1530 const unsigned int start,
1531 const std::array<unsigned int, dim> &offsets);
1532
1537 template <int dim>
1538 void
1539 write_cell_single(const unsigned int index,
1540 const unsigned int start,
1541 const unsigned int n_points,
1542 const ReferenceCell<dim> &reference_cell);
1543
1550 void
1551 write_data_set(const std::string &name,
1552 const unsigned int dimension,
1553 const unsigned int set_num,
1554 const Table<2, double> &data_vectors);
1555
1560 void
1561 fill_node_data(std::vector<double> &node_data) const;
1562
1567 void
1568 fill_cell_data(const unsigned int local_node_offset,
1569 std::vector<unsigned int> &cell_data) const;
1570
1574 std::string
1575 get_data_set_name(const unsigned int set_num) const;
1576
1580 unsigned int
1581 get_data_set_dim(const unsigned int set_num) const;
1582
1587 const double *
1588 get_data_set(const unsigned int set_num) const;
1589
1594 unsigned int
1595 n_nodes() const;
1596
1601 unsigned int
1602 n_cells() const;
1603
1608 unsigned int
1609 n_data_sets() const;
1610
1614 void
1615 flush_points();
1616
1620 void
1621 flush_cells();
1622
1623
1624 private:
1629 {
1630 bool
1631 operator()(const Point<3> &one, const Point<3> &two) const
1632 {
1633 /*
1634 * The return statement below is an optimized version of the following
1635 * code:
1636 *
1637 * for (unsigned int d=0; d<3; ++d)
1638 * {
1639 * if (one(d) < two(d))
1640 * return true;
1641 * else if (one(d) > two(d))
1642 * return false;
1643 * }
1644 * return false;
1645 */
1646
1647 return (one[0] < two[0] ||
1648 (!(two[0] < one[0]) &&
1649 (one[1] < two[1] || (!(two[1] < one[1]) && one[2] < two[2]))));
1650 }
1651 };
1652
1653 using Map3DPoint = std::multimap<Point<3>, unsigned int, Point3Comp>;
1654
1659
1666 unsigned int node_dim;
1667
1672 unsigned int num_cells;
1673
1678
1682 std::map<unsigned int, unsigned int> filtered_points;
1683
1687 std::map<unsigned int, unsigned int> filtered_cells;
1688
1692 std::vector<std::string> data_set_names;
1693
1697 std::vector<unsigned int> data_set_dims;
1698
1702 std::vector<std::vector<double>> data_sets;
1703
1707 void
1708 internal_add_cell(const unsigned int cell_index,
1709 const unsigned int pt_index);
1710 };
1711
1712
1717 {
1722
1727
1732
1737
1742
1747
1752
1757
1762
1767
1772
1777
1782
1787
1792 };
1793
1794
1798 template <int dim, int spacedim>
1799 void
1800 write_dx(
1801 const std::vector<Patch<dim, spacedim>> &patches,
1802 const std::vector<std::string> &data_names,
1803 const std::vector<
1804 std::tuple<unsigned int,
1805 unsigned int,
1806 std::string,
1808 &nonscalar_data_ranges,
1809 const DXFlags &flags,
1810 std::ostream &out);
1811
1856 template <int spacedim>
1857 void
1858 write_eps(
1859 const std::vector<Patch<2, spacedim>> &patches,
1860 const std::vector<std::string> &data_names,
1861 const std::vector<
1862 std::tuple<unsigned int,
1863 unsigned int,
1864 std::string,
1866 &nonscalar_data_ranges,
1867 const EpsFlags &flags,
1868 std::ostream &out);
1869
1875 template <int dim, int spacedim>
1876 void
1877 write_eps(
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 EpsFlags &flags,
1887 std::ostream &out);
1888
1889
1899 template <int dim, int spacedim>
1900 void
1901 write_gmv(
1902 const std::vector<Patch<dim, spacedim>> &patches,
1903 const std::vector<std::string> &data_names,
1904 const std::vector<
1905 std::tuple<unsigned int,
1906 unsigned int,
1907 std::string,
1909 &nonscalar_data_ranges,
1910 const GmvFlags &flags,
1911 std::ostream &out);
1912
1968 template <int dim, int spacedim>
1969 void
1971 const std::vector<Patch<dim, spacedim>> &patches,
1972 const std::vector<std::string> &data_names,
1973 const std::vector<
1974 std::tuple<unsigned int,
1975 unsigned int,
1976 std::string,
1978 &nonscalar_data_ranges,
1979 const GnuplotFlags &flags,
1980 std::ostream &out);
1981
2027 template <int dim, int spacedim>
2028 void
2030 const std::vector<Patch<dim, spacedim>> &patches,
2031 const std::vector<std::string> &data_names,
2032 const std::vector<
2033 std::tuple<unsigned int,
2034 unsigned int,
2035 std::string,
2037 &nonscalar_data_ranges,
2038 const PovrayFlags &flags,
2039 std::ostream &out);
2040
2047 template <int dim, int spacedim>
2048 void
2050 const std::vector<Patch<dim, spacedim>> &patches,
2051 const std::vector<std::string> &data_names,
2052 const std::vector<
2053 std::tuple<unsigned int,
2054 unsigned int,
2055 std::string,
2057 &nonscalar_data_ranges,
2058 const TecplotFlags &flags,
2059 std::ostream &out);
2060
2075 template <int dim, int spacedim>
2076 void
2077 write_ucd(
2078 const std::vector<Patch<dim, spacedim>> &patches,
2079 const std::vector<std::string> &data_names,
2080 const std::vector<
2081 std::tuple<unsigned int,
2082 unsigned int,
2083 std::string,
2085 &nonscalar_data_ranges,
2086 const UcdFlags &flags,
2087 std::ostream &out);
2088
2108 template <int dim, int spacedim>
2109 void
2110 write_vtk(
2111 const std::vector<Patch<dim, spacedim>> &patches,
2112 const std::vector<std::string> &data_names,
2113 const std::vector<
2114 std::tuple<unsigned int,
2115 unsigned int,
2116 std::string,
2118 &nonscalar_data_ranges,
2119 const VtkFlags &flags,
2120 std::ostream &out);
2121
2122
2146 template <int dim, int spacedim>
2147 void
2148 write_vtu(
2149 const std::vector<Patch<dim, spacedim>> &patches,
2150 const std::vector<std::string> &data_names,
2151 const std::vector<
2152 std::tuple<unsigned int,
2153 unsigned int,
2154 std::string,
2156 &nonscalar_data_ranges,
2157 const VtkFlags &flags,
2158 std::ostream &out);
2159
2165 void
2166 write_vtu_header(std::ostream &out, const VtkFlags &flags);
2167
2174 void
2175 write_vtu_footer(std::ostream &out);
2176
2183 template <int dim, int spacedim>
2184 void
2186 const std::vector<Patch<dim, spacedim>> &patches,
2187 const std::vector<std::string> &data_names,
2188 const std::vector<
2189 std::tuple<unsigned int,
2190 unsigned int,
2191 std::string,
2193 &nonscalar_data_ranges,
2194 const VtkFlags &flags,
2195 std::ostream &out);
2196
2238 void
2240 std::ostream &out,
2241 const std::vector<std::string> &piece_names,
2242 const std::vector<std::string> &data_names,
2243 const std::vector<
2244 std::tuple<unsigned int,
2245 unsigned int,
2246 std::string,
2248 &nonscalar_data_ranges,
2249 const VtkFlags &flags);
2250
2299 void
2301 std::ostream &out,
2302 const std::vector<std::pair<double, std::string>> &times_and_names);
2303
2315 void
2316 write_visit_record(std::ostream &out,
2317 const std::vector<std::string> &piece_names);
2318
2346 void
2347 write_visit_record(std::ostream &out,
2348 const std::vector<std::vector<std::string>> &piece_names);
2349
2382 void
2384 std::ostream &out,
2385 const std::vector<std::pair<double, std::vector<std::string>>>
2386 &times_and_piece_names);
2387
2408 template <int spacedim>
2409 void
2410 write_svg(
2411 const std::vector<Patch<2, spacedim>> &patches,
2412 const std::vector<std::string> &data_names,
2413 const std::vector<
2414 std::tuple<unsigned int,
2415 unsigned int,
2416 std::string,
2418 &nonscalar_data_ranges,
2419 const SvgFlags &flags,
2420 std::ostream &out);
2421
2459 template <int dim, int spacedim>
2460 void
2462 const std::vector<Patch<dim, spacedim>> &patches,
2463 const std::vector<std::string> &data_names,
2464 const std::vector<
2465 std::tuple<unsigned int,
2466 unsigned int,
2467 std::string,
2469 &nonscalar_data_ranges,
2470 const Deal_II_IntermediateFlags &flags,
2471 std::ostream &out);
2472
2481 template <int dim, int spacedim>
2482 void
2484 const std::vector<Patch<dim, spacedim>> &patches,
2485 const std::vector<std::string> &data_names,
2486 const std::vector<
2487 std::tuple<unsigned int,
2488 unsigned int,
2489 std::string,
2491 &nonscalar_data_ranges,
2492 const Deal_II_IntermediateFlags &flags,
2493 const std::string &filename,
2494 const MPI_Comm comm,
2495 const CompressionLevel compression);
2496
2501 template <int dim, int spacedim>
2502 void
2503 write_hdf5_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2504 const DataOutFilter &data_filter,
2505 const DataOutBase::Hdf5Flags &flags,
2506 const std::string &filename,
2507 const MPI_Comm comm);
2508
2516 template <int dim, int spacedim>
2517 void
2518 write_hdf5_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2519 const DataOutFilter &data_filter,
2520 const DataOutBase::Hdf5Flags &flags,
2521 const bool write_mesh_file,
2522 const std::string &mesh_filename,
2523 const std::string &solution_filename,
2524 const MPI_Comm comm);
2525
2530 template <int dim, int spacedim>
2531 void
2532 write_cf_parallel(const std::vector<Patch<dim, spacedim>> &patches,
2533 const DataOutFilter &data_filter,
2534 const DataOutBase::CFFlags &flags,
2535 const std::string &filename,
2536 const MPI_Comm comm);
2537
2544 template <int dim, int spacedim>
2545 void
2547 const std::vector<Patch<dim, spacedim>> &patches,
2548 const std::vector<std::string> &data_names,
2549 const std::vector<
2550 std::tuple<unsigned int,
2551 unsigned int,
2552 std::string,
2554 &nonscalar_data_ranges,
2555 DataOutFilter &filtered_data);
2556
2568 std::pair<unsigned int, unsigned int>
2569 determine_intermediate_format_dimensions(std::istream &input);
2570
2583 parse_output_format(const std::string &format_name);
2584
2590 std::string
2592
2612 std::string
2613 default_suffix(const OutputFormat output_format);
2614
2624 int,
2625 int,
2626 << "The number of points in this data set is " << arg1
2627 << ", but we expected " << arg2
2628 << " in each space direction.");
2633 "You are trying to write graphical data into a file, but "
2634 "no data is available in the intermediate format that "
2635 "the DataOutBase functions require. Did you forget to "
2636 "call a function such as DataOut::build_patches()?");
2641 "The error code of one of the Tecplot functions was "
2642 "not zero as expected.");
2647 char *,
2648 << "There was an error opening Tecplot file " << arg1
2649 << " for output.");
2650
2652} // namespace DataOutBase
2653
2654
2655
2766template <int dim, int spacedim = dim>
2768{
2769public:
2774
2779 virtual ~DataOutInterface() = default;
2780
2785 void
2786 write_dx(std::ostream &out) const;
2787
2792 void
2793 write_eps(std::ostream &out) const;
2794
2799 void
2800 write_gmv(std::ostream &out) const;
2801
2806 void
2807 write_gnuplot(std::ostream &out) const;
2808
2813 void
2814 write_povray(std::ostream &out) const;
2815
2820 void
2821 write_tecplot(std::ostream &out) const;
2822
2827 void
2828 write_ucd(std::ostream &out) const;
2829
2841 void
2842 write_vtk(std::ostream &out) const;
2843
2858 void
2859 write_vtu(std::ostream &out) const;
2860
2879 void
2880 write_vtu_in_parallel(const std::string &filename,
2881 const MPI_Comm comm,
2884
2918 void
2919 write_pvtu_record(std::ostream &out,
2920 const std::vector<std::string> &piece_names) const;
2921
2982 std::string
2984 const std::string &directory,
2985 const std::string &filename_without_extension,
2986 const unsigned int counter,
2987 const MPI_Comm mpi_communicator,
2988 const unsigned int n_digits_for_counter = numbers::invalid_unsigned_int,
2989 const unsigned int n_groups = 0,
2992
2997 void
2998 write_svg(std::ostream &out) const;
2999
3010 void
3011 write_deal_II_intermediate(std::ostream &out) const;
3012
3019 void
3021 const std::string &filename,
3022 const MPI_Comm comm,
3023 const DataOutBase::CompressionLevel compression) const;
3024
3030 XDMFEntry
3032 const std::string &h5_filename,
3033 const double cur_time,
3034 const MPI_Comm comm) const;
3035
3041 XDMFEntry
3043 const std::string &h5_mesh_filename,
3044 const std::string &h5_solution_filename,
3045 const double cur_time,
3046 const MPI_Comm comm) const;
3047
3072 void
3073 write_xdmf_file(const std::vector<XDMFEntry> &entries,
3074 const std::string &filename,
3075 const MPI_Comm comm) const;
3076
3091 void
3093 const std::string &filename,
3094 const 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 const MPI_Comm comm) const;
3109
3150 void
3152 const std::string &filename,
3153 const MPI_Comm comm) const;
3154
3161 void
3162 write_filtered_data(DataOutBase::DataOutFilter &filtered_data) const;
3163
3164
3173 void
3174 write(std::ostream &out,
3175 const DataOutBase::OutputFormat output_format =
3177
3182 void
3183 set_default_format(const DataOutBase::OutputFormat default_format);
3184
3185
3190 template <typename FlagType>
3191 void
3192 set_flags(const FlagType &flags);
3193
3194
3202 std::string
3203 default_suffix(const DataOutBase::OutputFormat output_format =
3205
3220 static void
3222
3230 void
3232
3238 std::size_t
3239 memory_consumption() const;
3240
3241protected:
3249 virtual const std::vector<DataOutBase::Patch<dim, spacedim>> &
3250 get_patches() const = 0;
3251
3256 virtual std::vector<std::string>
3258
3277 virtual std::vector<
3278 std::tuple<unsigned int,
3279 unsigned int,
3280 std::string,
3283
3290 void
3291 validate_dataset_names() const;
3292
3293
3300
3301private:
3308
3314
3320
3326
3332
3338
3344
3350
3356
3362
3368
3374
3380};
3381
3382
3383
3429template <int dim, int spacedim = dim>
3430class DataOutReader : public DataOutInterface<dim, spacedim>
3431{
3432public:
3438 void
3439 read(std::istream &in);
3440
3446 void
3447 read_whole_parallel_file(std::istream &in);
3448
3470 void
3471 merge(const DataOutReader<dim, spacedim> &other);
3472
3477 "You are trying to merge two sets of patches for which the "
3478 "declared names of the variables do not match.");
3483 "You are trying to merge two sets of patches for which the "
3484 "number of subdivisions or the number of vector components "
3485 "do not match.");
3490 int,
3491 int,
3492 int,
3493 int,
3494 << "Either the dimensions <" << arg1 << "> and <" << arg2
3495 << "> or the space dimensions <" << arg3 << "> and <" << arg4
3496 << "> do not match!");
3497
3498protected:
3507 virtual const std::vector<::DataOutBase::Patch<dim, spacedim>> &
3508 get_patches() const override;
3509
3516 virtual std::vector<std::string>
3517 get_dataset_names() const override;
3518
3537 virtual std::vector<
3538 std::tuple<unsigned int,
3539 unsigned int,
3540 std::string,
3542 get_nonscalar_data_ranges() const override;
3543
3544private:
3549 std::vector<::DataOutBase::Patch<dim, spacedim>> patches;
3550 std::vector<std::string> dataset_names;
3551
3556 std::vector<
3557 std::tuple<unsigned int,
3558 unsigned int,
3559 std::string,
3562};
3563
3564
3565
3574{
3575public:
3579 XDMFEntry();
3580
3586 template <int dim>
3587 XDMFEntry(const std::string &filename,
3588 const double time,
3589 const std::uint64_t nodes,
3590 const std::uint64_t cells,
3591 const unsigned int dim_,
3592 const ReferenceCell<dim> &cell_type);
3593
3598 template <int dim>
3599 XDMFEntry(const std::string &mesh_filename,
3600 const std::string &solution_filename,
3601 const double time,
3602 const std::uint64_t nodes,
3603 const std::uint64_t cells,
3604 const unsigned int dim_,
3605 const ReferenceCell<dim> &cell_type);
3606
3610 template <int dim>
3611 XDMFEntry(const std::string &mesh_filename,
3612 const std::string &solution_filename,
3613 const double time,
3614 const std::uint64_t nodes,
3615 const std::uint64_t cells,
3616 const unsigned int dim_,
3617 const unsigned int spacedim,
3618 const ReferenceCell<dim> &cell_type);
3619
3623 void
3624 add_attribute(const std::string &attr_name, const unsigned int dimension);
3625
3631 template <class Archive>
3632 void
3633 serialize(Archive &ar, const unsigned int /*version*/)
3634 {
3638 }
3639
3644 std::string
3645 get_xdmf_content(const unsigned int indent_level) const;
3646
3647private:
3651 bool valid;
3652
3656 std::string h5_sol_filename;
3657
3661 std::string h5_mesh_filename;
3662
3667
3671 std::uint64_t num_nodes;
3672
3676 std::uint64_t num_cells;
3677
3681 unsigned int dimension;
3682
3687 unsigned int space_dimension;
3688
3701 std::string cell_type_name;
3702
3708
3712 std::map<std::string, unsigned int> attribute_dims;
3713};
3714
3715
3716
3717/* -------------------- inline functions ------------------- */
3718
3719namespace DataOutBase
3720{
3721 inline bool
3723 {
3724 return (red == green) && (red == blue);
3725 }
3726
3727
3728 /* -------------------- template functions ------------------- */
3729
3736 template <int dim, int spacedim>
3737 std::ostream &
3738 operator<<(std::ostream &out, const Patch<dim, spacedim> &patch);
3739
3740
3741
3748 template <int dim, int spacedim>
3749 std::istream &
3750 operator>>(std::istream &in, Patch<dim, spacedim> &patch);
3751} // namespace DataOutBase
3752
3753
3755
3756#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_vtu_in_parallel(const std::string &filename, const MPI_Comm comm, const DataOutBase::ParallelWriteMode mode=DataOutBase::ParallelWriteMode::mpi_io) const
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
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::ParallelWriteMode mode=DataOutBase::ParallelWriteMode::mpi_io) 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
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
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