OGS
MeshToolsLib::ElementSizeMetric Class Referencefinal

Detailed Description

Calculates the quality of mesh elements based on length/area/volume

Definition at line 14 of file ElementSizeMetric.h.

#include <ElementSizeMetric.h>

Inheritance diagram for MeshToolsLib::ElementSizeMetric:
[legend]
Collaboration diagram for MeshToolsLib::ElementSizeMetric:
[legend]

Public Member Functions

void calculateQuality () override
 Calculates the quality metric for each element of the mesh.
 ElementQualityMetric (MeshLib::Mesh const &mesh)
Public Member Functions inherited from MeshToolsLib::ElementQualityMetric
 ElementQualityMetric (MeshLib::Mesh const &mesh)
virtual ~ElementQualityMetric ()=default
std::vector< double > const & getElementQuality () const
 Returns the result vector.
virtual BaseLib::Histogram< double > getHistogram (std::size_t n_bins=0) const

Private Member Functions

std::size_t calc1dQuality ()
std::size_t calc2dOr3dQuality ()

Additional Inherited Members

Protected Attributes inherited from MeshToolsLib::ElementQualityMetric
double _min = std::numeric_limits<double>::max()
double _max = 0
MeshLib::Mesh const & _mesh
std::vector< double > _element_quality_metric

Member Function Documentation

◆ calc1dQuality()

std::size_t MeshToolsLib::ElementSizeMetric::calc1dQuality ( )
private

Definition at line 34 of file ElementSizeMetric.cpp.

35{
36 const std::vector<MeshLib::Element*>& elements(_mesh.getElements());
37 const std::size_t nElems(elements.size());
38 std::size_t error_count(0);
39
40 for (std::size_t k(0); k < nElems; k++)
41 {
42 double area(std::numeric_limits<double>::max());
46 std::sqrt(std::abs(std::numeric_limits<double>::epsilon())))
47 {
48 error_count++;
49 }
50
51 // update _min and _max values
52 if (_min > area)
53 {
54 _min = area;
55 }
56 if (_max < area)
57 {
58 _max = area;
59 }
60 }
61 return error_count;
62}
std::vector< double > _element_quality_metric
double computeElementVolumeNumerically(MeshLib::Element const &e)

References MeshToolsLib::ElementQualityMetric::_element_quality_metric, MeshToolsLib::ElementQualityMetric::_max, MeshToolsLib::ElementQualityMetric::_mesh, MeshToolsLib::ElementQualityMetric::_min, and MeshToolsLib::computeElementVolumeNumerically().

Referenced by calculateQuality().

◆ calc2dOr3dQuality()

std::size_t MeshToolsLib::ElementSizeMetric::calc2dOr3dQuality ( )
private

Definition at line 64 of file ElementSizeMetric.cpp.

65{
66 const std::vector<MeshLib::Element*>& elements(_mesh.getElements());
67 const std::size_t nElems(elements.size());
68 std::size_t error_count(0);
69
70 for (std::size_t k(0); k < nElems; k++)
71 {
72 MeshLib::Element const& elem(*elements[k]);
73 if (elem.getDimension() < _mesh.getDimension())
74 {
76 continue;
77 }
78
79 double const volume =
81 if (volume < sqrt(std::abs(std::numeric_limits<double>::epsilon())))
82 {
83 error_count++;
84 }
85
86 if (_min > volume)
87 {
88 _min = volume;
89 }
90 if (_max < volume)
91 {
92 _max = volume;
93 }
95 }
96 return error_count;
97}

References MeshToolsLib::ElementQualityMetric::_element_quality_metric, MeshToolsLib::ElementQualityMetric::_max, MeshToolsLib::ElementQualityMetric::_mesh, MeshToolsLib::ElementQualityMetric::_min, MeshToolsLib::computeElementVolumeNumerically(), and MeshLib::Element::getDimension().

Referenced by calculateQuality().

◆ calculateQuality()

void MeshToolsLib::ElementSizeMetric::calculateQuality ( )
overridevirtual

Calculates the quality metric for each element of the mesh.

Implements MeshToolsLib::ElementQualityMetric.

Definition at line 12 of file ElementSizeMetric.cpp.

13{
14 std::size_t error_count(0);
15 if (_mesh.getDimension() == 1)
16 {
17 error_count = calc1dQuality();
18 }
19 else
20 {
21 error_count = calc2dOr3dQuality();
22 }
23
24 INFO(
25 "ElementSizeMetric::calculateQuality() minimum: {:f}, max_volume: {:f}",
26 _min,
27 _max);
28 if (error_count > 0)
29 {
30 WARN("Warning: {:d} elements with zero volume found.", error_count);
31 }
32}
void INFO(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:28
void WARN(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:34

References MeshToolsLib::ElementQualityMetric::_max, MeshToolsLib::ElementQualityMetric::_mesh, MeshToolsLib::ElementQualityMetric::_min, calc1dQuality(), calc2dOr3dQuality(), INFO(), and WARN().

◆ ElementQualityMetric()

MeshToolsLib::ElementQualityMetric::ElementQualityMetric ( MeshLib::Mesh const & mesh)
explicit

Definition at line 22 of file ElementQualityMetric.cpp.

13 : _mesh(mesh)
14{
15 _element_quality_metric.resize(_mesh.getNumberOfElements(), -1.0);
16}

The documentation for this class was generated from the following files: