mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-13 22:50:33 +05:00
more ngcore::Arrays and PointIndex
This commit is contained in:
parent
868ee9643f
commit
b08a1a5db5
@ -152,15 +152,15 @@ namespace netgen
|
|||||||
|
|
||||||
if (allflines)
|
if (allflines)
|
||||||
{
|
{
|
||||||
if (allflines->Used (INDEX_2 (GetGlobalIndex (pi1),
|
if (allflines->Used (PointIndices<2>(GetGlobalIndex (pi1),
|
||||||
GetGlobalIndex (pi2))))
|
GetGlobalIndex (pi2))))
|
||||||
{
|
{
|
||||||
cerr << "ERROR Adfront2::AddLine: line exists" << endl;
|
cerr << "ERROR Adfront2::AddLine: line exists" << endl;
|
||||||
(*testout) << "ERROR Adfront2::AddLine: line exists" << endl;
|
(*testout) << "ERROR Adfront2::AddLine: line exists" << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
allflines->Set (INDEX_2 (GetGlobalIndex (pi1),
|
allflines->Set (PointIndices<2>(GetGlobalIndex (pi1),
|
||||||
GetGlobalIndex (pi2)), 1);
|
GetGlobalIndex (pi2)), 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return li;
|
return li;
|
||||||
@ -194,8 +194,8 @@ namespace netgen
|
|||||||
|
|
||||||
if (allflines)
|
if (allflines)
|
||||||
{
|
{
|
||||||
allflines->Set (INDEX_2 (GetGlobalIndex (lines[li].L().I1()),
|
allflines->Set (PointIndices<2>(GetGlobalIndex (lines[li].L().I1()),
|
||||||
GetGlobalIndex (lines[li].L().I2())), 2);
|
GetGlobalIndex (lines[li].L().I2())), 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
lines[li].Invalidate();
|
lines[li].Invalidate();
|
||||||
|
@ -13,7 +13,7 @@ FrontPoint3 :: FrontPoint3 ()
|
|||||||
globalindex.Invalidate(); // = -1;
|
globalindex.Invalidate(); // = -1;
|
||||||
nfacetopoint = 0;
|
nfacetopoint = 0;
|
||||||
frontnr = 1000;
|
frontnr = 1000;
|
||||||
cluster = 0;
|
cluster = PointIndex::INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ FrontPoint3 :: FrontPoint3 (const Point<3> & ap, PointIndex agi)
|
|||||||
globalindex = agi;
|
globalindex = agi;
|
||||||
nfacetopoint = 0;
|
nfacetopoint = 0;
|
||||||
frontnr = 1000;
|
frontnr = 1000;
|
||||||
cluster = 0;
|
cluster = PointIndex::INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ FrontFace :: FrontFace ()
|
|||||||
qualclass = 1;
|
qualclass = 1;
|
||||||
oldfront = 0;
|
oldfront = 0;
|
||||||
hashvalue = 0;
|
hashvalue = 0;
|
||||||
cluster = 0;
|
cluster = PointIndex::INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
FrontFace :: FrontFace (const MiniElement2d & af)
|
FrontFace :: FrontFace (const MiniElement2d & af)
|
||||||
@ -71,7 +71,7 @@ AdFront3 :: AdFront3 ()
|
|||||||
hashtable.Init(&points, &faces);
|
hashtable.Init(&points, &faces);
|
||||||
|
|
||||||
facetree = NULL;
|
facetree = NULL;
|
||||||
connectedpairs = NULL;
|
// connectedpairs = NULL;
|
||||||
|
|
||||||
rebuildcounter = -1;
|
rebuildcounter = -1;
|
||||||
lasti = 0;
|
lasti = 0;
|
||||||
@ -82,7 +82,7 @@ AdFront3 :: AdFront3 ()
|
|||||||
AdFront3 :: ~AdFront3 ()
|
AdFront3 :: ~AdFront3 ()
|
||||||
{
|
{
|
||||||
delete facetree;
|
delete facetree;
|
||||||
delete connectedpairs;
|
// delete connectedpairs;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdFront3 :: GetPoints (NgArray<Point<3> > & apoints) const
|
void AdFront3 :: GetPoints (NgArray<Point<3> > & apoints) const
|
||||||
@ -153,10 +153,10 @@ INDEX AdFront3 :: AddFace (const MiniElement2d & aface)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int cluster = 0;
|
PointIndex cluster = PointIndex::INVALID;
|
||||||
for (i = 1; i <= aface.GetNP(); i++)
|
for (i = 1; i <= aface.GetNP(); i++)
|
||||||
{
|
{
|
||||||
if (points[aface.PNum(i)].cluster)
|
if (points[aface.PNum(i)].cluster.IsValid())
|
||||||
cluster = points[aface.PNum(i)].cluster;
|
cluster = points[aface.PNum(i)].cluster;
|
||||||
}
|
}
|
||||||
for (i = 1; i <= aface.GetNP(); i++)
|
for (i = 1; i <= aface.GetNP(); i++)
|
||||||
@ -213,13 +213,13 @@ void AdFront3 :: DeleteFace (INDEX fi)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INDEX AdFront3 :: AddConnectedPair (const INDEX_2 & apair)
|
INDEX AdFront3 :: AddConnectedPair (PointIndices<2> apair)
|
||||||
{
|
{
|
||||||
if (!connectedpairs)
|
if (!connectedpairs)
|
||||||
connectedpairs = new TABLE<int, PointIndex::BASE> (GetNP());
|
connectedpairs = make_unique<DynamicTable<PointIndex, PointIndex>> (GetNP());
|
||||||
|
|
||||||
connectedpairs->Add (apair.I1(), apair.I2());
|
connectedpairs->Add (apair[0], apair[1]);
|
||||||
connectedpairs->Add (apair.I2(), apair.I1());
|
connectedpairs->Add (apair[1], apair[0]);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -231,11 +231,11 @@ void AdFront3 :: CreateTrees ()
|
|||||||
PointIndex pi;
|
PointIndex pi;
|
||||||
Point3d pmin, pmax;
|
Point3d pmin, pmax;
|
||||||
|
|
||||||
for (pi = PointIndex::BASE;
|
for (pi = IndexBASE<PointIndex>();
|
||||||
pi < GetNP()+PointIndex::BASE; pi++)
|
pi < GetNP()+IndexBASE<PointIndex>(); pi++)
|
||||||
{
|
{
|
||||||
const Point<3> & p = GetPoint(pi);
|
const Point<3> & p = GetPoint(pi);
|
||||||
if (pi == PointIndex::BASE)
|
if (pi == IndexBASE<PointIndex>())
|
||||||
{
|
{
|
||||||
pmin = p;
|
pmin = p;
|
||||||
pmax = p;
|
pmax = p;
|
||||||
@ -323,12 +323,12 @@ void AdFront3 :: RebuildInternalTables ()
|
|||||||
{
|
{
|
||||||
const MiniElement2d & el = faces.Get(i).Face();
|
const MiniElement2d & el = faces.Get(i).Face();
|
||||||
|
|
||||||
int mini = points[el.PNum(1)].cluster;
|
PointIndex mini = points[el.PNum(1)].cluster;
|
||||||
int maxi = mini;
|
PointIndex maxi = mini;
|
||||||
|
|
||||||
for (int j = 2; j <= 3; j++)
|
for (int j = 2; j <= 3; j++)
|
||||||
{
|
{
|
||||||
int ci = points[el.PNum(j)].cluster;
|
PointIndex ci = points[el.PNum(j)].cluster;
|
||||||
if (ci < mini) mini = ci;
|
if (ci < mini) mini = ci;
|
||||||
if (ci > maxi) maxi = ci;
|
if (ci > maxi) maxi = ci;
|
||||||
}
|
}
|
||||||
@ -366,7 +366,7 @@ void AdFront3 :: RebuildInternalTables ()
|
|||||||
cntcl++;
|
cntcl++;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
NgArray<double, PointIndex::BASE> clvol (np);
|
Array<double, PointIndex> clvol (np);
|
||||||
clvol = 0.0;
|
clvol = 0.0;
|
||||||
|
|
||||||
for (int i = 1; i <= faces.Size(); i++)
|
for (int i = 1; i <= faces.Size(); i++)
|
||||||
@ -398,8 +398,11 @@ void AdFront3 :: RebuildInternalTables ()
|
|||||||
|
|
||||||
|
|
||||||
int negvol = 0;
|
int negvol = 0;
|
||||||
|
/*
|
||||||
for (int i = PointIndex::BASE;
|
for (int i = PointIndex::BASE;
|
||||||
i < clvol.Size()+PointIndex::BASE; i++)
|
i < clvol.Size()+PointIndex::BASE; i++)
|
||||||
|
*/
|
||||||
|
for (auto i : clvol.Range())
|
||||||
{
|
{
|
||||||
if (clvol[i] < 0)
|
if (clvol[i] < 0)
|
||||||
negvol = 1;
|
negvol = 1;
|
||||||
@ -408,10 +411,10 @@ void AdFront3 :: RebuildInternalTables ()
|
|||||||
if (negvol)
|
if (negvol)
|
||||||
{
|
{
|
||||||
for (int i = 1; i <= faces.Size(); i++)
|
for (int i = 1; i <= faces.Size(); i++)
|
||||||
faces.Elem(i).cluster = 1;
|
faces.Elem(i).cluster = IndexBASE<PointIndex>();
|
||||||
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
for (PointIndex pi : points.Range())
|
for (PointIndex pi : points.Range())
|
||||||
points[pi].cluster = 1;
|
points[pi].cluster = IndexBASE<PointIndex>();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hashon)
|
if (hashon)
|
||||||
@ -495,9 +498,9 @@ int AdFront3 :: SelectBaseElement ()
|
|||||||
|
|
||||||
|
|
||||||
int AdFront3 :: GetLocals (int fstind,
|
int AdFront3 :: GetLocals (int fstind,
|
||||||
NgArray<Point3d, PointIndex::BASE> & locpoints,
|
Array<Point3d, PointIndex> & locpoints,
|
||||||
NgArray<MiniElement2d> & locfaces, // local index
|
NgArray<MiniElement2d> & locfaces, // local index
|
||||||
NgArray<PointIndex, PointIndex::BASE> & pindex,
|
Array<PointIndex, PointIndex> & pindex,
|
||||||
NgArray<INDEX> & findex,
|
NgArray<INDEX> & findex,
|
||||||
INDEX_2_HASHTABLE<int> & getconnectedpairs,
|
INDEX_2_HASHTABLE<int> & getconnectedpairs,
|
||||||
float xh,
|
float xh,
|
||||||
@ -529,7 +532,7 @@ int AdFront3 :: GetLocals (int fstind,
|
|||||||
locfaces3.SetSize(0);
|
locfaces3.SetSize(0);
|
||||||
findex2.SetSize(0);
|
findex2.SetSize(0);
|
||||||
|
|
||||||
int cluster = faces.Get(fstind).cluster;
|
PointIndex cluster = faces.Get(fstind).cluster;
|
||||||
|
|
||||||
pstind = faces.Get(fstind).Face().PNum(1);
|
pstind = faces.Get(fstind).Face().PNum(1);
|
||||||
p0 = points[pstind].P();
|
p0 = points[pstind].P();
|
||||||
@ -612,7 +615,7 @@ int AdFront3 :: GetLocals (int fstind,
|
|||||||
{
|
{
|
||||||
pindex.Append (pi);
|
pindex.Append (pi);
|
||||||
locpoints.Append (points[pi].P());
|
locpoints.Append (points[pi].P());
|
||||||
invpindex[pi] = pindex.Size()-1+PointIndex::BASE;
|
invpindex[pi] = pindex.Size()-1+IndexBASE<PointIndex>();
|
||||||
}
|
}
|
||||||
// locfaces.Elem(i).PNum(j) = locpoints.Append (points[pi].P());
|
// locfaces.Elem(i).PNum(j) = locpoints.Append (points[pi].P());
|
||||||
// }
|
// }
|
||||||
@ -625,22 +628,25 @@ int AdFront3 :: GetLocals (int fstind,
|
|||||||
|
|
||||||
if (connectedpairs)
|
if (connectedpairs)
|
||||||
{
|
{
|
||||||
for (i = 1; i <= locpoints.Size(); i++)
|
// for (i = 1; i <= locpoints.Size(); i++)
|
||||||
|
for (auto i : locpoints.Range())
|
||||||
{
|
{
|
||||||
int pind = pindex.Get(i);
|
PointIndex pind = pindex[i]; // .Get(i);
|
||||||
if (pind >= 1 && pind <= connectedpairs->Size ())
|
// if (pind.IsValid() && pind <= connectedpairs->Size ())
|
||||||
|
if (connectedpairs->Range().Contains(pind))
|
||||||
{
|
{
|
||||||
for (j = 1; j <= connectedpairs->EntrySize(pind); j++)
|
for (j = 1; j <= connectedpairs->EntrySize(pind); j++)
|
||||||
{
|
{
|
||||||
int oi = connectedpairs->Get(pind, j);
|
PointIndex oi = connectedpairs->Get(pind, j);
|
||||||
int other = invpindex.Get(oi);
|
PointIndex other = invpindex[oi];
|
||||||
if (other >= 1 && other <= pindex.Size() &&
|
// if (other >= 1 && other <= pindex.Size() &&
|
||||||
pindex.Get(other) == oi)
|
if (pindex.Range().Contains(other) &&
|
||||||
|
pindex[other] == oi)
|
||||||
{
|
{
|
||||||
// INDEX_2 coned(i, other);
|
// INDEX_2 coned(i, other);
|
||||||
// coned.Sort();
|
// coned.Sort();
|
||||||
// (*testout) << "connected: " << locpoints.Get(i) << "-" << locpoints.Get(other) << endl;
|
// (*testout) << "connected: " << locpoints.Get(i) << "-" << locpoints.Get(other) << endl;
|
||||||
getconnectedpairs.Set (INDEX_2::Sort (i, other), 1);
|
getconnectedpairs.Set (PointIndices<2>::Sort (i, other), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -669,7 +675,7 @@ int AdFront3 :: GetLocals (int fstind,
|
|||||||
void AdFront3 :: GetGroup (int fi,
|
void AdFront3 :: GetGroup (int fi,
|
||||||
NgArray<MeshPoint, PointIndex::BASE> & grouppoints,
|
NgArray<MeshPoint, PointIndex::BASE> & grouppoints,
|
||||||
NgArray<MiniElement2d> & groupelements,
|
NgArray<MiniElement2d> & groupelements,
|
||||||
NgArray<PointIndex, PointIndex::BASE> & pindex,
|
Array<PointIndex, PointIndex> & pindex,
|
||||||
NgArray<INDEX> & findex)
|
NgArray<INDEX> & findex)
|
||||||
{
|
{
|
||||||
// static NgArray<char> pingroup;
|
// static NgArray<char> pingroup;
|
||||||
@ -734,8 +740,9 @@ void AdFront3 :: GetGroup (int fi,
|
|||||||
if (points[pi].Valid())
|
if (points[pi].Valid())
|
||||||
{
|
{
|
||||||
grouppoints.Append (points[pi].P());
|
grouppoints.Append (points[pi].P());
|
||||||
pindex.Append (pi);
|
pindex.Append (pi);
|
||||||
invpindex[pi] = pindex.Size();
|
// invpindex[pi] = pindex.Size();
|
||||||
|
invpindex[pi] = pindex.Size()-1 + IndexBASE<PointIndex>();
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 1; i <= faces.Size(); i++)
|
for (int i = 1; i <= faces.Size(); i++)
|
||||||
@ -787,7 +794,7 @@ void AdFront3 :: SetStartFront (int /* baseelnp */)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AdFront3 :: PointInsideGroup(const NgArray<PointIndex, PointIndex::BASE> &grouppindex,
|
bool AdFront3 :: PointInsideGroup(const Array<PointIndex, PointIndex> &grouppindex,
|
||||||
const NgArray<MiniElement2d> &groupfaces) const
|
const NgArray<MiniElement2d> &groupfaces) const
|
||||||
{
|
{
|
||||||
for(auto pi : Range(points))
|
for(auto pi : Range(points))
|
||||||
@ -797,7 +804,7 @@ bool AdFront3 :: PointInsideGroup(const NgArray<PointIndex, PointIndex::BASE> &g
|
|||||||
for(const auto& f : groupfaces)
|
for(const auto& f : groupfaces)
|
||||||
{
|
{
|
||||||
for(auto i : Range(3))
|
for(auto i : Range(3))
|
||||||
if(grouppindex.Get(f.PNum(i+1)) == pi)
|
if(grouppindex[f.PNum(i+1)] == pi)
|
||||||
{
|
{
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
@ -814,9 +821,9 @@ bool AdFront3 :: PointInsideGroup(const NgArray<PointIndex, PointIndex::BASE> &g
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
for(const auto& f : groupfaces)
|
for(const auto& f : groupfaces)
|
||||||
{
|
{
|
||||||
const auto& p1 = points[grouppindex.Get(f.PNum(1))].P();
|
const auto& p1 = points[grouppindex[f.PNum(1)]].P();
|
||||||
auto v1 = points[grouppindex.Get(f.PNum(2))].P() - p1;
|
auto v1 = points[grouppindex[f.PNum(2)]].P() - p1;
|
||||||
auto v2 = points[grouppindex.Get(f.PNum(3))].P() - p1;
|
auto v2 = points[grouppindex[f.PNum(3)]].P() - p1;
|
||||||
for(auto i : Range(3))
|
for(auto i : Range(3))
|
||||||
{
|
{
|
||||||
a(i,0) = v1[i];
|
a(i,0) = v1[i];
|
||||||
|
@ -31,7 +31,7 @@ class FrontPoint3
|
|||||||
/// distance to original boundary
|
/// distance to original boundary
|
||||||
int frontnr;
|
int frontnr;
|
||||||
///
|
///
|
||||||
int cluster;
|
PointIndex cluster;
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
FrontPoint3 ();
|
FrontPoint3 ();
|
||||||
@ -125,7 +125,7 @@ private:
|
|||||||
///
|
///
|
||||||
int hashvalue;
|
int hashvalue;
|
||||||
///
|
///
|
||||||
int cluster;
|
PointIndex cluster;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
@ -172,7 +172,7 @@ public:
|
|||||||
///
|
///
|
||||||
friend class AdFront3;
|
friend class AdFront3;
|
||||||
|
|
||||||
int Cluster () const { return cluster; }
|
PointIndex Cluster () const { return cluster; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -182,14 +182,16 @@ public:
|
|||||||
class AdFront3
|
class AdFront3
|
||||||
{
|
{
|
||||||
///
|
///
|
||||||
NgArray<FrontPoint3, PointIndex::BASE, PointIndex> points;
|
// NgArray<FrontPoint3, PointIndex::BASE, PointIndex> points;
|
||||||
|
Array<FrontPoint3, PointIndex> points;
|
||||||
///
|
///
|
||||||
NgArray<FrontFace> faces;
|
NgArray<FrontFace> faces;
|
||||||
///
|
///
|
||||||
NgArray<PointIndex> delpointl;
|
Array<PointIndex> delpointl;
|
||||||
|
|
||||||
/// which points are connected to pi ?
|
/// which points are connected to pi ?
|
||||||
TABLE<int, PointIndex::BASE> * connectedpairs;
|
// TABLE<PointIndex, PointIndex::BASE> * connectedpairs;
|
||||||
|
unique_ptr<DynamicTable<PointIndex, PointIndex>> connectedpairs;
|
||||||
|
|
||||||
/// number of total front faces;
|
/// number of total front faces;
|
||||||
int nff;
|
int nff;
|
||||||
@ -214,8 +216,8 @@ class AdFront3
|
|||||||
int lasti;
|
int lasti;
|
||||||
/// minimal selection-value of baseelements
|
/// minimal selection-value of baseelements
|
||||||
int minval;
|
int minval;
|
||||||
NgArray<PointIndex, PointIndex::BASE, PointIndex> invpindex;
|
Array<PointIndex, PointIndex> invpindex;
|
||||||
NgArray<char, PointIndex::BASE> pingroup;
|
Array<char, PointIndex> pingroup;
|
||||||
|
|
||||||
///
|
///
|
||||||
class BoxTree<3> * facetree;
|
class BoxTree<3> * facetree;
|
||||||
@ -262,7 +264,7 @@ public:
|
|||||||
void GetIntersectingFaces (const Point<3> & pmin, const Point<3> & pmax,
|
void GetIntersectingFaces (const Point<3> & pmin, const Point<3> & pmax,
|
||||||
NgArray<int> & ifaces) const;
|
NgArray<int> & ifaces) const;
|
||||||
|
|
||||||
bool PointInsideGroup(const NgArray<PointIndex, PointIndex::BASE> &grouppindex,
|
bool PointInsideGroup(const Array<PointIndex, PointIndex> &grouppindex,
|
||||||
const NgArray<MiniElement2d>& groupfaces) const;
|
const NgArray<MiniElement2d>& groupfaces) const;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -270,9 +272,9 @@ public:
|
|||||||
|
|
||||||
///
|
///
|
||||||
int GetLocals (int baseelement,
|
int GetLocals (int baseelement,
|
||||||
NgArray<Point3d, PointIndex::BASE> & locpoints,
|
Array<Point3d, PointIndex> & locpoints,
|
||||||
NgArray<MiniElement2d> & locfaces, // local index
|
NgArray<MiniElement2d> & locfaces, // local index
|
||||||
NgArray<PointIndex, PointIndex::BASE> & pindex,
|
Array<PointIndex, PointIndex> & pindex,
|
||||||
NgArray<INDEX> & findex,
|
NgArray<INDEX> & findex,
|
||||||
INDEX_2_HASHTABLE<int> & connectedpairs,
|
INDEX_2_HASHTABLE<int> & connectedpairs,
|
||||||
float xh,
|
float xh,
|
||||||
@ -283,7 +285,7 @@ public:
|
|||||||
void GetGroup (int fi,
|
void GetGroup (int fi,
|
||||||
NgArray<MeshPoint, PointIndex::BASE> & grouppoints,
|
NgArray<MeshPoint, PointIndex::BASE> & grouppoints,
|
||||||
NgArray<MiniElement2d> & groupelements,
|
NgArray<MiniElement2d> & groupelements,
|
||||||
NgArray<PointIndex, PointIndex::BASE> & pindex,
|
Array<PointIndex, PointIndex> & pindex,
|
||||||
NgArray<INDEX> & findex);
|
NgArray<INDEX> & findex);
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -293,7 +295,7 @@ public:
|
|||||||
///
|
///
|
||||||
INDEX AddFace (const MiniElement2d & e);
|
INDEX AddFace (const MiniElement2d & e);
|
||||||
///
|
///
|
||||||
INDEX AddConnectedPair (const INDEX_2 & pair);
|
INDEX AddConnectedPair (PointIndices<2> pair);
|
||||||
///
|
///
|
||||||
void IncrementClass (INDEX fi)
|
void IncrementClass (INDEX fi)
|
||||||
{ faces.Elem(fi).IncrementQualClass(); }
|
{ faces.Elem(fi).IncrementQualClass(); }
|
||||||
|
@ -2174,7 +2174,7 @@ namespace netgen
|
|||||||
auto seg = mesh[j];
|
auto seg = mesh[j];
|
||||||
for (auto map : idmaps)
|
for (auto map : idmaps)
|
||||||
{
|
{
|
||||||
if (seg[0] > 0 && seg[1] > 0 && (*map)[seg[0]] && (*map)[seg[1]])
|
if (seg[0].IsValid() && seg[1].IsValid() && (*map)[seg[0]] && (*map)[seg[1]])
|
||||||
{
|
{
|
||||||
MarkedIdentification mi;
|
MarkedIdentification mi;
|
||||||
mi.np = 2;
|
mi.np = 2;
|
||||||
@ -4013,7 +4013,7 @@ namespace netgen
|
|||||||
do_repair = false;
|
do_repair = false;
|
||||||
for(int ii=1; ii<=mesh.GetNP(); ii++)
|
for(int ii=1; ii<=mesh.GetNP(); ii++)
|
||||||
{
|
{
|
||||||
if(isnewpoint.Test(ii) && mesh.mlbetweennodes[ii][0] > 0)
|
if(isnewpoint.Test(ii) && mesh.mlbetweennodes[ii][0].IsValid())
|
||||||
{
|
{
|
||||||
mesh.Point(ii) = Center(mesh.Point(mesh.mlbetweennodes[ii][0]),
|
mesh.Point(ii) = Center(mesh.Point(mesh.mlbetweennodes[ii][0]),
|
||||||
mesh.Point(mesh.mlbetweennodes[ii][1]));
|
mesh.Point(mesh.mlbetweennodes[ii][1]));
|
||||||
|
@ -20,7 +20,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GeomSearch3d :: Init (NgArray <FrontPoint3,PointIndex::BASE, PointIndex> *pointsi, NgArray <FrontFace> *facesi)
|
void GeomSearch3d :: Init (Array <FrontPoint3,PointIndex> *pointsi, NgArray <FrontFace> *facesi)
|
||||||
{
|
{
|
||||||
points = pointsi;
|
points = pointsi;
|
||||||
faces = facesi;
|
faces = facesi;
|
||||||
|
@ -27,7 +27,7 @@ public:
|
|||||||
virtual ~GeomSearch3d();
|
virtual ~GeomSearch3d();
|
||||||
|
|
||||||
///
|
///
|
||||||
void Init (NgArray <FrontPoint3,PointIndex::BASE, PointIndex> *pointsi, NgArray <FrontFace> *facesi);
|
void Init (Array <FrontPoint3,PointIndex> *pointsi, NgArray <FrontFace> *facesi);
|
||||||
|
|
||||||
///get elements max extension
|
///get elements max extension
|
||||||
void ElemMaxExt(Point3d& minp, Point3d& maxp, const MiniElement2d& elem);
|
void ElemMaxExt(Point3d& minp, Point3d& maxp, const MiniElement2d& elem);
|
||||||
@ -52,7 +52,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
|
|
||||||
NgArray <FrontFace> *faces; // Pointers to Arrays in Adfront
|
NgArray <FrontFace> *faces; // Pointers to Arrays in Adfront
|
||||||
NgArray <FrontPoint3,PointIndex::BASE, PointIndex> *points;
|
Array <FrontPoint3,PointIndex> *points;
|
||||||
|
|
||||||
NgArray <NgArray <int>*> hashtable;
|
NgArray <NgArray <int>*> hashtable;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ void BuildEdgeList( const Mesh & mesh, const Table<TINDEX, PointIndex> & element
|
|||||||
}
|
}
|
||||||
QuickSort(local_edges);
|
QuickSort(local_edges);
|
||||||
|
|
||||||
auto edge_prev = std::make_tuple<PointIndex, PointIndex>(-1,-1);
|
auto edge_prev = std::make_tuple<PointIndex, PointIndex>(PointIndex::INVALID, PointIndex::INVALID);
|
||||||
|
|
||||||
for(auto edge : local_edges)
|
for(auto edge : local_edges)
|
||||||
if(edge != edge_prev)
|
if(edge != edge_prev)
|
||||||
|
@ -564,7 +564,7 @@ namespace netgen
|
|||||||
|
|
||||||
bool IsSegment (PointIndex pi1, PointIndex pi2) const
|
bool IsSegment (PointIndex pi1, PointIndex pi2) const
|
||||||
{
|
{
|
||||||
INDEX_2 i2 (pi1, pi2);
|
PointIndices<2> i2 (pi1, pi2);
|
||||||
i2.Sort();
|
i2.Sort();
|
||||||
return segmentht->Used (i2);
|
return segmentht->Used (i2);
|
||||||
}
|
}
|
||||||
|
@ -181,14 +181,14 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
// NgProfiler::RegionTimer reg (meshing3_timer);
|
// NgProfiler::RegionTimer reg (meshing3_timer);
|
||||||
|
|
||||||
|
|
||||||
NgArray<Point3d, PointIndex::BASE> locpoints; // local points
|
Array<Point3d, PointIndex> locpoints; // local points
|
||||||
NgArray<MiniElement2d> locfaces; // local faces
|
NgArray<MiniElement2d> locfaces; // local faces
|
||||||
NgArray<PointIndex, PointIndex::BASE> pindex; // mapping from local to front point numbering
|
Array<PointIndex, PointIndex> pindex; // mapping from local to front point numbering
|
||||||
NgArray<int, PointIndex::BASE> allowpoint; // point is allowed ?
|
Array<int, PointIndex> allowpoint; // point is allowed ?
|
||||||
NgArray<INDEX> findex; // mapping from local to front face numbering
|
NgArray<INDEX> findex; // mapping from local to front face numbering
|
||||||
//INDEX_2_HASHTABLE<int> connectedpairs(100); // connecgted pairs for prism meshing
|
//INDEX_2_HASHTABLE<int> connectedpairs(100); // connecgted pairs for prism meshing
|
||||||
|
|
||||||
NgArray<Point3d, PointIndex::BASE> plainpoints; // points in reference coordinates
|
Array<Point3d, PointIndex> plainpoints; // points in reference coordinates
|
||||||
NgArray<int> delpoints, delfaces; // points and lines to be deleted
|
NgArray<int> delpoints, delfaces; // points and lines to be deleted
|
||||||
NgArray<Element> locelements; // new generated elements
|
NgArray<Element> locelements; // new generated elements
|
||||||
|
|
||||||
@ -213,7 +213,7 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
// for star-shaped domain meshing
|
// for star-shaped domain meshing
|
||||||
NgArray<MeshPoint, PointIndex::BASE> grouppoints;
|
NgArray<MeshPoint, PointIndex::BASE> grouppoints;
|
||||||
NgArray<MiniElement2d> groupfaces;
|
NgArray<MiniElement2d> groupfaces;
|
||||||
NgArray<PointIndex, PointIndex::BASE> grouppindex;
|
Array<PointIndex, PointIndex> grouppindex;
|
||||||
NgArray<INDEX> groupfindex;
|
NgArray<INDEX> groupfindex;
|
||||||
|
|
||||||
|
|
||||||
@ -342,10 +342,11 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
|
|
||||||
allowpoint.SetSize(locpoints.Size());
|
allowpoint.SetSize(locpoints.Size());
|
||||||
if (uselocalh && stat.qualclass <= 3)
|
if (uselocalh && stat.qualclass <= 3)
|
||||||
for(int i = 1; i <= allowpoint.Size(); i++)
|
//for(int i = 1; i <= allowpoint.Size(); i++)
|
||||||
|
for(auto i : allowpoint.Range())
|
||||||
{
|
{
|
||||||
allowpoint.Elem(i) =
|
allowpoint[i] =
|
||||||
(mesh.GetH (locpoints.Get(i)) > 0.4 * hshould / mp.sloppy) ? 2 : 1;
|
(mesh.GetH (locpoints[i]) > 0.4 * hshould / mp.sloppy) ? 2 : 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
allowpoint = 2;
|
allowpoint = 2;
|
||||||
@ -401,7 +402,7 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
{
|
{
|
||||||
newel.PNum(j) =
|
newel.PNum(j) =
|
||||||
adfront->GetGlobalIndex
|
adfront->GetGlobalIndex
|
||||||
(grouppindex.Get(groupfaces.Get(i).PNum(j)));
|
(grouppindex[groupfaces.Get(i).PNum(j)]);
|
||||||
}
|
}
|
||||||
mesh.AddVolumeElement (newel);
|
mesh.AddVolumeElement (newel);
|
||||||
}
|
}
|
||||||
@ -505,9 +506,13 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
if (found) stat.cntsucc++;
|
if (found) stat.cntsucc++;
|
||||||
|
|
||||||
locpoints.SetSize (plainpoints.Size());
|
locpoints.SetSize (plainpoints.Size());
|
||||||
|
/*
|
||||||
for (int i = oldnp+1; i <= plainpoints.Size(); i++)
|
for (int i = oldnp+1; i <= plainpoints.Size(); i++)
|
||||||
trans.FromPlain (plainpoints.Elem(i), locpoints.Elem(i));
|
trans.FromPlain (plainpoints.Elem(i), locpoints.Elem(i));
|
||||||
|
*/
|
||||||
|
for (auto i : plainpoints.Range().Modify(oldnp,0))
|
||||||
|
trans.FromPlain (plainpoints[i], locpoints[i]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// avoid meshing from large to small mesh-size
|
// avoid meshing from large to small mesh-size
|
||||||
@ -565,14 +570,15 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
if (testmode)
|
if (testmode)
|
||||||
{
|
{
|
||||||
(*testout) << "found is active, 3" << endl;
|
(*testout) << "found is active, 3" << endl;
|
||||||
for(int i = 1; i <= plainpoints.Size(); i++)
|
//for(int i = 1; i <= plainpoints.Size(); i++)
|
||||||
|
for(auto i : plainpoints.Range())
|
||||||
{
|
{
|
||||||
(*testout) << "p";
|
(*testout) << "p";
|
||||||
if (i <= pindex.Size())
|
if (i < pindex.Range().Next())
|
||||||
(*testout) << pindex.Get(i) << ": ";
|
(*testout) << pindex[i] << ": ";
|
||||||
else
|
else
|
||||||
(*testout) << "new: ";
|
(*testout) << "new: ";
|
||||||
(*testout) << plainpoints.Get(i) << endl;
|
(*testout) << plainpoints[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -582,20 +588,24 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
minerr = err;
|
minerr = err;
|
||||||
|
|
||||||
tempnewpoints.SetSize (0);
|
tempnewpoints.SetSize (0);
|
||||||
for(int i = oldnp+1; i <= locpoints.Size(); i++)
|
// for(int i = oldnp+1; i <= locpoints.Size(); i++)
|
||||||
tempnewpoints.Append (locpoints.Get(i));
|
for (auto i : locpoints.Range().Modify(oldnp,0))
|
||||||
|
tempnewpoints.Append (locpoints[i]);
|
||||||
|
|
||||||
tempnewfaces.SetSize (0);
|
tempnewfaces.SetSize (0);
|
||||||
for(int i = oldnf+1; i <= locfaces.Size(); i++)
|
// for(int i = oldnf+1; i <= locfaces.Size(); i++)
|
||||||
tempnewfaces.Append (locfaces.Get(i));
|
for (auto i : locfaces.Range().Modify(oldnf,0))
|
||||||
|
tempnewfaces.Append (locfaces[i]);
|
||||||
|
|
||||||
tempdelfaces.SetSize (0);
|
tempdelfaces.SetSize (0);
|
||||||
for(int i = 1; i <= delfaces.Size(); i++)
|
// for(int i = 1; i <= delfaces.Size(); i++)
|
||||||
tempdelfaces.Append (delfaces.Get(i));
|
for (auto i : delfaces.Range())
|
||||||
|
tempdelfaces.Append (delfaces[i]);
|
||||||
|
|
||||||
templocelements.SetSize (0);
|
templocelements.SetSize (0);
|
||||||
for(int i = 1; i <= locelements.Size(); i++)
|
// for(int i = 1; i <= locelements.Size(); i++)
|
||||||
templocelements.Append (locelements.Get(i));
|
for (auto i : locelements.Range())
|
||||||
|
templocelements.Append (locelements[i]);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
optother =
|
optother =
|
||||||
@ -637,14 +647,14 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
if (loktestmode)
|
if (loktestmode)
|
||||||
{
|
{
|
||||||
(*testout) << "apply rule" << endl;
|
(*testout) << "apply rule" << endl;
|
||||||
for(int i = 1; i <= locpoints.Size(); i++)
|
for (auto i : locpoints.Range())
|
||||||
{
|
{
|
||||||
(*testout) << "p";
|
(*testout) << "p";
|
||||||
if (i <= pindex.Size())
|
if (pindex.Range().Contains(i))
|
||||||
(*testout) << pindex.Get(i) << ": ";
|
(*testout) << pindex[i] << ": ";
|
||||||
else
|
else
|
||||||
(*testout) << "new: ";
|
(*testout) << "new: ";
|
||||||
(*testout) << locpoints.Get(i) << endl;
|
(*testout) << locpoints[i] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,10 +662,11 @@ GenerateMesh (Mesh & mesh, const MeshingParameters & mp)
|
|||||||
|
|
||||||
pindex.SetSize(locpoints.Size());
|
pindex.SetSize(locpoints.Size());
|
||||||
|
|
||||||
for (int i = oldnp+1; i <= locpoints.Size(); i++)
|
// for (int i = oldnp+1; i <= locpoints.Size(); i++)
|
||||||
|
for (auto i : locpoints.Range().Modify(oldnp,0))
|
||||||
{
|
{
|
||||||
PointIndex globind = mesh.AddPoint (locpoints.Get(i));
|
PointIndex globind = mesh.AddPoint (locpoints[i]);
|
||||||
pindex.Elem(i) = adfront -> AddPoint (locpoints.Get(i), globind);
|
pindex[i] = adfront -> AddPoint (locpoints[i], globind);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 1; i <= locelements.Size(); i++)
|
for (int i = 1; i <= locelements.Size(); i++)
|
||||||
|
@ -45,8 +45,8 @@ public:
|
|||||||
MESHING3_RESULT GenerateMesh (Mesh & mesh, const MeshingParameters & mp);
|
MESHING3_RESULT GenerateMesh (Mesh & mesh, const MeshingParameters & mp);
|
||||||
|
|
||||||
///
|
///
|
||||||
int ApplyRules (NgArray<Point3d, PointIndex::BASE> & lpoints,
|
int ApplyRules (Array<Point3d, PointIndex> & lpoints,
|
||||||
NgArray<int, PointIndex::BASE> & allowpoint,
|
Array<int, PointIndex> & allowpoint,
|
||||||
NgArray<MiniElement2d> & lfaces, INDEX lfacesplit,
|
NgArray<MiniElement2d> & lfaces, INDEX lfacesplit,
|
||||||
INDEX_2_HASHTABLE<int> & connectedpairs,
|
INDEX_2_HASHTABLE<int> & connectedpairs,
|
||||||
NgArray<Element> & elements,
|
NgArray<Element> & elements,
|
||||||
|
@ -151,7 +151,7 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
class PointIndex
|
class PointIndex
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -191,8 +191,87 @@ namespace netgen
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void DoArchive (Archive & ar) { ar & i; }
|
void DoArchive (Archive & ar) { ar & i; }
|
||||||
};
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
class PointIndex
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
public:
|
||||||
|
class t_invalid { public: constexpr t_invalid() = default; };
|
||||||
|
static constexpr t_invalid INVALID{};
|
||||||
|
|
||||||
|
PointIndex () = default;
|
||||||
|
PointIndex (const PointIndex&) = default;
|
||||||
|
PointIndex (PointIndex &&) = default;
|
||||||
|
PointIndex & operator= (const PointIndex&) = default;
|
||||||
|
PointIndex & operator= (PointIndex&&) = default;
|
||||||
|
|
||||||
|
// private:
|
||||||
|
constexpr PointIndex (int ai) : i(ai)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG
|
||||||
|
if (ai < PointIndex::BASE)
|
||||||
|
cout << "illegal PointIndex, use PointIndex::INVALID instead" << endl;
|
||||||
|
// throw Exception("illegal PointIndex, use PointIndex::INVALID instead");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
friend constexpr netgen::PointIndex ngcore::IndexBASE<netgen::PointIndex> ();
|
||||||
|
friend istream & operator>> (istream &, PointIndex &);
|
||||||
|
friend ostream & operator<< (ostream &, const PointIndex &);
|
||||||
|
template <int N> friend class PointIndices;
|
||||||
|
|
||||||
|
/*
|
||||||
|
friend PointIndex operator+ (PointIndex, int);
|
||||||
|
friend PointIndex operator+ (PointIndex, size_t);
|
||||||
|
friend PointIndex operator+ (int, PointIndex);
|
||||||
|
friend PointIndex operator+ (size_t, PointIndex);
|
||||||
|
friend PointIndex operator- (PointIndex, int);
|
||||||
|
friend int operator- (PointIndex, PointIndex);
|
||||||
|
friend bool operator< (PointIndex a, PointIndex b);
|
||||||
|
friend bool operator> (PointIndex a, PointIndex b);
|
||||||
|
friend bool operator>= (PointIndex a, PointIndex b);
|
||||||
|
friend bool operator== (PointIndex a, PointIndex b);
|
||||||
|
friend bool operator!= (PointIndex a, PointIndex b);
|
||||||
|
*/
|
||||||
|
|
||||||
|
public:
|
||||||
|
constexpr PointIndex (t_invalid inv) : i(PointIndex::BASE-1) { ; }
|
||||||
|
// PointIndex & operator= (const PointIndex &ai) { i = ai.i; return *this; }
|
||||||
|
// private:
|
||||||
|
constexpr operator const int& () const { return i; }
|
||||||
|
explicit constexpr operator int& () { return i; }
|
||||||
|
public:
|
||||||
|
PointIndex operator++ (int) { PointIndex hi(*this); i++; return hi; }
|
||||||
|
PointIndex operator-- (int) { PointIndex hi(*this); i--; return hi; }
|
||||||
|
PointIndex & operator++ () { i++; return *this; }
|
||||||
|
PointIndex operator-- () { i--; return *this; }
|
||||||
|
PointIndex operator+= (int add) { i += add; return *this; }
|
||||||
|
void Invalidate() { i = PointIndex::BASE-1; }
|
||||||
|
bool IsValid() const { return i != PointIndex::BASE-1; }
|
||||||
|
#ifdef BASE0
|
||||||
|
static constexpr size_t BASE = 0;
|
||||||
|
#else
|
||||||
|
static constexpr size_t BASE = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void DoArchive (Archive & ar) { ar & i; }
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
inline PointIndex operator+ (PointIndex pi, int i) { return PointIndex(pi.i+i); }
|
||||||
|
inline PointIndex operator+ (PointIndex pi, size_t i) { return PointIndex(pi.i+i); }
|
||||||
|
inline PointIndex operator+ (int i, PointIndex pi) { return PointIndex(pi.i+i); }
|
||||||
|
inline PointIndex operator+ (size_t i, PointIndex pi) { return PointIndex(pi.i+i); }
|
||||||
|
inline PointIndex operator- (PointIndex pi, int i) { return PointIndex(pi.i-i); }
|
||||||
|
inline int operator- (PointIndex pa, PointIndex pb) { return PointIndex(pa.i-pb.i); }
|
||||||
|
inline bool operator< (PointIndex a, PointIndex b) { return a.i < b.i; }
|
||||||
|
inline bool operator> (PointIndex a, PointIndex b) { return a.i > b.i; }
|
||||||
|
inline bool operator>= (PointIndex a, PointIndex b) { return a.i >= b.i; }
|
||||||
|
inline bool operator== (PointIndex a, PointIndex b) { return a.i == b.i; }
|
||||||
|
inline bool operator!= (PointIndex a, PointIndex b) { return a.i != b.i; }
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace ngcore
|
namespace ngcore
|
||||||
@ -224,6 +303,7 @@ namespace netgen
|
|||||||
PointIndices (PointIndex i1, PointIndex i2) : INDEX_2(i1,i2) { ; }
|
PointIndices (PointIndex i1, PointIndex i2) : INDEX_2(i1,i2) { ; }
|
||||||
PointIndex operator[] (int i) const { return PointIndex(INDEX_2::operator[](i)); }
|
PointIndex operator[] (int i) const { return PointIndex(INDEX_2::operator[](i)); }
|
||||||
PointIndex & operator[] (int i) { return reinterpret_cast<PointIndex&>(INDEX_2::operator[](i)); }
|
PointIndex & operator[] (int i) { return reinterpret_cast<PointIndex&>(INDEX_2::operator[](i)); }
|
||||||
|
using INDEX_2::Sort;
|
||||||
static PointIndices Sort(PointIndex i1, PointIndex i2) { return INDEX_2::Sort(i1, i2); }
|
static PointIndices Sort(PointIndex i1, PointIndex i2) { return INDEX_2::Sort(i1, i2); }
|
||||||
template <size_t J>
|
template <size_t J>
|
||||||
PointIndex get() const { return PointIndex(INDEX_2::operator[](J)); }
|
PointIndex get() const { return PointIndex(INDEX_2::operator[](J)); }
|
||||||
@ -1627,14 +1707,15 @@ namespace netgen
|
|||||||
|
|
||||||
bool Used (PointIndex pi1, PointIndex pi2)
|
bool Used (PointIndex pi1, PointIndex pi2)
|
||||||
{
|
{
|
||||||
return identifiedpoints.Used (INDEX_2 (pi1, pi2));
|
// return identifiedpoints.Used (INDEX_2 (pi1, pi2));
|
||||||
|
return identifiedpoints.Used (PointIndices<2>(pi1, pi2));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool UsedSymmetric (PointIndex pi1, PointIndex pi2)
|
bool UsedSymmetric (PointIndex pi1, PointIndex pi2)
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
identifiedpoints.Used (INDEX_2 (pi1, pi2)) ||
|
identifiedpoints.Used (PointIndices<2>(pi1, pi2)) ||
|
||||||
identifiedpoints.Used (INDEX_2 (pi2, pi1));
|
identifiedpoints.Used (PointIndices<2>(pi2, pi1));
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
///
|
||||||
|
@ -8,7 +8,7 @@ extern double minother;
|
|||||||
extern double minwithoutother;
|
extern double minwithoutother;
|
||||||
|
|
||||||
|
|
||||||
static double CalcElementBadness (const NgArray<Point3d, PointIndex::BASE> & points,
|
static double CalcElementBadness (const Array<Point3d, PointIndex> & points,
|
||||||
const Element & elem)
|
const Element & elem)
|
||||||
{
|
{
|
||||||
double vol, l, l4, l5, l6;
|
double vol, l, l4, l5, l6;
|
||||||
@ -49,8 +49,8 @@ extern double minwithoutother;
|
|||||||
|
|
||||||
int Meshing3 :: ApplyRules
|
int Meshing3 :: ApplyRules
|
||||||
(
|
(
|
||||||
NgArray<Point3d, PointIndex::BASE> & lpoints, // in: local points, out: old+new local points
|
Array<Point3d, PointIndex> & lpoints, // in: local points, out: old+new local points
|
||||||
NgArray<int, PointIndex::BASE> & allowpoint, // in: 2 .. it is allowed to use pointi, 1..will be allowed later, 0..no means
|
Array<int, PointIndex> & allowpoint, // in: 2 .. it is allowed to use pointi, 1..will be allowed later, 0..no means
|
||||||
NgArray<MiniElement2d> & lfaces, // in: local faces, out: old+new local faces
|
NgArray<MiniElement2d> & lfaces, // in: local faces, out: old+new local faces
|
||||||
INDEX lfacesplit, // for local faces in outer radius
|
INDEX lfacesplit, // for local faces in outer radius
|
||||||
INDEX_2_HASHTABLE<int> & connectedpairs, // connected pairs for prism-meshing
|
INDEX_2_HASHTABLE<int> & connectedpairs, // connected pairs for prism-meshing
|
||||||
@ -659,11 +659,12 @@ int Meshing3 :: ApplyRules
|
|||||||
|
|
||||||
// check freezone:
|
// check freezone:
|
||||||
|
|
||||||
for (int i = 1; i <= lpoints.Size(); i++)
|
// for (int i = 1; i <= lpoints.Size(); i++)
|
||||||
|
for (auto i : lpoints.Range())
|
||||||
{
|
{
|
||||||
if ( !pused.Get(i) )
|
if ( !pused.Get(i) )
|
||||||
{
|
{
|
||||||
const Point3d & lp = lpoints.Get(i);
|
const Point3d & lp = lpoints[i];
|
||||||
|
|
||||||
if (rule->fzbox.IsIn (lp))
|
if (rule->fzbox.IsIn (lp))
|
||||||
{
|
{
|
||||||
@ -674,7 +675,7 @@ int Meshing3 :: ApplyRules
|
|||||||
(*testout) << "Point " << i
|
(*testout) << "Point " << i
|
||||||
<< " in Freezone" << endl;
|
<< " in Freezone" << endl;
|
||||||
snprintf (problems.Elem(ri), 255,
|
snprintf (problems.Elem(ri), 255,
|
||||||
"locpoint %d in Freezone", i);
|
"locpoint %d in Freezone", int(i));
|
||||||
}
|
}
|
||||||
ok = 0;
|
ok = 0;
|
||||||
break;
|
break;
|
||||||
@ -933,11 +934,11 @@ int Meshing3 :: ApplyRules
|
|||||||
|
|
||||||
// new points in free-zone ?
|
// new points in free-zone ?
|
||||||
for (int i = rule->GetNOldP() + 1; i <= rule->GetNP() && ok; i++)
|
for (int i = rule->GetNOldP() + 1; i <= rule->GetNP() && ok; i++)
|
||||||
if (!rule->IsInFreeZone (lpoints.Get(pmap.Get(i))))
|
if (!rule->IsInFreeZone (lpoints[pmap.Get(i)]))
|
||||||
{
|
{
|
||||||
if (loktestmode)
|
if (loktestmode)
|
||||||
{
|
{
|
||||||
(*testout) << "Newpoint " << lpoints.Get(pmap.Get(i))
|
(*testout) << "Newpoint " << lpoints[pmap.Get(i)]
|
||||||
<< " outside convex hull" << endl;
|
<< " outside convex hull" << endl;
|
||||||
snprintf (problems.Elem(ri), 255, "newpoint outside convex hull");
|
snprintf (problems.Elem(ri), 255, "newpoint outside convex hull");
|
||||||
}
|
}
|
||||||
@ -958,9 +959,9 @@ int Meshing3 :: ApplyRules
|
|||||||
// Calculate Element badness
|
// Calculate Element badness
|
||||||
|
|
||||||
teterr = 0;
|
teterr = 0;
|
||||||
for (int i = 1; i <= elements.Size(); i++)
|
for (auto i : elements.Range())
|
||||||
{
|
{
|
||||||
double hf = CalcElementBadness (lpoints, elements.Get(i));
|
double hf = CalcElementBadness (lpoints, elements[i]);
|
||||||
if (hf > teterr) teterr = hf;
|
if (hf > teterr) teterr = hf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1066,25 +1067,29 @@ int Meshing3 :: ApplyRules
|
|||||||
{
|
{
|
||||||
(*testout) << "P" << i << ": Ref: "
|
(*testout) << "P" << i << ": Ref: "
|
||||||
<< rule->GetPoint (i) << " is: "
|
<< rule->GetPoint (i) << " is: "
|
||||||
<< lpoints.Get(pmap.Get(i)) << endl;
|
<< lpoints[pmap.Get(i)] << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tempnewpoints.SetSize (0);
|
tempnewpoints.SetSize (0);
|
||||||
for (int i = noldlp+1; i <= lpoints.Size(); i++)
|
// for (int i = noldlp+1; i <= lpoints.Size(); i++)
|
||||||
tempnewpoints.Append (lpoints.Get(i));
|
for (auto i : lpoints.Range().Modify(noldlp, 0))
|
||||||
|
tempnewpoints.Append (lpoints[i]);
|
||||||
|
|
||||||
tempnewfaces.SetSize (0);
|
tempnewfaces.SetSize (0);
|
||||||
for (int i = noldlf+1; i <= lfaces.Size(); i++)
|
// for (int i = noldlf+1; i <= lfaces.Size(); i++)
|
||||||
tempnewfaces.Append (lfaces.Get(i));
|
for (auto i : lfaces.Range().Modify(noldlf,0))
|
||||||
|
tempnewfaces.Append (lfaces[i]);
|
||||||
|
|
||||||
tempdelfaces.SetSize (0);
|
tempdelfaces.SetSize (0);
|
||||||
for (int i = 1; i <= delfaces.Size(); i++)
|
// for (int i = 1; i <= delfaces.Size(); i++)
|
||||||
tempdelfaces.Append (delfaces.Get(i));
|
for (auto i : delfaces.Range())
|
||||||
|
tempdelfaces.Append (delfaces[i]);
|
||||||
|
|
||||||
tempelements.SetSize (0);
|
tempelements.SetSize (0);
|
||||||
for (int i = 1; i <= elements.Size(); i++)
|
// for (int i = 1; i <= elements.Size(); i++)
|
||||||
tempelements.Append (elements.Get(i));
|
for (auto i : elements.Range())
|
||||||
|
tempelements.Append (elements[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user