0021073: EDF 1683 NETGENPLUGIN: Local size on edge creates unreguler 1D elements

Restore a lost fix (1.4.2.5.20.5 netgen45ForSalome.patch)
This commit is contained in:
eap 2011-04-22 13:05:35 +00:00
parent c62bdcf082
commit fee2e60207

View File

@ -267,7 +267,19 @@ diff -Naur netgen-4.9.13_orig/libsrc/occ/occgenmesh.cpp netgen-4.9.13_new/libsrc
}
// nsubedges = int(ceil(hvalue[DIVIDEEDGESECTIONS]));
@@ -323,6 +324,7 @@
@@ -279,7 +280,10 @@
{
if (hvalue[i1]/hvalue[DIVIDEEDGESECTIONS]*nsubedges >= i)
{
- params[i] = s0+(i1/double(DIVIDEEDGESECTIONS))*(s1-s0);
+ // For nsubedges comparable to DIVIDEEDGESECTIONS (SALOME issue 0021073)
+ //params[i] = s0+(i1/double(DIVIDEEDGESECTIONS))*(s1-s0);
+ double d1 = i1 - (hvalue[i1] - i*hvalue[DIVIDEEDGESECTIONS]/nsubedges)/(hvalue[i1]-hvalue[i1-1]);
+ params[i] = s0+(d1/double(DIVIDEEDGESECTIONS))*(s1-s0);
pnt = c->Value(params[i]);
ps[i-1] = MeshPoint (Point3d(pnt.X(), pnt.Y(), pnt.Z()));
i++;
@@ -323,6 +327,7 @@
(*testout) << "nedges = " << nedges << endl;
double eps = 1e-6 * geom.GetBoundingBox().Diam();
@ -275,7 +287,7 @@ diff -Naur netgen-4.9.13_orig/libsrc/occ/occgenmesh.cpp netgen-4.9.13_new/libsrc
for (int i = 1; i <= nvertices; i++)
{
@@ -332,7 +334,7 @@
@@ -332,7 +337,7 @@
bool exists = 0;
if (merge_solids)
for (PointIndex pi = 1; pi <= mesh.GetNP(); pi++)
@ -284,52 +296,52 @@ diff -Naur netgen-4.9.13_orig/libsrc/occ/occgenmesh.cpp netgen-4.9.13_new/libsrc
{
exists = 1;
break;
@@ -362,6 +364,7 @@
@@ -362,6 +367,7 @@
{
TopoDS_Face face = TopoDS::Face(exp1.Current());
int facenr = geom.fmap.FindIndex(face);
+ if ( facenr < 1 ) continue; // support of sub-meshes
+ if ( facenr < 1 ) continue; // support of SALOME sub-meshes
if (face2solid[0][facenr-1] == 0)
face2solid[0][facenr-1] = solidnr;
@@ -381,6 +384,7 @@
@@ -381,6 +387,7 @@
int facenr = 0;
int edgenr = 0;
+ edgenr = mesh.GetNSeg(); // support of sub-meshes
+ edgenr = mesh.GetNSeg(); // support of SALOME sub-meshes
(*testout) << "faces = " << geom.fmap.Extent() << endl;
int curr = 0;
@@ -442,6 +446,8 @@
@@ -442,6 +449,8 @@
//(*testout) << "ignoring degenerated edge" << endl;
continue;
}
+ if ( geom.emap.FindIndex(edge) < 1 )
+ continue; // support sub-meshes
+ continue; // support SALOME sub-meshes
if (geom.vmap.FindIndex(TopExp::FirstVertex (edge)) ==
geom.vmap.FindIndex(TopExp::LastVertex (edge)))
@@ -486,8 +492,8 @@
@@ -479,6 +488,8 @@
}
else
{
+ const double tol = std::max( BRep_Tool::Tolerance( TopExp::FirstVertex (edge)),
+ BRep_Tool::Tolerance( TopExp::LastVertex (edge)));
Point<3> fp = occ2ng (BRep_Tool::Pnt (TopExp::FirstVertex (edge)));
Point<3> lp = occ2ng (BRep_Tool::Pnt (TopExp::LastVertex (edge)));
@@ -486,8 +497,8 @@
pnums.Last() = -1;
for (PointIndex pi = 1; pi < first_ep; pi++)
{
- if (Dist2 (mesh[pi], fp) < eps*eps) pnums[0] = pi;
- if (Dist2 (mesh[pi], lp) < eps*eps) pnums.Last() = pi;
+ if (Dist2 (mesh[pi], fp) < eps2) pnums[0] = pi;
+ if (Dist2 (mesh[pi], lp) < eps2) pnums.Last() = pi;
+ if (Dist2 (mesh[pi], fp) < 2*tol*tol) pnums[0] = pi;
+ if (Dist2 (mesh[pi], lp) < 2*tol*tol) pnums.Last() = pi;
}
}
@@ -497,7 +503,7 @@
bool exists = 0;
int j;
for (j = first_ep; j <= mesh.GetNP(); j++)
- if ((mesh.Point(j)-Point<3>(mp[i-1])).Length() < eps)
+ if ((mesh.Point(j)-Point<3>(mp[i-1])).Length() < eps2)
{
exists = 1;
break;
@@ -633,7 +639,7 @@
@@ -633,7 +644,7 @@
}
(*testout) << "mesh face " << k << endl;
@ -338,7 +350,7 @@ diff -Naur netgen-4.9.13_orig/libsrc/occ/occgenmesh.cpp netgen-4.9.13_new/libsrc
geom.facemeshstatus[k-1] = -1;
@@ -901,7 +907,7 @@
@@ -901,7 +912,7 @@
// if (k != 36) continue;
// (*testout) << "optimize face " << k << endl;
@ -347,7 +359,7 @@ diff -Naur netgen-4.9.13_orig/libsrc/occ/occgenmesh.cpp netgen-4.9.13_new/libsrc
FaceDescriptor & fd = mesh.GetFaceDescriptor(k);
@@ -1229,7 +1235,7 @@
@@ -1229,7 +1240,7 @@
mindist = min (mindist, line.Dist(lines[num]));
}
@ -356,7 +368,7 @@ diff -Naur netgen-4.9.13_orig/libsrc/occ/occgenmesh.cpp netgen-4.9.13_new/libsrc
if (mindist < 1e-3)
{
@@ -1456,3 +1462,4 @@
@@ -1456,3 +1467,4 @@
}
#endif