56 const std::string &file_prefix,
61 const auto n_trailing_digits =
static_cast<unsigned int>(
65 dealii::DataOut<dim> data_out;
68 for (
unsigned int index = 0; index < field_attributes.size(); ++index)
72 solution.update_ghost_values();
75 const unsigned int n_components =
79 dealii::DataComponentInterpretation::DataComponentInterpretation>
80 data_type(n_components,
82 ? dealii::DataComponentInterpretation::component_is_scalar
83 : dealii::DataComponentInterpretation::component_is_part_of_vector);
85 const std::vector<std::string> names(n_components, field.
name);
92 solution.zero_out_ghost_values();
102 data_out.build_patches(n_divisions);
105 dealii::DataOutBase::VtkFlags flags;
108 flags.print_date_and_time =
true;
109#ifdef PRISMS_PF_WITH_ZLIB
110 flags.compression_level = dealii::DataOutBase::CompressionLevel::best_speed;
112 data_out.set_flags(flags);
116 const std::string &file_type = output_parameters.
file_type;
117 if (file_type ==
"vtu")
119 std::ostringstream increment_stream;
120 increment_stream << std::setw(static_cast<int>(n_trailing_digits))
121 << std::setfill(
'0') << increment;
122 const std::string filename = file_prefix +
"_" + increment_stream.str() +
".vtu";
123 data_out.write_vtu_in_parallel(filename, MPI_COMM_WORLD);
125 else if (file_type ==
"pvtu")
127 std::filesystem::path output_path = file_prefix;
128 std::string filename = output_path.filename();
129 std::string directory = output_path.remove_filename();
130 data_out.write_vtu_with_pvtu_record(directory,
136 else if (file_type ==
"vtk")
138 std::ostringstream increment_stream;
139 increment_stream << std::setw(static_cast<int>(n_trailing_digits))
140 << std::setfill(
'0') << increment;
141 const std::string filename = file_prefix +
"_" + increment_stream.str() +
".vtk";
142 std::ofstream vtk_output(filename);
143 data_out.write_vtk(vtk_output);
145 else if (file_type ==
"xdmf")
147#ifdef DEAL_II_WITH_HDF5
148 std::ostringstream increment_stream;
149 increment_stream << std::setw(static_cast<int>(n_trailing_digits))
150 << std::setfill(
'0') << increment;
152 const std::string h5_filename =
153 file_prefix +
"_" + increment_stream.str() +
".h5";
154 const std::string xdmf_filename =
155 file_prefix +
"_" + increment_stream.str() +
".xdmf";
158 dealii::DataOutBase::DataOutFilter data_filter(
159 dealii::DataOutBase::DataOutFilterFlags(
true,
true));
160 data_out.write_filtered_data(data_filter);
163 data_out.write_hdf5_parallel(data_filter, h5_filename, MPI_COMM_WORLD);
166 std::vector<dealii::XDMFEntry> xdmf_entries;
167 xdmf_entries.push_back(data_out.create_xdmf_entry(data_filter,
172 data_out.write_xdmf_file(xdmf_entries, xdmf_filename, MPI_COMM_WORLD);
177 "You are trying to write an XDMF file as an output; however, deal.II "
178 "was not built with HDF5. Please reconfig deal.II with HDF5."));
183 AssertThrow(
false, UnreachableCode());
187 for (
unsigned int index = 0; index < field_attributes.size(); ++index)