include/meltpooldg/post_processing/slice.hpp Source File

Developer Documentation: include/meltpooldg/post_processing/slice.hpp Source File
Developer Documentation
slice.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/data_out_base.h>
4#include <deal.II/base/exceptions.h>
5#include <deal.II/base/mpi.h>
6
7#include <deal.II/fe/mapping_q1.h>
8
9#include <deal.II/grid/tria.h>
10
11#include <deal.II/numerics/data_out_resample.h>
12
16
17#include <fstream>
18#include <string>
19#include <tuple>
20#include <utility>
21#include <vector>
22
24{
30 template <int dim, typename number>
31 class SliceCreator : public PostProcessorBase<dim, number>
32 {
33 private:
35 const dealii::Triangulation<dim - 1, dim> &tria_slice;
36 const std::vector<std::string> request_variables;
38
39 // Collect file name and corresponding time step for the pvd-file
40 std::vector<std::pair<number, std::string>> times_and_names;
41 std::vector<unsigned int> idx_req_vars;
42
43 public:
48 const dealii::Triangulation<dim - 1, dim> &tria_slice,
49 const std::vector<std::string> &request_variables,
50 const OutputData<number> &output_data_in)
54 , output_data(output_data_in)
55 , idx_req_vars(generic_data_out.get_indices_data_request(request_variables))
56 {}
57
62 void
63 reinit(const GenericDataOut<dim, number> &generic_data_out_in) override
64 {
65 generic_data_out = &generic_data_out_in;
67 }
68
74 void
75 process(const unsigned int n_time_step) override
76 {
77 AssertThrow(generic_data_out != nullptr, dealii::ExcMessage("GenericDataOut is null."));
78 AssertThrow(dim > 1, dealii::ExcMessage("SliceCreator supports only dim>1."));
79
80 if (dim > 1)
81 {
82 // create DataOut of the slice
83 dealii::MappingQ1<dim - 1, dim> mapping_slice;
84 dealii::DataOutResample<dim, dim - 1, dim> data_out(tria_slice, mapping_slice);
85
86 for (const auto &i : idx_req_vars)
87 {
88 const auto &data = generic_data_out->entries[i];
89
90 // element wise ouput
91 if (std::get<0>(data) == nullptr)
92 data_out.add_data_vector(*std::get<2>(data),
93 std::get<3>(data),
94 dealii::DataOutResample<dim, dim - 1, dim>::type_cell_data,
95 std::get<4>(data));
96 // nodal output
97 else
98 data_out.add_data_vector(*std::get<0>(data),
99 *std::get<1>(data),
100 std::get<3>(data),
101 std::get<4>(data));
102 }
103
104
105 data_out.update_mapping(generic_data_out->get_mapping());
106 data_out.build_patches();
107
108 // write slice data to vtu files
109 const std::string pvtu_filename =
110 data_out.write_vtu_with_pvtu_record(output_data.directory + "/",
111 output_data.paraview.filename + "_slice",
112 n_time_step,
113 tria_slice.get_mpi_communicator(),
114 output_data.paraview.n_digits_timestep,
115 output_data.paraview.n_groups);
116
117 // write a pvd file relating the pvtu-file with a simulation time
118 if (dealii::Utilities::MPI::this_mpi_process(tria_slice.get_mpi_communicator()) == 0)
119 {
120 times_and_names.emplace_back(generic_data_out->get_time(), pvtu_filename);
121 std::ofstream pvd_output(output_data.directory + "/" + output_data.paraview.filename +
122 "_slice.pvd");
123 dealii::DataOutBase::write_pvd_record(pvd_output, times_and_names);
124 }
125 }
126 }
127 };
128} // namespace MeltPoolDG::PostProcessingTools
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
std::vector< unsigned int > get_indices_data_request(const std::vector< std::string > &req_var) const
Retrieve the entry indices of requested variables.
Definition generic_data_out.cpp:236
Definition post_processor_base.hpp:9
void reinit(const GenericDataOut< dim, number > &generic_data_out_in) override
Definition slice.hpp:63
std::vector< std::pair< number, std::string > > times_and_names
Definition slice.hpp:40
SliceCreator(const GenericDataOut< dim, number > &generic_data_out, const dealii::Triangulation< dim - 1, dim > &tria_slice, const std::vector< std::string > &request_variables, const OutputData< number > &output_data_in)
Definition slice.hpp:47
const std::vector< std::string > request_variables
Definition slice.hpp:36
const GenericDataOut< dim, number > * generic_data_out
Definition slice.hpp:34
std::vector< unsigned int > idx_req_vars
Definition slice.hpp:41
const dealii::Triangulation< dim - 1, dim > & tria_slice
Definition slice.hpp:35
void process(const unsigned int n_time_step) override
Definition slice.hpp:75
const OutputData< number > & output_data
Definition slice.hpp:37
Definition divergence_calc.hpp:6
Definition output_data.hpp:41