fix of new bug in 2d curved edges

This commit is contained in:
Joachim Schoeberl 2012-08-27 12:14:37 +00:00
parent 645a55f3d3
commit 33828d132f

View File

@ -883,21 +883,25 @@ namespace netgen
} }
Array<int> use_edge(nedges);
Array<int> edge_surfnr1(nedges); Array<int> edge_surfnr1(nedges);
Array<int> edge_surfnr2(nedges); Array<int> edge_surfnr2(nedges);
Array<int> swap_edge(nedges);
Array<EdgePointGeomInfo> edge_gi0(nedges); Array<EdgePointGeomInfo> edge_gi0(nedges);
Array<EdgePointGeomInfo> edge_gi1(nedges); Array<EdgePointGeomInfo> edge_gi1(nedges);
edge_surfnr1 = -1; use_edge = 0;
if (working) if (working)
for (SegmentIndex i = 0; i < mesh.GetNSeg(); i++) for (SegmentIndex i = 0; i < mesh.GetNSeg(); i++)
{ {
const Segment & seg = mesh[i]; const Segment & seg = mesh[i];
int edgenr = top.GetEdge (i); int edgenr = top.GetEdge (i);
use_edge[edgenr] = 1;
edge_surfnr1[edgenr] = seg.surfnr1; edge_surfnr1[edgenr] = seg.surfnr1;
edge_surfnr2[edgenr] = seg.surfnr2; edge_surfnr2[edgenr] = seg.surfnr2;
edge_gi0[edgenr] = seg.epgeominfo[0]; edge_gi0[edgenr] = seg.epgeominfo[0];
edge_gi1[edgenr] = seg.epgeominfo[1]; edge_gi1[edgenr] = seg.epgeominfo[1];
swap_edge[edgenr] = int (seg[0] > seg[1]);
} }
#ifdef PARALLEL #ifdef PARALLEL
@ -911,9 +915,10 @@ namespace netgen
partop.GetDistantEdgeNums (e+1, procs); partop.GetDistantEdgeNums (e+1, procs);
for (int j = 0; j < procs.Size(); j++) for (int j = 0; j < procs.Size(); j++)
{ {
senddata.Add (procs[j], edge_surfnr1[e]); senddata.Add (procs[j], use_edge[e]);
if (edge_surfnr1[e] != -1) if (use_edge[e])
{ {
senddata.Add (procs[j], edge_surfnr1[e]);
senddata.Add (procs[j], edge_surfnr2[e]); senddata.Add (procs[j], edge_surfnr2[e]);
senddata.Add (procs[j], edge_gi0[e].edgenr); senddata.Add (procs[j], edge_gi0[e].edgenr);
senddata.Add (procs[j], edge_gi0[e].body); senddata.Add (procs[j], edge_gi0[e].body);
@ -925,6 +930,7 @@ namespace netgen
senddata.Add (procs[j], edge_gi1[e].dist); senddata.Add (procs[j], edge_gi1[e].dist);
senddata.Add (procs[j], edge_gi1[e].u); senddata.Add (procs[j], edge_gi1[e].u);
senddata.Add (procs[j], edge_gi1[e].v); senddata.Add (procs[j], edge_gi1[e].v);
senddata.Add (procs[j], swap_edge[e]);
} }
} }
} }
@ -937,10 +943,10 @@ namespace netgen
partop.GetDistantEdgeNums (e+1, procs); partop.GetDistantEdgeNums (e+1, procs);
for (int j = 0; j < procs.Size(); j++) for (int j = 0; j < procs.Size(); j++)
{ {
int surfnr1 = int(recvdata[procs[j]][cnt[procs[j]]++]); use_edge[e] = int(recvdata[procs[j]][cnt[procs[j]]++]);
if (surfnr1 != -1) if (use_edge[e])
{ {
edge_surfnr1[e] = surfnr1; // int (recvdata[procs[j]][cnt[procs[j]]++]); edge_surfnr1[e] = int (recvdata[procs[j]][cnt[procs[j]]++]);
edge_surfnr2[e] = int (recvdata[procs[j]][cnt[procs[j]]++]); edge_surfnr2[e] = int (recvdata[procs[j]][cnt[procs[j]]++]);
edge_gi0[e].edgenr = int (recvdata[procs[j]][cnt[procs[j]]++]); edge_gi0[e].edgenr = int (recvdata[procs[j]][cnt[procs[j]]++]);
edge_gi0[e].body = int (recvdata[procs[j]][cnt[procs[j]]++]); edge_gi0[e].body = int (recvdata[procs[j]][cnt[procs[j]]++]);
@ -952,6 +958,7 @@ namespace netgen
edge_gi1[e].dist = recvdata[procs[j]][cnt[procs[j]]++]; edge_gi1[e].dist = recvdata[procs[j]][cnt[procs[j]]++];
edge_gi1[e].u = recvdata[procs[j]][cnt[procs[j]]++]; edge_gi1[e].u = recvdata[procs[j]][cnt[procs[j]]++];
edge_gi1[e].v = recvdata[procs[j]][cnt[procs[j]]++]; edge_gi1[e].v = recvdata[procs[j]][cnt[procs[j]]++];
swap_edge[e] = recvdata[procs[j]][cnt[procs[j]]++];
} }
} }
} }
@ -960,17 +967,18 @@ namespace netgen
#endif #endif
if (working) if (working)
for (int edgenr = 0; edgenr < edge_surfnr1.Size(); edgenr++) for (int edgenr = 0; edgenr < use_edge.Size(); edgenr++)
{ {
int segnr = edgenr; int segnr = edgenr;
if (edge_surfnr1[edgenr] == -1) continue; if (!use_edge[edgenr]) continue;
SetThreadPercent(double(edgenr)/edge_surfnr1.Size()*100.); SetThreadPercent(double(edgenr)/edge_surfnr1.Size()*100.);
PointIndex pi1, pi2; PointIndex pi1, pi2;
top.GetEdgeVertices (edgenr+1, pi1, pi2); top.GetEdgeVertices (edgenr+1, pi1, pi2);
bool swap = (pi1 > pi2); bool swap = swap_edge[edgenr]; // (pi1 > pi2);
if (swap) Swap (pi1, pi2);
Point<3> p1 = mesh[pi1]; Point<3> p1 = mesh[pi1];
Point<3> p2 = mesh[pi2]; Point<3> p2 = mesh[pi2];