From cde24cd07588a79f6b40ccef86214733100ce997 Mon Sep 17 00:00:00 2001
From: Koen Hillewaert <koen.hillewaert@cenaero.be>
Date: Wed, 10 Aug 2016 11:54:24 +0000
Subject: [PATCH] solved incompatibility issue with old periodicity conventions
 for Argo

---
 Geo/GModelIO_MSH2.cpp |  2 +-
 Parser/Gmsh.y         | 17 ++++++++++-------
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/Geo/GModelIO_MSH2.cpp b/Geo/GModelIO_MSH2.cpp
index ece2fd82cc..63b7332ac1 100644
--- a/Geo/GModelIO_MSH2.cpp
+++ b/Geo/GModelIO_MSH2.cpp
@@ -707,7 +707,7 @@ int GModel::_readMSH2(const std::string &name)
     if(feof(fp))
       break;
 
-    if(!strncmp(&str[1], "Periodic",8)) {
+    if(!strncmp(&str[1], "Periodic",8) && strlen(&str[1]) == 8) {
       readMSHPeriodicNodes(fp,this);
       break;
     }
diff --git a/Parser/Gmsh.y b/Parser/Gmsh.y
index 4bc2a3f48e..4bad1489f2 100644
--- a/Parser/Gmsh.y
+++ b/Parser/Gmsh.y
@@ -6610,9 +6610,11 @@ void addPeriodicFace(int iTarget, int iSource,
   else{
     GFace *target = GModel::current()->getFaceByTag(abs(iTarget));
     GFace *source = GModel::current()->getFaceByTag(abs(iSource));
-    if (!target)  Msg::Error("Could not find edge %d for periodic copy from %d",
-                             iTarget,iSource);
-    target->setMeshMaster(source, affineTransform);
+    if (!target || !master) {
+			Msg::Error("Could not find edge slave %d or master %d for periodic copy",
+								 iTarget,iSource);
+		}
+		else target->setMeshMaster(source, affineTransform);
   }
 }
 
@@ -6626,7 +6628,7 @@ void addPeriodicFace(int iTarget, int iSource,
   for (; sIter != edgeCounterparts.end(); ++sIter) {
     Msg::Info("%d - %d", sIter->first, sIter->second);
   }
-
+	
   if (target) {
     GEO_Internals::MasterFace& mf =
       GModel::current()->getGEOInternals()->periodicFaces[iTarget];
@@ -6637,10 +6639,11 @@ void addPeriodicFace(int iTarget, int iSource,
   else{
     GFace *target = GModel::current()->getFaceByTag(abs(iTarget));
     GFace *source = GModel::current()->getFaceByTag(abs(iSource));
-    if (!target || !source)
-      Msg::Error("Could not find surface %d or %d for periodic copy",
+    if (!target || !source) {
+      Msg::Error("Could not find surface slave %d or master %d for periodic copy",
                  iTarget,iSource);
-    target->setMeshMaster(source, edgeCounterparts);
+		}
+		else target->setMeshMaster(source, edgeCounterparts);
   }
 }
 
-- 
GitLab