mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-25 05:20:34 +05:00
speeding up many small domains
This commit is contained in:
parent
c2c0bbcbf5
commit
25342f7c3f
@ -477,6 +477,15 @@ namespace netgen
|
|||||||
if ( (*mesh)[si].domout > maxdomnr) maxdomnr = (*mesh)[si].domout;
|
if ( (*mesh)[si].domout > maxdomnr) maxdomnr = (*mesh)[si].domout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TableCreator<const Segment*> dom2seg_creator(maxdomnr+1);
|
||||||
|
for ( ; !dom2seg_creator.Done(); dom2seg_creator++)
|
||||||
|
for (const Segment & seg : mesh->LineSegments())
|
||||||
|
{
|
||||||
|
dom2seg_creator.Add (seg.domin, &seg);
|
||||||
|
dom2seg_creator.Add (seg.domout, &seg);
|
||||||
|
}
|
||||||
|
auto dom2seg = dom2seg_creator.MoveTable();
|
||||||
|
|
||||||
mesh->ClearFaceDescriptors();
|
mesh->ClearFaceDescriptors();
|
||||||
for (int i = 1; i <= maxdomnr; i++)
|
for (int i = 1; i <= maxdomnr; i++)
|
||||||
mesh->AddFaceDescriptor (FaceDescriptor (i, 0, 0, i));
|
mesh->AddFaceDescriptor (FaceDescriptor (i, 0, 0, i));
|
||||||
@ -593,6 +602,7 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
static Timer t_domain("Mesh domain");
|
static Timer t_domain("Mesh domain");
|
||||||
|
static Timer t_points("Mesh domain - find points");
|
||||||
for (int domnr = 1; domnr <= maxdomnr; domnr++)
|
for (int domnr = 1; domnr <= maxdomnr; domnr++)
|
||||||
{
|
{
|
||||||
RegionTimer rt(t_domain);
|
RegionTimer rt(t_domain);
|
||||||
@ -615,6 +625,8 @@ namespace netgen
|
|||||||
compress = -1;
|
compress = -1;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
|
|
||||||
|
t_points.Start();
|
||||||
|
/*
|
||||||
for (SegmentIndex si = 0; si < mesh->GetNSeg(); si++)
|
for (SegmentIndex si = 0; si < mesh->GetNSeg(); si++)
|
||||||
{
|
{
|
||||||
const auto & s = (*mesh)[si];
|
const auto & s = (*mesh)[si];
|
||||||
@ -631,9 +643,21 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
for (const Segment * seg : dom2seg[domnr])
|
||||||
|
if (seg->domin==domnr || seg->domout==domnr )
|
||||||
|
for (auto pi : {(*seg)[0], (*seg)[1]})
|
||||||
|
if (compress[pi]==-1)
|
||||||
|
{
|
||||||
|
meshing.AddPoint((*mesh)[pi], pi);
|
||||||
|
cnt++;
|
||||||
|
compress[pi] = cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PointGeomInfo gi;
|
PointGeomInfo gi;
|
||||||
gi.trignum = 1;
|
gi.trignum = 1;
|
||||||
|
/*
|
||||||
for (SegmentIndex si = 0; si < mesh->GetNSeg(); si++)
|
for (SegmentIndex si = 0; si < mesh->GetNSeg(); si++)
|
||||||
{
|
{
|
||||||
if ( (*mesh)[si].domin == domnr)
|
if ( (*mesh)[si].domin == domnr)
|
||||||
@ -647,6 +671,21 @@ namespace netgen
|
|||||||
compress[(*mesh)[si][0]], gi, gi);
|
compress[(*mesh)[si][0]], gi, gi);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (const Segment * seg : dom2seg[domnr])
|
||||||
|
{
|
||||||
|
if (seg->domin == domnr)
|
||||||
|
meshing.AddBoundaryElement (compress[(*seg)[0]],
|
||||||
|
compress[(*seg)[1]], gi, gi);
|
||||||
|
|
||||||
|
if (seg->domout == domnr)
|
||||||
|
meshing.AddBoundaryElement (compress[(*seg)[1]],
|
||||||
|
compress[(*seg)[0]], gi, gi);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
t_points.Stop();
|
||||||
|
|
||||||
if(mp.delaunay2d && cnt>100)
|
if(mp.delaunay2d && cnt>100)
|
||||||
meshing.Delaunay(*mesh, domnr, mp);
|
meshing.Delaunay(*mesh, domnr, mp);
|
||||||
|
Loading…
Reference in New Issue
Block a user