From 7c6aab2cb4c07363c4623a1e411d8778a99c9f0c Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Thu, 14 Feb 2019 11:36:40 +0100
Subject: [PATCH] 4.1.5

---
 CHANGELOG.txt        |  5 +++--
 Geo/MEdge.cpp        | 24 +++++-------------------
 Geo/discreteFace.cpp |  7 ++-----
 doc/gmsh.html        | 24 ++++++++++++------------
 4 files changed, 22 insertions(+), 38 deletions(-)

diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 7b80f5ca44..9b12cc0262 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,5 +1,6 @@
-4.1.5: OpenMP improvements; added classifySurfaces in API; small improvements
-and bug fixes.
+4.1.5 (February 14, 2019): improved OpenMP parallelization, STL remeshing, mesh
+partitioning and high-order mesh optimization; added classifySurfaces in API;
+bug fixes.
 
 4.1.4 (February 3, 2019): improved ghost cell I/O; added getGhostElements,
 relocateNodes, getElementType, getElementFaceNodes, getElementEdgeNodes
diff --git a/Geo/MEdge.cpp b/Geo/MEdge.cpp
index 17389aae98..a27a2b8688 100644
--- a/Geo/MEdge.cpp
+++ b/Geo/MEdge.cpp
@@ -70,11 +70,10 @@ bool SortEdgeConsecutive(const std::vector<MEdge> &e,
 {
   if(e.empty()) return true;
   std::map<MVertex *, std::pair<MVertex *, MVertex *> > c;
-  //  printf("EDGES =  [ ");
+
   for(size_t i = 0; i < e.size(); i++) {
     MVertex *v0 = e[i].getVertex(0);
     MVertex *v1 = e[i].getVertex(1);
-    //    printf("(%d %d) ",v0->getNum(),v1->getNum());
     std::map<MVertex *, std::pair<MVertex *, MVertex *> >::iterator it0 =
       c.find(v0);
     std::map<MVertex *, std::pair<MVertex *, MVertex *> >::iterator it1 =
@@ -86,7 +85,7 @@ bool SortEdgeConsecutive(const std::vector<MEdge> &e,
         it0->second.second = v1;
       }
       else {
-        Msg::Error("wrong topology for a list of edges ");
+        Msg::Error("Wrong topology for a list of edges");
       }
     }
     if(it1 == c.end())
@@ -96,19 +95,10 @@ bool SortEdgeConsecutive(const std::vector<MEdge> &e,
         it1->second.second = v0;
       }
       else {
-        Msg::Error("wrong topology for a list of edges ");
+        Msg::Error("Wrong topology for a list of edges ");
       }
     }
   }
