From e48f5c9e1d8fd65bd2d510d5bfd7352d6c230244 Mon Sep 17 00:00:00 2001 From: Pierre-Alexandre Beaufort <pierre-alexandre.beaufort@uclouvain.be> Date: Wed, 14 Sep 2016 07:54:22 +0000 Subject: [PATCH] the linear system is only modified if the initial harmonic map is not one-to-one (1st order) --- Geo/discreteDiskFace.cpp | 18 +++++++++++------- Geo/discreteDiskFace.h | 3 ++- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Geo/discreteDiskFace.cpp b/Geo/discreteDiskFace.cpp index b7724e6bea..b52d22a38c 100644 --- a/Geo/discreteDiskFace.cpp +++ b/Geo/discreteDiskFace.cpp @@ -284,12 +284,15 @@ discreteDiskFace::discreteDiskFace(GFace *gf, triangulation* diskTriangulation, _totLength = geoTriangulation->bord.rbegin()->first; _U0 = geoTriangulation->bord.rbegin()->second; orderVertices(_totLength, _U0, _coords); - parametrize(); + parametrize(false); buildOct(CAD); printParamMesh(); - if (_order > 1 && !checkOrientationUV()){ - Msg::Info("discreteDiskFace:: parametrization is not one-to-one; the parametric mesh is going to be corrected."); - optimize(); + if (!checkOrientationUV()){ + Msg::Info("discreteDiskFace:: parametrization is not one-to-one; it is going to be corrected."); + if(_order==1) + parametrize(true); + else + optimize(); buildOct(CAD); printParamMesh(); } @@ -336,7 +339,7 @@ void discreteDiskFace::buildOct(std::vector<GFace*> *CAD) const Octree_Arrange(oct); } -bool discreteDiskFace::parametrize()// const +bool discreteDiskFace::parametrize(bool one2one)// const { // #improveme @@ -349,7 +352,7 @@ bool discreteDiskFace::parametrize()// const dofManager<double> myAssemblerU(lsys_u); // hashing dofManager<double> myAssemblerV(lsys_v); - if(_order>1){ + if(!one2one){ for(size_t i = 0; i < _U0.size(); i++){ MVertex *v = _U0[i]; const double theta = 2 * M_PI * _coords[i]; @@ -389,7 +392,8 @@ bool discreteDiskFace::parametrize()// const } - if(_order==1){ + if(one2one){ + Msg::Info("discreteDiskFace::parametrize \t Modifying discrete system"); checklsys(lsys_u,&myAssemblerU,1); checklsys(lsys_v,&myAssemblerV,0); } diff --git a/Geo/discreteDiskFace.h b/Geo/discreteDiskFace.h index b5aed56fa9..1719fe3d39 100644 --- a/Geo/discreteDiskFace.h +++ b/Geo/discreteDiskFace.h @@ -26,6 +26,7 @@ #include "linearSystemCSR.h" #include "dofManager.h" + inline int nodeLocalNum(MElement* e, MVertex* v) { for(int i=0; i<e->getNumVertices(); i++) @@ -219,7 +220,7 @@ class discreteDiskFaceTriangle { class discreteDiskFace : public GFace { GFace *_parent; void buildOct(std::vector<GFace*> *CAD = NULL) const; - bool parametrize();// const; + bool parametrize(bool);// const; void checklsys(linearSystemCSRTaucs<double>*,dofManager<double>*,int); void putOnView(bool,bool); bool checkOrientationUV(); -- GitLab