Ejemplo n.º 1
0
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;
		}
	}
}
Ejemplo n.º 2
0
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());
        }
    }
}
Ejemplo n.º 3
0
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;
		}
	}
}