From 13b98a889380680d122c4a346669cf63a1298ab0 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Wed, 18 Feb 2015 16:58:45 +0000
Subject: [PATCH] reverse elements if physical < 0 for MESH, IR3 and DIFF
 formats, too

---
 Geo/MElement.cpp | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/Geo/MElement.cpp b/Geo/MElement.cpp
index a637d348a9..63db754390 100644
--- a/Geo/MElement.cpp
+++ b/Geo/MElement.cpp
@@ -1305,6 +1305,8 @@ void MElement::writeUNV(FILE *fp, int num, int elementary, int physical)
 void MElement::writeMESH(FILE *fp, int elementTagType, int elementary,
                          int physical)
 {
+  if(physical < 0) reverse();
+
   for(int i = 0; i < getNumVertices(); i++)
     if (getTypeForMSH() == MSH_TET_10 && i == 8)
       fprintf(fp, " %d", getVertex(9)->getIndex());
@@ -1313,18 +1315,24 @@ void MElement::writeMESH(FILE *fp, int elementTagType, int elementary,
     else
       fprintf(fp, " %d", getVertex(i)->getIndex());
   fprintf(fp, " %d\n", (elementTagType == 3) ? _partition :
-          (elementTagType == 2) ? physical : elementary);
+          (elementTagType == 2) ? abs(physical) : elementary);
+
+  if(physical < 0) reverse();
 }
 
 void MElement::writeIR3(FILE *fp, int elementTagType, int num, int elementary,
                         int physical)
 {
+  if(physical < 0) reverse();
+
   int numVert = getNumVertices();
   fprintf(fp, "%d %d %d", num, (elementTagType == 3) ? _partition :
-          (elementTagType == 2) ? physical : elementary, numVert);
+          (elementTagType == 2) ? abs(physical) : elementary, numVert);
   for(int i = 0; i < numVert; i++)
     fprintf(fp, " %d", getVertex(i)->getIndex());
   fprintf(fp, "\n");
+
+  if(physical < 0) reverse();
 }
 
 void MElement::writeBDF(FILE *fp, int format, int elementTagType, int elementary,
@@ -1337,8 +1345,10 @@ void MElement::writeBDF(FILE *fp, int format, int elementTagType, int elementary
   const char *cont[4] = {"E", "F", "G", "H"};
   int ncont = 0;
 
+  if(physical < 0) reverse();
+
   int tag =  (elementTagType == 3) ? _partition : (elementTagType == 2) ?
-    physical : elementary;
+    abs(physical) : elementary;
 
   if(format == 0){ // free field format
     fprintf(fp, "%s,%d,%d", str, _num, tag);
@@ -1366,23 +1376,29 @@ void MElement::writeBDF(FILE *fp, int format, int elementTagType, int elementary
       fprintf(fp, "%-8s%-8s%-8s", "0.", "0.", "0.");
     fprintf(fp, "\n");
   }
+
+  if(physical < 0) reverse();
 }
 
-void MElement::writeDIFF(FILE *fp, int num, bool binary, int physical_property)
+void MElement::writeDIFF(FILE *fp, int num, bool binary, int physical)
 {
   const char *str = getStringForDIFF();
   if(!str) return;
 
+  if(physical < 0) reverse();
+
   int n = getNumVertices();
   if(binary){
     // TODO
   }
   else{
-    fprintf(fp, "%d %s %d ", num, str, physical_property);
+    fprintf(fp, "%d %s %d ", num, str, abs(physical));
     for(int i = 0; i < n; i++)
       fprintf(fp, " %d", getVertexDIFF(i)->getIndex());
     fprintf(fp, "\n");
   }
+
+  if(physical < 0) reverse();
 }
 
 void MElement::writeINP(FILE *fp, int num)
-- 
GitLab