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 return _quality_tester->getElementQuality();
40
41 std::vector<double> empty_quality_vec(0);
42 return empty_quality_vec;
43 }
44
48 BaseLib::Histogram<double> getHistogram(std::size_t n_bins = 0) const
49 {
51 return _quality_tester->getHistogram(
52 static_cast<std::size_t>(n_bins));
53
55 }
56
58 int writeHistogram(std::string const& file_name,
59 std::size_t n_bins = 0) const
60 {
61 if (_quality_tester == nullptr)
62 return 1;
63
64 BaseLib::Histogram<double> const histogram(
65 _quality_tester->getHistogram(n_bins));
66 histogram.write(file_name, _mesh.getName(),
67 MeshQualityType2String(_type));
68 return 0;
69 }
70
71private:
76 {
79 std::make_unique<MeshToolsLib::EdgeRatioMetric>(mesh);
82 std::make_unique<MeshToolsLib::ElementSizeMetric>(mesh);
85 std::make_unique<MeshToolsLib::SizeDifferenceMetric>(mesh);
88 std::make_unique<MeshToolsLib::AngleSkewMetric>(mesh);
91 std::make_unique<MeshToolsLib::RadiusEdgeRatioMetric>(mesh);
92 else
93 {
94 ERR("ElementQualityInterface::calculateElementQuality(): Unknown "
95 "MeshQualityType.");
96 return;
97 }
98 _quality_tester->calculateQuality();
99 }
100
103 std::unique_ptr<MeshToolsLib::ElementQualityMetric> _quality_tester;
104};
105
106} // 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:80