OGS
ElementQualityInterface.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <memory>
7#include <vector>
8
9#include "BaseLib/Histogram.h"
10#include "MeshLib/Mesh.h"
17
18namespace MeshToolsLib
19{
20
25{
26public:
34
36 std::vector<double> const getQualityVector() const
37 {
39 {
40 return _quality_tester->getElementQuality();
41 }
42
43 std::vector<double> empty_quality_vec(0);
44 return empty_quality_vec;
45 }
46
50 BaseLib::Histogram<double> getHistogram(std::size_t n_bins = 0) const
51 {
53 {
54 return _quality_tester->getHistogram(
55 static_cast<std::size_t>(n_bins));
56 }
57
59 }
60
62 int writeHistogram(std::string const& file_name,
63 std::size_t n_bins = 0) const
64 {
65 if (_quality_tester == nullptr)
66 {
67 return 1;
68 }
69
70 BaseLib::Histogram<double> const histogram(
71 _quality_tester->getHistogram(n_bins));
72 histogram.write(file_name, _mesh.getName(),
73 MeshQualityType2String(_type));
74 return 0;
75 }
76
77private:
82 {
84 {
86 std::make_unique<MeshToolsLib::EdgeRatioMetric>(mesh);
87 }
89 {
91 std::make_unique<MeshToolsLib::ElementSizeMetric>(mesh);
92 }
94 {
96 std::make_unique<MeshToolsLib::SizeDifferenceMetric>(mesh);
97 }
99 {
101 std::make_unique<MeshToolsLib::AngleSkewMetric>(mesh);
102 }
104 {
106 std::make_unique<MeshToolsLib::RadiusEdgeRatioMetric>(mesh);
107 }
108 else
109 {
110 ERR("ElementQualityInterface::calculateElementQuality(): Unknown "
111 "MeshQualityType.");
112 return;
113 }
114 _quality_tester->calculateQuality();
115 }
116
119 std::unique_ptr<MeshToolsLib::ElementQualityMetric> _quality_tester;
120};
121
122} // namespace MeshToolsLib
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:40
int write(std::string const &file_name, std::string const &data_set_name, std::string const &param_name) const
Definition Histogram.cpp:15
std::unique_ptr< MeshToolsLib::ElementQualityMetric > _quality_tester
int writeHistogram(std::string const &file_name, std::size_t n_bins=0) const
Writes a histogram of the quality vector to a specified file.
std::vector< double > const getQualityVector() const
Returns the vector containing a quality measure for each element.
BaseLib::Histogram< double > getHistogram(std::size_t n_bins=0) const
void calculateElementQuality(MeshLib::Mesh const &mesh, MeshLib::MeshQualityType t)
ElementQualityInterface(MeshLib::Mesh const &mesh, MeshLib::MeshQualityType t)
Constructor.
MeshQualityType
Describes a mesh quality metric.
Definition MeshEnums.h:81