GCC Code Coverage Report


Directory: gridformat/
File: gridformat/vtk/pvts_writer.hpp
Date: 2026-10-12 17:50:57
Exec Total Coverage
Lines: 90 94 95.7%
Functions: 55 148 37.2%
Branches: 311 1007 30.9%

Line Branch Exec Source
1 // SPDX-FileCopyrightText: 2022-2023 Dennis Gläser <dennis.glaeser@iws.uni-stuttgart.de>
2 // SPDX-License-Identifier: MIT
3 /*!
4 * \file
5 * \ingroup VTK
6 * \copydoc GridFormat::PVTSWriter
7 */
8 #ifndef GRIDFORMAT_VTK_PVTS_WRITER_HPP_
9 #define GRIDFORMAT_VTK_PVTS_WRITER_HPP_
10
11 #include <ostream>
12 #include <string>
13 #include <algorithm>
14 #include <filesystem>
15 #include <array>
16 #include <tuple>
17 #include <cmath>
18
19 #include <gridformat/common/field.hpp>
20 #include <gridformat/common/ranges.hpp>
21 #include <gridformat/common/exceptions.hpp>
22 #include <gridformat/common/lvalue_reference.hpp>
23 #include <gridformat/common/output_file.hpp>
24
25 #include <gridformat/parallel/communication.hpp>
26 #include <gridformat/parallel/helpers.hpp>
27
28 #include <gridformat/grid/grid.hpp>
29 #include <gridformat/xml/element.hpp>
30 #include <gridformat/vtk/parallel.hpp>
31 #include <gridformat/vtk/vts_writer.hpp>
32
33 namespace GridFormat {
34
35 /*!
36 * \ingroup VTK
37 * \brief Writer for parallel .pvts files
38 */
39 template<Concepts::StructuredGrid Grid,
40 Concepts::Communicator Communicator>
41 class PVTSWriter : public VTK::XMLWriterBase<Grid, PVTSWriter<Grid, Communicator>> {
42 using ParentType = VTK::XMLWriterBase<Grid, PVTSWriter<Grid, Communicator>>;
43 using CT = CoordinateType<Grid>;
44
45 static constexpr std::size_t space_dim = 3;
46 static constexpr std::size_t dim = dimension<Grid>;
47 static constexpr int root_rank = 0;
48
49 public:
50 12255 explicit PVTSWriter(LValueReferenceOf<const Grid> grid,
51 Communicator comm,
52 VTK::XMLOptions xml_opts = {})
53 12255 : ParentType(grid.get(), ".pvts", true, xml_opts)
54
2/4
✓ Branch 1 taken 6135 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 6135 times.
✗ Branch 5 not taken.
36765 , _comm(comm)
55 12255 {}
56
57 26 const Communicator& communicator() const {
58 26 return _comm;
59 }
60
61 private:
62 Communicator _comm;
63
64 8400 PVTSWriter _with(VTK::XMLOptions xml_opts) const override {
65
1/2
✓ Branch 4 taken 4200 times.
✗ Branch 5 not taken.
8400 return PVTSWriter{this->grid(), _comm, std::move(xml_opts)};
66 }
67
68 ✗ void _write(std::ostream&) const override {
69 ✗ throw InvalidState(
70 "PVTSWriter does not support direct export into stream. "
71 "Use overload with filename instead!"
72 );
73 }
74
75 4117 virtual void _write(const std::string& filename_with_ext) const override {
76
1/2
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
4117 const auto& local_extents = extents(this->grid());
77
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
4117 const auto [origin, is_negative_axis] = _get_origin_and_orientations(local_extents);
78
79 4117 PVTK::StructuredParallelGridHelper helper{_comm};
80
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
4117 const auto all_origins = Parallel::gather(_comm, origin, root_rank);
81
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
4117 const auto all_extents = Parallel::gather(_comm, local_extents, root_rank);
82
2/4
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2077 times.
✗ Branch 5 not taken.
4117 const auto [exts_begin, exts_end, whole_extent, _] = helper.compute_extents_and_origin(
83 all_origins,
84 all_extents,
85 is_negative_axis
86 );
87
88
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
4117 const auto my_whole_extent = Parallel::broadcast(_comm, whole_extent, root_rank);
89
2/4
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2077 times.
✗ Branch 5 not taken.
4117 const auto my_extent_offset = Parallel::scatter(_comm, Ranges::flat(exts_begin), root_rank);
90
91 // the collective invocations also ensure that all pieces are written before the main file,
92 // and that the main file is written before returning
93
2/2
✓ Branch 1 taken 1835 times.
✓ Branch 2 taken 242 times.
7957 Parallel::invoke_collectively(_comm, [&] () {
94
6/8
✓ Branch 1 taken 445 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 396 times.
✓ Branch 5 taken 49 times.
✓ Branch 7 taken 1632 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 1440 times.
✓ Branch 11 taken 192 times.
2077 _write_piece(filename_with_ext, Ranges::to_array<dim>(my_extent_offset), {my_whole_extent});
95
2/4
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 2077 times.
✗ Branch 5 not taken.
9198 }, "Writing the pieces of '" + filename_with_ext + "'");
96
2/2
✓ Branch 1 taken 1832 times.
✓ Branch 2 taken 3 times.
7235 Parallel::invoke_collectively(_comm, [&] () {
97
4/4
✓ Branch 1 taken 138 times.
✓ Branch 2 taken 257 times.
✓ Branch 4 taken 480 times.
✓ Branch 5 taken 960 times.
1835 if (Parallel::rank(_comm) == 0)
98 618 _write_pvts_file(filename_with_ext, my_whole_extent, exts_begin, exts_end);
99
2/4
✓ Branch 1 taken 1835 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 1835 times.
✗ Branch 5 not taken.
7276 }, "Writing '" + filename_with_ext + "'");
100 5572 }
101
102 4117 auto _get_origin_and_orientations(const std::ranges::range auto& extents) const {
103 4117 auto is_negative_axis = Ranges::filled_array<dim>(false);
104
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
15541 std::ranges::for_each(extents, [&, dir=0] (const auto& e) mutable {
105
2/4
✓ Branch 0 taken 890 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 4896 times.
✗ Branch 3 not taken.
5786 if (e > 0)
106 5786 is_negative_axis[dir] = _is_negative_axis(dir);
107 5786 dir++;
108 });
109
110 std::array<CT, dim> origin;
111 static constexpr auto origin_loc = _origin_location();
112
9/19
✓ Branch 2 taken 9 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 9 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 36977 times.
✓ Branch 8 taken 9 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 9 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 17 taken 9 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 9 times.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 9 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 9 times.
73452 for (const auto& p : points(this->grid())) {
113 73434 const auto& loc = location(this->grid(), p);
114
1/2
✓ Branch 2 taken 36986 times.
✗ Branch 3 not taken.
73434 const auto& pos = coordinates(this->grid(), p);
115
3/4
✓ Branch 1 taken 36986 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 2077 times.
✓ Branch 4 taken 34909 times.
73434 if (std::ranges::equal(loc, origin_loc)) {
116
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
4117 std::ranges::copy(pos, origin.begin());
117 4126 return std::make_tuple(std::move(origin), std::move(is_negative_axis));
118 }
119 }
120
121 ✗ throw InvalidState("Could not determine origin");
122 }
123
124 static constexpr auto _origin_location() {
125 std::array<std::size_t, dim> origin;
126 std::ranges::fill(origin, 0);
127 return origin;
128 }
129
130 11498 bool _is_negative_axis(unsigned axis) const {
131
9/19
✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 8159 times.
✓ Branch 8 taken 18 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 18 times.
✗ Branch 12 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✓ Branch 17 taken 18 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 18 times.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 18 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 18 times.
16288 for (const auto& p0 : points(this->grid())) {
132
1/2
✓ Branch 3 taken 8177 times.
✗ Branch 4 not taken.
16252 const auto i0 = Ranges::at(axis, location(this->grid(), p0));
133
2/4
✓ Branch 2 taken 8177 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 8177 times.
✗ Branch 6 not taken.
16252 const auto x0 = Ranges::at(axis, coordinates(this->grid(), p0));
134
10/19
✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 18 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 101618 times.
✓ Branch 8 taken 2409 times.
✗ Branch 9 not taken.
✓ Branch 11 taken 118 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 100 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 118 times.
✗ Branch 18 not taken.
✓ Branch 19 taken 118 times.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✓ Branch 23 taken 18 times.
✗ Branch 25 not taken.
✓ Branch 26 taken 18 times.
207402 for (const auto& p1 : points(this->grid())) {
135
1/2
✓ Branch 3 taken 101736 times.
✗ Branch 4 not taken.
202512 const auto i1 = Ranges::at(axis, location(this->grid(), p1));
136
2/4
✓ Branch 2 taken 101736 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 101736 times.
✗ Branch 6 not taken.
202512 const auto x1 = Ranges::at(axis, coordinates(this->grid(), p1));
137
2/2
✓ Branch 0 taken 5786 times.
✓ Branch 1 taken 95950 times.
202512 if (i1 > i0)
138 11516 return x1 < x0;
139 }
140 }
141 ✗ throw InvalidState("Could not determine axis orientation");
142 }
143
144 4117 void _write_piece(const std::string& par_filename,
145 const std::array<std::size_t, dim>& offset,
146 typename VTSWriter<Grid>::Domain domain) const {
147
1/2
✓ Branch 2 taken 2077 times.
✗ Branch 3 not taken.
8234 auto writer = VTSWriter{this->grid(), this->_xml_opts}
148
2/4
✓ Branch 2 taken 2077 times.
✗ Branch 3 not taken.
✓ Branch 6 taken 2077 times.
✗ Branch 7 not taken.
8234 .as_piece_for(std::move(domain))
149 .with_offset(offset);
150
1/2
✓ Branch 1 taken 2077 times.
✗ Branch 2 not taken.
4117 this->copy_fields(writer);
151
6/8
✓ Branch 1 taken 2076 times.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2076 times.
✓ Branch 5 taken 1 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1835 times.
✓ Branch 8 taken 241 times.
4598 writer.write(PVTK::piece_basefilename(par_filename, Parallel::rank(_comm)));
152 4117 }
153
154 1218 void _write_pvts_file(const std::string& filename_with_ext,
155 const std::array<std::size_t, dim>& extents,
156 const std::vector<std::array<std::size_t, dim>>& proc_extents_begin,
157 const std::vector<std::array<std::size_t, dim>>& proc_extents_end) const {
158
1/2
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
2436 XMLElement pvtk_xml("VTKFile");
159
2/4
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
2436 pvtk_xml.set_attribute("type", "PStructuredGrid");
160
161
2/4
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
1218 XMLElement& grid = pvtk_xml.add_child("PStructuredGrid");
162
3/6
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 618 times.
✗ Branch 8 not taken.
3654 grid.set_attribute("WholeExtent", VTK::CommonDetail::extents_string(extents));
163
164
2/4
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
2436 XMLElement& ppoint_data = grid.add_child("PPointData");
165
2/4
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
2436 XMLElement& pcell_data = grid.add_child("PCellData");
166
2/4
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
1218 XMLElement& pcoords = grid.add_child("PPoints");
167 1272 std::visit([&] (const auto& encoder) {
168 1890 std::visit([&] (const auto& data_format) {
169 618 PVTK::PDataArrayHelper pdata_helper{encoder, data_format, ppoint_data};
170 618 PVTK::PDataArrayHelper cdata_helper{encoder, data_format, pcell_data};
171
16/48
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 82 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 82 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 128 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 128 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 256 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 256 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✓ Branch 31 taken 8 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 8 times.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✓ Branch 49 taken 32 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 32 times.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 61 taken 16 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 16 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 64 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 64 times.
✗ Branch 71 not taken.
8122 std::ranges::for_each(this->_point_field_names(), [&] (const std::string& name) {
172 3676 pdata_helper.add(name, this->_get_point_field(name));
173 });
174
16/48
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 82 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 82 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 128 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 128 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 256 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 256 times.
✗ Branch 23 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✓ Branch 31 taken 8 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 8 times.
✗ Branch 35 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 43 not taken.
✗ Branch 44 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✓ Branch 49 taken 32 times.
✗ Branch 50 not taken.
✓ Branch 52 taken 32 times.
✗ Branch 53 not taken.
✗ Branch 55 not taken.
✗ Branch 56 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✓ Branch 61 taken 16 times.
✗ Branch 62 not taken.
✓ Branch 64 taken 16 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 64 times.
✗ Branch 68 not taken.
✓ Branch 70 taken 64 times.
✗ Branch 71 not taken.
8122 std::ranges::for_each(this->_cell_field_names(), [&] (const std::string& name) {
175 3676 cdata_helper.add(name, this->_get_cell_field(name));
176 });
177
178 1890 std::visit([&] <typename T> (const Precision<T>& prec) {
179
20/96
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 10 taken 66 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 66 times.
✗ Branch 14 not taken.
✓ Branch 19 taken 128 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 128 times.
✗ Branch 23 not taken.
✓ Branch 28 taken 192 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 192 times.
✗ Branch 32 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 55 taken 16 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 16 times.
✗ Branch 59 not taken.
✓ Branch 64 taken 8 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 8 times.
✗ Branch 68 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✓ Branch 100 taken 64 times.
✗ Branch 101 not taken.
✓ Branch 103 taken 64 times.
✗ Branch 104 not taken.
✓ Branch 109 taken 32 times.
✗ Branch 110 not taken.
✓ Branch 112 taken 32 times.
✗ Branch 113 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✓ Branch 154 taken 16 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 16 times.
✗ Branch 158 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✓ Branch 190 taken 64 times.
✗ Branch 191 not taken.
✓ Branch 193 taken 64 times.
✗ Branch 194 not taken.
✗ Branch 199 not taken.
✗ Branch 200 not taken.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
1236 XMLElement& pdata_array = pcoords.add_child("PDataArray");
180
30/144
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
✓ Branch 15 taken 66 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 66 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 66 times.
✗ Branch 22 not taken.
✓ Branch 29 taken 128 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 128 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 128 times.
✗ Branch 36 not taken.
✓ Branch 43 taken 192 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 192 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 192 times.
✗ Branch 50 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✓ Branch 85 taken 16 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 16 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 16 times.
✗ Branch 92 not taken.
✓ Branch 99 taken 8 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 8 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 8 times.
✗ Branch 106 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✓ Branch 155 taken 64 times.
✗ Branch 156 not taken.
✓ Branch 158 taken 64 times.
✗ Branch 159 not taken.
✓ Branch 161 taken 64 times.
✗ Branch 162 not taken.
✓ Branch 169 taken 32 times.
✗ Branch 170 not taken.
✓ Branch 172 taken 32 times.
✗ Branch 173 not taken.
✓ Branch 175 taken 32 times.
✗ Branch 176 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✗ Branch 200 not taken.
✗ Branch 201 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 217 not taken.
✗ Branch 218 not taken.
✗ Branch 225 not taken.
✗ Branch 226 not taken.
✗ Branch 228 not taken.
✗ Branch 229 not taken.
✗ Branch 231 not taken.
✗ Branch 232 not taken.
✓ Branch 239 taken 16 times.
✗ Branch 240 not taken.
✓ Branch 242 taken 16 times.
✗ Branch 243 not taken.
✓ Branch 245 taken 16 times.
✗ Branch 246 not taken.
✗ Branch 253 not taken.
✗ Branch 254 not taken.
✗ Branch 256 not taken.
✗ Branch 257 not taken.
✗ Branch 259 not taken.
✗ Branch 260 not taken.
✗ Branch 267 not taken.
✗ Branch 268 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✓ Branch 295 taken 64 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 64 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 64 times.
✗ Branch 302 not taken.
✗ Branch 309 not taken.
✗ Branch 310 not taken.
✗ Branch 312 not taken.
✗ Branch 313 not taken.
✗ Branch 315 not taken.
✗ Branch 316 not taken.
✗ Branch 323 not taken.
✗ Branch 324 not taken.
✗ Branch 326 not taken.
✗ Branch 327 not taken.
✗ Branch 329 not taken.
✗ Branch 330 not taken.
1854 pdata_array.set_attribute("NumberOfComponents", std::to_string(space_dim));
181
20/96
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 10 taken 66 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 66 times.
✗ Branch 14 not taken.
✓ Branch 19 taken 128 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 128 times.
✗ Branch 23 not taken.
✓ Branch 28 taken 192 times.
✗ Branch 29 not taken.
✓ Branch 31 taken 192 times.
✗ Branch 32 not taken.
✗ Branch 37 not taken.
✗ Branch 38 not taken.
✗ Branch 40 not taken.
✗ Branch 41 not taken.
✗ Branch 46 not taken.
✗ Branch 47 not taken.
✗ Branch 49 not taken.
✗ Branch 50 not taken.
✓ Branch 55 taken 16 times.
✗ Branch 56 not taken.
✓ Branch 58 taken 16 times.
✗ Branch 59 not taken.
✓ Branch 64 taken 8 times.
✗ Branch 65 not taken.
✓ Branch 67 taken 8 times.
✗ Branch 68 not taken.
✗ Branch 73 not taken.
✗ Branch 74 not taken.
✗ Branch 76 not taken.
✗ Branch 77 not taken.
✗ Branch 82 not taken.
✗ Branch 83 not taken.
✗ Branch 85 not taken.
✗ Branch 86 not taken.
✗ Branch 91 not taken.
✗ Branch 92 not taken.
✗ Branch 94 not taken.
✗ Branch 95 not taken.
✓ Branch 100 taken 64 times.
✗ Branch 101 not taken.
✓ Branch 103 taken 64 times.
✗ Branch 104 not taken.
✓ Branch 109 taken 32 times.
✗ Branch 110 not taken.
✓ Branch 112 taken 32 times.
✗ Branch 113 not taken.
✗ Branch 118 not taken.
✗ Branch 119 not taken.
✗ Branch 121 not taken.
✗ Branch 122 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 136 not taken.
✗ Branch 137 not taken.
✗ Branch 139 not taken.
✗ Branch 140 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✓ Branch 154 taken 16 times.
✗ Branch 155 not taken.
✓ Branch 157 taken 16 times.
✗ Branch 158 not taken.
✗ Branch 163 not taken.
✗ Branch 164 not taken.
✗ Branch 166 not taken.
✗ Branch 167 not taken.
✗ Branch 172 not taken.
✗ Branch 173 not taken.
✗ Branch 175 not taken.
✗ Branch 176 not taken.
✗ Branch 181 not taken.
✗ Branch 182 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✓ Branch 190 taken 64 times.
✗ Branch 191 not taken.
✓ Branch 193 taken 64 times.
✗ Branch 194 not taken.
✗ Branch 199 not taken.
✗ Branch 200 not taken.
✗ Branch 202 not taken.
✗ Branch 203 not taken.
✗ Branch 208 not taken.
✗ Branch 209 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
1236 pdata_array.set_attribute("Name", "Coordinates");
182
30/144
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 32 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 32 times.
✗ Branch 8 not taken.
✓ Branch 15 taken 66 times.
✗ Branch 16 not taken.
✓ Branch 18 taken 66 times.
✗ Branch 19 not taken.
✓ Branch 21 taken 66 times.
✗ Branch 22 not taken.
✓ Branch 29 taken 128 times.
✗ Branch 30 not taken.
✓ Branch 32 taken 128 times.
✗ Branch 33 not taken.
✓ Branch 35 taken 128 times.
✗ Branch 36 not taken.
✓ Branch 43 taken 192 times.
✗ Branch 44 not taken.
✓ Branch 46 taken 192 times.
✗ Branch 47 not taken.
✓ Branch 49 taken 192 times.
✗ Branch 50 not taken.
✗ Branch 57 not taken.
✗ Branch 58 not taken.
✗ Branch 60 not taken.
✗ Branch 61 not taken.
✗ Branch 63 not taken.
✗ Branch 64 not taken.
✗ Branch 71 not taken.
✗ Branch 72 not taken.
✗ Branch 74 not taken.
✗ Branch 75 not taken.
✗ Branch 77 not taken.
✗ Branch 78 not taken.
✓ Branch 85 taken 16 times.
✗ Branch 86 not taken.
✓ Branch 88 taken 16 times.
✗ Branch 89 not taken.
✓ Branch 91 taken 16 times.
✗ Branch 92 not taken.
✓ Branch 99 taken 8 times.
✗ Branch 100 not taken.
✓ Branch 102 taken 8 times.
✗ Branch 103 not taken.
✓ Branch 105 taken 8 times.
✗ Branch 106 not taken.
✗ Branch 113 not taken.
✗ Branch 114 not taken.
✗ Branch 116 not taken.
✗ Branch 117 not taken.
✗ Branch 119 not taken.
✗ Branch 120 not taken.
✗ Branch 127 not taken.
✗ Branch 128 not taken.
✗ Branch 130 not taken.
✗ Branch 131 not taken.
✗ Branch 133 not taken.
✗ Branch 134 not taken.
✗ Branch 141 not taken.
✗ Branch 142 not taken.
✗ Branch 144 not taken.
✗ Branch 145 not taken.
✗ Branch 147 not taken.
✗ Branch 148 not taken.
✓ Branch 155 taken 64 times.
✗ Branch 156 not taken.
✓ Branch 158 taken 64 times.
✗ Branch 159 not taken.
✓ Branch 161 taken 64 times.
✗ Branch 162 not taken.
✓ Branch 169 taken 32 times.
✗ Branch 170 not taken.
✓ Branch 172 taken 32 times.
✗ Branch 173 not taken.
✓ Branch 175 taken 32 times.
✗ Branch 176 not taken.
✗ Branch 183 not taken.
✗ Branch 184 not taken.
✗ Branch 186 not taken.
✗ Branch 187 not taken.
✗ Branch 189 not taken.
✗ Branch 190 not taken.
✗ Branch 197 not taken.
✗ Branch 198 not taken.
✗ Branch 200 not taken.
✗ Branch 201 not taken.
✗ Branch 203 not taken.
✗ Branch 204 not taken.
✗ Branch 211 not taken.
✗ Branch 212 not taken.
✗ Branch 214 not taken.
✗ Branch 215 not taken.
✗ Branch 217 not taken.
✗ Branch 218 not taken.
✗ Branch 225 not taken.
✗ Branch 226 not taken.
✗ Branch 228 not taken.
✗ Branch 229 not taken.
✗ Branch 231 not taken.
✗ Branch 232 not taken.
✓ Branch 239 taken 16 times.
✗ Branch 240 not taken.
✓ Branch 242 taken 16 times.
✗ Branch 243 not taken.
✓ Branch 245 taken 16 times.
✗ Branch 246 not taken.
✗ Branch 253 not taken.
✗ Branch 254 not taken.
✗ Branch 256 not taken.
✗ Branch 257 not taken.
✗ Branch 259 not taken.
✗ Branch 260 not taken.
✗ Branch 267 not taken.
✗ Branch 268 not taken.
✗ Branch 270 not taken.
✗ Branch 271 not taken.
✗ Branch 273 not taken.
✗ Branch 274 not taken.
✗ Branch 281 not taken.
✗ Branch 282 not taken.
✗ Branch 284 not taken.
✗ Branch 285 not taken.
✗ Branch 287 not taken.
✗ Branch 288 not taken.
✓ Branch 295 taken 64 times.
✗ Branch 296 not taken.
✓ Branch 298 taken 64 times.
✗ Branch 299 not taken.
✓ Branch 301 taken 64 times.
✗ Branch 302 not taken.
✗ Branch 309 not taken.
✗ Branch 310 not taken.
✗ Branch 312 not taken.
✗ Branch 313 not taken.
✗ Branch 315 not taken.
✗ Branch 316 not taken.
✗ Branch 323 not taken.
✗ Branch 324 not taken.
✗ Branch 326 not taken.
✗ Branch 327 not taken.
✗ Branch 329 not taken.
✗ Branch 330 not taken.
1854 pdata_array.set_attribute("format", VTK::data_format_name(encoder, data_format));
183
30/144
✓ Branch 2 taken 32 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 32 times.
✗ Branch 6 not taken.
✓ Branch 8 taken 32 times.
✗ Branch 9 not taken.
✓ Branch 16 taken 66 times.
✗ Branch 17 not taken.
✓ Branch 19 taken 66 times.
✗ Branch 20 not taken.
✓ Branch 22 taken 66 times.
✗ Branch 23 not taken.
✓ Branch 30 taken 128 times.
✗ Branch 31 not taken.
✓ Branch 33 taken 128 times.
✗ Branch 34 not taken.
✓ Branch 36 taken 128 times.
✗ Branch 37 not taken.
✓ Branch 44 taken 192 times.
✗ Branch 45 not taken.
✓ Branch 47 taken 192 times.
✗ Branch 48 not taken.
✓ Branch 50 taken 192 times.
✗ Branch 51 not taken.
✗ Branch 58 not taken.
✗ Branch 59 not taken.
✗ Branch 61 not taken.
✗ Branch 62 not taken.
✗ Branch 64 not taken.
✗ Branch 65 not taken.
✗ Branch 72 not taken.
✗ Branch 73 not taken.
✗ Branch 75 not taken.
✗ Branch 76 not taken.
✗ Branch 78 not taken.
✗ Branch 79 not taken.
✓ Branch 86 taken 16 times.
✗ Branch 87 not taken.
✓ Branch 89 taken 16 times.
✗ Branch 90 not taken.
✓ Branch 92 taken 16 times.
✗ Branch 93 not taken.
✓ Branch 100 taken 8 times.
✗ Branch 101 not taken.
✓ Branch 103 taken 8 times.
✗ Branch 104 not taken.
✓ Branch 106 taken 8 times.
✗ Branch 107 not taken.
✗ Branch 114 not taken.
✗ Branch 115 not taken.
✗ Branch 117 not taken.
✗ Branch 118 not taken.
✗ Branch 120 not taken.
✗ Branch 121 not taken.
✗ Branch 128 not taken.
✗ Branch 129 not taken.
✗ Branch 131 not taken.
✗ Branch 132 not taken.
✗ Branch 134 not taken.
✗ Branch 135 not taken.
✗ Branch 142 not taken.
✗ Branch 143 not taken.
✗ Branch 145 not taken.
✗ Branch 146 not taken.
✗ Branch 148 not taken.
✗ Branch 149 not taken.
✓ Branch 156 taken 64 times.
✗ Branch 157 not taken.
✓ Branch 159 taken 64 times.
✗ Branch 160 not taken.
✓ Branch 162 taken 64 times.
✗ Branch 163 not taken.
✓ Branch 170 taken 32 times.
✗ Branch 171 not taken.
✓ Branch 173 taken 32 times.
✗ Branch 174 not taken.
✓ Branch 176 taken 32 times.
✗ Branch 177 not taken.
✗ Branch 184 not taken.
✗ Branch 185 not taken.
✗ Branch 187 not taken.
✗ Branch 188 not taken.
✗ Branch 190 not taken.
✗ Branch 191 not taken.
✗ Branch 198 not taken.
✗ Branch 199 not taken.
✗ Branch 201 not taken.
✗ Branch 202 not taken.
✗ Branch 204 not taken.
✗ Branch 205 not taken.
✗ Branch 212 not taken.
✗ Branch 213 not taken.
✗ Branch 215 not taken.
✗ Branch 216 not taken.
✗ Branch 218 not taken.
✗ Branch 219 not taken.
✗ Branch 226 not taken.
✗ Branch 227 not taken.
✗ Branch 229 not taken.
✗ Branch 230 not taken.
✗ Branch 232 not taken.
✗ Branch 233 not taken.
✓ Branch 240 taken 16 times.
✗ Branch 241 not taken.
✓ Branch 243 taken 16 times.
✗ Branch 244 not taken.
✓ Branch 246 taken 16 times.
✗ Branch 247 not taken.
✗ Branch 254 not taken.
✗ Branch 255 not taken.
✗ Branch 257 not taken.
✗ Branch 258 not taken.
✗ Branch 260 not taken.
✗ Branch 261 not taken.
✗ Branch 268 not taken.
✗ Branch 269 not taken.
✗ Branch 271 not taken.
✗ Branch 272 not taken.
✗ Branch 274 not taken.
✗ Branch 275 not taken.
✗ Branch 282 not taken.
✗ Branch 283 not taken.
✗ Branch 285 not taken.
✗ Branch 286 not taken.
✗ Branch 288 not taken.
✗ Branch 289 not taken.
✓ Branch 296 taken 64 times.
✗ Branch 297 not taken.
✓ Branch 299 taken 64 times.
✗ Branch 300 not taken.
✓ Branch 302 taken 64 times.
✗ Branch 303 not taken.
✗ Branch 310 not taken.
✗ Branch 311 not taken.
✗ Branch 313 not taken.
✗ Branch 314 not taken.
✗ Branch 316 not taken.
✗ Branch 317 not taken.
✗ Branch 324 not taken.
✗ Branch 325 not taken.
✗ Branch 327 not taken.
✗ Branch 328 not taken.
✗ Branch 330 not taken.
✗ Branch 331 not taken.
1854 pdata_array.set_attribute("type", VTK::attribute_name(prec));
184
8/24
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 82 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 128 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 256 times.
✗ Branch 11 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✓ Branch 16 taken 8 times.
✗ Branch 17 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✓ Branch 25 taken 32 times.
✗ Branch 26 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✓ Branch 31 taken 16 times.
✗ Branch 32 not taken.
✓ Branch 34 taken 64 times.
✗ Branch 35 not taken.
618 }, this->_xml_settings.coordinate_precision);
185
6/12
✓ Branch 1 taken 32 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 90 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 128 times.
✗ Branch 8 not taken.
✓ Branch 10 taken 288 times.
✗ Branch 11 not taken.
✓ Branch 13 taken 16 times.
✗ Branch 14 not taken.
✓ Branch 16 taken 64 times.
✗ Branch 17 not taken.
618 }, this->_xml_settings.data_format);
186
1/2
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
1218 }, this->_xml_settings.encoder);
187
188
2/4
✓ Branch 1 taken 618 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 618 times.
✗ Branch 5 not taken.
4818 std::ranges::for_each(Parallel::ranks(_comm), [&] (int rank) {
189 std::array<std::size_t, dim> extents_begin;
190 std::array<std::size_t, dim> extents_end;
191
4/4
✓ Branch 0 taken 790 times.
✓ Branch 1 taken 395 times.
✓ Branch 2 taken 4320 times.
✓ Branch 3 taken 1440 times.
6945 for (unsigned dir = 0; dir < dim; ++dir) {
192 5110 extents_begin[dir] = proc_extents_begin[rank][dir];
193 5110 extents_end[dir] = proc_extents_end[rank][dir];
194 }
195
4/8
✓ Branch 1 taken 395 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 395 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 1440 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 1440 times.
✗ Branch 13 not taken.
3670 auto& piece = grid.add_child("Piece");
196
6/12
✓ Branch 1 taken 395 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 395 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 395 times.
✗ Branch 8 not taken.
✓ Branch 14 taken 1440 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1440 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1440 times.
✗ Branch 21 not taken.
5505 piece.set_attribute("Extent", VTK::CommonDetail::extents_string(extents_begin, extents_end));
197
6/12
✓ Branch 1 taken 395 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 395 times.
✗ Branch 5 not taken.
✓ Branch 7 taken 395 times.
✗ Branch 8 not taken.
✓ Branch 14 taken 1440 times.
✗ Branch 15 not taken.
✓ Branch 17 taken 1440 times.
✗ Branch 18 not taken.
✓ Branch 20 taken 1440 times.
✗ Branch 21 not taken.
5505 piece.set_attribute("Source", std::filesystem::path{
198
4/8
✓ Branch 1 taken 395 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 395 times.
✗ Branch 5 not taken.
✓ Branch 11 taken 1440 times.
✗ Branch 12 not taken.
✓ Branch 14 taken 1440 times.
✗ Branch 15 not taken.
3670 PVTK::piece_basefilename(filename_with_ext, rank) + ".vts"
199
2/4
✓ Branch 1 taken 395 times.
✗ Branch 2 not taken.
✓ Branch 6 taken 1440 times.
✗ Branch 7 not taken.
5505 }.filename());
200 });
201
202
2/4
✓ Branch 2 taken 618 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 618 times.
✗ Branch 6 not taken.
1218 this->_set_default_active_fields(pvtk_xml.get_child("PStructuredGrid"));
203
2/2
✓ Branch 1 taken 616 times.
✓ Branch 2 taken 2 times.
2418 write_to(filename_with_ext, [&] (std::ostream& s) {
204
4/8
✓ Branch 1 taken 136 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 136 times.
✗ Branch 5 not taken.
✓ Branch 9 taken 480 times.
✗ Branch 10 not taken.
✓ Branch 12 taken 480 times.
✗ Branch 13 not taken.
616 write_xml_with_version_header(pvtk_xml, s, Indentation{{.width = 2}});
205 });
206 1218 }
207 };
208
209 template<typename G, Concepts::Communicator C>
210 PVTSWriter(G&&, const C&, VTK::XMLOptions = {}) -> PVTSWriter<std::remove_cvref_t<G>, C>;
211
212 } // namespace GridFormat
213
214 #endif // GRIDFORMAT_VTK_PVTS_WRITER_HPP_
215