more use of Index types

This commit is contained in:
Joachim Schöberl 2019-08-09 00:23:12 +02:00
parent 44264ad4bd
commit b03705c37d
15 changed files with 80 additions and 84 deletions

View File

@ -27,7 +27,7 @@ namespace netgen
const MeshTopology & top = mesh.GetTopology(); const MeshTopology & top = mesh.GetTopology();
auto id = this->mesh.GetCommunicator().Rank(); auto id = this->mesh.GetCommunicator().Rank();
auto ntasks = this->mesh.GetCommunicator().Size(); // auto ntasks = this->mesh.GetCommunicator().Size();
bool hasedges = top.HasEdges(); bool hasedges = top.HasEdges();
bool hasfaces = top.HasFaces(); bool hasfaces = top.HasFaces();

View File

@ -395,8 +395,8 @@ namespace netgen
SelectSurfaceOfPoint (mesh.Point(pmap.Get(1)), pgi.Get(1)); SelectSurfaceOfPoint (mesh.Point(pmap.Get(1)), pgi.Get(1));
GetNormalVector (surfnr, mesh.Point(pmap.Get(1)), pgi.Elem(1), n); GetNormalVector (surfnr, mesh.Point(pmap.Get(1)), pgi.Elem(1), n);
for (int j = 1; j <= rule.oldels.Size(); j++) for (int j = 0; j < rule.oldels.Size(); j++)
bad1 += mesh.SurfaceElement(elmap.Get(j)).CalcJacobianBadness (mesh.Points(), n); bad1 += mesh[elmap[j]].CalcJacobianBadness (mesh.Points(), n);
// check new element: // check new element:
for (int j = 1; j <= rule.newels.Size(); j++) for (int j = 1; j <= rule.newels.Size(); j++)

View File

