CreateSurface2ElementTable for individual faces

This commit is contained in:
Matthias Hochsteger 2019-10-04 17:07:10 +02:00
parent a651a2d97e
commit 64a685c2ea
2 changed files with 30 additions and 11 deletions

View File

@ -6205,22 +6205,41 @@ namespace netgen
{ {
for (PointIndex pi : myrange) for (PointIndex pi : myrange)
QuickSort(elementsonnode[pi]); QuickSort(elementsonnode[pi]);
}); }, ngcore::TasksPerThread(4));
return move(elementsonnode); return move(elementsonnode);
} }
Table<SurfaceElementIndex, PointIndex> Mesh :: CreatePoint2SurfaceElementTable() const Table<SurfaceElementIndex, PointIndex> Mesh :: CreatePoint2SurfaceElementTable( int faceindex ) const
{ {
static Timer timer("Mesh::CreatePoint2SurfaceElementTable"); RegionTimer rt(timer);
TableCreator<SurfaceElementIndex, PointIndex> creator(GetNP()); TableCreator<SurfaceElementIndex, PointIndex> creator(GetNP());
for ( ; !creator.Done(); creator++)
ngcore::ParallelForRange if(faceindex==0)
(Range(surfelements), [&] (auto myrange) {
{ for ( ; !creator.Done(); creator++)
for (SurfaceElementIndex ei : myrange) ngcore::ParallelForRange
for (PointIndex pi : (*this)[ei].PNums()) (Range(surfelements), [&] (auto myrange)
creator.Add (pi, ei); {
}); for (SurfaceElementIndex ei : myrange)
for (PointIndex pi : (*this)[ei].PNums())
creator.Add (pi, ei);
}, ngcore::TasksPerThread(4));
}
else
{
Array<SurfaceElementIndex> face_els;
GetSurfaceElementsOfFace(faceindex, face_els);
for ( ; !creator.Done(); creator++)
ngcore::ParallelForRange
(Range(face_els), [&] (auto myrange)
{
for (auto i : myrange)
for (PointIndex pi : (*this)[face_els[i]].PNums())
creator.Add (pi, face_els[i]);
}, ngcore::TasksPerThread(4));
}
auto elementsonnode = creator.MoveTable(); auto elementsonnode = creator.MoveTable();
ngcore::ParallelForRange ngcore::ParallelForRange

View File

@ -762,7 +762,7 @@ namespace netgen
Table<ElementIndex, PointIndex> CreatePoint2ElementTable() const; Table<ElementIndex, PointIndex> CreatePoint2ElementTable() const;
Table<SurfaceElementIndex, PointIndex> CreatePoint2SurfaceElementTable() const; Table<SurfaceElementIndex, PointIndex> CreatePoint2SurfaceElementTable( int faceindex=0 ) const;
DLL_HEADER bool PureTrigMesh (int faceindex = 0) const; DLL_HEADER bool PureTrigMesh (int faceindex = 0) const;
DLL_HEADER bool PureTetMesh () const; DLL_HEADER bool PureTetMesh () const;