From fae0bd9acd8c8218dfbf013e57b67362380484ff Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Sat, 20 Jun 2009 09:34:54 +0000 Subject: [PATCH] fixed crash when combining adaptive views with different element types --- Common/OpenFile.cpp | 4 ++-- Post/PViewDataList.cpp | 15 ++++++++------- utils/api_demos/mainSimple.cpp | 3 ++- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/Common/OpenFile.cpp b/Common/OpenFile.cpp index bcc5da6f5a..059fd69b05 100644 --- a/Common/OpenFile.cpp +++ b/Common/OpenFile.cpp @@ -110,8 +110,8 @@ void SetBoundingBox() CTX::instance()->min[2] = bb.min().z(); CTX::instance()->max[2] = bb.max().z(); FinishUpBoundingBox(); CTX::instance()->lc = sqrt(SQU(CTX::instance()->max[0] - CTX::instance()->min[0]) + - SQU(CTX::instance()->max[1] - CTX::instance()->min[1]) + - SQU(CTX::instance()->max[2] - CTX::instance()->min[2])); + SQU(CTX::instance()->max[1] - CTX::instance()->min[1]) + + SQU(CTX::instance()->max[2] - CTX::instance()->min[2])); for(int i = 0; i < 3; i++) CTX::instance()->cg[i] = 0.5 * (CTX::instance()->min[i] + CTX::instance()->max[i]); } diff --git a/Post/PViewDataList.cpp b/Post/PViewDataList.cpp index 0907110f0e..ce67f3bdaa 100644 --- a/Post/PViewDataList.cpp +++ b/Post/PViewDataList.cpp @@ -198,9 +198,11 @@ void PViewDataList::_stat(List_T *list, int nbcomp, int nbelm, int nbnod, int nb if(haveInterpolationMatrices()){ std::vector<gmshMatrix<double>*> im; - if(getInterpolationMatrices(nbedg, im) == 4) + int nim = getInterpolationMatrices(nbedg, im); + if(nim == 4) nbnod = im[2]->size1(); - nbval = nbcomp * im[0]->size1(); + if(nim) + nbval = nbcomp * im[0]->size1(); } int nb = List_Nbr(list) / nbelm; @@ -663,13 +665,12 @@ bool PViewDataList::combineSpace(nameData &nd) return false; } - // copy interpolation from first merged dataset, if any - if(!i){ - for(std::map<int, std::vector<gmshMatrix<double>*> >::iterator it = - l->_interpolation.begin(); it != l->_interpolation.end(); it++) + // copy interpolation marices + for(std::map<int, std::vector<gmshMatrix<double>*> >::iterator it = + l->_interpolation.begin(); it != l->_interpolation.end(); it++) + if(_interpolation[it->first].empty()) for(unsigned int i = 0; i < it->second.size(); i++) _interpolation[it->first].push_back(new gmshMatrix<double>(*it->second[i])); - } // merge elememts List_Merge(l->SP, SP); NbSP += l->NbSP; List_Merge(l->VP, VP); NbVP += l->NbVP; diff --git a/utils/api_demos/mainSimple.cpp b/utils/api_demos/mainSimple.cpp index 9a14be051d..77a6737cdb 100644 --- a/utils/api_demos/mainSimple.cpp +++ b/utils/api_demos/mainSimple.cpp @@ -15,7 +15,8 @@ int main(int argc, char **argv) GmshInitialize(argc, argv); //GmshSetOption("Mesh", "Algorithm", 5); GModel *m = new GModel(); - m->readGEO("../../tutorial/t5.geo"); + //m->readGEO("../../tutorial/t5.geo"); + GmshMergeFile("../../tutorial/t5.geo"); // will also set the bbox m->mesh(3); for(GModel::riter it = m->firstRegion(); it != m->lastRegion(); ++it){ GRegion *r = *it; -- GitLab