@ -44,7 +44,7 @@ void MeshOptimize3d :: CombineImprove (Mesh & mesh,
double totalbad = 0; double totalbad = 0;
for (ElementIndex ei = 0; ei < ne; ei++) for (ElementIndex ei = 0; ei < ne; ei++)
{ {
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[ei].GetIndex())
continue; continue;
double elerr = CalcBad (mesh.Points(), mesh[ei], 0); double elerr = CalcBad (mesh.Points(), mesh[ei], 0);
totalbad += elerr; totalbad += elerr;

View File

@ -3,7 +3,7 @@
extern double CalcTotalBad (const Mesh::T_POINTS & points, extern double CalcTotalBad (const Mesh::T_POINTS & points,
const NgArray<Element> & elements, const Array<Element> & elements,
const MeshingParameters & mp); const MeshingParameters & mp);
@ -33,7 +33,7 @@ public:
double CalcTotalBad (const Mesh::T_POINTS & points, double CalcTotalBad (const Mesh::T_POINTS & points,
const NgArray<Element> & elements) const Array<Element> & elements)
{ {
return netgen::CalcTotalBad (points, elements, mp); return netgen::CalcTotalBad (points, elements, mp);
} }
@ -100,7 +100,7 @@ class JacobianPointFunction : public MinFunction
{ {
public: public:
Mesh::T_POINTS & points; Mesh::T_POINTS & points;
const NgArray<Element> & elements; const Array<Element> & elements;
TABLE<INDEX> elementsonpoint; TABLE<INDEX> elementsonpoint;
PointIndex actpind; PointIndex actpind;
@ -109,7 +109,7 @@ public:
public: public:
JacobianPointFunction (Mesh::T_POINTS & apoints, JacobianPointFunction (Mesh::T_POINTS & apoints,
const NgArray<Element> & aelements); const Array<Element> & aelements);
virtual ~JacobianPointFunction () { ; } virtual ~JacobianPointFunction () { ; }
virtual void SetPointIndex (PointIndex aactpind); virtual void SetPointIndex (PointIndex aactpind);
virtual double Func (const Vector & x) const; virtual double Func (const Vector & x) const;

View File

@ -372,7 +372,7 @@ namespace netgen
*/ */
volelements[ei] = el; volelements[ei] = el;
volelements.Last().flags.illegal_valid = 0; volelements[ei].flags.illegal_valid = 0;
} }
@ -3222,7 +3222,7 @@ namespace netgen
double Mesh :: ElementError (int eli, const MeshingParameters & mp) const double Mesh :: ElementError (int eli, const MeshingParameters & mp) const
{ {
const Element & el = volelements.Get(eli); const Element & el = volelements[eli-1];
return CalcTetBadness (points.Get(el[0]), points.Get(el[1]), return CalcTetBadness (points.Get(el[0]), points.Get(el[1]),
points.Get(el[2]), points.Get(el[3]), -1, mp); points.Get(el[2]), points.Get(el[3]), -1, mp);
} }
@ -3262,7 +3262,7 @@ namespace netgen
if (volelements[i][0] <= PointIndex::BASE-1 || if (volelements[i][0] <= PointIndex::BASE-1 ||
volelements[i].IsDeleted()) volelements[i].IsDeleted())
{ {
volelements.Delete(i); volelements.DeleteElement(i);
i--; i--;
} }
@ -3277,13 +3277,13 @@ namespace netgen
for (int i = 0; i < segments.Size(); i++) for (int i = 0; i < segments.Size(); i++)
if (segments[i][0] <= PointIndex::BASE-1) if (segments[i][0] <= PointIndex::BASE-1)
{ {
segments.Delete(i); segments.DeleteElement(i);
i--; i--;
} }
for(int i=0; i < segments.Size(); i++) for(int i=0; i < segments.Size(); i++)
if(segments[i].edgenr < 0) if(segments[i].edgenr < 0)
segments.Delete(i--); segments.DeleteElement(i--);
pused.Clear(); pused.Clear();
for (int i = 0; i < volelements.Size(); i++) for (int i = 0; i < volelements.Size(); i++)

View File

@ -36,13 +36,13 @@ namespace netgen
NgMPI_Comm comm; NgMPI_Comm comm;
/// line-segments at edges /// line-segments at edges
NgArray<Segment, 0, size_t> segments; Array<Segment> segments;
/// surface elements, 2d-inner elements /// surface elements, 2d-inner elements
Array<Element2d> surfelements; Array<Element2d> surfelements;
/// volume elements /// volume elements
NgArray<Element> volelements; Array<Element> volelements;
/// points will be fixed forever /// points will be fixed forever
NgArray<PointIndex> lockedpoints; Array<PointIndex> lockedpoints;
/// surface indices at boundary nodes /// surface indices at boundary nodes
@ -242,8 +242,8 @@ namespace netgen
DLL_HEADER SegmentIndex AddSegment (const Segment & s); DLL_HEADER SegmentIndex AddSegment (const Segment & s);
void DeleteSegment (int segnr) void DeleteSegment (int segnr)
{ {
segments.Elem(segnr)[0].Invalidate(); segments[segnr-1][0].Invalidate();
segments.Elem(segnr)[1].Invalidate(); segments[segnr-1][1].Invalidate();
} }
/* /*
void FullDeleteSegment (int segnr) // von wem ist das ??? void FullDeleteSegment (int segnr) // von wem ist das ???
@ -254,9 +254,9 @@ namespace netgen
int GetNSeg () const { return segments.Size(); } int GetNSeg () const { return segments.Size(); }
// [[deprecated("Use LineSegment(SegmentIndex) instead of int !")]] // [[deprecated("Use LineSegment(SegmentIndex) instead of int !")]]
Segment & LineSegment(int i) { return segments.Elem(i); } Segment & LineSegment(int i) { return segments[i-1]; }
// [[deprecated("Use LineSegment(SegmentIndex) instead of int !")]] // [[deprecated("Use LineSegment(SegmentIndex) instead of int !")]]
const Segment & LineSegment(int i) const { return segments.Get(i); } const Segment & LineSegment(int i) const { return segments[i-1]; }
Segment & LineSegment(SegmentIndex si) { return segments[si]; } Segment & LineSegment(SegmentIndex si) { return segments[si]; }
const Segment & LineSegment(SegmentIndex si) const { return segments[si]; } const Segment & LineSegment(SegmentIndex si) const { return segments[si]; }
@ -266,7 +266,7 @@ namespace netgen
const auto & LineSegments() const { return segments; } const auto & LineSegments() const { return segments; }
auto & LineSegments() { return segments; } auto & LineSegments() { return segments; }
NgArray<Element0d> pointelements; // only via python interface Array<Element0d> pointelements; // only via python interface
DLL_HEADER SurfaceElementIndex AddSurfaceElement (const Element2d & el); DLL_HEADER SurfaceElementIndex AddSurfaceElement (const Element2d & el);
// write to pre-allocated container, thread-safe // write to pre-allocated container, thread-safe
@ -282,32 +282,34 @@ namespace netgen
surfelements.Elem(eli).PNum(3).Invalidate(); surfelements.Elem(eli).PNum(3).Invalidate();
*/ */
surfelements[eli-1].Delete(); surfelements[eli-1].Delete();
/*
surfelements[eli-1].PNum(1).Invalidate(); surfelements[eli-1].PNum(1).Invalidate();
surfelements[eli-1].PNum(2).Invalidate(); surfelements[eli-1].PNum(2).Invalidate();
surfelements[eli-1].PNum(3).Invalidate(); surfelements[eli-1].PNum(3).Invalidate();
*/
timestamp = NextTimeStamp(); timestamp = NextTimeStamp();
} }
[[deprecated("Use Delete(SurfaceElementIndex) instead !")]] [[deprecated("Use Delete(SurfaceElementIndex) instead !")]]
void DeleteSurfaceElement (SurfaceElementIndex eli) void DeleteSurfaceElement (SurfaceElementIndex eli)
{ {
for (auto & p : surfelements[eli].PNums()) p.Invalidate(); // for (auto & p : surfelements[eli].PNums()) p.Invalidate();
surfelements[eli].Delete(); surfelements[eli].Delete();
timestamp = NextTimeStamp(); timestamp = NextTimeStamp();
} }
void Delete (SurfaceElementIndex eli) void Delete (SurfaceElementIndex eli)
{ {
for (auto & p : surfelements[eli].PNums()) p.Invalidate(); // for (auto & p : surfelements[eli].PNums()) p.Invalidate();
surfelements[eli].Delete(); surfelements[eli].Delete();
timestamp = NextTimeStamp(); timestamp = NextTimeStamp();
} }
auto GetNSE () const { return surfelements.Size(); } auto GetNSE () const { return surfelements.Size(); }
// [[deprecated("Use SurfaceElement(SurfaceElementIndex) instead of int !")]] [[deprecated("Use SurfaceElement(SurfaceElementIndex) instead of int !")]]
Element2d & SurfaceElement(int i) { return surfelements[i-1]; } Element2d & SurfaceElement(int i) { return surfelements[i-1]; }
// [[deprecated("Use SurfaceElement(SurfaceElementIndex) instead of int !")]] [[deprecated("Use SurfaceElement(SurfaceElementIndex) instead of int !")]]
const Element2d & SurfaceElement(int i) const { return surfelements[i-1]; } const Element2d & SurfaceElement(int i) const { return surfelements[i-1]; }
[[deprecated("Use mesh[](SurfaceElementIndex) instead !")]] [[deprecated("Use mesh[](SurfaceElementIndex) instead !")]]
Element2d & SurfaceElement(SurfaceElementIndex i) { return surfelements[i]; } Element2d & SurfaceElement(SurfaceElementIndex i) { return surfelements[i]; }
@ -333,9 +335,9 @@ namespace netgen
auto GetNE () const { return volelements.Size(); } auto GetNE () const { return volelements.Size(); }
// [[deprecated("Use VolumeElement(ElementIndex) instead of int !")]] // [[deprecated("Use VolumeElement(ElementIndex) instead of int !")]]
Element & VolumeElement(int i) { return volelements.Elem(i); } Element & VolumeElement(int i) { return volelements[i-1]; }
// [[deprecated("Use VolumeElement(ElementIndex) instead of int !")]] // [[deprecated("Use VolumeElement(ElementIndex) instead of int !")]]
const Element & VolumeElement(int i) const { return volelements.Get(i); } const Element & VolumeElement(int i) const { return volelements[i-1]; }
[[deprecated("Use mesh[](VolumeElementIndex) instead !")]] [[deprecated("Use mesh[](VolumeElementIndex) instead !")]]
Element & VolumeElement(ElementIndex i) { return volelements[i]; } Element & VolumeElement(ElementIndex i) { return volelements[i]; }
[[deprecated("Use mesh[](VolumeElementIndex) instead !")]] [[deprecated("Use mesh[](VolumeElementIndex) instead !")]]

