OGS
MeshLib::SizeDifferenceMetric Struct Referencefinal

Detailed Description

Calculates the quality of mesh elements based on the difference of element size in comparison to the size of its neighbors.

Definition at line 26 of file SizeDifferenceMetric.h.

#include <SizeDifferenceMetric.h>

Inheritance diagram for MeshLib::SizeDifferenceMetric:
[legend]
Collaboration diagram for MeshLib::SizeDifferenceMetric:
[legend]

Public Member Functions

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

Additional Inherited Members

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

Member Function Documentation

◆ calculateQuality()

void MeshLib::SizeDifferenceMetric::calculateQuality ( )
overridevirtual

Calculates the quality metric for each element of the mesh.

Implements MeshLib::ElementQualityMetric.

Definition at line 21 of file SizeDifferenceMetric.cpp.

22 {
23  std::vector<MeshLib::Element*> const& elements(_mesh.getElements());
24  std::size_t const nElements(_mesh.getNumberOfElements());
25  std::size_t const mesh_dim(_mesh.getDimension());
26 
27  for (std::size_t k = 0; k < nElements; ++k)
28  {
29  Element const& elem(*elements[k]);
30  if (elem.getDimension() < mesh_dim)
31  {
33  continue;
34  }
35 
36  std::size_t const n_neighbors(elem.getNumberOfNeighbors());
37  double const vol_a(elem.getContent());
38 
39  double worst_ratio(1.0);
40  for (std::size_t i = 0; i < n_neighbors; ++i)
41  {
42  MeshLib::Element const* const neighbor(elem.getNeighbor(i));
43  if (neighbor == nullptr)
44  {
45  continue;
46  }
47  double const vol_b(neighbor->getContent());
48  double const ratio =
49  (vol_a > vol_b) ? vol_b / vol_a : vol_a / vol_b;
50  if (ratio < worst_ratio)
51  {
52  worst_ratio = ratio;
53  }
54  }
55  _element_quality_metric[k] = worst_ratio;
56  }
57 }
std::vector< double > _element_quality_metric
unsigned getDimension() const
Returns the dimension of the mesh (determined by the maximum dimension over all elements).
Definition: Mesh.h:71
std::vector< Element * > const & getElements() const
Get the element-vector for the mesh.
Definition: Mesh.h:98
std::size_t getNumberOfElements() const
Get the number of elements.
Definition: Mesh.h:86

References MeshLib::ElementQualityMetric::_element_quality_metric, MeshLib::ElementQualityMetric::_mesh, MeshLib::Element::getContent(), MeshLib::Mesh::getDimension(), MeshLib::Element::getDimension(), MeshLib::Mesh::getElements(), MeshLib::Element::getNeighbor(), MeshLib::Mesh::getNumberOfElements(), and MeshLib::Element::getNumberOfNeighbors().

◆ ElementQualityMetric()

MeshLib::ElementQualityMetric::ElementQualityMetric
explicit

Definition at line 33 of file ElementQualityMetric.cpp.

23  : _mesh(mesh)
24 {
26 }

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