-  //  printf(" ] \n");
-
-  //  std::map<MVertex *, std::pair<MVertex *, MVertex *> >::iterator it  =
-  //  c.begin(); while (it != c.end()){
-  //    printf("%8d -- %7d %7d
-  //    \n",it->first->getNum(),it->second.first->getNum(),it->second.second ?
-  //    it->second.second->getNum():-1);
-  //    ++it;
-  //  }
 
   while(!c.empty()) {
     std::vector<MVertex *> v;
@@ -128,24 +118,20 @@ bool SortEdgeConsecutive(const std::vector<MEdge> &e,
     std::map<MVertex *, std::pair<MVertex *, MVertex *> >::iterator its =
       c.find(start);
 
-    //    if (it == c.end()){
-    //      Msg::Error ("impossible to find starting point %d",start->getNum());
-    //    }
-
     MVertex *prev =
       (its->second.second == start) ? its->second.first : its->second.second;
     MVertex *current = start;
 
     do {
       if(c.size() == 0) {
-        Msg::Warning("WRONG TOPOLOGY IN A WIRE");
+        Msg::Warning("Wrong topology in a wire");
         return false;
       }
       v.push_back(current);
       std::map<MVertex *, std::pair<MVertex *, MVertex *> >::iterator it =
         c.find(current);
       if(it == c.end() || it->first == NULL) {
-        Msg::Error("impossible to find %d", current->getNum());
+        Msg::Error("Impossible to find %d", current->getNum());
       }
       MVertex *v1 = it->second.first;
       MVertex *v2 = it->second.second;
diff --git a/Geo/discreteFace.cpp b/Geo/discreteFace.cpp
index 901b572929..c58e7e0de1 100644
--- a/Geo/discreteFace.cpp
+++ b/Geo/discreteFace.cpp
@@ -77,8 +77,6 @@ static void splitDiscreteEdge(discreteEdge *de, MVertex *v, GVertex *gv, int &TA
   de_new[1]  = new discreteEdge(de->model(), ++TAG, gv, gv1);
 
   de->setSplit(de_new[0],de_new[1]);
-  //  printf("splitting discrete edge %d\n",de->tag());
-
 
   int current = 0;
   de_new[current]->lines.push_back(de->lines[0]);
@@ -100,12 +98,12 @@ static void splitDiscreteEdge(discreteEdge *de, MVertex *v, GVertex *gv, int &TA
     old_eds = f[i]->edges();
     discreteFace *df = dynamic_cast<discreteFace *>(f[i]);
     if(!df){
-      Msg::Error ("A discrete edge is adjacent to a face that is not a discrete face : cannot remesh");
+      Msg::Error("A discrete edge is adjacent to a face that is not a discrete face - "
+                 "cannot remesh");
       return;
     }
     for (size_t j=0;j<old_eds.size();j++){
       if (old_eds[j]==de){
-	//	printf("replacing %d by %d %d in %d\n",de->tag(),de_new[0]->tag(),de_new[1]->tag(),f[i]->tag());
 	new_eds.push_back(de_new[0]);
 	new_eds.push_back(de_new[1]);
 	new_eds[0]->addFace(f[i]);
@@ -115,7 +113,6 @@ static void splitDiscreteEdge(discreteEdge *de, MVertex *v, GVertex *gv, int &TA
 	new_eds.push_back(old_eds[j]);
     }
     f[i]->set(new_eds);
-    //    printf("face %d has now %d edges\n",f[i]->tag(),new_eds.size());
   }
   de->model()->add(de_new[0]);
   de->model()->add(de_new[1]);
diff --git a/doc/gmsh.html b/doc/gmsh.html
index ade096ee8f..c6666158f3 100644
--- a/doc/gmsh.html
+++ b/doc/gmsh.html
@@ -88,21 +88,21 @@ Public License (GPL)</a>:
 <ul>
   <li>
     <div class="highlight">
-      Current stable release (version 4.1.4, 3 February 2019):
+      Current stable release (version 4.1.5, 14 February 2019):
       <ul>
         <li>Download Gmsh for
-          <a href="bin/Windows/gmsh-4.1.4-Windows64.zip">Windows 64-bit</a>,
-          <a href="bin/Windows/gmsh-4.1.4-Windows32.zip">Windows 32-bit</a>,
-          <a href="bin/Linux/gmsh-4.1.4-Linux64.tgz">Linux 64-bit</a>,
-          <a href="bin/Linux/gmsh-4.1.4-Linux32.tgz">Linux 32-bit</a> or
-          <a href="bin/MacOSX/gmsh-4.1.4-MacOSX.dmg">MacOS</a>
-        <li>Download the <a href="src/gmsh-4.1.4-source.tgz">source code</a>
+          <a href="bin/Windows/gmsh-4.1.5-Windows64.zip">Windows 64-bit</a>,
+          <a href="bin/Windows/gmsh-4.1.5-Windows32.zip">Windows 32-bit</a>,
+          <a href="bin/Linux/gmsh-4.1.5-Linux64.tgz">Linux 64-bit</a>,
+          <a href="bin/Linux/gmsh-4.1.5-Linux32.tgz">Linux 32-bit</a> or
+          <a href="bin/MacOSX/gmsh-4.1.5-MacOSX.dmg">MacOS</a>
+        <li>Download the <a href="src/gmsh-4.1.5-source.tgz">source code</a>
         <li>Download the Software Development Kit (SDK) for
-          <a href="bin/Windows/gmsh-4.1.4-Windows64-sdk.zip">Windows 64-bit</a>,
-          <a href="bin/Windows/gmsh-4.1.4-Windows32-sdk.zip">Windows 32-bit</a>,
-          <a href="bin/Linux/gmsh-4.1.4-Linux64-sdk.tgz">Linux 64-bit</a>,
-          <a href="bin/Linux/gmsh-4.1.4-Linux32-sdk.tgz">Linux 32-bit</a> or
-          <a href="bin/MacOSX/gmsh-4.1.4-MacOSX-sdk.tgz">MacOS</a>
+          <a href="bin/Windows/gmsh-4.1.5-Windows64-sdk.zip">Windows 64-bit</a>,
+          <a href="bin/Windows/gmsh-4.1.5-Windows32-sdk.zip">Windows 32-bit</a>,
+          <a href="bin/Linux/gmsh-4.1.5-Linux64-sdk.tgz">Linux 64-bit</a>,
+          <a href="bin/Linux/gmsh-4.1.5-Linux32-sdk.tgz">Linux 32-bit</a> or
+          <a href="bin/MacOSX/gmsh-4.1.5-MacOSX-sdk.tgz">MacOS</a>
       </ul>
     </div>
     <p>
-- 
GitLab