View File

@ -602,7 +602,7 @@ namespace netgen
void Delete () void Delete ()
{ {
deleted = 1; deleted = 1;
for (PointIndex & p : pnum) p.Invalidate(); // for (PointIndex & p : pnum) p.Invalidate();
} }
bool IsDeleted () const bool IsDeleted () const

View File

@ -750,9 +750,9 @@ namespace netgen
auto & self = const_cast<Mesh&>(*this); auto & self = const_cast<Mesh&>(*this);
self.points = T_POINTS(0); self.points = T_POINTS(0);
self.surfelements = Array<Element2d>(0); self.surfelements = Array<Element2d>(0);
self.volelements = NgArray<Element>(0); self.volelements = Array<Element>(0);
self.segments = NgArray<Segment>(0); self.segments = Array<Segment>(0);
self.lockedpoints = NgArray<PointIndex>(0); self.lockedpoints = Array<PointIndex>(0);
auto cleanup_ptr = [](auto & ptr) { auto cleanup_ptr = [](auto & ptr) {
if (ptr != nullptr) { if (ptr != nullptr) {
delete ptr; delete ptr;

View File

@ -741,7 +741,7 @@ DLL_HEADER void ExportNetgenMeshing(py::module &m)
.def_property("dim", &Mesh::GetDimension, &Mesh::SetDimension) .def_property("dim", &Mesh::GetDimension, &Mesh::SetDimension)
.def("Elements3D", .def("Elements3D",
static_cast<NgArray<Element>&(Mesh::*)()> (&Mesh::VolumeElements), static_cast<Array<Element>&(Mesh::*)()> (&Mesh::VolumeElements),
py::return_value_policy::reference) py::return_value_policy::reference)
.def("Elements2D", .def("Elements2D",
@ -749,10 +749,10 @@ DLL_HEADER void ExportNetgenMeshing(py::module &m)
py::return_value_policy::reference) py::return_value_policy::reference)
.def("Elements1D", .def("Elements1D",
static_cast<NgArray<Segment,0,size_t>&(Mesh::*)()> (&Mesh::LineSegments), static_cast<Array<Segment>&(Mesh::*)()> (&Mesh::LineSegments),
py::return_value_policy::reference) py::return_value_policy::reference)
.def("Elements0D", FunctionPointer([] (Mesh & self) -> NgArray<Element0d>& .def("Elements0D", FunctionPointer([] (Mesh & self) -> Array<Element0d>&
{ {
return self.pointelements; return self.pointelements;
} ), } ),

View File

@ -185,7 +185,7 @@ namespace netgen
int oldnf = mesh.GetNSE(); int oldnf = mesh.GetNSE();
for (SurfaceElementIndex sei = 0; sei < oldnf; sei++) for (SurfaceElementIndex sei = 0; sei < oldnf; sei++)
{ {
const Element2d & el = mesh.SurfaceElement(sei); const Element2d & el = mesh[sei];
switch (el.GetType()) switch (el.GetType())
{ {
@ -265,7 +265,7 @@ namespace netgen
nel.SetIndex(ind); nel.SetIndex(ind);
if (j == 0) if (j == 0)
mesh.SurfaceElement(sei) = nel; mesh[sei] = nel;
else else
mesh.AddSurfaceElement(nel); mesh.AddSurfaceElement(nel);
} }
@ -343,7 +343,7 @@ namespace netgen
nel.SetIndex(ind); nel.SetIndex(ind);
if (j == 0) if (j == 0)
mesh.SurfaceElement(sei) = nel; mesh[sei] = nel;
else else
mesh.AddSurfaceElement(nel); mesh.AddSurfaceElement(nel);
} }

View File

@ -115,10 +115,9 @@ namespace netgen
// refine surface elements // refine surface elements
for (SurfaceElementIndex sei = 0; sei < mesh.GetNSE(); sei++) for (SurfaceElementIndex sei = 0; sei < mesh.GetNSE(); sei++)
{ {
int j; const Element2d & el = mesh[sei];
const Element2d & el = mesh.SurfaceElement(sei);
int onp(0); int onp = 0;
Element2d newel(TRIG); Element2d newel(TRIG);
newel.SetIndex (el.GetIndex()); newel.SetIndex (el.GetIndex());
@ -168,11 +167,11 @@ namespace netgen
PrintSysError ("Unhandled element in secondorder:", int(el.GetType())); PrintSysError ("Unhandled element in secondorder:", int(el.GetType()));
} }
for (j = 0; j < onp; j++) for (int j = 0; j < onp; j++)
newel[j] = el[j]; newel[j] = el[j];
int nnp = newel.GetNP(); int nnp = newel.GetNP();
for (j = 0; j < nnp-onp; j++) for (int j = 0; j < nnp-onp; j++)
{ {
int pi1 = newel[betw[j][0]]; int pi1 = newel[betw[j][0]];
int pi2 = newel[betw[j][1]]; int pi2 = newel[betw[j][1]];
@ -198,7 +197,7 @@ namespace netgen
} }
} }
mesh.SurfaceElement(sei) = newel; mesh[sei] = newel;
} }

View File

@ -300,7 +300,7 @@ namespace netgen
{ {
public: public:
Mesh::T_POINTS & points; Mesh::T_POINTS & points;
const NgArray<Element> & elements; const Array<Element> & elements;
TABLE<int,PointIndex::BASE> elementsonpoint; TABLE<int,PointIndex::BASE> elementsonpoint;
const MeshingParameters & mp; const MeshingParameters & mp;
PointIndex actpind; PointIndex actpind;
@ -308,7 +308,7 @@ namespace netgen
public: public:
PointFunction (Mesh::T_POINTS & apoints, PointFunction (Mesh::T_POINTS & apoints,
const NgArray<Element> & aelements, const Array<Element> & aelements,
const MeshingParameters & amp); const MeshingParameters & amp);
virtual ~PointFunction () { ; } virtual ~PointFunction () { ; }
virtual void SetPointIndex (PointIndex aactpind); virtual void SetPointIndex (PointIndex aactpind);
@ -323,7 +323,7 @@ namespace netgen
PointFunction :: PointFunction (Mesh::T_POINTS & apoints, PointFunction :: PointFunction (Mesh::T_POINTS & apoints,
const NgArray<Element> & aelements, const Array<Element> & aelements,
const MeshingParameters & amp) const MeshingParameters & amp)
: points(apoints), elements(aelements), elementsonpoint(apoints.Size()), mp(amp) : points(apoints), elements(aelements), elementsonpoint(apoints.Size()), mp(amp)
{ {
@ -477,7 +477,7 @@ namespace netgen
DenseMatrix m; DenseMatrix m;
public: public:
CheapPointFunction (Mesh::T_POINTS & apoints, CheapPointFunction (Mesh::T_POINTS & apoints,
const NgArray<Element> & aelements, const Array<Element> & aelements,
const MeshingParameters & amp); const MeshingParameters & amp);
virtual void SetPointIndex (PointIndex aactpind); virtual void SetPointIndex (PointIndex aactpind);
virtual double PointFunctionValue (const Point<3> & pp) const; virtual double PointFunctionValue (const Point<3> & pp) const;
@ -486,7 +486,7 @@ namespace netgen
CheapPointFunction :: CheapPointFunction (Mesh::T_POINTS & apoints, CheapPointFunction :: CheapPointFunction (Mesh::T_POINTS & apoints,
const NgArray<Element> & aelements, const Array<Element> & aelements,
const MeshingParameters & amp) const MeshingParameters & amp)
: PointFunction (apoints, aelements, amp) : PointFunction (apoints, aelements, amp)
{ {
@ -920,7 +920,7 @@ double Opti3EdgeMinFunction :: FuncGrad (const Vector & x, Vector & grad) const
double CalcTotalBad (const Mesh::T_POINTS & points, double CalcTotalBad (const Mesh::T_POINTS & points,
const NgArray<Element> & elements, const Array<Element> & elements,
const MeshingParameters & mp) const MeshingParameters & mp)
{ {
static Timer t("CalcTotalBad"); RegionTimer reg(t); static Timer t("CalcTotalBad"); RegionTimer reg(t);
@ -933,9 +933,9 @@ double CalcTotalBad (const Mesh::T_POINTS & points,
double teterrpow = mp.opterrpow; double teterrpow = mp.opterrpow;
for (int i = 1; i <= elements.Size(); i++) for (int i = 0; i < elements.Size(); i++)
{ {
elbad = pow (max2(CalcBad (points, elements.Get(i), 0, mp),1e-10), elbad = pow (max2(CalcBad (points, elements[i], 0, mp),1e-10),
1/teterrpow); 1/teterrpow);
int qualclass = int (20 / elbad + 1); int qualclass = int (20 / elbad + 1);
@ -1002,17 +1002,12 @@ int WrongOrientation (const Mesh::T_POINTS & points, const Element & el)
JacobianPointFunction :: JacobianPointFunction ::
JacobianPointFunction (Mesh::T_POINTS & apoints, JacobianPointFunction (Mesh::T_POINTS & apoints,
const NgArray<Element> & aelements) const Array<Element> & aelements)
: points(apoints), elements(aelements), elementsonpoint(apoints.Size()) : points(apoints), elements(aelements), elementsonpoint(apoints.Size())
{ {
INDEX i; for (int i = 0; i < elements.Size(); i++)
int j; for (int j = 1; j <= elements[i].NP(); j++)
elementsonpoint.Add1 (elements[i].PNum(j), i+1);
for (i = 1; i <= elements.Size(); i++)
{
for (j = 1; j <= elements.Get(i).NP(); j++)
elementsonpoint.Add1 (elements.Get(i).PNum(j), i);
}
onplane = false; onplane = false;
} }
@ -1039,7 +1034,7 @@ double JacobianPointFunction :: Func (const Vector & v) const
for (j = 1; j <= elementsonpoint.EntrySize(actpind); j++) for (j = 1; j <= elementsonpoint.EntrySize(actpind); j++)
{ {
int eli = elementsonpoint.Get(actpind, j); int eli = elementsonpoint.Get(actpind, j);
badness += elements.Get(eli).CalcJacobianBadness (points); badness += elements[eli-1].CalcJacobianBadness (points);
} }
points.Elem(actpind) = hp; points.Elem(actpind) = hp;
@ -1072,7 +1067,7 @@ FuncGrad (const Vector & x, Vector & g) const
for (j = 1; j <= elementsonpoint.EntrySize(actpind); j++) for (j = 1; j <= elementsonpoint.EntrySize(actpind); j++)
{ {
int eli = elementsonpoint.Get(actpind, j); int eli = elementsonpoint.Get(actpind, j);
const Element & el = elements.Get(eli); const Element & el = elements[eli-1];
lpi = 0; lpi = 0;
for (k = 1; k <= el.GetNP(); k++) for (k = 1; k <= el.GetNP(); k++)
@ -1080,7 +1075,7 @@ FuncGrad (const Vector & x, Vector & g) const
lpi = k; lpi = k;
if (!lpi) cerr << "loc point not found" << endl; if (!lpi) cerr << "loc point not found" << endl;
badness += elements.Get(eli). badness += elements[eli-1].
CalcJacobianBadnessGradient (points, lpi, hderiv); CalcJacobianBadnessGradient (points, lpi, hderiv);
for(k=0; k<3; k++) for(k=0; k<3; k++)
@ -1145,7 +1140,7 @@ FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const
for (j = 1; j <= elementsonpoint.EntrySize(actpind); j++) for (j = 1; j <= elementsonpoint.EntrySize(actpind); j++)
{ {
int eli = elementsonpoint.Get(actpind, j); int eli = elementsonpoint.Get(actpind, j);
const Element & el = elements.Get(eli); const Element & el = elements[eli-1];
lpi = 0; lpi = 0;
for (k = 1; k <= el.GetNP(); k++) for (k = 1; k <= el.GetNP(); k++)
@ -1153,7 +1148,7 @@ FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const
lpi = k; lpi = k;
if (!lpi) cerr << "loc point not found" << endl; if (!lpi) cerr << "loc point not found" << endl;
badness += elements.Get(eli). badness += elements[eli-1].
CalcJacobianBadnessDirDeriv (points, lpi, vdir, hderiv); CalcJacobianBadnessDirDeriv (points, lpi, vdir, hderiv);
deriv += hderiv; deriv += hderiv;
} }

View File

@ -858,8 +858,8 @@ namespace netgen
notrys = 1; notrys = 1;
for (int i = oldnf+1; i <= mesh.GetNSE(); i++) for (SurfaceElementIndex sei = oldnf; sei < mesh.GetNSE(); sei++)
mesh.SurfaceElement(i).SetIndex (k); mesh[sei].SetIndex (k);
} }
// ofstream problemfile("occmesh.rep"); // ofstream problemfile("occmesh.rep");

View File

@ -119,9 +119,6 @@ void VisualSceneMeshDoctor :: DrawScene ()
void VisualSceneMeshDoctor :: BuildScene (int zoomall) void VisualSceneMeshDoctor :: BuildScene (int zoomall)
{ {
int i, j;
if (zoomall) if (zoomall)
{ {
Point3d pmin, pmax; Point3d pmin, pmax;
@ -159,15 +156,16 @@ void VisualSceneMeshDoctor :: BuildScene (int zoomall)
glDisable (GL_COLOR_MATERIAL); glDisable (GL_COLOR_MATERIAL);
for (i = 1; i <= mesh->GetNSE(); i++) for (int i = 1; i <= mesh->GetNSE(); i++)
{ {
glLoadName (i); glLoadName (i);
// copy to be thread-safe // copy to be thread-safe
Element2d el = mesh->SurfaceElement (i); // Element2d el = mesh->SurfaceElement (i);
Element2d el = (*mesh)[SurfaceElementIndex(i-1)];
int drawel = 1; int drawel = 1;
for (j = 1; j <= el.GetNP(); j++) for (int j = 1; j <= el.GetNP(); j++)
{ {
if (!el.PNum(j)) if (!el.PNum(j))
drawel = 0; drawel = 0;
@ -245,7 +243,7 @@ void VisualSceneMeshDoctor :: BuildScene (int zoomall)
{ 3, 5, 4 }, { 3, 5, 4 },
{ 4, 5, 6 } }; { 4, 5, 6 } };
for (j = 0; j < 4; j++) for (int j = 0; j < 4; j++)
{ {
const Point3d & lp1 = mesh->Point (el.PNum(trigs[j][0])); const Point3d & lp1 = mesh->Point (el.PNum(trigs[j][0]));
const Point3d & lp2 = mesh->Point (el.PNum(trigs[j][1])); const Point3d & lp2 = mesh->Point (el.PNum(trigs[j][1]));
@ -275,12 +273,12 @@ void VisualSceneMeshDoctor :: BuildScene (int zoomall)
glColor3f (0.0f, 0.0f, 0.0f); glColor3f (0.0f, 0.0f, 0.0f);
glEnable (GL_COLOR_MATERIAL); glEnable (GL_COLOR_MATERIAL);
for (i = 1; i <= mesh->GetNSE(); i++) for (int i = 1; i <= mesh->GetNSE(); i++)
{ {
Element2d el = mesh->SurfaceElement(i); Element2d el = (*mesh)[SurfaceElementIndex(i-1)];
int drawel = 1; int drawel = 1;
for (j = 1; j <= el.GetNP(); j++) for (int j = 1; j <= el.GetNP(); j++)
{ {
if (!el.PNum(j)) if (!el.PNum(j))
drawel = 0; drawel = 0;
@ -372,7 +370,7 @@ void VisualSceneMeshDoctor :: BuildScene (int zoomall)
glLineWidth (2.0f); glLineWidth (2.0f);
for (i = 1; i <= mesh->GetNSeg(); i++) for (int i = 1; i <= mesh->GetNSeg(); i++)
{ {
const Segment & seg = mesh->LineSegment(i); const Segment & seg = mesh->LineSegment(i);
const Point3d & p1 = mesh->Point(seg[0]); const Point3d & p1 = mesh->Point(seg[0]);
@ -498,14 +496,14 @@ void VisualSceneMeshDoctor :: SetMarkEdgeDist (int dist)
void VisualSceneMeshDoctor :: ClickElement (int elnr) void VisualSceneMeshDoctor :: ClickElement (int elnr)
{ {
selelement = elnr; selelement = elnr;
int oldlocpi = locpi; int oldlocpi = locpi;
locpi = locpi % 3 + 1; locpi = locpi % 3 + 1;
if (selelement > 0 && selelement <= mesh->GetNSE()) if (selelement > 0 && selelement <= mesh->GetNSE())
{ {
selpoint = mesh->SurfaceElement(selelement).PNum(locpi); SurfaceElementIndex sei(elnr-1);
selpoint2 = mesh->SurfaceElement(selelement).PNum(oldlocpi); selpoint = (*mesh)[sei].PNum(locpi);
selpoint2 = (*mesh)[sei].PNum(oldlocpi);
cout << "selpts = " << selpoint << ", " << selpoint2 << endl; cout << "selpts = " << selpoint << ", " << selpoint2 << endl;
} }

View File

@ -665,10 +665,10 @@ namespace netgen
for (ElementIndex ei : mesh->VolumeElements().Range()) for (ElementIndex ei : mesh->VolumeElements().Range())
{ {
if (mesh->VolumeElement(ei).flags.badel) if ((*mesh)[ei].flags.badel)
{ {
// copy to be thread-safe // copy to be thread-safe
Element el = mesh->VolumeElement (ei); Element el = (*mesh)[ei];
if ( (el.GetNP() == 4) || (el.GetNP() == 10)) if ( (el.GetNP() == 4) || (el.GetNP() == 10))
{ {
glBegin (GL_LINES); glBegin (GL_LINES);
@ -749,10 +749,12 @@ namespace netgen
for (SurfaceElementIndex sei : mesh->SurfaceElements().Range()) for (SurfaceElementIndex sei : mesh->SurfaceElements().Range())
{ {
Element2d el = mesh->SurfaceElement(sei); // copy to be thread-safe Element2d el = (*mesh)[sei]; // copy to be thread-safe
if (!el.BadElement()) if (!el.BadElement())
continue; continue;
if (el.IsDeleted()) continue;
bool drawel = true; bool drawel = true;
for (int j = 1; j <= el.GetNP(); j++) for (int j = 1; j <= el.GetNP(); j++)
if (!el.PNum(j).IsValid()) if (!el.PNum(j).IsValid())