mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-11 16:49:16 +05:00
preparations to switch T_POINTS to ngcore::Array
This commit is contained in:
parent
c900e0380b
commit
9118ddc63a
@ -201,16 +201,21 @@ namespace ngcore
|
|||||||
NETGEN_INLINE operator T* () const { return data; }
|
NETGEN_INLINE operator T* () const { return data; }
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T> class FlatArray;
|
|
||||||
|
template <typename T>
|
||||||
|
constexpr size_t IndexBASE () { return 0; }
|
||||||
|
|
||||||
|
|
||||||
|
template <class T, class IndexType = size_t> class FlatArray;
|
||||||
|
|
||||||
|
|
||||||
template <typename TELEM, typename TSIZE>
|
template <typename TELEM, typename IndexType>
|
||||||
class ArrayIterator
|
class ArrayIterator
|
||||||
{
|
{
|
||||||
FlatArray<TELEM> ar;
|
FlatArray<TELEM, IndexType> ar;
|
||||||
TSIZE ind;
|
IndexType ind;
|
||||||
public:
|
public:
|
||||||
NETGEN_INLINE ArrayIterator (FlatArray<TELEM> aar, TSIZE ai)
|
NETGEN_INLINE ArrayIterator (FlatArray<TELEM, IndexType> aar, IndexType ai)
|
||||||
: ar(aar), ind(ai) { ; }
|
: ar(aar), ind(ai) { ; }
|
||||||
NETGEN_INLINE ArrayIterator operator++ (int)
|
NETGEN_INLINE ArrayIterator operator++ (int)
|
||||||
{ return ArrayIterator(ar, ind++); }
|
{ return ArrayIterator(ar, ind++); }
|
||||||
@ -381,23 +386,24 @@ namespace ngcore
|
|||||||
Helper functions for printing.
|
Helper functions for printing.
|
||||||
Optional range check by macro NETGEN_CHECK_RANGE
|
Optional range check by macro NETGEN_CHECK_RANGE
|
||||||
*/
|
*/
|
||||||
template <class T>
|
template <class T, class IndexType>
|
||||||
class FlatArray : public BaseArrayObject<FlatArray<T> >
|
class FlatArray : public BaseArrayObject<FlatArray<T,IndexType> >
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
static constexpr size_t BASE = IndexBASE<IndexType>();
|
||||||
/// the size
|
/// the size
|
||||||
size_t size;
|
size_t size;
|
||||||
/// the data
|
/// the data
|
||||||
T * __restrict data;
|
T * __restrict data;
|
||||||
public:
|
public:
|
||||||
using BaseArrayObject<FlatArray<T> >::ILLEGAL_POSITION;
|
using BaseArrayObject<FlatArray>::ILLEGAL_POSITION;
|
||||||
|
|
||||||
/// initialize array
|
/// initialize array
|
||||||
NETGEN_INLINE FlatArray () = default;
|
NETGEN_INLINE FlatArray () = default;
|
||||||
// { ; } // size = 0; data = 0; }
|
// { ; } // size = 0; data = 0; }
|
||||||
|
|
||||||
/// copy constructor allows size-type conversion
|
/// copy constructor allows size-type conversion
|
||||||
NETGEN_INLINE FlatArray (const FlatArray<T> & a2) = default;
|
NETGEN_INLINE FlatArray (const FlatArray & a2) = default;
|
||||||
// : size(a2.Size()), data(a2.data) { ; }
|
// : size(a2.Size()), data(a2.data) { ; }
|
||||||
|
|
||||||
/// provide size and memory
|
/// provide size and memory
|
||||||
@ -473,10 +479,10 @@ namespace ngcore
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Access array. range check by macro NETGEN_CHECK_RANGE
|
/// Access array. range check by macro NETGEN_CHECK_RANGE
|
||||||
NETGEN_INLINE T & operator[] (size_t i) const
|
NETGEN_INLINE T & operator[] (IndexType i) const
|
||||||
{
|
{
|
||||||
NETGEN_CHECK_RANGE(i,0,size);
|
NETGEN_CHECK_RANGE(i,0,size);
|
||||||
return data[i];
|
return data[i-BASE];
|
||||||
}
|
}
|
||||||
|
|
||||||
NETGEN_INLINE T_Range<size_t> Range () const
|
NETGEN_INLINE T_Range<size_t> Range () const
|
||||||
@ -552,10 +558,8 @@ namespace ngcore
|
|||||||
return Pos(elem) != ILLEGAL_POSITION;
|
return Pos(elem) != ILLEGAL_POSITION;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayIterator<T, size_t> begin() const
|
auto begin() const { return ArrayIterator<T,IndexType> (*this, BASE); }
|
||||||
{ return ArrayIterator<T,size_t> (*this, 0); }
|
auto end() const { return ArrayIterator<T,IndexType> (*this, size+BASE); }
|
||||||
ArrayIterator<T, size_t> end() const
|
|
||||||
{ return ArrayIterator<T,size_t> (*this, size); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
@ -591,8 +595,8 @@ namespace ngcore
|
|||||||
Either the container takes care of memory allocation and deallocation,
|
Either the container takes care of memory allocation and deallocation,
|
||||||
or the user provides one block of data.
|
or the user provides one block of data.
|
||||||
*/
|
*/
|
||||||
template <class T>
|
template <class T, class IndexType = size_t>
|
||||||
class Array : public FlatArray<T>
|
class Array : public FlatArray<T, IndexType>
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
/// physical size of array
|
/// physical size of array
|
||||||
@ -600,20 +604,20 @@ namespace ngcore
|
|||||||
/// that's the data we have to delete, nullptr for not owning the memory
|
/// that's the data we have to delete, nullptr for not owning the memory
|
||||||
T * mem_to_delete;
|
T * mem_to_delete;
|
||||||
|
|
||||||
using FlatArray<T>::size;
|
using FlatArray<T,IndexType>::size;
|
||||||
using FlatArray<T>::data;
|
using FlatArray<T,IndexType>::data;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// Generate array of logical and physical size asize
|
/// Generate array of logical and physical size asize
|
||||||
NETGEN_INLINE explicit Array()
|
NETGEN_INLINE explicit Array()
|
||||||
: FlatArray<T> (0, nullptr)
|
: FlatArray<T,IndexType> (0, nullptr)
|
||||||
{
|
{
|
||||||
allocsize = 0;
|
allocsize = 0;
|
||||||
mem_to_delete = nullptr;
|
mem_to_delete = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
NETGEN_INLINE explicit Array(size_t asize)
|
NETGEN_INLINE explicit Array(size_t asize)
|
||||||
: FlatArray<T> (asize, new T[asize])
|
: FlatArray<T,IndexType> (asize, new T[asize])
|
||||||
{
|
{
|
||||||
allocsize = asize;
|
allocsize = asize;
|
||||||
mem_to_delete = data;
|
mem_to_delete = data;
|
||||||
@ -654,19 +658,19 @@ namespace ngcore
|
|||||||
|
|
||||||
/// array copy
|
/// array copy
|
||||||
NETGEN_INLINE explicit Array (const Array & a2)
|
NETGEN_INLINE explicit Array (const Array & a2)
|
||||||
: FlatArray<T> (a2.Size(), a2.Size() ? new T[a2.Size()] : nullptr)
|
: FlatArray<T,IndexType> (a2.Size(), a2.Size() ? new T[a2.Size()] : nullptr)
|
||||||
{
|
{
|
||||||
allocsize = size;
|
allocsize = size;
|
||||||
mem_to_delete = data;
|
mem_to_delete = data;
|
||||||
for (size_t i = 0; i < size; i++)
|
for (size_t i = 0; i < size; i++)
|
||||||
data[i] = a2[i];
|
data[i] = a2.data[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename TA>
|
template <typename TA>
|
||||||
explicit Array (const BaseArrayObject<TA> & a2)
|
explicit Array (const BaseArrayObject<TA> & a2)
|
||||||
: FlatArray<T> (a2.Size(),
|
: FlatArray<T,IndexType> (a2.Size(),
|
||||||
a2.Size() ? new T[a2.Size()] : nullptr)
|
a2.Size() ? new T[a2.Size()] : nullptr)
|
||||||
{
|
{
|
||||||
allocsize = size;
|
allocsize = size;
|
||||||
mem_to_delete = data;
|
mem_to_delete = data;
|
||||||
@ -976,8 +980,8 @@ namespace ngcore
|
|||||||
|
|
||||||
|
|
||||||
/// resize array, at least to size minsize. copy contents
|
/// resize array, at least to size minsize. copy contents
|
||||||
template <class T>
|
template <class T, class IndexType>
|
||||||
NETGEN_INLINE void Array<T> :: ReSize (size_t minsize)
|
NETGEN_INLINE void Array<T, IndexType> :: ReSize (size_t minsize)
|
||||||
{
|
{
|
||||||
size_t nsize = 2 * allocsize;
|
size_t nsize = 2 * allocsize;
|
||||||
if (nsize < minsize) nsize = minsize;
|
if (nsize < minsize) nsize = minsize;
|
||||||
|
@ -96,10 +96,15 @@ namespace netgen
|
|||||||
ArrayIterator<T,BASE,TIND> end() const
|
ArrayIterator<T,BASE,TIND> end() const
|
||||||
{ return ArrayIterator<T,BASE,TIND> (*this, BASE+size); }
|
{ return ArrayIterator<T,BASE,TIND> (*this, BASE+size); }
|
||||||
|
|
||||||
TIND Begin() const { return TIND(BASE); }
|
// TIND Begin() const { return TIND(BASE); }
|
||||||
TIND End() const { return TIND(size+BASE); }
|
// TIND End() const { return TIND(size+BASE); }
|
||||||
T_Range<TIND> Range() const { return T_Range<TIND>(BASE, size+BASE); }
|
T_Range<TIND> Range() const { return T_Range<TIND>(BASE, size+BASE); }
|
||||||
|
|
||||||
|
[[deprecated("Use *Range().begin() instead")]]
|
||||||
|
auto Begin() const { return *Range().begin(); }
|
||||||
|
[[deprecated("Use *Range().end() instead")]]
|
||||||
|
auto End() const { return *Range().end(); }
|
||||||
|
|
||||||
/// Access array. BASE-based
|
/// Access array. BASE-based
|
||||||
T & operator[] (TIND i) const
|
T & operator[] (TIND i) const
|
||||||
{
|
{
|
||||||
@ -205,13 +210,13 @@ namespace netgen
|
|||||||
template <typename T, int BASE, typename TIND>
|
template <typename T, int BASE, typename TIND>
|
||||||
inline ostream & operator<< (ostream & s, const NgFlatArray<T,BASE,TIND> & a)
|
inline ostream & operator<< (ostream & s, const NgFlatArray<T,BASE,TIND> & a)
|
||||||
{
|
{
|
||||||
for (TIND i = a.Begin(); i < a.End(); i++)
|
// for (TIND i = a.Begin(); i < a.End(); i++)
|
||||||
|
for (auto i : a.Range())
|
||||||
s << i << ": " << a[i] << endl;
|
s << i << ": " << a[i] << endl;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Dynamic array container.
|
Dynamic array container.
|
||||||
|
|
||||||
@ -530,6 +535,9 @@ namespace netgen
|
|||||||
int End() const { return ia.End(); }
|
int End() const { return ia.End(); }
|
||||||
|
|
||||||
const typename TA1::TELEM & operator[] (int i) const { return array[ia[i]]; }
|
const typename TA1::TELEM & operator[] (int i) const { return array[ia[i]]; }
|
||||||
|
auto Range() const { return ia.Range(); }
|
||||||
|
auto begin() const { return ia.begin(); }
|
||||||
|
auto end() const { return ia.end(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,8 @@ template <class T>
|
|||||||
inline void BubbleSort (NgArray<T> & data)
|
inline void BubbleSort (NgArray<T> & data)
|
||||||
{
|
{
|
||||||
if(data.Size() > 0)
|
if(data.Size() > 0)
|
||||||
BubbleSort (data.Size(), &data[data.Begin()]);
|
// BubbleSort (data.Size(), &data[data.Begin()]);
|
||||||
|
BubbleSort (data.Size(), &data[*data.Range().begin()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,8 @@ namespace netgen
|
|||||||
template <typename T1, typename T2>
|
template <typename T1, typename T2>
|
||||||
void Add (const IndirectArray<T1, T2> & points)
|
void Add (const IndirectArray<T1, T2> & points)
|
||||||
{
|
{
|
||||||
for (int i = points.Begin(); i < points.End(); i++)
|
// for (int i = points.Begin(); i < points.End(); i++)
|
||||||
|
for (int i : points.Range())
|
||||||
Add (points[i]);
|
Add (points[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -494,7 +494,8 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
for(PointIndex i = mesh.Points().Begin(); i < mesh.Points().End(); i++)
|
// for(PointIndex i = mesh.Points().Begin(); i < mesh.Points().End(); i++)
|
||||||
|
for(PointIndex i : mesh.Points().Range())
|
||||||
{
|
{
|
||||||
if(nodenum[i] == -1)
|
if(nodenum[i] == -1)
|
||||||
continue;
|
continue;
|
||||||
@ -1063,7 +1064,8 @@ namespace netgen
|
|||||||
|
|
||||||
for(int i=0; i<groups.Size(); i++)
|
for(int i=0; i<groups.Size(); i++)
|
||||||
groups[i]->SetSize(0);
|
groups[i]->SetSize(0);
|
||||||
for(PointIndex i = mesh.Points().Begin(); i < mesh.Points().End(); i++)
|
// for(PointIndex i = mesh.Points().Begin(); i < mesh.Points().End(); i++)
|
||||||
|
for(PointIndex i : mesh.Points().Range())
|
||||||
{
|
{
|
||||||
if(i-PointIndex::BASE < point_ids.Size())
|
if(i-PointIndex::BASE < point_ids.Size())
|
||||||
{
|
{
|
||||||
|
@ -39,7 +39,8 @@ namespace netgen
|
|||||||
allflines = 0;
|
allflines = 0;
|
||||||
|
|
||||||
minval = 0;
|
minval = 0;
|
||||||
starti = lines.Begin();
|
// starti = lines.Begin();
|
||||||
|
starti = *lines.Range().begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
AdFront2 :: ~AdFront2 ()
|
AdFront2 :: ~AdFront2 ()
|
||||||
@ -53,7 +54,8 @@ namespace netgen
|
|||||||
if (nfl > 0)
|
if (nfl > 0)
|
||||||
{
|
{
|
||||||
ost << nfl << " open front segments left:" << endl;
|
ost << nfl << " open front segments left:" << endl;
|
||||||
for (int i = lines.Begin(); i < lines.End(); i++)
|
// for (int i = lines.Begin(); i < lines.End(); i++)
|
||||||
|
for (int i : lines.Range())
|
||||||
if (lines[i].Valid())
|
if (lines[i].Valid())
|
||||||
ost << i << ": "
|
ost << i << ": "
|
||||||
<< GetGlobalIndex (lines[i].L().I1()) << "-"
|
<< GetGlobalIndex (lines[i].L().I1()) << "-"
|
||||||
@ -219,8 +221,9 @@ namespace netgen
|
|||||||
int & qualclass)
|
int & qualclass)
|
||||||
{
|
{
|
||||||
int baselineindex = -1;
|
int baselineindex = -1;
|
||||||
|
|
||||||
for (int i = starti; i < lines.End(); i++)
|
// for (int i = starti; i < lines.End(); i++)
|
||||||
|
for (int i = starti; i < *lines.Range().end(); i++)
|
||||||
{
|
{
|
||||||
if (lines[i].Valid())
|
if (lines[i].Valid())
|
||||||
{
|
{
|
||||||
@ -240,7 +243,8 @@ namespace netgen
|
|||||||
if (baselineindex == -1)
|
if (baselineindex == -1)
|
||||||
{
|
{
|
||||||
minval = INT_MAX;
|
minval = INT_MAX;
|
||||||
for (int i = lines.Begin(); i < lines.End(); i++)
|
// for (int i = lines.Begin(); i < lines.End(); i++)
|
||||||
|
for (int i : lines.Range())
|
||||||
if (lines[i].Valid())
|
if (lines[i].Valid())
|
||||||
{
|
{
|
||||||
int hi = lines[i].LineClass() +
|
int hi = lines[i].LineClass() +
|
||||||
@ -432,7 +436,8 @@ namespace netgen
|
|||||||
|
|
||||||
void AdFront2 :: SetStartFront ()
|
void AdFront2 :: SetStartFront ()
|
||||||
{
|
{
|
||||||
for (int i = lines.Begin(); i < lines.End(); i++)
|
// for (int i = lines.Begin(); i < lines.End(); i++)
|
||||||
|
for (int i : lines.Range())
|
||||||
if (lines[i].Valid())
|
if (lines[i].Valid())
|
||||||
for (int j = 1; j <= 2; j++)
|
for (int j = 1; j <= 2; j++)
|
||||||
points[lines[i].L().I(j)].DecFrontNr(0);
|
points[lines[i].L().I(j)].DecFrontNr(0);
|
||||||
@ -442,12 +447,14 @@ namespace netgen
|
|||||||
void AdFront2 :: Print (ostream & ost) const
|
void AdFront2 :: Print (ostream & ost) const
|
||||||
{
|
{
|
||||||
ost << points.Size() << " Points: " << endl;
|
ost << points.Size() << " Points: " << endl;
|
||||||
for (int i = points.Begin(); i < points.End(); i++)
|
// for (int i = points.Begin(); i < points.End(); i++)
|
||||||
|
for (int i : points.Range())
|
||||||
if (points[i].Valid())
|
if (points[i].Valid())
|
||||||
ost << i << " " << points[i].P() << endl;
|
ost << i << " " << points[i].P() << endl;
|
||||||
|
|
||||||
ost << nfl << " Lines: " << endl;
|
ost << nfl << " Lines: " << endl;
|
||||||
for (int i = lines.Begin(); i < lines.End(); i++)
|
// for (int i = lines.Begin(); i < lines.End(); i++)
|
||||||
|
for (int i : lines.Range())
|
||||||
if (lines[i].Valid())
|
if (lines[i].Valid())
|
||||||
ost << lines[i].L().I1() << " - " << lines[i].L().I2() << endl;
|
ost << lines[i].L().I1() << " - " << lines[i].L().I2() << endl;
|
||||||
|
|
||||||
|
@ -86,9 +86,13 @@ AdFront3 :: ~AdFront3 ()
|
|||||||
|
|
||||||
void AdFront3 :: GetPoints (NgArray<Point<3> > & apoints) const
|
void AdFront3 :: GetPoints (NgArray<Point<3> > & apoints) const
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
|
||||||
apoints.Append (points[pi].P());
|
apoints.Append (points[pi].P());
|
||||||
|
*/
|
||||||
|
for (auto & p : points)
|
||||||
|
apoints.Append(p.P());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -105,7 +109,8 @@ PointIndex AdFront3 :: AddPoint (const Point<3> & p, PointIndex globind)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
points.Append (FrontPoint3 (p, globind));
|
points.Append (FrontPoint3 (p, globind));
|
||||||
return --points.End();
|
// return --points.End();
|
||||||
|
return *points.Range().end()-1;
|
||||||
// return points.Size()-1+PointIndex::BASE;
|
// return points.Size()-1+PointIndex::BASE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -302,7 +307,8 @@ void AdFront3 :: RebuildInternalTables ()
|
|||||||
|
|
||||||
int np = points.Size();
|
int np = points.Size();
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
points[pi].cluster = pi;
|
points[pi].cluster = pi;
|
||||||
|
|
||||||
NgProfiler::StopTimer (timer_a);
|
NgProfiler::StopTimer (timer_a);
|
||||||
@ -395,12 +401,13 @@ void AdFront3 :: RebuildInternalTables ()
|
|||||||
if (clvol[i] < 0)
|
if (clvol[i] < 0)
|
||||||
negvol = 1;
|
negvol = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
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 = 1;
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
points[pi].cluster = 1;
|
points[pi].cluster = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -572,10 +572,11 @@ namespace netgen
|
|||||||
|
|
||||||
// Lock all the prism points so that the rest of the mesh can be
|
// Lock all the prism points so that the rest of the mesh can be
|
||||||
// optimised without invalidating the entire mesh
|
// optimised without invalidating the entire mesh
|
||||||
for (PointIndex pi = mesh.Points().Begin(); pi < mesh.Points().End(); pi++)
|
// for (PointIndex pi = mesh.Points().Begin(); pi < mesh.Points().End(); pi++)
|
||||||
{
|
for (PointIndex pi : mesh.Points().Range())
|
||||||
if(bndnodes.Test(pi)) mesh.AddLockedPoint(pi);
|
{
|
||||||
}
|
if(bndnodes.Test(pi)) mesh.AddLockedPoint(pi);
|
||||||
|
}
|
||||||
|
|
||||||
// Now, actually pull back the old surface points to create
|
// Now, actually pull back the old surface points to create
|
||||||
// the actual boundary layers
|
// the actual boundary layers
|
||||||
|
@ -188,7 +188,8 @@ namespace netgen
|
|||||||
|
|
||||||
timestamp = NextTimeStamp();
|
timestamp = NextTimeStamp();
|
||||||
|
|
||||||
PointIndex pi = points.End();
|
// PointIndex pi = points.End();
|
||||||
|
PointIndex pi = *points.Range().end();
|
||||||
points.Append ( MeshPoint (p, layer, type) );
|
points.Append ( MeshPoint (p, layer, type) );
|
||||||
|
|
||||||
lock.UnLock();
|
lock.UnLock();
|
||||||
@ -259,7 +260,8 @@ namespace netgen
|
|||||||
points[el[i]].SetType(SURFACEPOINT);
|
points[el[i]].SetType(SURFACEPOINT);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
if (maxn < points.End())
|
// if (maxn < points.End())
|
||||||
|
if (maxn < *points.Range().end())
|
||||||
for (PointIndex pi : el.PNums())
|
for (PointIndex pi : el.PNums())
|
||||||
if (points[pi].Type() > SURFACEPOINT)
|
if (points[pi].Type() > SURFACEPOINT)
|
||||||
points[pi].SetType(SURFACEPOINT);
|
points[pi].SetType(SURFACEPOINT);
|
||||||
@ -719,7 +721,8 @@ namespace netgen
|
|||||||
if (cnt_sing)
|
if (cnt_sing)
|
||||||
{
|
{
|
||||||
outfile << "singular_points" << endl << cnt_sing << endl;
|
outfile << "singular_points" << endl << cnt_sing << endl;
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
if ((*this)[pi].Singularity()>=1.)
|
if ((*this)[pi].Singularity()>=1.)
|
||||||
outfile << int(pi) << "\t" << (*this)[pi].Singularity() << endl;
|
outfile << int(pi) << "\t" << (*this)[pi].Singularity() << endl;
|
||||||
}
|
}
|
||||||
@ -1968,8 +1971,9 @@ namespace netgen
|
|||||||
struct tval { int index; PointIndex p4; };
|
struct tval { int index; PointIndex p4; };
|
||||||
INDEX_3_CLOSED_HASHTABLE<tval> faceht(100);
|
INDEX_3_CLOSED_HASHTABLE<tval> faceht(100);
|
||||||
openelements.SetSize(0);
|
openelements.SetSize(0);
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
if (selsonpoint[pi].Size()+elsonpoint[pi].Size())
|
if (selsonpoint[pi].Size()+elsonpoint[pi].Size())
|
||||||
{
|
{
|
||||||
faceht.SetSize (2 * selsonpoint[pi].Size() + 4 * elsonpoint[pi].Size());
|
faceht.SetSize (2 * selsonpoint[pi].Size() + 4 * elsonpoint[pi].Size());
|
||||||
@ -2149,7 +2153,8 @@ namespace netgen
|
|||||||
for (int j = 1; j <= 3; j++)
|
for (int j = 1; j <= 3; j++)
|
||||||
{
|
{
|
||||||
PointIndex pi = sel.PNum(j);
|
PointIndex pi = sel.PNum(j);
|
||||||
if (pi < points.End())
|
// if (pi < points.End())
|
||||||
|
if (pi < *points.Range().end())
|
||||||
points[pi].SetType (FIXEDPOINT);
|
points[pi].SetType (FIXEDPOINT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3159,7 +3164,8 @@ namespace netgen
|
|||||||
pmin = Point3d (1e10, 1e10, 1e10);
|
pmin = Point3d (1e10, 1e10, 1e10);
|
||||||
pmax = Point3d (-1e10, -1e10, -1e10);
|
pmax = Point3d (-1e10, -1e10, -1e10);
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
{
|
{
|
||||||
pmin.SetToMin ( (*this) [pi] );
|
pmin.SetToMin ( (*this) [pi] );
|
||||||
pmax.SetToMax ( (*this) [pi] );
|
pmax.SetToMax ( (*this) [pi] );
|
||||||
@ -3208,7 +3214,8 @@ namespace netgen
|
|||||||
pmin = Point3d (1e10, 1e10, 1e10);
|
pmin = Point3d (1e10, 1e10, 1e10);
|
||||||
pmax = Point3d (-1e10, -1e10, -1e10);
|
pmax = Point3d (-1e10, -1e10, -1e10);
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
if (points[pi].Type() <= ptyp)
|
if (points[pi].Type() <= ptyp)
|
||||||
{
|
{
|
||||||
pmin.SetToMin ( (*this) [pi] );
|
pmin.SetToMin ( (*this) [pi] );
|
||||||
@ -3331,10 +3338,11 @@ namespace netgen
|
|||||||
*/
|
*/
|
||||||
// pused.Set();
|
// pused.Set();
|
||||||
|
|
||||||
|
|
||||||
int npi = PointIndex::BASE-1;
|
int npi = PointIndex::BASE-1;
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
if (pused.Test(pi))
|
if (pused.Test(pi))
|
||||||
{
|
{
|
||||||
npi++;
|
npi++;
|
||||||
|
@ -227,10 +227,18 @@ namespace netgen
|
|||||||
auto GetNP () const { return points.Size(); }
|
auto GetNP () const { return points.Size(); }
|
||||||
|
|
||||||
// [[deprecated("Use Point(PointIndex) instead of int !")]]
|
// [[deprecated("Use Point(PointIndex) instead of int !")]]
|
||||||
MeshPoint & Point(int i) { return points.Elem(i); }
|
MeshPoint & Point(int i)
|
||||||
|
{
|
||||||
|
// return points.Elem(i);
|
||||||
|
return Point (PointIndex(i+PointIndex::BASE-1));
|
||||||
|
}
|
||||||
MeshPoint & Point(PointIndex pi) { return points[pi]; }
|
MeshPoint & Point(PointIndex pi) { return points[pi]; }
|
||||||
// [[deprecated("Use Point(PointIndex) instead of int !")]]
|
// [[deprecated("Use Point(PointIndex) instead of int !")]]
|
||||||
const MeshPoint & Point(int i) const { return points.Get(i); }
|
const MeshPoint & Point(int i) const
|
||||||
|
{
|
||||||
|
// return points.Get(i);
|
||||||
|
return Point (PointIndex(i+PointIndex::BASE-1));
|
||||||
|
}
|
||||||
const MeshPoint & Point(PointIndex pi) const { return points[pi]; }
|
const MeshPoint & Point(PointIndex pi) const { return points[pi]; }
|
||||||
|
|
||||||
const MeshPoint & operator[] (PointIndex pi) const { return points[pi]; }
|
const MeshPoint & operator[] (PointIndex pi) const { return points[pi]; }
|
||||||
|
@ -145,7 +145,8 @@ namespace netgen
|
|||||||
mpquad.check_impossible = qstep == 1; // for prisms only (air domain in trafo)
|
mpquad.check_impossible = qstep == 1; // for prisms only (air domain in trafo)
|
||||||
|
|
||||||
|
|
||||||
for (PointIndex pi = mesh3d.Points().Begin(); pi < mesh3d.Points().End(); pi++)
|
// for (PointIndex pi = mesh3d.Points().Begin(); pi < mesh3d.Points().End(); pi++)
|
||||||
|
for (PointIndex pi : mesh3d.Points().Range())
|
||||||
meshing.AddPoint (mesh3d[pi], pi);
|
meshing.AddPoint (mesh3d[pi], pi);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -241,7 +242,8 @@ namespace netgen
|
|||||||
NgArray<int, PointIndex::BASE> glob2loc(mesh3d.GetNP());
|
NgArray<int, PointIndex::BASE> glob2loc(mesh3d.GetNP());
|
||||||
glob2loc = -1;
|
glob2loc = -1;
|
||||||
|
|
||||||
for (PointIndex pi = mesh3d.Points().Begin(); pi < mesh3d.Points().End(); pi++)
|
// for (PointIndex pi = mesh3d.Points().Begin(); pi < mesh3d.Points().End(); pi++)
|
||||||
|
for (PointIndex pi : mesh3d.Points().Range())
|
||||||
if (domain_bbox.IsIn (mesh3d[pi]))
|
if (domain_bbox.IsIn (mesh3d[pi]))
|
||||||
glob2loc[pi] =
|
glob2loc[pi] =
|
||||||
meshing.AddPoint (mesh3d[pi], pi);
|
meshing.AddPoint (mesh3d[pi], pi);
|
||||||
|
@ -188,6 +188,18 @@ namespace netgen
|
|||||||
void DoArchive (Archive & ar) { ar & i; }
|
void DoArchive (Archive & ar) { ar & i; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace ngcore
|
||||||
|
{
|
||||||
|
template<>
|
||||||
|
constexpr size_t IndexBASE<netgen::PointIndex> () { return netgen::PointIndex::BASE; }
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace netgen
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
inline istream & operator>> (istream & ist, PointIndex & pi)
|
inline istream & operator>> (istream & ist, PointIndex & pi)
|
||||||
{
|
{
|
||||||
int i; ist >> i; pi = PointIndex(i); return ist;
|
int i; ist >> i; pi = PointIndex(i); return ist;
|
||||||
@ -358,6 +370,7 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
typedef NgArray<MeshPoint, PointIndex::BASE, PointIndex> T_POINTS;
|
typedef NgArray<MeshPoint, PointIndex::BASE, PointIndex> T_POINTS;
|
||||||
|
// typedef Array<MeshPoint, PointIndex> T_POINTS;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -142,7 +142,8 @@ namespace netgen
|
|||||||
NgArray<SurfaceElementIndex> locelements(0);
|
NgArray<SurfaceElementIndex> locelements(0);
|
||||||
NgArray<int> locrots(0);
|
NgArray<int> locrots(0);
|
||||||
|
|
||||||
for (PointIndex pi = mesh.Points().Begin(); pi < mesh.Points().End(); pi++)
|
// for (PointIndex pi = mesh.Points().Begin(); pi < mesh.Points().End(); pi++)
|
||||||
|
for (PointIndex pi : mesh.Points().Range())
|
||||||
{
|
{
|
||||||
if (mesh[pi].Type() != SURFACEPOINT)
|
if (mesh[pi].Type() != SURFACEPOINT)
|
||||||
continue;
|
continue;
|
||||||
|
@ -1533,7 +1533,8 @@ void Mesh :: ImproveMeshJacobian (const MeshingParameters & mp,
|
|||||||
const char * savetask = multithread.task;
|
const char * savetask = multithread.task;
|
||||||
multithread.task = "Smooth Mesh Jacobian";
|
multithread.task = "Smooth Mesh Jacobian";
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); i < points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); i < points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
{
|
{
|
||||||
if ((*this)[pi].Type() != INNERPOINT)
|
if ((*this)[pi].Type() != INNERPOINT)
|
||||||
continue;
|
continue;
|
||||||
@ -1687,7 +1688,8 @@ void Mesh :: ImproveMeshJacobianOnSurface (const MeshingParameters & mp,
|
|||||||
const char * savetask = multithread.task;
|
const char * savetask = multithread.task;
|
||||||
multithread.task = "Smooth Mesh Jacobian";
|
multithread.task = "Smooth Mesh Jacobian";
|
||||||
|
|
||||||
for (PointIndex pi = points.Begin(); pi <= points.End(); pi++)
|
// for (PointIndex pi = points.Begin(); pi <= points.End(); pi++)
|
||||||
|
for (PointIndex pi : points.Range())
|
||||||
if ( usepoint.Test(i) )
|
if ( usepoint.Test(i) )
|
||||||
{
|
{
|
||||||
//(*testout) << "improvejac, p = " << i << endl;
|
//(*testout) << "improvejac, p = " << i << endl;
|
||||||
|
@ -521,13 +521,15 @@ namespace netgen
|
|||||||
|
|
||||||
// ensure all coarse grid and intermediate level edges
|
// ensure all coarse grid and intermediate level edges
|
||||||
cnt = 0;
|
cnt = 0;
|
||||||
for (int i = mesh->mlbetweennodes.Begin(); i < mesh->mlbetweennodes.End(); i++)
|
// for (int i = mesh->mlbetweennodes.Begin(); i < mesh->mlbetweennodes.End(); i++)
|
||||||
|
for (int i : mesh->mlbetweennodes.Range())
|
||||||
{
|
{
|
||||||
INDEX_2 parents = Sort (mesh->mlbetweennodes[i]);
|
INDEX_2 parents = Sort (mesh->mlbetweennodes[i]);
|
||||||
if (parents[0] >= PointIndex::BASE) cnt[parents[0]]++;
|
if (parents[0] >= PointIndex::BASE) cnt[parents[0]]++;
|
||||||
}
|
}
|
||||||
TABLE<int,PointIndex::BASE> vert2vertcoarse (cnt);
|
TABLE<int,PointIndex::BASE> vert2vertcoarse (cnt);
|
||||||
for (int i = mesh->mlbetweennodes.Begin(); i < mesh->mlbetweennodes.End(); i++)
|
// for (int i = mesh->mlbetweennodes.Begin(); i < mesh->mlbetweennodes.End(); i++)
|
||||||
|
for (int i : mesh->mlbetweennodes.Range())
|
||||||
{
|
{
|
||||||
INDEX_2 parents = Sort (mesh->mlbetweennodes[i]);
|
INDEX_2 parents = Sort (mesh->mlbetweennodes[i]);
|
||||||
if (parents[0] >= PointIndex::BASE) vert2vertcoarse.AddSave (parents[0], parents[1]);
|
if (parents[0] >= PointIndex::BASE) vert2vertcoarse.AddSave (parents[0], parents[1]);
|
||||||
|
@ -346,7 +346,8 @@ namespace netgen
|
|||||||
(*testout) << "different vertices = " << mesh.GetNP() << endl;
|
(*testout) << "different vertices = " << mesh.GetNP() << endl;
|
||||||
|
|
||||||
// int first_ep = mesh.GetNP()+1;
|
// int first_ep = mesh.GetNP()+1;
|
||||||
PointIndex first_ep = mesh.Points().End();
|
// PointIndex first_ep = mesh.Points().End();
|
||||||
|
PointIndex first_ep = *mesh.Points().Range().end();
|
||||||
auto vertexrange = mesh.Points().Range();
|
auto vertexrange = mesh.Points().Range();
|
||||||
|
|
||||||
NgArray<int> face2solid[2];
|
NgArray<int> face2solid[2];
|
||||||
@ -500,7 +501,8 @@ namespace netgen
|
|||||||
bool exists = 0;
|
bool exists = 0;
|
||||||
tsearch.Start();
|
tsearch.Start();
|
||||||
|
|
||||||
for (PointIndex j = first_ep; j < mesh.Points().End(); j++)
|
// for (PointIndex j = first_ep; j < mesh.Points().End(); j++)
|
||||||
|
for (PointIndex j = first_ep; j < *mesh.Points().Range().end(); j++)
|
||||||
if ((mesh.Point(j)-Point<3>(mp[i-1])).Length() < eps)
|
if ((mesh.Point(j)-Point<3>(mp[i-1])).Length() < eps)
|
||||||
{
|
{
|
||||||
exists = true;
|
exists = true;
|
||||||
|
@ -4008,7 +4008,8 @@ namespace netgen
|
|||||||
// NgProfiler::StartTimer (timer_vals);
|
// NgProfiler::StartTimer (timer_vals);
|
||||||
NgArray<double,PointIndex::BASE> vertval(mesh->GetNP());
|
NgArray<double,PointIndex::BASE> vertval(mesh->GetNP());
|
||||||
NgArray<bool,PointIndex::BASE> posval(mesh->GetNP());
|
NgArray<bool,PointIndex::BASE> posval(mesh->GetNP());
|
||||||
for (PointIndex pi = vertval.Begin(); pi < vertval.End(); pi++)
|
// for (PointIndex pi = vertval.Begin(); pi < vertval.End(); pi++)
|
||||||
|
for (PointIndex pi : vertval.Range())
|
||||||
{
|
{
|
||||||
Point<3> vert = (*mesh)[pi];
|
Point<3> vert = (*mesh)[pi];
|
||||||
vertval[pi] =
|
vertval[pi] =
|
||||||
|
Loading…
Reference in New Issue
Block a user