Skip to content
Snippets Groups Projects
Commit 7d74bc19 authored by Amaury Johnen's avatar Amaury Johnen
Browse files

(1) silence annoying warning + (2) consider completely inverted element as non invalid

parent 90ad93aa
No related branches found
No related tags found
No related merge requests found
...@@ -172,8 +172,12 @@ PView* GMSH_AnalyseCurvedMeshPlugin::execute(PView *v) ...@@ -172,8 +172,12 @@ PView* GMSH_AnalyseCurvedMeshPlugin::execute(PView *v)
std::map<int, std::vector<double> > dataPV; std::map<int, std::vector<double> > dataPV;
for (unsigned int i = 0; i < _data.size(); ++i) { for (unsigned int i = 0; i < _data.size(); ++i) {
MElement *const el = _data[i].element(); MElement *const el = _data[i].element();
if (el->getDim() == dim) if (el->getDim() == dim) {
dataPV[el->getNum()].push_back(_data[i].minJ()/_data[i].maxJ()); double q = 0;
if (_data[i].maxJ() > 0) q = _data[i].minJ() / _data[i].maxJ();
else if (_data[i].maxJ() < 0) q = _data[i].maxJ() / _data[i].minJ();
dataPV[el->getNum()].push_back(q);
}
} }
if (dataPV.size()) { if (dataPV.size()) {
std::stringstream name; std::stringstream name;
...@@ -248,6 +252,7 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity(int dim) ...@@ -248,6 +252,7 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity(int dim)
return; return;
} }
int cntInverted = 0;
std::set<GEntity*, GEntityLessThan>::iterator it; std::set<GEntity*, GEntityLessThan>::iterator it;
for (it = entities.begin(); it != entities.end(); ++it) { for (it = entities.begin(); it != entities.end(); ++it) {
GEntity *entity = *it; GEntity *entity = *it;
...@@ -335,13 +340,14 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity(int dim) ...@@ -335,13 +340,14 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinMaxJandValidity(int dim)
double min, max; double min, max;
jacobianBasedQuality::minMaxJacobianDeterminant(el, min, max, normals); jacobianBasedQuality::minMaxJacobianDeterminant(el, min, max, normals);
_data.push_back(data_elementMinMax(el, min, max)); _data.push_back(data_elementMinMax(el, min, max));
if (min < 0 && max < 0) { if (min < 0 && max < 0) ++cntInverted;
Msg::Warning("Element %d is completely inverted", el->getNum());
}
progress.next(); progress.next();
} }
delete normals; delete normals;
} }
if (cntInverted) {
Msg::Warning("%d elements are completely inverted", cntInverted);
}
_computedJac[dim-1] = true; _computedJac[dim-1] = true;
} }
...@@ -354,7 +360,7 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinIGE(int dim) ...@@ -354,7 +360,7 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinIGE(int dim)
for (unsigned int i = 0; i < _data.size(); ++i) { for (unsigned int i = 0; i < _data.size(); ++i) {
MElement *const el = _data[i].element(); MElement *const el = _data[i].element();
if (el->getDim() != dim) continue; if (el->getDim() != dim) continue;
if (_data[i].minJ() <= 0) { if (_data[i].minJ() <= 0 && _data[i].maxJ() > 0) {
_data[i].setMinS(0); _data[i].setMinS(0);
} }
else { else {
...@@ -375,7 +381,7 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinICN(int dim) ...@@ -375,7 +381,7 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeMinICN(int dim)
for (unsigned int i = 0; i < _data.size(); ++i) { for (unsigned int i = 0; i < _data.size(); ++i) {
MElement *const el = _data[i].element(); MElement *const el = _data[i].element();
if (el->getDim() != dim) continue; if (el->getDim() != dim) continue;
if (_data[i].minJ() <= 0) { if (_data[i].minJ() <= 0 && _data[i].maxJ() > 0) {
_data[i].setMinI(0); _data[i].setMinI(0);
} }
else { else {
...@@ -438,19 +444,22 @@ void GMSH_AnalyseCurvedMeshPlugin::_printStatJacobian() ...@@ -438,19 +444,22 @@ void GMSH_AnalyseCurvedMeshPlugin::_printStatJacobian()
avgminJ = avgratJ = avgratJc = 0; avgminJ = avgratJ = avgratJc = 0;
for (unsigned int i = 0; i < _data.size(); ++i) { for (unsigned int i = 0; i < _data.size(); ++i) {
double q = 0;
if ( _data[i].minJ() > 0) q = _data[i].minJ() / _data[i].maxJ();
infminJ = std::min(infminJ, _data[i].minJ()); infminJ = std::min(infminJ, _data[i].minJ());
supminJ = std::max(supminJ, _data[i].minJ()); supminJ = std::max(supminJ, _data[i].minJ());
avgminJ += _data[i].minJ(); avgminJ += _data[i].minJ();
infratJ = std::min(infratJ, _data[i].minJ()/_data[i].maxJ());
supratJ = std::max(supratJ, _data[i].minJ()/_data[i].maxJ()); double q = 0;
avgratJ += _data[i].minJ()/_data[i].maxJ(); if (_data[i].maxJ() > 0) q = _data[i].minJ() / _data[i].maxJ();
++count; else if (_data[i].maxJ() < 0) q = _data[i].maxJ() / _data[i].minJ();
infratJ = std::min(infratJ, q);
supratJ = std::max(supratJ, q);
avgratJ += q;
if (q < 1-1e-5) { if (q < 1-1e-5) {
avgratJc += _data[i].minJ()/_data[i].maxJ(); avgratJc += _data[i].minJ()/_data[i].maxJ();
++countc; ++countc;
} }
++count;
} }
avgminJ /= count; avgminJ /= count;
avgratJ /= count; avgratJ /= count;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment