OGS
EdgeRatioMetric.cpp
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#include "EdgeRatioMetric.h"
5
6#include "MathLib/MathTools.h"
7#include "MeshLib/Node.h"
8
9namespace MeshToolsLib
10{
12{
13 auto const& elements(_mesh.getElements());
14 auto const n_elements(_mesh.getNumberOfElements());
15 for (std::size_t k(0); k < n_elements; k++)
16 {
17 auto const& elem(*elements[k]);
18 std::unique_ptr<MeshLib::Element const> first_edge{elem.getEdge(0)};
19 auto sqr_min_edge_length =
20 MathLib::sqrDist(*first_edge->getNode(1), *first_edge->getNode(0));
21 auto sqr_max_edge_length = sqr_min_edge_length;
22 auto const n_edges(elem.getNumberOfEdges());
23 for (std::size_t i = 1; i < n_edges; i++)
24 {
25 std::unique_ptr<MeshLib::Element const> edge{elem.getEdge(i)};
26 auto const sqr_edge_length =
27 MathLib::sqrDist(*edge->getNode(1), *edge->getNode(0));
28 if (sqr_edge_length < sqr_min_edge_length)
29 {
30 sqr_min_edge_length = sqr_edge_length;
31 }
32 if (sqr_edge_length > sqr_max_edge_length)
33 {
34 sqr_max_edge_length = sqr_edge_length;
35 }
36 }
38 std::sqrt(sqr_min_edge_length / sqr_max_edge_length);
39 }
40}
41
42} // namespace MeshToolsLib
std::vector< double > _element_quality_metric
double sqrDist(MathLib::Point3d const &p0, MathLib::Point3d const &p1)
Definition Point3d.cpp:19
void calculateQuality() override
Calculates the quality metric for each element of the mesh.