From c73a077d697465c0b4eeeb475c6693f108debca2 Mon Sep 17 00:00:00 2001 From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be> Date: Wed, 12 Aug 2009 09:24:14 +0000 Subject: [PATCH] *** empty log message *** --- Geo/GEdgeCompound.cpp | 23 +++++++++ Geo/GEdgeCompound.h | 4 +- Mesh/meshGFaceBDS.cpp | 88 ++++++++++++++++++++++++++++++--- Numeric/gmshLinearSystemCSR.cpp | 2 +- 4 files changed, 108 insertions(+), 9 deletions(-) diff --git a/Geo/GEdgeCompound.cpp b/Geo/GEdgeCompound.cpp index 1e40b3984d..2a4c65742d 100644 --- a/Geo/GEdgeCompound.cpp +++ b/Geo/GEdgeCompound.cpp @@ -195,6 +195,29 @@ void GEdgeCompound::getLocalParameter ( const double &t, } } +// give a GEdge and +void GEdgeCompound::getCompoundParameter ( GEdge *ge, + const double &tLoc, + double &t) const +{ + + for (int iEdge = 0; iEdge < (int)_compound.size(); iEdge++){ + //printf("iEdge=%d tmin=%g\n",iEdge,_pars[iEdge]); + if (ge == _compound[iEdge]){ + double tmin = _pars[iEdge]; + double tmax = _pars[iEdge+1]; + Range<double> b = _compound[iEdge]->parBounds(0); + t = _orientation[iEdge] ? + tmin + (tLoc - b.low())/(b.high()-b.low()) * (tmax-tmin): + tmax - (tLoc - b.low())/(b.high()-b.low()) * (tmax-tmin); + //printf("bhigh=%g, blow=%g, global t=%g , tLoc=%g ,iEdge=%d\n",b.high(), b.low(), t,tLoc,iEdge); + return; + } + } +} + + + void GEdgeCompound::parametrize() { _pars.push_back(0.0); diff --git a/Geo/GEdgeCompound.h b/Geo/GEdgeCompound.h index 807b717528..0e5a272b6e 100644 --- a/Geo/GEdgeCompound.h +++ b/Geo/GEdgeCompound.h @@ -24,7 +24,9 @@ public: void getLocalParameter ( const double &t, int &iEdge, double & tLoc) const; - + void getCompoundParameter ( GEdge *ge, + const double &tLoc, + double &t) const; GEdgeCompound(GModel *m, int tag, std::vector<GEdge*> &compound); virtual ~GEdgeCompound(); Range<double> parBounds(int i) const; diff --git a/Mesh/meshGFaceBDS.cpp b/Mesh/meshGFaceBDS.cpp index e2b293f755..92c877b791 100644 --- a/Mesh/meshGFaceBDS.cpp +++ b/Mesh/meshGFaceBDS.cpp @@ -33,10 +33,10 @@ double computeEdgeLinearLength(BDS_Point *p1, BDS_Point *p2) } inline double computeEdgeLinearLength(BDS_Point *p1, - BDS_Point *p2, - GFace *f, - double SCALINGU, - double SCALINGV) + BDS_Point *p2, + GFace *f, + double SCALINGU, + double SCALINGV) { GPoint GP = f->point(SPoint2(0.5 * (p1->u + p2->u) * SCALINGU, @@ -56,6 +56,78 @@ inline double computeEdgeLinearLength(BDS_Point *p1, return l1 + l2; } +inline double computeEdgeLinearLength_new(BDS_Point *p1, + BDS_Point *p2, + GFace *f, + double SCALINGU, + double SCALINGV) +{ + const int nbSb = 10; + GPoint GP[nbSb-1]; + + for (int i=1;i<nbSb;i++){ + double xi = (double)i/nbSb; + GP[i-1] = f->point(SPoint2(((1-xi) * p1->u + xi * p2->u) * SCALINGU, + ((1-xi) * p1->v + xi * p2->v) * SCALINGV)); + if (!GP[i-1].succeeded()) + return computeEdgeLinearLength(p1,p2); + } + double l = 0; + for (int i=0;i<nbSb;i++){ + if (i == 0){ + const double dx1 = p1->X - GP[0].x(); + const double dy1 = p1->Y - GP[0].y(); + const double dz1 = p1->Z - GP[0].z(); + l+= sqrt(dx1 * dx1 + dy1 * dy1 + dz1 * dz1); + } + else if (i == nbSb-1){ + const double dx1 = p2->X - GP[nbSb-1].x(); + const double dy1 = p2->Y - GP[nbSb-1].y(); + const double dz1 = p2->Z - GP[nbSb-1].z(); + l+= sqrt(dx1 * dx1 + dy1 * dy1 + dz1 * dz1); + } + else{ + const double dx1 = GP[i].x() - GP[i-1].x(); + const double dy1 = GP[i].y() - GP[i-1].y(); + const double dz1 = GP[i].z() - GP[i-1].z(); + l+= sqrt(dx1 * dx1 + dy1 * dy1 + dz1 * dz1); + } + } + return l; +} + + + +inline double computeEdgeMiddleCoord_new(BDS_Point *p1, + BDS_Point *p2, + GFace *f, + double SCALINGU, + double SCALINGV) +{ + const int nbSb = 3; + double L = computeEdgeLinearLength(p1,p2); + GPoint GP[nbSb]; + for (int i=1;i<nbSb;i++){ + double xi = (double)i/nbSb; + GP[i-1] = f->point(SPoint2(((1-xi) * p1->u + xi * p2->u) * SCALINGU, + ((1-xi) * p1->v + xi * p2->v) * SCALINGV)); + if (!GP[i-1].succeeded()) + return 0.5; + const double dx1 = p1->X - GP[i-1].x(); + const double dy1 = p1->Y - GP[i-1].y(); + const double dz1 = p1->Z - GP[i-1].z(); + double LPLUS = sqrt(dx1 * dx1 + dy1 * dy1 + dz1 * dz1); + if (LPLUS > L*.5){ + double XIMINUS, XIPLUS,LPLUS,LMINUS; + if (i==1){ + XIMINUS=0; + } + return XIMINUS + (LPLUS - L*.5)/(LPLUS-LMINUS)/(nbSb-1); + } + } + return 0.5; +} + inline double computeEdgeMiddleCoord(BDS_Point *p1, BDS_Point *p2, GFace *f, @@ -431,9 +503,9 @@ void splitEdgePassUnsorted(GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split) if (!(*it)->deleted){ double lone = NewGetLc(*it, gf, m.scalingU, m.scalingV); if ((*it)->numfaces() == 2 && (lone > MAXE_)){ - //const double coord = 0.5; - const double coord = computeEdgeMiddleCoord((*it)->p1, (*it)->p2, gf, - m.scalingU, m.scalingV); + const double coord = 0.5; + //const double coord = computeEdgeMiddleCoord((*it)->p1, (*it)->p2, gf, + // m.scalingU, m.scalingV); BDS_Point *mid; GPoint gpp = gf->point(m.scalingU*(coord * (*it)->p1->u + (1 - coord) * (*it)->p2->u), @@ -478,6 +550,8 @@ void splitEdgePass(GFace *gf, BDS_Mesh &m, double MAXE_, int &nb_split) BDS_Edge *e = edges[i].second; if (!e->deleted){ const double coord = 0.5; + // const double coord = computeEdgeMiddleCoord((*it)->p1, (*it)->p2, gf, + // m.scalingU, m.scalingV); BDS_Point *mid ; double U = coord * e->p1->u + (1 - coord) * e->p2->u; double V = coord * e->p1->v + (1 - coord) * e->p2->v; diff --git a/Numeric/gmshLinearSystemCSR.cpp b/Numeric/gmshLinearSystemCSR.cpp index d80f80f8ca..01f9c03b7b 100644 --- a/Numeric/gmshLinearSystemCSR.cpp +++ b/Numeric/gmshLinearSystemCSR.cpp @@ -291,7 +291,7 @@ void sortColumns (int NbLines, template<> int gmshLinearSystemCSRGmm<double> :: systemSolve() { - if(!sorted) + if (!sorted) sortColumns(_b->size(), CSRList_Nbr(a_), (INDEX_TYPE *) ptr_->array, -- GitLab