mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-11 16:49:16 +05:00
reuse netrules, implant adfront into meshing class
This commit is contained in:
parent
321bee9b02
commit
168df170ec
@ -81,12 +81,12 @@ namespace netgen
|
||||
Box<3> bbox ( Box<3>::EMPTY_BOX );
|
||||
double maxh = 0;
|
||||
|
||||
for (int i = 0; i < adfront->GetNFL(); i++)
|
||||
for (int i = 0; i < adfront.GetNFL(); i++)
|
||||
{
|
||||
const FrontLine & line = adfront->GetLine (i);
|
||||
const FrontLine & line = adfront.GetLine (i);
|
||||
|
||||
const Point<3> & p1 = adfront->GetPoint(line.L().I1());
|
||||
const Point<3> & p2 = adfront->GetPoint(line.L().I2());
|
||||
const Point<3> & p1 = adfront.GetPoint(line.L().I1());
|
||||
const Point<3> & p2 = adfront.GetPoint(line.L().I2());
|
||||
|
||||
maxh = max (maxh, Dist (p1, p2));
|
||||
|
||||
@ -115,12 +115,12 @@ namespace netgen
|
||||
{
|
||||
mesh.LocalHFunction().ClearFlags();
|
||||
|
||||
for (int i = 0; i < adfront->GetNFL(); i++)
|
||||
for (int i = 0; i < adfront.GetNFL(); i++)
|
||||
{
|
||||
const FrontLine & line = adfront->GetLine(i);
|
||||
const FrontLine & line = adfront.GetLine(i);
|
||||
|
||||
Box<3> bbox (adfront->GetPoint (line.L().I1()));
|
||||
bbox.Add (adfront->GetPoint (line.L().I2()));
|
||||
Box<3> bbox (adfront.GetPoint (line.L().I1()));
|
||||
bbox.Add (adfront.GetPoint (line.L().I2()));
|
||||
|
||||
|
||||
double filld = filldist * bbox.Diam();
|
||||
@ -130,7 +130,7 @@ namespace netgen
|
||||
}
|
||||
|
||||
|
||||
mesh.LocalHFunction().FindInnerBoxes (adfront, NULL);
|
||||
mesh.LocalHFunction().FindInnerBoxes (&adfront, NULL);
|
||||
|
||||
npoints.SetSize(0);
|
||||
mesh.LocalHFunction().GetInnerPoints (npoints);
|
||||
@ -162,14 +162,14 @@ namespace netgen
|
||||
if (meshbox.IsIn (npoints.Get(i)))
|
||||
{
|
||||
PointIndex gpnum = mesh.AddPoint (npoints.Get(i));
|
||||
adfront->AddPoint (npoints.Get(i), gpnum);
|
||||
adfront.AddPoint (npoints.Get(i), gpnum);
|
||||
|
||||
if (debugparam.slowchecks)
|
||||
{
|
||||
(*testout) << npoints.Get(i) << endl;
|
||||
|
||||
Point<2> p2d (npoints.Get(i)(0), npoints.Get(i)(1));
|
||||
if (!adfront->Inside(p2d))
|
||||
if (!adfront.Inside(p2d))
|
||||
{
|
||||
cout << "add outside point" << endl;
|
||||
(*testout) << "outside" << endl;
|
||||
@ -187,29 +187,29 @@ namespace netgen
|
||||
|
||||
loch2.ClearFlags();
|
||||
|
||||
for (int i = 0; i < adfront->GetNFL(); i++)
|
||||
for (int i = 0; i < adfront.GetNFL(); i++)
|
||||
{
|
||||
const FrontLine & line = adfront->GetLine(i);
|
||||
const FrontLine & line = adfront.GetLine(i);
|
||||
|
||||
Box<3> bbox (adfront->GetPoint (line.L().I1()));
|
||||
bbox.Add (adfront->GetPoint (line.L().I2()));
|
||||
Box<3> bbox (adfront.GetPoint (line.L().I1()));
|
||||
bbox.Add (adfront.GetPoint (line.L().I2()));
|
||||
|
||||
loch2.SetH (bbox.Center(), bbox.Diam());
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < adfront->GetNFL(); i++)
|
||||
for (int i = 0; i < adfront.GetNFL(); i++)
|
||||
{
|
||||
const FrontLine & line = adfront->GetLine(i);
|
||||
const FrontLine & line = adfront.GetLine(i);
|
||||
|
||||
Box<3> bbox (adfront->GetPoint (line.L().I1()));
|
||||
bbox.Add (adfront->GetPoint (line.L().I2()));
|
||||
Box<3> bbox (adfront.GetPoint (line.L().I1()));
|
||||
bbox.Add (adfront.GetPoint (line.L().I2()));
|
||||
|
||||
bbox.Increase (filldist * bbox.Diam());
|
||||
loch2.CutBoundary (bbox);
|
||||
}
|
||||
|
||||
loch2.FindInnerBoxes (adfront, NULL);
|
||||
loch2.FindInnerBoxes (&adfront, NULL);
|
||||
|
||||
// outer points : smooth mesh-grading
|
||||
npoints.SetSize(0);
|
||||
@ -220,7 +220,7 @@ namespace netgen
|
||||
if (meshbox.IsIn (npoints.Get(i)))
|
||||
{
|
||||
PointIndex gpnum = mesh.AddPoint (npoints.Get(i));
|
||||
adfront->AddPoint (npoints.Get(i), gpnum);
|
||||
adfront.AddPoint (npoints.Get(i), gpnum);
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,11 +257,11 @@ namespace netgen
|
||||
// face bounding box:
|
||||
Box<3> bbox (Box<3>::EMPTY_BOX);
|
||||
|
||||
for (int i = 0; i < adfront->GetNFL(); i++)
|
||||
for (int i = 0; i < adfront.GetNFL(); i++)
|
||||
{
|
||||
const FrontLine & line = adfront->GetLine(i);
|
||||
bbox.Add (Point<3> (adfront->GetPoint (line.L()[0])));
|
||||
bbox.Add (Point<3> (adfront->GetPoint (line.L()[1])));
|
||||
const FrontLine & line = adfront.GetLine(i);
|
||||
bbox.Add (Point<3> (adfront.GetPoint (line.L()[0])));
|
||||
bbox.Add (Point<3> (adfront.GetPoint (line.L()[1])));
|
||||
}
|
||||
|
||||
for (int i = 0; i < mesh.LockedPoints().Size(); i++)
|
||||
@ -402,7 +402,7 @@ namespace netgen
|
||||
if (trig[0] < 0) continue;
|
||||
|
||||
Point<3> c = Center (mesh[trig[0]], mesh[trig[1]], mesh[trig[2]]);
|
||||
if (!adfront->Inside (Point<2> (c(0),c(1)))) continue;
|
||||
if (!adfront.Inside (Point<2> (c(0),c(1)))) continue;
|
||||
|
||||
Vec<3> n = Cross (mesh[trig[1]]-mesh[trig[0]],
|
||||
mesh[trig[2]]-mesh[trig[0]]);
|
||||
|
@ -19,16 +19,33 @@ namespace netgen
|
||||
// static int qualclass;
|
||||
|
||||
|
||||
static Array<unique_ptr<netrule>> global_trig_rules;
|
||||
static Array<unique_ptr<netrule>> global_quad_rules;
|
||||
|
||||
|
||||
Meshing2 :: Meshing2 (const MeshingParameters & mp, const Box<3> & aboundingbox)
|
||||
: adfront(aboundingbox), boundingbox(aboundingbox)
|
||||
{
|
||||
static Timer t("Mesing2::Meshing2"); RegionTimer r(t);
|
||||
boundingbox = aboundingbox;
|
||||
|
||||
LoadRules (NULL, mp.quad);
|
||||
auto & globalrules = mp.quad ? global_quad_rules : global_trig_rules;
|
||||
if (!globalrules.Size())
|
||||
{
|
||||
LoadRules (NULL, mp.quad);
|
||||
for (auto * rule : rules)
|
||||
globalrules.Append (unique_ptr<netrule>(rule));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (auto i : globalrules.Range())
|
||||
rules.Append (globalrules[i].get());
|
||||
}
|
||||
// LoadRules ("rules/quad.rls");
|
||||
// LoadRules ("rules/triangle.rls");
|
||||
|
||||
adfront = new AdFront2(boundingbox);
|
||||
|
||||
|
||||
// adfront = new AdFront2(boundingbox);
|
||||
starttime = GetTime();
|
||||
|
||||
maxarea = -1;
|
||||
@ -37,9 +54,11 @@ namespace netgen
|
||||
|
||||
Meshing2 :: ~Meshing2 ()
|
||||
{
|
||||
delete adfront;
|
||||
// delete adfront;
|
||||
/*
|
||||
for (int i = 0; i < rules.Size(); i++)
|
||||
delete rules[i];
|
||||
*/
|
||||
}
|
||||
|
||||
void Meshing2 :: AddPoint (const Point3d & p, PointIndex globind,
|
||||
@ -47,7 +66,7 @@ namespace netgen
|
||||
bool pointonsurface)
|
||||
{
|
||||
//(*testout) << "add point " << globind << endl;
|
||||
adfront ->AddPoint (p, globind, mgi, pointonsurface);
|
||||
adfront.AddPoint (p, globind, mgi, pointonsurface);
|
||||
}
|
||||
|
||||
void Meshing2 :: AddBoundaryElement (int i1, int i2,
|
||||
@ -58,7 +77,7 @@ namespace netgen
|
||||
{
|
||||
PrintSysError ("addboundaryelement: illegal geominfo");
|
||||
}
|
||||
adfront -> AddLine (i1-1, i2-1, gi1, gi2);
|
||||
adfront. AddLine (i1-1, i2-1, gi1, gi2);
|
||||
}
|
||||
|
||||
|
||||
@ -341,7 +360,7 @@ namespace netgen
|
||||
const char * savetask = multithread.task;
|
||||
multithread.task = "Surface meshing";
|
||||
|
||||
adfront ->SetStartFront ();
|
||||
adfront.SetStartFront ();
|
||||
|
||||
|
||||
int plotnexttrial = 999;
|
||||
@ -350,7 +369,7 @@ namespace netgen
|
||||
|
||||
NgProfiler::StopTimer (ts3);
|
||||
|
||||
while (!adfront ->Empty() && !multithread.terminate)
|
||||
while (!adfront.Empty() && !multithread.terminate)
|
||||
{
|
||||
NgProfiler::RegionTimer reg1 (timer1);
|
||||
|
||||
@ -393,7 +412,7 @@ namespace netgen
|
||||
mpgeominfo.SetSize(0);
|
||||
|
||||
|
||||
nfaces = adfront->GetNFL();
|
||||
nfaces = adfront.GetNFL();
|
||||
trials ++;
|
||||
|
||||
|
||||
@ -410,7 +429,7 @@ namespace netgen
|
||||
}
|
||||
|
||||
|
||||
int baselineindex = adfront -> SelectBaseLine (p1, p2, blgeominfo1, blgeominfo2, qualclass);
|
||||
int baselineindex = adfront. SelectBaseLine (p1, p2, blgeominfo1, blgeominfo2, qualclass);
|
||||
|
||||
|
||||
found = 1;
|
||||
@ -427,7 +446,7 @@ namespace netgen
|
||||
|
||||
double hinner = (3 + qualclass) * max2 (his, hshould);
|
||||
|
||||
adfront ->GetLocals (baselineindex, locpoints, mpgeominfo, loclines,
|
||||
adfront.GetLocals (baselineindex, locpoints, mpgeominfo, loclines,
|
||||
pindex, lindex, 2*hinner);
|
||||
|
||||
|
||||
@ -441,7 +460,7 @@ namespace netgen
|
||||
if (qualclass > mp.giveuptol2d)
|
||||
{
|
||||
PrintMessage (3, "give up with qualclass ", qualclass);
|
||||
PrintMessage (3, "number of frontlines = ", adfront->GetNFL());
|
||||
PrintMessage (3, "number of frontlines = ", adfront.GetNFL());
|
||||
// throw NgException ("Give up 2d meshing");
|
||||
break;
|
||||
}
|
||||
@ -457,8 +476,8 @@ namespace netgen
|
||||
morerisc = 0;
|
||||
|
||||
|
||||
PointIndex gpi1 = adfront -> GetGlobalIndex (pindex.Get(loclines[0].I1()));
|
||||
PointIndex gpi2 = adfront -> GetGlobalIndex (pindex.Get(loclines[0].I2()));
|
||||
PointIndex gpi1 = adfront. GetGlobalIndex (pindex.Get(loclines[0].I1()));
|
||||
PointIndex gpi2 = adfront. GetGlobalIndex (pindex.Get(loclines[0].I2()));
|
||||
|
||||
|
||||
debugflag =
|
||||
@ -580,7 +599,7 @@ namespace netgen
|
||||
if (IsLineVertexOnChart (locpoints.Get(loclines.Get(i).I1()),
|
||||
locpoints.Get(loclines.Get(i).I2()),
|
||||
innerp,
|
||||
adfront->GetLineGeomInfo (lindex.Get(i), innerp)))
|
||||
adfront.GetLineGeomInfo (lindex.Get(i), innerp)))
|
||||
// pgeominfo.Get(loclines.Get(i).I(innerp))))
|
||||
{
|
||||
|
||||
@ -759,7 +778,7 @@ namespace netgen
|
||||
{
|
||||
multithread.drawing = 1;
|
||||
glrender(1);
|
||||
cout << "qualclass 100, nfl = " << adfront->GetNFL() << endl;
|
||||
cout << "qualclass 100, nfl = " << adfront.GetNFL() << endl;
|
||||
}
|
||||
*/
|
||||
|
||||
@ -819,7 +838,7 @@ namespace netgen
|
||||
|
||||
|
||||
// for (i = 1; i <= oldnl; i++)
|
||||
// adfront -> ResetClass (lindex[i]);
|
||||
// adfront. ResetClass (lindex[i]);
|
||||
|
||||
|
||||
/*
|
||||
@ -948,7 +967,7 @@ namespace netgen
|
||||
for (j = 1; j <= 2; j++)
|
||||
{
|
||||
upgeominfo.Elem(loclines.Get(dellines.Get(i)).I(j)) =
|
||||
adfront -> GetLineGeomInfo (lindex.Get(dellines.Get(i)), j);
|
||||
adfront. GetLineGeomInfo (lindex.Get(dellines.Get(i)), j);
|
||||
}
|
||||
*/
|
||||
|
||||
@ -1146,7 +1165,7 @@ namespace netgen
|
||||
// cout << "overlap !!!" << endl;
|
||||
#endif
|
||||
for (int k = 1; k <= 5; k++)
|
||||
adfront -> IncrementClass (lindex.Get(1));
|
||||
adfront. IncrementClass (lindex.Get(1));
|
||||
|
||||
found = 0;
|
||||
|
||||
@ -1180,10 +1199,10 @@ namespace netgen
|
||||
int nlgpi2 = loclines.Get(i).I2();
|
||||
if (nlgpi1 <= pindex.Size() && nlgpi2 <= pindex.Size())
|
||||
{
|
||||
nlgpi1 = adfront->GetGlobalIndex (pindex.Get(nlgpi1));
|
||||
nlgpi2 = adfront->GetGlobalIndex (pindex.Get(nlgpi2));
|
||||
nlgpi1 = adfront.GetGlobalIndex (pindex.Get(nlgpi1));
|
||||
nlgpi2 = adfront.GetGlobalIndex (pindex.Get(nlgpi2));
|
||||
|
||||
int exval = adfront->ExistsLine (nlgpi1, nlgpi2);
|
||||
int exval = adfront.ExistsLine (nlgpi1, nlgpi2);
|
||||
if (exval)
|
||||
{
|
||||
cout << "ERROR: new line exits, val = " << exval << endl;
|
||||
@ -1212,8 +1231,8 @@ namespace netgen
|
||||
int tpi2 = locelements.Get(i).PNumMod (j+1);
|
||||
if (tpi1 <= pindex.Size() && tpi2 <= pindex.Size())
|
||||
{
|
||||
tpi1 = adfront->GetGlobalIndex (pindex.Get(tpi1));
|
||||
tpi2 = adfront->GetGlobalIndex (pindex.Get(tpi2));
|
||||
tpi1 = adfront.GetGlobalIndex (pindex.Get(tpi1));
|
||||
tpi2 = adfront.GetGlobalIndex (pindex.Get(tpi2));
|
||||
|
||||
if (doubleedge.Used (INDEX_2(tpi1, tpi2)))
|
||||
{
|
||||
@ -1242,7 +1261,7 @@ namespace netgen
|
||||
for (int i = oldnp+1; i <= locpoints.Size(); i++)
|
||||
{
|
||||
PointIndex globind = mesh.AddPoint (locpoints.Get(i));
|
||||
pindex.Elem(i) = adfront -> AddPoint (locpoints.Get(i), globind);
|
||||
pindex.Elem(i) = adfront. AddPoint (locpoints.Get(i), globind);
|
||||
}
|
||||
|
||||
for (int i = oldnl+1; i <= loclines.Size(); i++)
|
||||
@ -1272,7 +1291,7 @@ namespace netgen
|
||||
cout << "new el: illegal geominfo" << endl;
|
||||
}
|
||||
|
||||
adfront -> AddLine (pindex.Get(loclines.Get(i).I1()),
|
||||
adfront. AddLine (pindex.Get(loclines.Get(i).I1()),
|
||||
pindex.Get(loclines.Get(i).I2()),
|
||||
upgeominfo.Get(loclines.Get(i).I1()),
|
||||
upgeominfo.Get(loclines.Get(i).I2()));
|
||||
@ -1297,7 +1316,7 @@ namespace netgen
|
||||
{
|
||||
mtri.PNum(j) =
|
||||
locelements.Elem(i).PNum(j) =
|
||||
adfront -> GetGlobalIndex (pindex.Get(locelements.Get(i).PNum(j)));
|
||||
adfront. GetGlobalIndex (pindex.Get(locelements.Get(i).PNum(j)));
|
||||
}
|
||||
|
||||
|
||||
@ -1376,7 +1395,7 @@ namespace netgen
|
||||
}
|
||||
|
||||
for (int i = 1; i <= dellines.Size(); i++)
|
||||
adfront -> DeleteLine (lindex.Get(dellines.Get(i)));
|
||||
adfront. DeleteLine (lindex.Get(dellines.Get(i)));
|
||||
|
||||
// rname = rules.Get(rulenr)->Name();
|
||||
#ifdef MYGRAPH
|
||||
@ -1399,7 +1418,7 @@ namespace netgen
|
||||
|
||||
if ( debugparam.haltsuccess || debugflag )
|
||||
{
|
||||
// adfront -> PrintOpenSegments (*testout);
|
||||
// adfront. PrintOpenSegments (*testout);
|
||||
cout << "success of rule" << rules.Get(rulenr)->Name() << endl;
|
||||
multithread.drawing = 1;
|
||||
multithread.testmode = 1;
|
||||
@ -1421,7 +1440,7 @@ namespace netgen
|
||||
|
||||
(*testout) << "locpoints " << endl;
|
||||
for (int i = 1; i <= pindex.Size(); i++)
|
||||
(*testout) << adfront->GetGlobalIndex (pindex.Get(i)) << endl;
|
||||
(*testout) << adfront.GetGlobalIndex (pindex.Get(i)) << endl;
|
||||
|
||||
(*testout) << "old number of lines = " << oldnl << endl;
|
||||
for (int i = 1; i <= loclines.Size(); i++)
|
||||
@ -1432,7 +1451,7 @@ namespace netgen
|
||||
int hi = 0;
|
||||
if (loclines.Get(i).I(j) >= 1 &&
|
||||
loclines.Get(i).I(j) <= pindex.Size())
|
||||
hi = adfront->GetGlobalIndex (pindex.Get(loclines.Get(i).I(j)));
|
||||
hi = adfront.GetGlobalIndex (pindex.Get(loclines.Get(i).I(j)));
|
||||
|
||||
(*testout) << hi << " ";
|
||||
}
|
||||
@ -1451,7 +1470,7 @@ namespace netgen
|
||||
}
|
||||
else
|
||||
{
|
||||
adfront -> IncrementClass (lindex.Get(1));
|
||||
adfront. IncrementClass (lindex.Get(1));
|
||||
|
||||
if ( debugparam.haltnosuccess || debugflag )
|
||||
{
|
||||
@ -1484,7 +1503,7 @@ namespace netgen
|
||||
int hi = 0;
|
||||
if (loclines.Get(i).I(j) >= 1 &&
|
||||
loclines.Get(i).I(j) <= pindex.Size())
|
||||
hi = adfront->GetGlobalIndex (pindex.Get(loclines.Get(i).I(j)));
|
||||
hi = adfront.GetGlobalIndex (pindex.Get(loclines.Get(i).I(j)));
|
||||
|
||||
(*testout) << hi << " ";
|
||||
}
|
||||
@ -1523,7 +1542,7 @@ namespace netgen
|
||||
PrintMessage (3, "Surface meshing done");
|
||||
|
||||
|
||||
adfront->PrintOpenSegments (*testout);
|
||||
adfront.PrintOpenSegments (*testout);
|
||||
|
||||
multithread.task = savetask;
|
||||
|
||||
@ -1531,7 +1550,7 @@ namespace netgen
|
||||
EndMesh ();
|
||||
|
||||
|
||||
if (!adfront->Empty())
|
||||
if (!adfront.Empty())
|
||||
return MESHING2_GIVEUP;
|
||||
|
||||
return MESHING2_OK;
|
||||
|
@ -29,7 +29,7 @@ derive from Meshing2, and replace transformation.
|
||||
class Meshing2
|
||||
{
|
||||
/// the current advancing front
|
||||
AdFront2 * adfront;
|
||||
AdFront2 adfront;
|
||||
/// rules for mesh generation
|
||||
NgArray<netrule*> rules;
|
||||
/// statistics
|
||||
|
@ -579,6 +579,8 @@ void Meshing2 :: LoadRules (const char * filename, bool quad)
|
||||
exit (1);
|
||||
}
|
||||
|
||||
Timer t("Parsing rules");
|
||||
t.Start();
|
||||
while (!ist->eof())
|
||||
{
|
||||
buf[0] = 0;
|
||||
@ -597,6 +599,7 @@ void Meshing2 :: LoadRules (const char * filename, bool quad)
|
||||
//(*testout) << "loop" << endl;
|
||||
}
|
||||
//(*testout) << "POS3" << endl;
|
||||
t.Stop();
|
||||
|
||||
delete ist;
|
||||
//delete [] tr1;
|
||||
|
Loading…
Reference in New Issue
Block a user