diff --git a/Geo/GModel.cpp b/Geo/GModel.cpp index 5eb4730cb7762b59d528fc0db8184cb60d8e90d1..e364b460b0fc9adc5aa5c1658914ac29f19f6955 100644 --- a/Geo/GModel.cpp +++ b/Geo/GModel.cpp @@ -757,16 +757,14 @@ MElement *GModel::getMeshElementByTag(int n) int GModel::getMeshElementIndex(MElement *e) { - int num = e->getNum(); - if(num >= _elementIndexCache.size()) return num; - return _elementIndexCache[num]; + std::map<int, int>::iterator it = _elementIndexCache.find(e->getNum()); + if(it != _elementIndexCache.end()) return it->second; + return e->getNum(); } void GModel::setMeshElementIndex(MElement *e, int index) { - int num = e->getNum(); - if(num >= _elementIndexCache.size()) _elementIndexCache.resize(num + 1, 0); - _elementIndexCache[num] = index; + _elementIndexCache[e->getNum()] = index; } template <class T> diff --git a/Geo/GModel.h b/Geo/GModel.h index 8cb2b55f11cf669dca747483ccb3e84f19fcccf4..6f0ad466df9f8aae5d242a78f580de4fec9515f7 100644 --- a/Geo/GModel.h +++ b/Geo/GModel.h @@ -51,7 +51,7 @@ class GModel std::map<int, MVertex*> _vertexMapCache; std::vector<MElement*> _elementVectorCache; std::map<int, MElement*> _elementMapCache; - std::vector<int> _elementIndexCache; + std::map<int, int> _elementIndexCache; // ghost cell information (stores partitions for each element acting // as a ghost cell) diff --git a/Geo/GModelIO_Mesh.cpp b/Geo/GModelIO_Mesh.cpp index 46163460db0db4802bb710bd8f6ffd4f7b0af116..956a7f85bb667fab7ae9767d668523d74fd7afe2 100644 --- a/Geo/GModelIO_Mesh.cpp +++ b/Geo/GModelIO_Mesh.cpp @@ -695,7 +695,7 @@ int GModel::writeMSH(const std::string &name, double version, bool binary, fprintf(fp, "%d\n", numElements); int num = elementStartNum; std::map<MElement*, int> parentsNum; - _elementIndexCache.resize(numElements + 1); + _elementIndexCache.clear(); // points for(viter it = firstVertex(); it != lastVertex(); ++it)