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

fix bug adapt visualization grid due to element of different type in same pview

parent 9d7d375d
No related branches found
No related tags found
No related merge requests found
...@@ -117,8 +117,10 @@ PView* GMSH_AnalyseCurvedMeshPlugin::execute(PView *v) ...@@ -117,8 +117,10 @@ PView* GMSH_AnalyseCurvedMeshPlugin::execute(PView *v)
_viewOrder = 10; _viewOrder = 10;
_elementToScan = NULL; _elementToScan = NULL;
_hoElement = NULL; _hoElement = NULL;
_allHoElements.clear(); for (int type = 0; type < 20; ++type) {
_jacAllElements.clear(); _allElem[type].clear();
_dataPViewJacAllElements[type].clear();
}
if (askedDim < 0 || askedDim > 4) askedDim = _m->getDim(); if (askedDim < 0 || askedDim > 4) askedDim = _m->getDim();
...@@ -566,8 +568,10 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeJacobianToScan(MElement *el, ...@@ -566,8 +568,10 @@ void GMSH_AnalyseCurvedMeshPlugin::_computeJacobianToScan(MElement *el,
} }
if (_numElementToScan == -7) { if (_numElementToScan == -7) {
_jacAllElements.push_back(_jacElementToScan); const int type = el->getType();
_allHoElements.push_back(_hoElement); // _jacAllElem[type].push_back(_jacElementToScan);
_allElem[type].push_back(std::make_pair(el, _hoElement));
_dataPViewJacAllElements[type][_hoElement->getNum()] = _jacElementToScan;
} }
} }
...@@ -632,51 +636,99 @@ void GMSH_AnalyseCurvedMeshPlugin::_createPViewElementToScan() ...@@ -632,51 +636,99 @@ void GMSH_AnalyseCurvedMeshPlugin::_createPViewElementToScan()
std::stringstream name; std::stringstream name;
if (_numElementToScan != -7) { if (_numElementToScan != -7) {
dataPView[_hoElement->getNum()] = _jacElementToScan; dataPView[_hoElement->getNum()] = _jacElementToScan;
name.str(std::string());
name << "Jacobian elem " << _numElementToScan; name << "Jacobian elem " << _numElementToScan;
_addElementInEntity(_hoElement, _entity); _addElementInEntity(_hoElement, _entity);
PView *view = new PView(name.str().c_str(), "ElementNodeData",
_m, dataPView, 0, 1);
PViewData *viewData = view->getData();
viewData->deleteInterpolationMatrices(_hoElement->getType());
viewData->setInterpolationMatrices(_hoElement->getType(),
pfs->coefficients, pfs->monomials,
pfs->coefficients, pfs->monomials);
} }
else { else {
for (int i = 0; i < _allHoElements.size(); ++i) { for (int type = 0; type < 20; ++type) {
dataPView[_allHoElements[i]->getNum()] = _jacAllElements[i]; if (_dataPViewJacAllElements[type].empty()) continue;
_addElementInEntity(_allHoElements[i], _entity); for (int i = 0; i < _allElem[type].size(); ++i) {
_addElementInEntity(_allElem[type][i].second, _entity);
}
name.str(std::string());
name << "Jacobian all ";
switch (type) {
case TYPE_TRI: name << "triangles"; break;
case TYPE_QUA: name << "quadrangles"; break;
default: name << "?"; break;
}
PView *view = new PView(name.str().c_str(), "ElementNodeData",
_m, _dataPViewJacAllElements[type], 0, 1);
PViewData *viewData = view->getData();
viewData->deleteInterpolationMatrices(type);
const int hoTag = _allElem[type][0].second->getTypeForMSH();
const nodalBasis *fs = BasisFactory::getNodalBasis(hoTag);
const polynomialBasis *pfs = dynamic_cast<const polynomialBasis*>(fs);
viewData->setInterpolationMatrices(type,
pfs->coefficients, pfs->monomials,
pfs->coefficients, pfs->monomials);
} }
name << "Jacobian all elem";
} }
PView *view = new PView(name.str().c_str(), "ElementNodeData",
_m, dataPView, 0, 1);
PViewData *viewData = view->getData();
viewData->deleteInterpolationMatrices(_hoElement->getType());
viewData->setInterpolationMatrices(_hoElement->getType(),
pfs->coefficients, pfs->monomials,
pfs->coefficients, pfs->monomials);
// Quality measures // Quality measures
fullVector<double> ige; fullVector<double> ige;
name.str(std::string());
if (_numElementToScan != -7) { if (_numElementToScan != -7) {
jacobianBasedQuality::sampleIGEMeasure(_elementToScan, _viewOrder, ige); jacobianBasedQuality::sampleIGEMeasure(_elementToScan, _viewOrder, ige);
dataPView[_hoElement->getNum()].clear(); dataPView.clear();
for (int j = 0; j < ige.size(); ++j) { for (int j = 0; j < ige.size(); ++j) {
dataPView[_hoElement->getNum()].push_back(ige(j)); dataPView[_hoElement->getNum()].push_back(ige(j));
} }
name.str(std::string());
name << "IGE elem " << _numElementToScan; name << "IGE elem " << _numElementToScan;
PView *view = new PView(name.str().c_str(), "ElementNodeData",
_m, dataPView, 0, 1);
PViewData *viewData = view->getData();
viewData->deleteInterpolationMatrices(_hoElement->getType());
viewData->setInterpolationMatrices(_hoElement->getType(),
pfs->coefficients, pfs->monomials,
pfs->coefficients, pfs->monomials);
} }
else { else {
for (int i = 0; i < _allHoElements.size(); ++i) { for (int type = 0; type < 20; ++type) {
jacobianBasedQuality::sampleIGEMeasure(_data[i].element(), _viewOrder, ige); if (_allElem[type].empty()) continue;
dataPView[_allHoElements[i]->getNum()].clear(); dataPView.clear();
for (int j = 0; j < ige.size(); ++j) {
dataPView[_allHoElements[i]->getNum()].push_back(ige(j)); for (int i = 0; i < _allElem[type].size(); ++i) {
MElement *loElement = _allElem[type][i].first;
MElement *hoElement = _allElem[type][i].second;
jacobianBasedQuality::sampleIGEMeasure(loElement, _viewOrder, ige);
for (int j = 0; j < ige.size(); ++j) {
dataPView[hoElement->getNum()].push_back(ige(j));
}
} }
name.str(std::string());
name << "IGE all ";
switch (type) {
case TYPE_TRI: name << "triangles"; break;
case TYPE_QUA: name << "quadrangles"; break;
default: name << "?"; break;
}
PView *view = new PView(name.str().c_str(), "ElementNodeData",
_m, dataPView, 0, 1);
PViewData *viewData = view->getData();
viewData->deleteInterpolationMatrices(type);
const int hoTag = _allElem[type][0].second->getTypeForMSH();
const nodalBasis *fs = BasisFactory::getNodalBasis(hoTag);
const polynomialBasis *pfs = dynamic_cast<const polynomialBasis*>(fs);
viewData->setInterpolationMatrices(type,
pfs->coefficients, pfs->monomials,
pfs->coefficients, pfs->monomials);
} }
name << "IGE all elem"; name << "IGE all elem";
} }
view = new PView(name.str().c_str(), "ElementNodeData", _m, dataPView, 0, 1);
viewData = view->getData();
viewData->deleteInterpolationMatrices(_hoElement->getType());
viewData->setInterpolationMatrices(_hoElement->getType(),
pfs->coefficients, pfs->monomials,
pfs->coefficients, pfs->monomials);
} }
#endif #endif
...@@ -47,8 +47,10 @@ private : ...@@ -47,8 +47,10 @@ private :
MElement *_elementToScan, *_hoElement; MElement *_elementToScan, *_hoElement;
int _viewOrder; int _viewOrder;
std::vector<double> _jacElementToScan; std::vector<double> _jacElementToScan;
std::vector<std::vector<double>> _jacAllElements;
std::vector<MElement*> _allHoElements; // All elements to scan
std::vector<std::pair<MElement*, MElement*>> _allElem[20];
std::map<int, std::vector<double>> _dataPViewJacAllElements[20];
GEntity *_entity; GEntity *_entity;
// for 1d, 2d, 3d // for 1d, 2d, 3d
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment