include/meltpooldg/post_processing/divergence_calc.hpp Source File

Developer Documentation: include/meltpooldg/post_processing/divergence_calc.hpp Source File
Developer Documentation
divergence_calc.hpp
Go to the documentation of this file.
1#pragma once
4
6{
14 template <int dim, typename number>
15 class DivergenceCalculator : public PostProcessorBase<dim, number>
16 {
17 private:
19 const std::string request_variable;
20 number diver;
21
22 public:
28
32 number
34 {
35 return diver;
36 }
37
45 void
46 process(const unsigned int /*n_time_step*/) override
47 {
48 const bool update_ghosts =
49 !generic_data_out->get_vector(request_variable).has_ghost_elements();
50
51 if (update_ghosts)
52 generic_data_out->get_vector(request_variable).update_ghost_values();
53
54 dealii::QGauss<dim> quad(
55 generic_data_out->get_dof_handler(request_variable).get_fe().tensor_degree() + 1);
56
57 dealii::FEValues<dim> vel_values(generic_data_out->get_mapping(),
58 generic_data_out->get_dof_handler(request_variable).get_fe(),
59 quad,
60 dealii::update_gradients | dealii::update_JxW_values);
61
62 constexpr dealii::FEValuesExtractors::Vector velocities(0);
63
64 std::vector<number> div(vel_values.get_quadrature().size());
65
66 number diver_local = 0;
67 for (const auto &cell :
68 generic_data_out->get_dof_handler(request_variable).active_cell_iterators())
69 {
70 if (cell->is_locally_owned())
71 {
72 vel_values.reinit(cell);
73 vel_values[velocities].get_function_divergences(
74 generic_data_out->get_vector(request_variable), div);
75
76 for (const unsigned int q : vel_values.quadrature_point_indices())
77 diver_local += div[q] * vel_values.JxW(q);
78 }
79 }
80
81 diver = dealii::Utilities::MPI::sum(
82 diver_local, generic_data_out->get_vector(request_variable).get_mpi_communicator());
83 if (update_ghosts)
84 generic_data_out->get_vector(request_variable).zero_out_ghost_values();
85 }
86
90 void
91 reinit(const GenericDataOut<dim, number> &generic_data_out_in) override
92 {
93 generic_data_out = &generic_data_out_in;
94 }
95 };
96} // namespace MeltPoolDG::PostProcessingTools
A generic utility for managing simulation output data in the MeltPoolDG context.
Definition generic_data_out.hpp:32
void reinit(const GenericDataOut< dim, number > &generic_data_out_in) override
Definition divergence_calc.hpp:91
const GenericDataOut< dim, number > * generic_data_out
Definition divergence_calc.hpp:18
DivergenceCalculator(const GenericDataOut< dim, number > &generic_data_out, const std::string &request_variable)
Definition divergence_calc.hpp:23
const std::string request_variable
Definition divergence_calc.hpp:19
number diver
Definition divergence_calc.hpp:20
void process(const unsigned int) override
Definition divergence_calc.hpp:46
number get_divergence() const
Definition divergence_calc.hpp:33
Definition post_processor_base.hpp:9
Definition divergence_calc.hpp:6