diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp index 9c7e895000ad278ebed4e3e3b537a096fd45f553..12b8bbd45391b694f0bfae9f7268a5851908f417 100644 --- a/Geo/MElement.cpp +++ b/Geo/MElement.cpp @@ -235,10 +235,19 @@ double MElement::maxDistToStraight() const return maxdx; } -double MElement::minAnisotropyMeasure(bool knownValid) +double MElement::minAnisotropyMeasure(bool knownValid, bool reversedOK) { #if defined(HAVE_MESH) - return jacobianBasedQuality::minAnisotropyMeasure(this, knownValid); + return jacobianBasedQuality::minAnisotropyMeasure(this, knownValid, reversedOK); +#else + return 0.; +#endif +} + +double MElement::minScaledJacobian(bool knownValid, bool reversedOK) +{ +#if defined(HAVE_MESH) + return jacobianBasedQuality::minScaledJacobian(this, knownValid, reversedOK); #else return 0.; #endif @@ -249,10 +258,10 @@ double MElement::specialQuality() #if defined(HAVE_MESH) double minJ, maxJ; jacobianBasedQuality::minMaxJacobianDeterminant(this, minJ, maxJ); - if (minJ == 0.) return 0; - if (minJ < 0 && maxJ >= 0) return minJ/maxJ; // accept -inf as an answer - if (minJ < 0 && maxJ < 0) return -std::numeric_limits<double>::infinity(); - return jacobianBasedQuality::minAnisotropyMeasure(this, true); + if (minJ <= 0.) return minJ; +// if (minJ < 0 && maxJ >= 0) return minJ/maxJ; // accept -inf as an answer +// if (minJ < 0 && maxJ < 0) return -std::numeric_limits<double>::infinity(); + return jacobianBasedQuality::minIsotropyMeasure(this, true); #else return 0; #endif @@ -263,9 +272,9 @@ double MElement::specialQuality2() #if defined(HAVE_MESH) double minJ, maxJ; jacobianBasedQuality::minMaxJacobianDeterminant(this, minJ, maxJ); - if (minJ == 0.) return 0; - if (minJ < 0 && maxJ >= 0) return minJ/maxJ; // accept -inf as an answer - if (minJ < 0 && maxJ < 0) return -std::numeric_limits<double>::infinity(); + if (minJ <= 0.) return minJ; +// if (minJ < 0 && maxJ >= 0) return minJ/maxJ; // accept -inf as an answer +// if (minJ < 0 && maxJ < 0) return -std::numeric_limits<double>::infinity(); return jacobianBasedQuality::minScaledJacobian(this, true); #else return 0; diff --git a/Geo/MElement.h b/Geo/MElement.h index 6ce208d477079ecfe45a36c7976c3fde85af27a0..cdf005092a8bade5fe920baef841b90fd308b672 100644 --- a/Geo/MElement.h +++ b/Geo/MElement.h @@ -216,7 +216,8 @@ class MElement signedInvCondNumRange(sICNMin, sICNMax); return sICNMin; } - double minAnisotropyMeasure(bool knownValid = false); + double minAnisotropyMeasure(bool knownValid = false, bool reversedOk = false); + double minScaledJacobian(bool knownValid = false, bool reversedOk = false); double specialQuality(); double specialQuality2(); virtual double angleShapeMeasure() { return 1.0; }