void AngleSkewMetric::calculateQuality () { const std::vector<MeshLib::Element*>& elements(_mesh.getElements()); const std::size_t nElements (_mesh.getNElements()); for (std::size_t k(0); k < nElements; k++) { Element const& elem (*elements[k]); switch (elem.getGeomType()) { case MeshElemType::LINE: _element_quality_metric[k] = -1.0; break; case MeshElemType::TRIANGLE: _element_quality_metric[k] = checkTriangle (elem); break; case MeshElemType::QUAD: _element_quality_metric[k] = checkQuad (elem); break; case MeshElemType::TETRAHEDRON: _element_quality_metric[k] = checkTetrahedron (elem); break; case MeshElemType::HEXAHEDRON: _element_quality_metric[k] = checkHexahedron (elem); break; case MeshElemType::PRISM: _element_quality_metric[k] = checkPrism (elem); break; default: break; } } }
void EdgeRatioMetric::calculateQuality() { // get all elements of mesh const std::vector<MeshLib::Element*>& elements(_mesh.getElements()); const std::size_t nElements (_mesh.getNumberOfElements()); for (std::size_t k(0); k < nElements; k++) { Element const& elem (*elements[k]); switch (elem.getGeomType()) { case MeshElemType::LINE: _element_quality_metric[k] = 1.0; break; case MeshElemType::TRIANGLE: { _element_quality_metric[k] = checkTriangle(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2)); break; } case MeshElemType::QUAD: { _element_quality_metric[k] = checkQuad(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2), *elem.getNode(3)); break; } case MeshElemType::TETRAHEDRON: { _element_quality_metric[k] = checkTetrahedron(*elem.getNode(0), *elem.getNode(1), *elem.getNode(2), *elem.getNode(3)); break; } case MeshElemType::PRISM: { std::vector<const MathLib::Point3d*> pnts; for (std::size_t j(0); j < 6; j++) pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkPrism(pnts); break; } case MeshElemType::PYRAMID: { std::vector<const MathLib::Point3d*> pnts; for (std::size_t j(0); j < 5; j++) pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkPyramid(pnts); break; } case MeshElemType::HEXAHEDRON: { std::vector<const MathLib::Point3d*> pnts; for (std::size_t j(0); j < 8; j++) pnts.push_back(elem.getNode(j)); _element_quality_metric[k] = checkHexahedron(pnts); break; } default: ERR ("MeshQualityShortestLongestRatio::check () check for element type %s not implemented.", MeshElemType2String(elem.getGeomType()).c_str()); } } }
void MeshQualityShortestLongestRatio::check() { // get all elements of mesh const std::vector<MeshLib::Element*>& elements(_mesh->getElements()); const size_t nElements (_mesh->getNElements()); for (size_t k(0); k < nElements; k++) { const Element* elem (elements[k]); switch (elem->getType()) { case MshElemType::EDGE: _mesh_quality_measure[k] = 1.0; break; case MshElemType::TRIANGLE: { _mesh_quality_measure[k] = checkTriangle(elem->getNode(0), elem->getNode(1), elem->getNode(2)); break; } case MshElemType::QUAD: { _mesh_quality_measure[k] = checkQuad(elem->getNode(0), elem->getNode(1), elem->getNode(2), elem->getNode(3)); break; } case MshElemType::TETRAHEDRON: { _mesh_quality_measure[k] = checkTetrahedron(elem->getNode(0), elem->getNode(1), elem->getNode(2), elem->getNode(3)); break; } case MshElemType::PRISM: { std::vector<const GeoLib::Point*> pnts; for (size_t j(0); j < 6; j++) pnts.push_back(elem->getNode(j)); _mesh_quality_measure[k] = checkPrism(pnts); break; } case MshElemType::HEXAHEDRON: { std::vector<const GeoLib::Point*> pnts; for (size_t j(0); j < 8; j++) pnts.push_back(elem->getNode(j)); _mesh_quality_measure[k] = checkHexahedron(pnts); break; } default: std::cout << "MeshQualityShortestLongestRatio::check () check for element type " << MshElemType2String(elem->getType()) << " not implemented" << std::endl; } } }