16 #ifndef __H2D_POSTPROCESSING_H
17 #define __H2D_POSTPROCESSING_H
20 #include "../function/mesh_function.h"
21 #include "../space/space.h"
28 namespace PostProcessing
30 template<
typename Scalar>
32 :
public Hermes::Mixins::TimeMeasurable,
33 public Hermes::Mixins::Loggable,
35 public Hermes::Mixins::StateQueryable
47 std::vector<int> get_changed_element_ids()
const;
50 virtual bool isOkay()
const;
51 inline std::string getClassName()
const {
return "Limiter"; }
54 void set_solution_vector(Scalar* sln);
57 Scalar* get_solution_vector();
61 std::vector<SpaceSharedPtr<Scalar> > spaces;
62 Scalar* solution_vector;
63 std::vector<MeshFunctionSharedPtr<Scalar> > limited_solutions;
64 std::vector<int> changed_element_ids;
66 virtual void process() = 0;
69 void init(Scalar* solution_vector_);
79 std::vector<std::pair<int, double> > get_correction_factors()
const;
80 void print_detailed_info(
bool print_details =
true);
81 int maximum_polynomial_order;
82 void set_p_coarsening_only();
83 static bool wider_bounds_on_boundary;
86 bool p_coarsening_only;
88 void init(
int maximum_polynomial_order);
92 void prepare_min_max_vertex_values(
bool quadratic);
96 double get_centroid_value_multiplied(
Element* e,
int component,
int mixed_derivative_index);
98 double get_edge_midpoint_value_multiplied(
Element* e,
int component,
int mixed_derivative_index,
int edge);
100 void impose_linear_correction_factor(
Element* e,
int component);
103 bool impose_quadratic_correction_factor(
Element* e,
int component);
105 double*** vertex_min_values;
106 double*** vertex_max_values;
107 void allocate_vertex_values();
108 void deallocate_vertex_values();
110 int mixed_derivatives_count;
111 std::vector<std::pair<int, double> > correction_factors;
117 template<
typename Scalar>
120 public Hermes::Mixins::Loggable
131 virtual Scalar* calculate(std::vector<std::string> markers) = 0;
141 std::vector<MeshFunctionSharedPtr<Scalar> > source_functions;
142 int number_of_integrals;
144 void add_results(Scalar* results_local, Scalar* results);
148 template<
typename Scalar>
162 Scalar* calculate(std::vector<std::string> markers);
167 template<
typename Scalar>
181 Scalar* calculate(std::vector<std::string> markers);
Class utilizes parallel calculation.
Stores one element of a mesh.
Surface integral calculator.
Volumetric integral calculator.
Used to pass the instances of Space around.
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.