mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-26 04:40:34 +05:00
Merge branch 'code_cleanup' into 'master'
Code cleanup See merge request jschoeberl/netgen!383
This commit is contained in:
commit
451dabb9bf
@ -351,6 +351,8 @@ namespace ngcore
|
|||||||
template <typename TEntry, typename TIndex, typename TRange, typename TFunc>
|
template <typename TEntry, typename TIndex, typename TRange, typename TFunc>
|
||||||
Table<TEntry, TIndex> CreateTable( const TRange & range, const TFunc & func, std::optional< size_t > cnt )
|
Table<TEntry, TIndex> CreateTable( const TRange & range, const TFunc & func, std::optional< size_t > cnt )
|
||||||
{
|
{
|
||||||
|
static Timer timer("CreateTable");
|
||||||
|
RegionTimer rt(timer);
|
||||||
std::unique_ptr<TableCreator<TEntry, TIndex>> pcreator;
|
std::unique_ptr<TableCreator<TEntry, TIndex>> pcreator;
|
||||||
|
|
||||||
if(cnt)
|
if(cnt)
|
||||||
@ -375,6 +377,8 @@ namespace ngcore
|
|||||||
template <typename TEntry, typename TIndex, typename TRange, typename TFunc>
|
template <typename TEntry, typename TIndex, typename TRange, typename TFunc>
|
||||||
Table<TEntry, TIndex> CreateSortedTable( const TRange & range, const TFunc & func, std::optional< size_t > cnt )
|
Table<TEntry, TIndex> CreateSortedTable( const TRange & range, const TFunc & func, std::optional< size_t > cnt )
|
||||||
{
|
{
|
||||||
|
static Timer timer("CreateSortedTable");
|
||||||
|
RegionTimer rt(timer);
|
||||||
Table<TEntry, TIndex> table = CreateTable<TEntry, TIndex>(range, func, cnt);
|
Table<TEntry, TIndex> table = CreateTable<TEntry, TIndex>(range, func, cnt);
|
||||||
ParallelForRange
|
ParallelForRange
|
||||||
(table.Range(), [&] (auto myrange)
|
(table.Range(), [&] (auto myrange)
|
||||||
|
@ -271,18 +271,18 @@ template <> NGX_INLINE DLL_HEADER const Ng_Node<0> Ngx_Mesh :: GetNode<0> (int v
|
|||||||
node.elements.ne = ia.Size();
|
node.elements.ne = ia.Size();
|
||||||
node.elements.ptr = (int*)&ia[0];
|
node.elements.ptr = (int*)&ia[0];
|
||||||
|
|
||||||
NgFlatArray<SegmentIndex> bia = mesh->GetTopology().GetVertexSegments(vnr);
|
auto bia = mesh->GetTopology().GetVertexSegments(vnr);
|
||||||
node.bnd_elements.ne = bia.Size();
|
node.bnd_elements.ne = bia.Size();
|
||||||
node.bnd_elements.ptr = (int*)&bia[0];
|
node.bnd_elements.ptr = (int*)&bia[0];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
NgFlatArray<SegmentIndex> ia = mesh->GetTopology().GetVertexSegments(vnr);
|
auto ia = mesh->GetTopology().GetVertexSegments(vnr);
|
||||||
node.elements.ne = ia.Size();
|
node.elements.ne = ia.Size();
|
||||||
node.elements.ptr = (int*)&ia[0];
|
node.elements.ptr = (int*)&ia[0];
|
||||||
|
|
||||||
NgFlatArray<int> bia = mesh->GetTopology().GetVertexPointElements(vnr);
|
auto bia = mesh->GetTopology().GetVertexPointElements(vnr);
|
||||||
node.bnd_elements.ne = bia.Size();
|
node.bnd_elements.ne = bia.Size();
|
||||||
node.bnd_elements.ptr = (int*)&bia[0];
|
node.bnd_elements.ptr = (int*)&bia[0];
|
||||||
break;
|
break;
|
||||||
|
@ -1653,7 +1653,7 @@ void Ng_GetVertexElements (int vnr, int * els)
|
|||||||
}
|
}
|
||||||
case 1:
|
case 1:
|
||||||
{
|
{
|
||||||
NgFlatArray<SegmentIndex> ia = mesh->GetTopology().GetVertexSegments(vnr);
|
auto ia = mesh->GetTopology().GetVertexSegments(vnr);
|
||||||
for (int i = 0; i < ia.Size(); i++) els[i] = ia[i]+1;
|
for (int i = 0; i < ia.Size(); i++) els[i] = ia[i]+1;
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
|
@ -16,13 +16,13 @@ namespace netgen
|
|||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnisotropicClusters :: Update(NgTaskManager tm, NgTracer tracer)
|
void AnisotropicClusters :: Update()
|
||||||
{
|
{
|
||||||
static int timer = NgProfiler::CreateTimer ("clusters");
|
static Timer timer("clusters");
|
||||||
// static int timer1 = NgProfiler::CreateTimer ("clusters1");
|
// static int timer1 = NgProfiler::CreateTimer ("clusters1");
|
||||||
// static int timer2 = NgProfiler::CreateTimer ("clusters2");
|
// static int timer2 = NgProfiler::CreateTimer ("clusters2");
|
||||||
// static int timer3 = NgProfiler::CreateTimer ("clusters3");
|
// static int timer3 = NgProfiler::CreateTimer ("clusters3");
|
||||||
NgProfiler::RegionTimer reg (timer);
|
RegionTimer reg (timer);
|
||||||
|
|
||||||
const MeshTopology & top = mesh.GetTopology();
|
const MeshTopology & top = mesh.GetTopology();
|
||||||
|
|
||||||
@ -81,13 +81,14 @@ namespace netgen
|
|||||||
cluster_reps.Elem(nnums[j]) = nnums[j];
|
cluster_reps.Elem(nnums[j]) = nnums[j];
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
ParallelForRange
|
ngcore::ParallelForRange
|
||||||
(tm, ne,
|
(mesh.VolumeElements().Range(),
|
||||||
[&] (size_t begin, size_t end)
|
[&] (auto myrange)
|
||||||
{
|
{
|
||||||
NgArray<int> nnums, ednums, fanums;
|
NgArray<int> nnums, ednums, fanums;
|
||||||
for (int i = begin+1; i <= end; i++)
|
for (int i_ : myrange)
|
||||||
{
|
{
|
||||||
|
int i = i_+1;
|
||||||
const Element & el = mesh.VolumeElement(i);
|
const Element & el = mesh.VolumeElement(i);
|
||||||
ELEMENT_TYPE typ = el.GetType();
|
ELEMENT_TYPE typ = el.GetType();
|
||||||
|
|
||||||
@ -110,7 +111,7 @@ namespace netgen
|
|||||||
for (int j = 0; j < nnums.Size(); j++)
|
for (int j = 0; j < nnums.Size(); j++)
|
||||||
cluster_reps.Elem(nnums[j]) = nnums[j];
|
cluster_reps.Elem(nnums[j]) = nnums[j];
|
||||||
}
|
}
|
||||||
});
|
}, ngcore::TasksPerThread(4));
|
||||||
|
|
||||||
// NgProfiler::StopTimer(timer1);
|
// NgProfiler::StopTimer(timer1);
|
||||||
// NgProfiler::StartTimer(timer2);
|
// NgProfiler::StartTimer(timer2);
|
||||||
@ -137,13 +138,14 @@ namespace netgen
|
|||||||
cluster_reps.Elem(nnums[j]) = nnums[j];
|
cluster_reps.Elem(nnums[j]) = nnums[j];
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
ParallelForRange
|
ngcore::ParallelForRange
|
||||||
(tm, nse,
|
(mesh.SurfaceElements().Range(),
|
||||||
[&] (size_t begin, size_t end)
|
[&] (auto myrange)
|
||||||
{
|
{
|
||||||
NgArrayMem<int,9> nnums, ednums;
|
NgArrayMem<int,9> nnums, ednums;
|
||||||
for (int i = begin+1; i <= end; i++)
|
for (int i_ : myrange)
|
||||||
{
|
{
|
||||||
|
int i = i_+1;
|
||||||
const Element2d & el = mesh.SurfaceElement(i);
|
const Element2d & el = mesh.SurfaceElement(i);
|
||||||
ELEMENT_TYPE typ = el.GetType();
|
ELEMENT_TYPE typ = el.GetType();
|
||||||
|
|
||||||
@ -163,7 +165,7 @@ namespace netgen
|
|||||||
for (int j = 0; j < nnums.Size(); j++)
|
for (int j = 0; j < nnums.Size(); j++)
|
||||||
cluster_reps.Elem(nnums[j]) = nnums[j];
|
cluster_reps.Elem(nnums[j]) = nnums[j];
|
||||||
}
|
}
|
||||||
});
|
}, ngcore::TasksPerThread(4));
|
||||||
|
|
||||||
|
|
||||||
// NgProfiler::StopTimer(timer2);
|
// NgProfiler::StopTimer(timer2);
|
||||||
@ -215,7 +217,8 @@ namespace netgen
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
(*tracer) ("update cluster, identify", false);
|
static Timer t("update cluster, identify");
|
||||||
|
RegionTimer rtr(t);
|
||||||
cnt++;
|
cnt++;
|
||||||
changed = 0;
|
changed = 0;
|
||||||
|
|
||||||
@ -338,7 +341,6 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
(*tracer) ("update cluster, identify", true);
|
|
||||||
}
|
}
|
||||||
while (changed);
|
while (changed);
|
||||||
// NgProfiler::StopTimer(timer3);
|
// NgProfiler::StopTimer(timer3);
|
||||||
|
@ -27,7 +27,7 @@ public:
|
|||||||
AnisotropicClusters (const Mesh & amesh);
|
AnisotropicClusters (const Mesh & amesh);
|
||||||
~AnisotropicClusters();
|
~AnisotropicClusters();
|
||||||
|
|
||||||
void Update(NgTaskManager tm = &DummyTaskManager, NgTracer trace = &DummyTracer);
|
void Update();
|
||||||
|
|
||||||
int GetVertexRepresentant (int vnr) const
|
int GetVertexRepresentant (int vnr) const
|
||||||
{ return cluster_reps.Get(vnr); }
|
{ return cluster_reps.Get(vnr); }
|
||||||
|
@ -916,6 +916,7 @@ namespace netgen
|
|||||||
|
|
||||||
void Mesh :: Load (istream & infile)
|
void Mesh :: Load (istream & infile)
|
||||||
{
|
{
|
||||||
|
static Timer timer("Mesh::Load"); RegionTimer rt(timer);
|
||||||
if (! (infile.good()) )
|
if (! (infile.good()) )
|
||||||
{
|
{
|
||||||
cout << "cannot load mesh" << endl;
|
cout << "cannot load mesh" << endl;
|
||||||
@ -956,6 +957,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "surfaceelements") == 0 || strcmp (str, "surfaceelementsgi")==0 || strcmp (str, "surfaceelementsuv") == 0)
|
if (strcmp (str, "surfaceelements") == 0 || strcmp (str, "surfaceelementsgi")==0 || strcmp (str, "surfaceelementsuv") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read surface elements"); RegionTimer rt1(t1);
|
||||||
infile >> n;
|
infile >> n;
|
||||||
PrintMessage (3, n, " surface elements");
|
PrintMessage (3, n, " surface elements");
|
||||||
|
|
||||||
@ -1020,6 +1022,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "volumeelements") == 0)
|
if (strcmp (str, "volumeelements") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read volume elements"); RegionTimer rt1(t1);
|
||||||
infile >> n;
|
infile >> n;
|
||||||
PrintMessage (3, n, " volume elements");
|
PrintMessage (3, n, " volume elements");
|
||||||
for (i = 1; i <= n; i++)
|
for (i = 1; i <= n; i++)
|
||||||
@ -1045,6 +1048,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "edgesegments") == 0)
|
if (strcmp (str, "edgesegments") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read edge segments"); RegionTimer rt1(t1);
|
||||||
infile >> n;
|
infile >> n;
|
||||||
for (i = 1; i <= n; i++)
|
for (i = 1; i <= n; i++)
|
||||||
{
|
{
|
||||||
@ -1059,6 +1063,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "edgesegmentsgi") == 0)
|
if (strcmp (str, "edgesegmentsgi") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read edge segmentsgi"); RegionTimer rt1(t1);
|
||||||
infile >> n;
|
infile >> n;
|
||||||
for (i = 1; i <= n; i++)
|
for (i = 1; i <= n; i++)
|
||||||
{
|
{
|
||||||
@ -1073,6 +1078,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "edgesegmentsgi2") == 0)
|
if (strcmp (str, "edgesegmentsgi2") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read edge segmentsgi2"); RegionTimer rt1(t1);
|
||||||
int a;
|
int a;
|
||||||
infile >> a;
|
infile >> a;
|
||||||
n=a;
|
n=a;
|
||||||
@ -1106,6 +1112,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "points") == 0)
|
if (strcmp (str, "points") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read points"); RegionTimer rt1(t1);
|
||||||
infile >> n;
|
infile >> n;
|
||||||
PrintMessage (3, n, " points");
|
PrintMessage (3, n, " points");
|
||||||
for (i = 1; i <= n; i++)
|
for (i = 1; i <= n; i++)
|
||||||
@ -1122,6 +1129,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (strcmp (str, "pointelements") == 0)
|
if (strcmp (str, "pointelements") == 0)
|
||||||
{
|
{
|
||||||
|
static Timer t1("read point elements"); RegionTimer rt1(t1);
|
||||||
infile >> n;
|
infile >> n;
|
||||||
PrintMessage (3, n, " pointelements");
|
PrintMessage (3, n, " pointelements");
|
||||||
for (i = 1; i <= n; i++)
|
for (i = 1; i <= n; i++)
|
||||||
@ -6698,7 +6706,7 @@ namespace netgen
|
|||||||
static Timer t("Update Topology"); RegionTimer reg(t);
|
static Timer t("Update Topology"); RegionTimer reg(t);
|
||||||
topology.Update(tm, tracer);
|
topology.Update(tm, tracer);
|
||||||
(*tracer)("call update clusters", false);
|
(*tracer)("call update clusters", false);
|
||||||
clusters->Update(tm, tracer);
|
clusters->Update();
|
||||||
(*tracer)("call update clusters", true);
|
(*tracer)("call update clusters", true);
|
||||||
#ifdef PARALLEL
|
#ifdef PARALLEL
|
||||||
if (paralleltop)
|
if (paralleltop)
|
||||||
|
@ -5,6 +5,7 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
using ngcore::ParallelForRange;
|
using ngcore::ParallelForRange;
|
||||||
using ngcore::INT;
|
using ngcore::INT;
|
||||||
|
using ngcore::TasksPerThread;
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
void QuickSortRec (NgFlatArray<T> data,
|
void QuickSortRec (NgFlatArray<T> data,
|
||||||
@ -367,6 +368,7 @@ namespace netgen
|
|||||||
void MeshTopology :: Update (NgTaskManager tm_unused, NgTracer tracer)
|
void MeshTopology :: Update (NgTaskManager tm_unused, NgTracer tracer)
|
||||||
{
|
{
|
||||||
static Timer timer("Topology::Update");
|
static Timer timer("Topology::Update");
|
||||||
|
static Timer timer_tables("Build vertex to element table");
|
||||||
RegionTimer reg (timer);
|
RegionTimer reg (timer);
|
||||||
|
|
||||||
#ifdef PARALLEL
|
#ifdef PARALLEL
|
||||||
@ -405,46 +407,34 @@ namespace netgen
|
|||||||
vertex to segment
|
vertex to segment
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
timer_tables.Start();
|
||||||
vert2element = mesh->CreatePoint2ElementTable();
|
vert2element = mesh->CreatePoint2ElementTable();
|
||||||
vert2surfelement = mesh->CreatePoint2SurfaceElementTable(0);
|
vert2surfelement = mesh->CreatePoint2SurfaceElementTable(0);
|
||||||
|
|
||||||
cnt = 0;
|
vert2segment = ngcore::CreateSortedTable<SegmentIndex, PointIndex>( mesh->LineSegments().Range(),
|
||||||
for (SegmentIndex si = 0; si < nseg; si++)
|
[&](auto & table, SegmentIndex segi)
|
||||||
{
|
{
|
||||||
const Segment & seg = mesh->LineSegment(si);
|
const Segment & seg = (*mesh)[segi];
|
||||||
cnt[seg[0]]++;
|
table.Add (seg[0], segi);
|
||||||
cnt[seg[1]]++;
|
table.Add (seg[1], segi);
|
||||||
}
|
}, np);
|
||||||
|
|
||||||
vert2segment = TABLE<SegmentIndex,PointIndex::BASE> (cnt);
|
vert2pointelement = ngcore::CreateSortedTable<int, PointIndex>( mesh->pointelements.Range(),
|
||||||
for (SegmentIndex si = 0; si < nseg; si++)
|
[&](auto & table, int pei)
|
||||||
{
|
{
|
||||||
const Segment & seg = mesh->LineSegment(si);
|
const Element0d & pointel = mesh->pointelements[pei];
|
||||||
vert2segment.AddSave (seg[0], si);
|
table.Add(pointel.pnum, pei);
|
||||||
vert2segment.AddSave (seg[1], si);
|
}, np);
|
||||||
}
|
timer_tables.Stop();
|
||||||
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
for (int pei = 0; pei < mesh->pointelements.Size(); pei++)
|
|
||||||
{
|
|
||||||
const Element0d & pointel = mesh->pointelements[pei];
|
|
||||||
cnt[pointel.pnum]++;
|
|
||||||
}
|
|
||||||
|
|
||||||
vert2pointelement = TABLE<int,PointIndex::BASE> (cnt);
|
|
||||||
for (int pei = 0; pei < mesh->pointelements.Size(); pei++)
|
|
||||||
{
|
|
||||||
const Element0d & pointel = mesh->pointelements[pei];
|
|
||||||
vert2pointelement.AddSave (pointel.pnum, pei);
|
|
||||||
}
|
|
||||||
(*tracer) ("Topology::Update setup tables", true);
|
(*tracer) ("Topology::Update setup tables", true);
|
||||||
|
|
||||||
|
|
||||||
if (buildedges)
|
if (buildedges)
|
||||||
{
|
{
|
||||||
static int timer1 = NgProfiler::CreateTimer ("topology::buildedges");
|
static Timer timer1("topology::buildedges");
|
||||||
NgProfiler::RegionTimer reg1 (timer1);
|
RegionTimer reg1(timer1);
|
||||||
|
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
PrintMessage (5, "Update edges ");
|
PrintMessage (5, "Update edges ");
|
||||||
@ -535,7 +525,7 @@ namespace netgen
|
|||||||
});
|
});
|
||||||
cnt[v] = cnti;
|
cnt[v] = cnti;
|
||||||
}
|
}
|
||||||
} );
|
}, TasksPerThread(4) );
|
||||||
|
|
||||||
// accumulate number of edges
|
// accumulate number of edges
|
||||||
int ned = edge2vert.Size();
|
int ned = edge2vert.Size();
|
||||||
@ -624,7 +614,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} );
|
}, TasksPerThread(4) );
|
||||||
|
|
||||||
|
|
||||||
if (build_parent_edges)
|
if (build_parent_edges)
|
||||||
@ -907,12 +897,12 @@ namespace netgen
|
|||||||
// generate faces
|
// generate faces
|
||||||
if (buildfaces)
|
if (buildfaces)
|
||||||
{
|
{
|
||||||
static int timer2 = NgProfiler::CreateTimer ("topology::buildfaces");
|
static Timer timer2("topology::buildfaces");
|
||||||
// static int timer2a = NgProfiler::CreateTimer ("topology::buildfacesa");
|
// static int timer2a = NgProfiler::CreateTimer ("topology::buildfacesa");
|
||||||
// static int timer2b = NgProfiler::CreateTimer ("topology::buildfacesb");
|
// static int timer2b = NgProfiler::CreateTimer ("topology::buildfacesb");
|
||||||
// static int timer2b1 = NgProfiler::CreateTimer ("topology::buildfacesb1");
|
// static int timer2b1 = NgProfiler::CreateTimer ("topology::buildfacesb1");
|
||||||
// static int timer2c = NgProfiler::CreateTimer ("topology::buildfacesc");
|
// static int timer2c = NgProfiler::CreateTimer ("topology::buildfacesc");
|
||||||
NgProfiler::RegionTimer reg2 (timer2);
|
RegionTimer reg2 (timer2);
|
||||||
|
|
||||||
if (id == 0)
|
if (id == 0)
|
||||||
PrintMessage (5, "Update faces ");
|
PrintMessage (5, "Update faces ");
|
||||||
@ -1051,7 +1041,7 @@ namespace netgen
|
|||||||
});
|
});
|
||||||
cnt[v] = cnti;
|
cnt[v] = cnti;
|
||||||
}
|
}
|
||||||
} );
|
}, TasksPerThread(4) );
|
||||||
// NgProfiler::StopTimer (timer2b1);
|
// NgProfiler::StopTimer (timer2b1);
|
||||||
|
|
||||||
// accumulate number of faces
|
// accumulate number of faces
|
||||||
@ -1156,7 +1146,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
}, TasksPerThread(4) );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
int oldnfa = face2vert.Size();
|
int oldnfa = face2vert.Size();
|
||||||
@ -1485,7 +1475,7 @@ namespace netgen
|
|||||||
for (auto f : hfaces)
|
for (auto f : hfaces)
|
||||||
AsAtomic(face_els[f-1])++;
|
AsAtomic(face_els[f-1])++;
|
||||||
}
|
}
|
||||||
});
|
}, TasksPerThread(4));
|
||||||
for (int i = 1; i <= nse; i++)
|
for (int i = 1; i <= nse; i++)
|
||||||
face_surfels[GetSurfaceElementFace (i)-1]++;
|
face_surfels[GetSurfaceElementFace (i)-1]++;
|
||||||
(*tracer) ("Topology::Update count face_els", true);
|
(*tracer) ("Topology::Update count face_els", true);
|
||||||
|
@ -67,8 +67,8 @@ class MeshTopology
|
|||||||
Array<SegmentIndex> edge2segment;
|
Array<SegmentIndex> edge2segment;
|
||||||
Table<ElementIndex, PointIndex> vert2element;
|
Table<ElementIndex, PointIndex> vert2element;
|
||||||
Table<SurfaceElementIndex, PointIndex> vert2surfelement;
|
Table<SurfaceElementIndex, PointIndex> vert2surfelement;
|
||||||
TABLE<SegmentIndex,PointIndex::BASE> vert2segment;
|
Table<SegmentIndex,PointIndex> vert2segment;
|
||||||
TABLE<int,PointIndex::BASE> vert2pointelement;
|
Table<int,PointIndex> vert2pointelement;
|
||||||
int timestamp;
|
int timestamp;
|
||||||
public:
|
public:
|
||||||
int GetNSurfedges() const {return surfedges.Size();}
|
int GetNSurfedges() const {return surfedges.Size();}
|
||||||
@ -183,10 +183,10 @@ public:
|
|||||||
FlatArray<SurfaceElementIndex> GetVertexSurfaceElements(PointIndex vnr) const
|
FlatArray<SurfaceElementIndex> GetVertexSurfaceElements(PointIndex vnr) const
|
||||||
{ return vert2surfelement[vnr]; }
|
{ return vert2surfelement[vnr]; }
|
||||||
|
|
||||||
NgFlatArray<SegmentIndex> GetVertexSegments (int vnr) const
|
FlatArray<SegmentIndex> GetVertexSegments (int vnr) const
|
||||||
{ return vert2segment[vnr]; }
|
{ return vert2segment[vnr]; }
|
||||||
|
|
||||||
NgFlatArray<int> GetVertexPointElements (int vnr) const
|
FlatArray<int> GetVertexPointElements (int vnr) const
|
||||||
{ return vert2pointelement[vnr]; }
|
{ return vert2pointelement[vnr]; }
|
||||||
|
|
||||||
int GetVerticesEdge ( int v1, int v2) const;
|
int GetVerticesEdge ( int v1, int v2) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user