From 35dd62c99eff6d7d1ed2d6f48089680de4e125ab Mon Sep 17 00:00:00 2001 From: Gaetan Bricteux <gaetan.bricteux@uclouvain.be> Date: Thu, 27 Oct 2011 12:15:11 +0000 Subject: [PATCH] subquads in polygon + fix physical --- Geo/MElementCut.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Geo/MElementCut.cpp b/Geo/MElementCut.cpp index b2817074c7..69d2b66d19 100644 --- a/Geo/MElementCut.cpp +++ b/Geo/MElementCut.cpp @@ -914,7 +914,8 @@ static void elementCutMesh(MElement *e, std::vector<gLevelset *> &RPN, int reg = getBorderTag(lsTag, c, newElemTags[2][0], borderElemTags[1]); int physTag = (!gePhysicals.size()) ? 0 : getBorderTag(lsTag, c, newPhysTags[2][0], borderPhysTags[1]); elements[2][reg].push_back(tri); - assignLsPhysical(GM, reg, 2, physicals, physTag, lsTag); + if(physTag) + assignLsPhysical(GM, reg, 2, physicals, physTag, lsTag); for(int i = 0; i < 2; i++) if(tri->getDomain(i)) borders[1].insert(std::pair<MElement*, MElement*>(tri->getDomain(i), tri)); @@ -1009,9 +1010,16 @@ static void elementCutMesh(MElement *e, std::vector<gLevelset *> &RPN, else mv[j] = it->second; } } - MQuadrangle *mq = new MQuadrangle(mv[0], mv[1], mv[2], mv[3], 0, 0); - int reg = getElementaryTag(quads[i]->lsTag(), elementary, newElemTags[2]); - elements[3][reg].push_back(mq); + MTriangle *mt0 = new MTriangle(mv[0], mv[1], mv[2], 0, 0); + MTriangle *mt1 = new MTriangle(mv[0], mv[2], mv[3], 0, 0); + if(quads[i]->lsTag() < 0){ + poly[0].push_back(mt0); + poly[0].push_back(mt1); + } + else{ + poly[1].push_back(mt0); + poly[1].push_back(mt1); + } } bool own = (eParent && !e->ownsParent()) ? false : true; @@ -1116,7 +1124,8 @@ static void elementCutMesh(MElement *e, std::vector<gLevelset *> &RPN, int reg = getBorderTag(lsTag, c, newElemTags[1][0], borderElemTags[0]); int physTag = (!gePhysicals.size()) ? 0 : getBorderTag(lsTag, c, newPhysTags[1][0], borderPhysTags[0]); elements[1][reg].push_back(lin); - assignLsPhysical(GM, reg, 1, physicals, physTag, lsTag); + if(physTag) + assignLsPhysical(GM, reg, 1, physicals, physTag, lsTag); for(int i = 0; i < 2; i++) if(lin->getDomain(i)) borders[0].insert(std::pair<MElement*, MElement*>(lin->getDomain(i), lin)); -- GitLab