mirror of
https://github.com/NGSolve/netgen.git
synced 2025-05-05 02:00:49 +05:00
use of ElementIndex
This commit is contained in:
parent
4a9188da61
commit
95e9408db0
@ -89,7 +89,7 @@ namespace netgen
|
|||||||
NgArray<int> nnums; // , ednums, fanums;
|
NgArray<int> nnums; // , ednums, fanums;
|
||||||
for (auto i_ : myrange)
|
for (auto i_ : myrange)
|
||||||
{
|
{
|
||||||
int i = i_+1;
|
int i = i_-IndexBASE<ElementIndex>()+1;
|
||||||
const Element & el = mesh.VolumeElement(i_);
|
const Element & el = mesh.VolumeElement(i_);
|
||||||
ELEMENT_TYPE typ = el.GetType();
|
ELEMENT_TYPE typ = el.GetType();
|
||||||
|
|
||||||
|
@ -2439,7 +2439,7 @@ namespace netgen
|
|||||||
const HPRefElement & hpref_el =
|
const HPRefElement & hpref_el =
|
||||||
(*mesh.hpelements) [mesh[elnr].GetHpElnr()];
|
(*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];
|
const Element & el = mesh[elnr];
|
||||||
@ -2491,7 +2491,7 @@ namespace netgen
|
|||||||
const HPRefElement & hpref_el =
|
const HPRefElement & hpref_el =
|
||||||
(*mesh.hpelements) [mesh[elnr].GetHpElnr()];
|
(*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];
|
const Element & el = mesh[elnr];
|
||||||
@ -2555,7 +2555,8 @@ namespace netgen
|
|||||||
for (int j = 0; j < 3; j++)
|
for (int j = 0; j < 3; j++)
|
||||||
coarse_xi(j) += hpref_el.param[i][j] * lami[i];
|
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)
|
if (dxdxi)
|
||||||
*dxdxi = dxdxic * trans;
|
*dxdxi = dxdxic * trans;
|
||||||
@ -4584,7 +4585,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
mesh.coarsemesh->GetCurvedElements().
|
mesh.coarsemesh->GetCurvedElements().
|
||||||
CalcMultiPointElementTransformation (hpref_el.coarse_elnr, n,
|
CalcMultiPointElementTransformation (ElementIndex(hpref_el.coarse_elnr), n,
|
||||||
&coarse_xi[0], 3,
|
&coarse_xi[0], 3,
|
||||||
x, sx,
|
x, sx,
|
||||||
dxdxi, sdxdxi);
|
dxdxi, sdxdxi);
|
||||||
|
@ -613,10 +613,11 @@ namespace netgen
|
|||||||
|
|
||||||
void InitHPElements(Mesh & mesh, NgArray<HPRefElement> & elements)
|
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]);
|
HPRefElement hpel(mesh[i]);
|
||||||
hpel.coarse_elnr = i;
|
hpel.coarse_elnr = int(i);
|
||||||
|
|
||||||
switch (mesh[i].GetType())
|
switch (mesh[i].GetType())
|
||||||
{
|
{
|
||||||
@ -1510,7 +1511,8 @@ namespace netgen
|
|||||||
|
|
||||||
if(act_ref>=1)
|
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] ;
|
// Element el = mesh[i] ;
|
||||||
HPRefElement & hpel = hpelements[mesh[i].GetHpElnr()];
|
HPRefElement & hpel = hpelements[mesh[i].GetHpElnr()];
|
||||||
|
@ -333,7 +333,7 @@ public:
|
|||||||
int levely;
|
int levely;
|
||||||
int levelz;
|
int levelz;
|
||||||
int np;
|
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 domin, domout; // he: needed for segment!! in 3d there should be surf1, surf2!!
|
||||||
// int coarse_hpelnr;
|
// int coarse_hpelnr;
|
||||||
PointIndex & operator[](int i) { return(pnums[i]);}
|
PointIndex & operator[](int i) { return(pnums[i]);}
|
||||||
|
@ -439,7 +439,8 @@ void MeshOptimize3d :: CombineImprove ()
|
|||||||
(*testout) << "Total badness = " << totalbad << endl;
|
(*testout) << "Total badness = " << totalbad << endl;
|
||||||
|
|
||||||
int cntill = 0;
|
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.GetDimension()==3 && mp.only3D_domain_nr && mp.only3D_domain_nr != mesh.VolumeElement(ei).GetIndex()))
|
||||||
if (!mesh.LegalTet (mesh[ei]))
|
if (!mesh.LegalTet (mesh[ei]))
|
||||||
cntill++;
|
cntill++;
|
||||||
@ -693,7 +694,8 @@ void MeshOptimize3d :: SplitImprove ()
|
|||||||
|
|
||||||
[[maybe_unused]] int cntill = 0;
|
[[maybe_unused]] int cntill = 0;
|
||||||
ne = mesh.GetNE();
|
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]))
|
if (!mesh.LegalTet (mesh[ei]))
|
||||||
cntill++;
|
cntill++;
|
||||||
// cout << cntill << " illegal tets" << endl;
|
// cout << cntill << " illegal tets" << endl;
|
||||||
@ -704,7 +706,7 @@ void MeshOptimize3d :: SplitImprove ()
|
|||||||
|
|
||||||
|
|
||||||
double MeshOptimize3d :: SwapImproveEdge (
|
double MeshOptimize3d :: SwapImproveEdge (
|
||||||
const BitArray * working_elements,
|
const TBitArray<ElementIndex> * working_elements,
|
||||||
Table<ElementIndex, PointIndex> & elementsonnode,
|
Table<ElementIndex, PointIndex> & elementsonnode,
|
||||||
INDEX_3_HASHTABLE<int> & faces,
|
INDEX_3_HASHTABLE<int> & faces,
|
||||||
PointIndex pi1, PointIndex pi2, bool check_only)
|
PointIndex pi1, PointIndex pi2, bool check_only)
|
||||||
@ -765,7 +767,7 @@ double MeshOptimize3d :: SwapImproveEdge (
|
|||||||
|
|
||||||
if(working_elements &&
|
if(working_elements &&
|
||||||
ei < working_elements->Size() &&
|
ei < working_elements->Size() &&
|
||||||
!working_elements->Test(ei))
|
!working_elements->Test(ei))
|
||||||
return 0.0;
|
return 0.0;
|
||||||
|
|
||||||
if (mesh[ei].IsDeleted())
|
if (mesh[ei].IsDeleted())
|
||||||
@ -1325,7 +1327,7 @@ double MeshOptimize3d :: SwapImproveEdge (
|
|||||||
return d_badness;
|
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 t("MeshOptimize3d::SwapImprove"); RegionTimer reg(t);
|
||||||
static Timer tloop("MeshOptimize3d::SwapImprove loop");
|
static Timer tloop("MeshOptimize3d::SwapImprove loop");
|
||||||
@ -1463,7 +1465,7 @@ void MeshOptimize3d :: SwapImprove (const BitArray * working_elements)
|
|||||||
|
|
||||||
|
|
||||||
void MeshOptimize3d :: SwapImproveSurface (
|
void MeshOptimize3d :: SwapImproveSurface (
|
||||||
const BitArray * working_elements,
|
const TBitArray<ElementIndex> * working_elements,
|
||||||
const NgArray< idmap_type* > * idmaps)
|
const NgArray< idmap_type* > * idmaps)
|
||||||
{
|
{
|
||||||
NgArray< idmap_type* > locidmaps;
|
NgArray< idmap_type* > locidmaps;
|
||||||
|
@ -41,9 +41,9 @@ public:
|
|||||||
double SplitImprove2Element (ElementIndex ei, const Table<ElementIndex, PointIndex> & elements_of_point, bool check_only);
|
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);
|
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 BitArray * working_elements = NULL);
|
void SwapImprove (const TBitArray<ElementIndex> * working_elements = NULL);
|
||||||
void SwapImproveSurface (const BitArray * working_elements = NULL,
|
void SwapImproveSurface (const TBitArray<ElementIndex> * working_elements = NULL,
|
||||||
const NgArray< idmap_type* > * idmaps = NULL);
|
const NgArray< idmap_type* > * idmaps = NULL);
|
||||||
void SwapImprove2 ();
|
void SwapImprove2 ();
|
||||||
double SwapImprove2 (ElementIndex eli1, int face, Table<ElementIndex, PointIndex> & elementsonnode, DynamicTable<SurfaceElementIndex, PointIndex> & belementsonnode, bool check_only=false );
|
double SwapImprove2 (ElementIndex eli1, int face, Table<ElementIndex, PointIndex> & elementsonnode, DynamicTable<SurfaceElementIndex, PointIndex> & belementsonnode, bool check_only=false );
|
||||||
|
@ -472,7 +472,7 @@ namespace netgen
|
|||||||
ElementIndex & operator= (const ElementIndex & ai) { i = ai.i; return *this; }
|
ElementIndex & operator= (const ElementIndex & ai) { i = ai.i; return *this; }
|
||||||
ElementIndex & operator= (int ai) { i = ai; 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-- (int) { return ElementIndex(i--); }
|
ElementIndex operator-- (int) { return ElementIndex(i--); }
|
||||||
ElementIndex & operator++ () { ++i; return *this; }
|
ElementIndex & operator++ () { ++i; return *this; }
|
||||||
|
@ -218,7 +218,7 @@ namespace netgen
|
|||||||
Validate(mesh,bad_elements,pure_badness,
|
Validate(mesh,bad_elements,pure_badness,
|
||||||
((uselocalworsening) ? (0.8*(max_worsening-1.) + 1.) : (0.1*(max_worsening-1.) + 1.)),
|
((uselocalworsening) ? (0.8*(max_worsening-1.) + 1.) : (0.1*(max_worsening-1.) + 1.)),
|
||||||
uselocalworsening); // -> larger working area
|
uselocalworsening); // -> larger working area
|
||||||
BitArray working_elements(ne+1);
|
TBitArray<ElementIndex> working_elements(ne+1);
|
||||||
TBitArray<PointIndex> working_points(np);
|
TBitArray<PointIndex> working_points(np);
|
||||||
|
|
||||||
GetWorkingArea(working_elements,working_points,mesh,bad_elements,numbadneighbours);
|
GetWorkingArea(working_elements,working_points,mesh,bad_elements,numbadneighbours);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user