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