use of ElementIndex

This commit is contained in:
Joachim Schoeberl 2024-12-29 22:20:46 +01:00
parent 4a9188da61
commit 95e9408db0
8 changed files with 25 additions and 20 deletions

View File

@ -89,7 +89,7 @@ namespace netgen
NgArray<int> nnums; // , ednums, fanums;
for (auto i_ : myrange)
{
int i = i_+1;
int i = i_-IndexBASE<ElementIndex>()+1;
const Element & el = mesh.VolumeElement(i_);
ELEMENT_TYPE typ = el.GetType();

View File

@ -2439,7 +2439,7 @@ namespace netgen
const HPRefElement & hpref_el =
(*mesh.hpelements) [mesh[elnr].GetHpElnr()];
return mesh.coarsemesh->GetCurvedElements().IsElementCurved (hpref_el.coarse_elnr);
return mesh.coarsemesh->GetCurvedElements().IsElementCurved (ElementIndex(hpref_el.coarse_elnr));
}
const Element & el = mesh[elnr];
@ -2491,7 +2491,7 @@ namespace netgen
const HPRefElement & hpref_el =
(*mesh.hpelements) [mesh[elnr].GetHpElnr()];
return mesh.coarsemesh->GetCurvedElements().IsElementHighOrder (hpref_el.coarse_elnr);
return mesh.coarsemesh->GetCurvedElements().IsElementHighOrder (ElementIndex(hpref_el.coarse_elnr));
}
const Element & el = mesh[elnr];
@ -2555,7 +2555,8 @@ namespace netgen
for (int j = 0; j < 3; j++)
coarse_xi(j) += hpref_el.param[i][j] * lami[i];
mesh.coarsemesh->GetCurvedElements().CalcElementTransformation (coarse_xi, hpref_el.coarse_elnr, x, &dxdxic /* , curved */);
mesh.coarsemesh->GetCurvedElements().
CalcElementTransformation (coarse_xi, ElementIndex(hpref_el.coarse_elnr), x, &dxdxic /* , curved */);
if (dxdxi)
*dxdxi = dxdxic * trans;
@ -4584,7 +4585,7 @@ namespace netgen
}
mesh.coarsemesh->GetCurvedElements().
CalcMultiPointElementTransformation (hpref_el.coarse_elnr, n,
CalcMultiPointElementTransformation (ElementIndex(hpref_el.coarse_elnr), n,
&coarse_xi[0], 3,
x, sx,
dxdxi, sdxdxi);

View File

@ -613,10 +613,11 @@ namespace netgen
void InitHPElements(Mesh & mesh, NgArray<HPRefElement> & elements)
{
for(ElementIndex i = 0; i < mesh.GetNE(); i++)
// for(ElementIndex i = 0; i < mesh.GetNE(); i++)
for(ElementIndex i : mesh.VolumeElements().Range())
{
HPRefElement hpel(mesh[i]);
hpel.coarse_elnr = i;
hpel.coarse_elnr = int(i);
switch (mesh[i].GetType())
{
@ -1510,7 +1511,8 @@ namespace netgen
if(act_ref>=1)
{
for(ElementIndex i=0;i<mesh.GetNE(); i++)
// for(ElementIndex i=0;i<mesh.GetNE(); i++)
for (ElementIndex i : mesh.VolumeElements().Range())
{
// Element el = mesh[i] ;
HPRefElement & hpel = hpelements[mesh[i].GetHpElnr()];

View File

@ -333,7 +333,7 @@ public:
int levely;
int levelz;
int np;
int coarse_elnr;
int coarse_elnr; // issue (JS): same class is for ElementIndex, SurfaceElementIndex, SegmentIndex
int domin, domout; // he: needed for segment!! in 3d there should be surf1, surf2!!
// int coarse_hpelnr;
PointIndex & operator[](int i) { return(pnums[i]);}

View File

@ -439,7 +439,8 @@ void MeshOptimize3d :: CombineImprove ()
(*testout) << "Total badness = " << totalbad << endl;
int cntill = 0;
for (ElementIndex ei = 0; ei < ne; ei++)
// for (ElementIndex ei = 0; ei < ne; ei++)
for (ElementIndex ei : ngcore::T_Range<ElementIndex>(ne))
if(!(mesh.GetDimension()==3 && mp.only3D_domain_nr && mp.only3D_domain_nr != mesh.VolumeElement(ei).GetIndex()))
if (!mesh.LegalTet (mesh[ei]))
cntill++;
@ -693,7 +694,8 @@ void MeshOptimize3d :: SplitImprove ()
[[maybe_unused]] int cntill = 0;
ne = mesh.GetNE();
for (ElementIndex ei = 0; ei < ne; ei++)
// for (ElementIndex ei = 0; ei < ne; ei++)
for (auto ei : ngcore::T_Range<ElementIndex>(ne))
if (!mesh.LegalTet (mesh[ei]))
cntill++;
// cout << cntill << " illegal tets" << endl;
@ -704,7 +706,7 @@ void MeshOptimize3d :: SplitImprove ()
double MeshOptimize3d :: SwapImproveEdge (
const BitArray * working_elements,
const TBitArray<ElementIndex> * working_elements,
Table<ElementIndex, PointIndex> & elementsonnode,
INDEX_3_HASHTABLE<int> & faces,
PointIndex pi1, PointIndex pi2, bool check_only)
@ -765,7 +767,7 @@ double MeshOptimize3d :: SwapImproveEdge (
if(working_elements &&
ei < working_elements->Size() &&
!working_elements->Test(ei))
!working_elements->Test(ei))
return 0.0;
if (mesh[ei].IsDeleted())
@ -1325,7 +1327,7 @@ double MeshOptimize3d :: SwapImproveEdge (
return d_badness;
}
void MeshOptimize3d :: SwapImprove (const BitArray * working_elements)
void MeshOptimize3d :: SwapImprove (const TBitArray<ElementIndex> * working_elements)
{
static Timer t("MeshOptimize3d::SwapImprove"); RegionTimer reg(t);
static Timer tloop("MeshOptimize3d::SwapImprove loop");
@ -1463,7 +1465,7 @@ void MeshOptimize3d :: SwapImprove (const BitArray * working_elements)
void MeshOptimize3d :: SwapImproveSurface (
const BitArray * working_elements,
const TBitArray<ElementIndex> * working_elements,
const NgArray< idmap_type* > * idmaps)
{
NgArray< idmap_type* > locidmaps;

View File

@ -41,9 +41,9 @@ public:
double SplitImprove2Element (ElementIndex ei, const Table<ElementIndex, PointIndex> & elements_of_point, bool check_only);
double SwapImproveEdge (const BitArray * working_elements, Table<ElementIndex,PointIndex> & elementsonnode, INDEX_3_HASHTABLE<int> & faces, PointIndex pi1, PointIndex pi2, bool check_only=false);
void SwapImprove (const BitArray * working_elements = NULL);
void SwapImproveSurface (const BitArray * working_elements = NULL,
double SwapImproveEdge (const TBitArray<ElementIndex> * working_elements, Table<ElementIndex,PointIndex> & elementsonnode, INDEX_3_HASHTABLE<int> & faces, PointIndex pi1, PointIndex pi2, bool check_only=false);
void SwapImprove (const TBitArray<ElementIndex> * working_elements = NULL);
void SwapImproveSurface (const TBitArray<ElementIndex> * working_elements = NULL,
const NgArray< idmap_type* > * idmaps = NULL);
void SwapImprove2 ();
double SwapImprove2 (ElementIndex eli1, int face, Table<ElementIndex, PointIndex> & elementsonnode, DynamicTable<SurfaceElementIndex, PointIndex> & belementsonnode, bool check_only=false );

View File

@ -472,7 +472,7 @@ namespace netgen
ElementIndex & operator= (const ElementIndex & ai) { i = ai.i; return *this; }
ElementIndex & operator= (int ai) { i = ai; return *this; }
constexpr /* explicit */ operator int () const { return i; }
constexpr /* explicit */ operator int () const { return i; }
ElementIndex operator++ (int) { return ElementIndex(i++); }
ElementIndex operator-- (int) { return ElementIndex(i--); }
ElementIndex & operator++ () { ++i; return *this; }

View File

@ -218,7 +218,7 @@ namespace netgen
Validate(mesh,bad_elements,pure_badness,
((uselocalworsening) ? (0.8*(max_worsening-1.) + 1.) : (0.1*(max_worsening-1.) + 1.)),
uselocalworsening); // -> larger working area
BitArray working_elements(ne+1);
TBitArray<ElementIndex> working_elements(ne+1);
TBitArray<PointIndex> working_points(np);
GetWorkingArea(working_elements,working_points,mesh,bad_elements,numbadneighbours);