mirror of
https://github.com/NGSolve/netgen.git
synced 2025-04-08 22:37:28 +05:00
Element2d with initializer lists
This commit is contained in:
parent
eec95bf406
commit
a95185a714
@ -25,16 +25,6 @@ namespace netgen
|
|||||||
|
|
||||||
void SetOrientation (int side, int aorient) { orient[side] = aorient; }
|
void SetOrientation (int side, int aorient) { orient[side] = aorient; }
|
||||||
int GetOrientation (int side) { return orient[side]; }
|
int GetOrientation (int side) { return orient[side]; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
void SetNr1 (int side, int anr) { nr[side-1] = anr; }
|
|
||||||
int GetNr1 (int side) { return nr[side-1]; }
|
|
||||||
|
|
||||||
void SetOrientation1 (int side, int aorient) { orient[side-1] = aorient; }
|
|
||||||
int GetOrientation1 (int side) { return orient[side-1]; }
|
|
||||||
*/
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -100,7 +90,7 @@ namespace netgen
|
|||||||
INDEX_2_HASHTABLE<trionedge> other(seia.Size() + 2);
|
INDEX_2_HASHTABLE<trionedge> other(seia.Size() + 2);
|
||||||
|
|
||||||
|
|
||||||
NgArray<char> swapped(mesh.GetNSE());
|
NgArray<bool> swapped(mesh.GetNSE());
|
||||||
NgArray<int,PointIndex::BASE> pdef(mesh.GetNP());
|
NgArray<int,PointIndex::BASE> pdef(mesh.GetNP());
|
||||||
NgArray<double,PointIndex::BASE> pangle(mesh.GetNP());
|
NgArray<double,PointIndex::BASE> pangle(mesh.GetNP());
|
||||||
|
|
||||||
@ -231,14 +221,14 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < seia.Size(); i++)
|
for (int i = 0; i < seia.Size(); i++)
|
||||||
swapped[seia[i]] = 0;
|
swapped[seia[i]] = false;
|
||||||
|
|
||||||
NgProfiler::StopTimer (timerstart);
|
NgProfiler::StopTimer (timerstart);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int t = 4;
|
int t = 4;
|
||||||
int done = 0;
|
bool done = false;
|
||||||
while (!done && t >= 2)
|
while (!done && t >= 2)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < seia.Size(); i++)
|
for (int i = 0; i < seia.Size(); i++)
|
||||||
@ -258,7 +248,6 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
bool should;
|
bool should;
|
||||||
|
|
||||||
|
|
||||||
SurfaceElementIndex t2 = neighbors[t1].GetNr (o1);
|
SurfaceElementIndex t2 = neighbors[t1].GetNr (o1);
|
||||||
int o2 = neighbors[t1].GetOrientation (o1);
|
int o2 = neighbors[t1].GetOrientation (o1);
|
||||||
|
|
||||||
@ -355,15 +344,10 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
double loch = mesh.GetH(mesh[pi1]);
|
double loch = mesh.GetH(mesh[pi1]);
|
||||||
should =
|
should =
|
||||||
CalcTriangleBadness (mesh.Point(pi4), mesh.Point(pi3), mesh.Point(pi1),
|
CalcTriangleBadness (mesh[pi4], mesh[pi3], mesh[pi1], metricweight, loch) +
|
||||||
metricweight, loch) +
|
CalcTriangleBadness (mesh[pi3], mesh[pi4], mesh[pi2], metricweight, loch) <
|
||||||
CalcTriangleBadness (mesh.Point(pi3), mesh.Point(pi4), mesh.Point(pi2),
|
CalcTriangleBadness (mesh[pi1], mesh[pi2], mesh[pi3], metricweight, loch) +
|
||||||
metricweight, loch) <
|
CalcTriangleBadness (mesh[pi2], mesh[pi1], mesh[pi4], metricweight, loch);
|
||||||
CalcTriangleBadness (mesh.Point(pi1), mesh.Point(pi2), mesh.Point(pi3),
|
|
||||||
metricweight, loch) +
|
|
||||||
CalcTriangleBadness (mesh.Point(pi2), mesh.Point(pi1), mesh.Point(pi4),
|
|
||||||
metricweight, loch);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allowswap)
|
if (allowswap)
|
||||||
@ -377,24 +361,20 @@ namespace netgen
|
|||||||
int legal2 =
|
int legal2 =
|
||||||
mesh.LegalTrig (sw1) + mesh.LegalTrig (sw2);
|
mesh.LegalTrig (sw1) + mesh.LegalTrig (sw2);
|
||||||
|
|
||||||
if (legal1 < legal2) should = 1;
|
if (legal1 < legal2) should = true;
|
||||||
if (legal2 < legal1) should = 0;
|
if (legal2 < legal1) should = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (should)
|
if (should)
|
||||||
{
|
{
|
||||||
// do swapping !
|
// do swapping !
|
||||||
|
|
||||||
done = 1;
|
done = true;
|
||||||
|
|
||||||
mesh[t1].PNum(1) = pi1;
|
/*
|
||||||
mesh[t1].PNum(2) = pi4;
|
mesh[t1] = { pi1, pi4, pi3 };
|
||||||
mesh[t1].PNum(3) = pi3;
|
mesh[t2] = { pi2, pi3, pi4 };
|
||||||
|
|
||||||
mesh[t2].PNum(1) = pi2;
|
|
||||||
mesh[t2].PNum(2) = pi3;
|
|
||||||
mesh[t2].PNum(3) = pi4;
|
|
||||||
|
|
||||||
mesh[t1].GeomInfoPi(1) = gi1;
|
mesh[t1].GeomInfoPi(1) = gi1;
|
||||||
mesh[t1].GeomInfoPi(2) = gi4;
|
mesh[t1].GeomInfoPi(2) = gi4;
|
||||||
mesh[t1].GeomInfoPi(3) = gi3;
|
mesh[t1].GeomInfoPi(3) = gi3;
|
||||||
@ -402,14 +382,17 @@ namespace netgen
|
|||||||
mesh[t2].GeomInfoPi(1) = gi2;
|
mesh[t2].GeomInfoPi(1) = gi2;
|
||||||
mesh[t2].GeomInfoPi(2) = gi3;
|
mesh[t2].GeomInfoPi(2) = gi3;
|
||||||
mesh[t2].GeomInfoPi(3) = gi4;
|
mesh[t2].GeomInfoPi(3) = gi4;
|
||||||
|
*/
|
||||||
|
mesh[t1] = { { pi1, gi1 }, { pi4, gi4 }, { pi3, gi3 } };
|
||||||
|
mesh[t2] = { { pi2, gi2 }, { pi3, gi3 }, { pi4, gi4 } };
|
||||||
|
|
||||||
pdef[pi1]--;
|
pdef[pi1]--;
|
||||||
pdef[pi2]--;
|
pdef[pi2]--;
|
||||||
pdef[pi3]++;
|
pdef[pi3]++;
|
||||||
pdef[pi4]++;
|
pdef[pi4]++;
|
||||||
|
|
||||||
swapped[t1] = 1;
|
swapped[t1] = true;
|
||||||
swapped[t2] = 1;
|
swapped[t2] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -708,19 +691,17 @@ namespace netgen
|
|||||||
|
|
||||||
mesh[pi1] = p1;
|
mesh[pi1] = p1;
|
||||||
mesh[pi2] = p2;
|
mesh[pi2] = p2;
|
||||||
|
|
||||||
|
|
||||||
if (debugflag)
|
if (debugflag)
|
||||||
{
|
{
|
||||||
(*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl;
|
(*testout) << "bad1 = " << bad1 << ", bad2 = " << bad2 << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool should = (bad2 < bad1 && bad2 < 1e4);
|
bool should = (bad2 < bad1 && bad2 < 1e4);
|
||||||
if (bad2 < 1e4)
|
if (bad2 < 1e4)
|
||||||
{
|
{
|
||||||
if (illegal1 > illegal2) should = 1;
|
if (illegal1 > illegal2) should = true;
|
||||||
if (illegal2 > illegal1) should = 0;
|
if (illegal2 > illegal1) should = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -737,7 +718,7 @@ namespace netgen
|
|||||||
PointGeomInfo gi;
|
PointGeomInfo gi;
|
||||||
// bool gi_set(false);
|
// bool gi_set(false);
|
||||||
|
|
||||||
|
/*
|
||||||
Element2d *el1p(NULL);
|
Element2d *el1p(NULL);
|
||||||
int l = 0;
|
int l = 0;
|
||||||
while(mesh[elementsonnode[pi1][l]].IsDeleted() && l<elementsonnode[pi1].Size()) l++;
|
while(mesh[elementsonnode[pi1][l]].IsDeleted() && l<elementsonnode[pi1].Size()) l++;
|
||||||
@ -752,20 +733,38 @@ namespace netgen
|
|||||||
gi = el1p->GeomInfoPi (l+1);
|
gi = el1p->GeomInfoPi (l+1);
|
||||||
// gi_set = true;
|
// gi_set = true;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
for (SurfaceElementIndex sei : elementsonnode[pi1])
|
||||||
|
{
|
||||||
|
const Element2d & el1p = mesh[sei];
|
||||||
|
if (el1p.IsDeleted()) continue;
|
||||||
|
|
||||||
|
for (int l = 0; l < el1p.GetNP(); l++)
|
||||||
|
if (el1p[l] == pi1)
|
||||||
|
// gi = el1p.GeomInfoPi (l+1);
|
||||||
|
gi = el1p.GeomInfo()[l];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// (*testout) << "Connect point " << pi2 << " to " << pi1 << "\n";
|
// (*testout) << "Connect point " << pi2 << " to " << pi1 << "\n";
|
||||||
for (int k = 0; k < elementsonnode[pi2].Size(); k++)
|
// for (int k = 0; k < elementsonnode[pi2].Size(); k++)
|
||||||
|
for (SurfaceElementIndex sei2 : elementsonnode[pi2])
|
||||||
{
|
{
|
||||||
Element2d & el = mesh[elementsonnode[pi2][k]];
|
Element2d & el = mesh[sei2];
|
||||||
if(el.IsDeleted()) continue;
|
if(el.IsDeleted()) continue;
|
||||||
elementsonnode.Add (pi1, elementsonnode[pi2][k]);
|
elementsonnode.Add (pi1, sei2);
|
||||||
|
|
||||||
|
/*
|
||||||
bool haspi1 = 0;
|
bool haspi1 = 0;
|
||||||
for (l = 0; l < el.GetNP(); l++)
|
for (int l = 0; l < el.GetNP(); l++)
|
||||||
if (el[l] == pi1)
|
if (el[l] == pi1)
|
||||||
haspi1 = 1;
|
haspi1 = true;
|
||||||
if (haspi1) continue;
|
if (haspi1) continue;
|
||||||
|
*/
|
||||||
|
if (el.PNums().Contains(pi1)) continue;
|
||||||
|
|
||||||
for (int l = 0; l < el.GetNP(); l++)
|
for (int l = 0; l < el.GetNP(); l++)
|
||||||
{
|
{
|
||||||
if (el[l] == pi2)
|
if (el[l] == pi2)
|
||||||
@ -778,25 +777,8 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
for (auto sei : hasbothpi)
|
||||||
for (k = 0; k < hasbothpi.Size(); k++)
|
mesh[sei].Delete();
|
||||||
{
|
|
||||||
cout << mesh[hasbothpi[k]] << endl;
|
|
||||||
for (l = 0; l < 3; l++)
|
|
||||||
cout << mesh[mesh[hasbothpi[k]][l]] << " ";
|
|
||||||
cout << endl;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (int k = 0; k < hasbothpi.Size(); k++)
|
|
||||||
{
|
|
||||||
mesh[hasbothpi[k]].Delete();
|
|
||||||
/*
|
|
||||||
for (l = 0; l < 4; l++)
|
|
||||||
mesh[hasbothpi[k]][l] = PointIndex::BASE-1;
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -405,6 +405,23 @@ namespace netgen
|
|||||||
Element2d (Element2d &&) = default;
|
Element2d (Element2d &&) = default;
|
||||||
Element2d & operator= (const Element2d &) = default;
|
Element2d & operator= (const Element2d &) = default;
|
||||||
Element2d & operator= (Element2d &&) = default;
|
Element2d & operator= (Element2d &&) = default;
|
||||||
|
Element2d & operator= (initializer_list<PointIndex> list)
|
||||||
|
{
|
||||||
|
size_t cnt = 0;
|
||||||
|
for (auto val : list)
|
||||||
|
pnum[cnt++] = val;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
Element2d & operator= (initializer_list<tuple<PointIndex,PointGeomInfo>> list)
|
||||||
|
{
|
||||||
|
size_t cnt = 0;
|
||||||
|
for (auto val : list)
|
||||||
|
{
|
||||||
|
pnum[cnt] = get<0>(val);
|
||||||
|
geominfo[cnt++] = get<1>(val);
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
///
|
///
|
||||||
DLL_HEADER Element2d (int anp);
|
DLL_HEADER Element2d (int anp);
|
||||||
///
|
///
|
||||||
@ -476,6 +493,12 @@ namespace netgen
|
|||||||
{ return NgFlatArray<PointIndex> (np, &pnum[0]); }
|
{ return NgFlatArray<PointIndex> (np, &pnum[0]); }
|
||||||
auto Vertices() const
|
auto Vertices() const
|
||||||
{ return NgFlatArray<const PointIndex> (GetNV(), &pnum[0]); }
|
{ return NgFlatArray<const PointIndex> (GetNV(), &pnum[0]); }
|
||||||
|
|
||||||
|
NgFlatArray<const PointGeomInfo> GeomInfo() const
|
||||||
|
{ return NgFlatArray<const PointGeomInfo> (np, &geominfo[0]); }
|
||||||
|
NgFlatArray<PointGeomInfo> GeomInfo()
|
||||||
|
{ return NgFlatArray<PointGeomInfo> (np, &geominfo[0]); }
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
PointIndex & PNum (int i) { return pnum[i-1]; }
|
PointIndex & PNum (int i) { return pnum[i-1]; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user