From a2c4d7300e65ef0a22481ee38301660216efd379 Mon Sep 17 00:00:00 2001
From: Emilie Marchandise <emilie.marchandise@uclouvain.be>
Date: Fri, 28 Oct 2011 12:32:29 +0000
Subject: [PATCH] SplitMesh keeps all elements with positive levelset

---
 Geo/MElementCut.cpp | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp
index 69d2b66d19..ab10028bd8 100644
--- a/Geo/MElementCut.cpp
+++ b/Geo/MElementCut.cpp
@@ -566,10 +566,19 @@ static void elementSplitMesh(MElement *e, fullMatrix<double> &verticesLs,
 
   MElement *copy = e->copy(vertexMap, newParents, newDomains);
 
-  double lsMean = 0.;
-  for(int k = 0; k < e->getNumVertices(); k++)
-    lsMean += verticesLs(0, e->getVertex(k)->getIndex());
-  int lsTag = (lsMean < 0) ? 1 : -1;
+  //split acording to center of gravity
+  // double lsMean = 0.;
+  // for(int k = 0; k < e->getNumVertices(); k++)
+  //   lsMean += verticesLs(0, e->getVertex(k)->getIndex());
+  // int lsTag = (lsMean < 0) ? 1 : -1;
+
+  //EMI : better for embedded dirichlet with smoothed properties
+  //split according to values of vertices (keep +)
+  int lsTag = 1; //negative ls
+  for(int k = 0; k < e->getNumVertices(); k++){
+   double val = verticesLs(0, e->getVertex(k)->getIndex());
+   if (val > 0.0) { lsTag = -1; break; }
+  }
 
   switch (eType) {
   case MSH_TET_4 :
-- 
GitLab