include/meltpooldg/species_transport/output_post_processor.hpp Source File

Developer Documentation: include/meltpooldg/species_transport/output_post_processor.hpp Source File
Developer Documentation
output_post_processor.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/dofs/dof_handler.h>
4
5#include <deal.II/lac/la_parallel_vector.h>
6
7#include <deal.II/numerics/data_component_interpretation.h>
8#include <deal.II/numerics/data_postprocessor.h>
9
12
14
15#include <string>
16#include <vector>
17
19{
27 template <int dim, int n_species, typename number, typename View>
28 requires requires { typename View::state_type; }
29 class MassFractionPostProcessor : public dealii::DataPostprocessor<dim>
30 {
31 public:
43 MassFractionPostProcessor(const std::function<View(typename View::state_type &)> &view_creator,
44 const std::vector<std::string> &species_names)
47 {
48 Assert(
49 species_names.size() == n_species,
50 dealii::ExcMessage(
51 "The number of provided species names must match the number of species in the simulation."));
52 for (std::string &name : this->species_names)
53 {
54 name += "_mass_fraction";
55 }
56 }
57
58 std::vector<std::string>
59 get_names() const override
60 {
61 return species_names;
62 }
63
64 std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation>
66 {
67 return std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation>(
68 n_species, dealii::DataComponentInterpretation::component_is_scalar);
69 }
70
71 dealii::UpdateFlags
72 get_needed_update_flags() const override
73 {
74 return dealii::update_values;
75 }
76
87 void
88 evaluate_vector_field(const dealii::DataPostprocessorInputs::Vector<dim> &inputs,
89 std::vector<dealii::Vector<number>> &computed_quantities) const override
90 {
91 const unsigned int n_evaluation_points = inputs.solution_values.size();
92
93 for (unsigned int p = 0; p < n_evaluation_points; ++p)
94 {
95 typename View::state_type w(dealii::make_array_view(inputs.solution_values[p]));
96 const View accessor = view_creator(w);
97
98 for (int i = 0; i < n_species; ++i)
99 {
100 computed_quantities[p](i) = accessor.mass_fraction(i);
101 }
102 }
103 }
104
107 const std::function<View(typename View::state_type &)> view_creator;
108
110 std::vector<std::string> species_names;
111 };
112
120 template <int dim, int n_species, typename number, typename View>
121 requires requires { typename View::state_type; }
122 class PartialDensityPostProcessor : public dealii::DataPostprocessor<dim>
123 {
124 public:
137 const std::function<View(typename View::state_type &)> &view_creator,
138 const std::vector<std::string> &species_names)
141 {
142 Assert(
143 species_names.size() == n_species,
144 dealii::ExcMessage(
145 "The number of provided species names must match the number of species in the simulation."));
146 for (std::string &name : this->species_names)
147 {
148 name += "_partial_density";
149 }
150 }
151
152 std::vector<std::string>
153 get_names() const override
154 {
155 return species_names;
156 }
157
158 std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation>
160 {
161 return std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation>(
162 n_species, dealii::DataComponentInterpretation::component_is_scalar);
163 }
164
165 dealii::UpdateFlags
166 get_needed_update_flags() const override
167 {
168 return dealii::update_values;
169 }
170
181 void
182 evaluate_vector_field(const dealii::DataPostprocessorInputs::Vector<dim> &inputs,
183 std::vector<dealii::Vector<number>> &computed_quantities) const override
184 {
185 const unsigned int n_evaluation_points = inputs.solution_values.size();
186
187 for (unsigned int p = 0; p < n_evaluation_points; ++p)
188 {
189 typename View::state_type w(dealii::make_array_view(inputs.solution_values[p]));
190 const View accessor = view_creator(w);
191
192 for (int i = 0; i < n_species; ++i)
193 {
194 computed_quantities[p](i) = accessor.partial_density(i);
195 }
196 }
197 }
198
201 const std::function<View(typename View::state_type &)> view_creator;
202
204 std::vector<std::string> species_names;
205 };
206} // namespace MeltPoolDG::SpeciesTransport
Definition output_post_processor.hpp:30
void evaluate_vector_field(const dealii::DataPostprocessorInputs::Vector< dim > &inputs, std::vector< dealii::Vector< number > > &computed_quantities) const override
Definition output_post_processor.hpp:88
std::vector< std::string > get_names() const override
Definition output_post_processor.hpp:59
std::vector< std::string > species_names
Names of the species for output labeling.
Definition output_post_processor.hpp:110
MassFractionPostProcessor(const std::function< View(typename View::state_type &)> &view_creator, const std::vector< std::string > &species_names)
Definition output_post_processor.hpp:43
dealii::UpdateFlags get_needed_update_flags() const override
Definition output_post_processor.hpp:72
const std::function< View(typename View::state_type &)> view_creator
Definition output_post_processor.hpp:107
std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > get_data_component_interpretation() const override
Definition output_post_processor.hpp:65
Definition output_post_processor.hpp:123
std::vector< std::string > species_names
Names of the species for output labeling.
Definition output_post_processor.hpp:204
std::vector< std::string > get_names() const override
Definition output_post_processor.hpp:153
void evaluate_vector_field(const dealii::DataPostprocessorInputs::Vector< dim > &inputs, std::vector< dealii::Vector< number > > &computed_quantities) const override
Definition output_post_processor.hpp:182
std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > get_data_component_interpretation() const override
Definition output_post_processor.hpp:159
const std::function< View(typename View::state_type &)> view_creator
Definition output_post_processor.hpp:201
dealii::UpdateFlags get_needed_update_flags() const override
Definition output_post_processor.hpp:166
PartialDensityPostProcessor(const std::function< View(typename View::state_type &)> &view_creator, const std::vector< std::string > &species_names)
Definition output_post_processor.hpp:136
Definition boundary_conditions.hpp:8