mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-13 17:48:34 +05:00
rever PrepareForBlockFillLocalH stuff, copy only relevant part of LocalH tree
This commit is contained in:
parent
e5e8882d07
commit
8687b540c6
@ -260,26 +260,6 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PrepareForBlockFillLocalH(MeshingData & md)
|
|
||||||
{
|
|
||||||
static Timer t("PrepareForBlockFillLocalH"); RegionTimer rt(t);
|
|
||||||
md.meshing = make_unique<Meshing3>(nullptr);
|
|
||||||
|
|
||||||
auto & mesh = *md.mesh;
|
|
||||||
|
|
||||||
mesh.CalcSurfacesOfNode();
|
|
||||||
mesh.FindOpenElements(md.domain);
|
|
||||||
|
|
||||||
for (PointIndex pi : mesh.Points().Range())
|
|
||||||
md.meshing->AddPoint (mesh[pi], pi);
|
|
||||||
|
|
||||||
for (int i = 1; i <= mesh.GetNOpenElements(); i++)
|
|
||||||
md.meshing->AddBoundaryElement (mesh.OpenElement(i));
|
|
||||||
|
|
||||||
if (mesh.HasLocalHFunction())
|
|
||||||
md.meshing->PrepareBlockFillLocalH(mesh, md.mp);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void MeshDomain( MeshingData & md)
|
void MeshDomain( MeshingData & md)
|
||||||
{
|
{
|
||||||
@ -287,6 +267,16 @@ namespace netgen
|
|||||||
auto domain = md.domain;
|
auto domain = md.domain;
|
||||||
MeshingParameters & mp = md.mp;
|
MeshingParameters & mp = md.mp;
|
||||||
|
|
||||||
|
mesh.CalcSurfacesOfNode();
|
||||||
|
mesh.FindOpenElements(md.domain);
|
||||||
|
|
||||||
|
md.meshing = make_unique<Meshing3>(nullptr);
|
||||||
|
for (PointIndex pi : mesh.Points().Range())
|
||||||
|
md.meshing->AddPoint (mesh[pi], pi);
|
||||||
|
|
||||||
|
for (int i = 1; i <= mesh.GetNOpenElements(); i++)
|
||||||
|
md.meshing->AddBoundaryElement (mesh.OpenElement(i));
|
||||||
|
|
||||||
if (mp.delaunay && mesh.GetNOpenElements())
|
if (mp.delaunay && mesh.GetNOpenElements())
|
||||||
{
|
{
|
||||||
int oldne = mesh.GetNE();
|
int oldne = mesh.GetNE();
|
||||||
@ -767,13 +757,6 @@ namespace netgen
|
|||||||
ParallelFor( md.Range(), [&](int i)
|
ParallelFor( md.Range(), [&](int i)
|
||||||
{
|
{
|
||||||
CloseOpenQuads( md[i] );
|
CloseOpenQuads( md[i] );
|
||||||
});
|
|
||||||
|
|
||||||
for(auto & md_ : md)
|
|
||||||
PrepareForBlockFillLocalH(md_);
|
|
||||||
|
|
||||||
ParallelFor( md.Range(), [&](int i)
|
|
||||||
{
|
|
||||||
MeshDomain(md[i]);
|
MeshDomain(md[i]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1094,10 +1094,11 @@ static int TestSameSide (const Point3d & p1, const Point3d & p2)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
void Meshing3 :: PrepareBlockFillLocalH (Mesh & mesh,
|
|
||||||
|
void Meshing3 :: BlockFillLocalH (Mesh & mesh,
|
||||||
const MeshingParameters & mp)
|
const MeshingParameters & mp)
|
||||||
{
|
{
|
||||||
static Timer t("Mesing3::PrepareBlockFillLocalH"); RegionTimer reg(t);
|
static Timer t("Mesing3::BlockFillLocalH"); RegionTimer reg(t);
|
||||||
|
|
||||||
double filldist = mp.filldist;
|
double filldist = mp.filldist;
|
||||||
|
|
||||||
@ -1106,10 +1107,12 @@ void Meshing3 :: PrepareBlockFillLocalH (Mesh & mesh,
|
|||||||
PrintMessage (3, "blockfill local h");
|
PrintMessage (3, "blockfill local h");
|
||||||
|
|
||||||
|
|
||||||
|
NgArray<Point<3> > npoints;
|
||||||
|
|
||||||
adfront -> CreateTrees();
|
adfront -> CreateTrees();
|
||||||
|
|
||||||
|
Box<3> bbox ( Box<3>::EMPTY_BOX );
|
||||||
double maxh = 0;
|
double maxh = 0;
|
||||||
Box<3> bounding_box(Box<3>::EMPTY_BOX);
|
|
||||||
|
|
||||||
for (int i = 1; i <= adfront->GetNF(); i++)
|
for (int i = 1; i <= adfront->GetNF(); i++)
|
||||||
{
|
{
|
||||||
@ -1118,19 +1121,31 @@ void Meshing3 :: PrepareBlockFillLocalH (Mesh & mesh,
|
|||||||
{
|
{
|
||||||
const Point3d & p1 = adfront->GetPoint (el.PNumMod(j));
|
const Point3d & p1 = adfront->GetPoint (el.PNumMod(j));
|
||||||
const Point3d & p2 = adfront->GetPoint (el.PNumMod(j+1));
|
const Point3d & p2 = adfront->GetPoint (el.PNumMod(j+1));
|
||||||
bounding_box.Add(p1);
|
|
||||||
|
|
||||||
double hi = Dist (p1, p2);
|
double hi = Dist (p1, p2);
|
||||||
if (hi > maxh) maxh = hi;
|
if (hi > maxh) maxh = hi;
|
||||||
|
|
||||||
|
bbox.Add (p1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Point3d mpmin = bbox.PMin();
|
||||||
|
Point3d mpmax = bbox.PMax();
|
||||||
|
Point3d mpc = Center (mpmin, mpmax);
|
||||||
|
double d = max3(mpmax.X()-mpmin.X(),
|
||||||
|
mpmax.Y()-mpmin.Y(),
|
||||||
|
mpmax.Z()-mpmin.Z()) / 2;
|
||||||
|
mpmin = mpc - Vec3d (d, d, d);
|
||||||
|
mpmax = mpc + Vec3d (d, d, d);
|
||||||
|
Box3d meshbox (mpmin, mpmax);
|
||||||
|
|
||||||
|
LocalH loch2 (mpmin, mpmax, 1);
|
||||||
|
|
||||||
if (mp.maxh < maxh) maxh = mp.maxh;
|
if (mp.maxh < maxh) maxh = mp.maxh;
|
||||||
|
|
||||||
auto loch_ptr = mesh.LocalHFunction().Copy(); //bounding_box);
|
auto loch_ptr = mesh.LocalHFunction().Copy(bbox);
|
||||||
auto & loch = *loch_ptr;
|
auto & loch = *loch_ptr;
|
||||||
// auto & loch = mesh.LocalHFunction();
|
|
||||||
|
|
||||||
bool changed;
|
bool changed;
|
||||||
static Timer t1("loop1");
|
static Timer t1("loop1");
|
||||||
@ -1174,61 +1189,6 @@ void Meshing3 :: PrepareBlockFillLocalH (Mesh & mesh,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (changed);
|
while (changed);
|
||||||
t1.Stop();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Meshing3 :: BlockFillLocalH (Mesh & mesh,
|
|
||||||
const MeshingParameters & mp)
|
|
||||||
{
|
|
||||||
static Timer t("Mesing3::BlockFillLocalH"); RegionTimer reg(t);
|
|
||||||
|
|
||||||
if (!mesh.HasLocalHFunction())
|
|
||||||
{
|
|
||||||
mesh.CalcLocalH(mp.grading);
|
|
||||||
PrepareBlockFillLocalH(mesh, mp);
|
|
||||||
}
|
|
||||||
|
|
||||||
double filldist = mp.filldist;
|
|
||||||
|
|
||||||
// (*testout) << "blockfill local h" << endl;
|
|
||||||
// (*testout) << "rel filldist = " << filldist << endl;
|
|
||||||
PrintMessage (3, "blockfill local h");
|
|
||||||
|
|
||||||
Box<3> bbox ( Box<3>::EMPTY_BOX );
|
|
||||||
double maxh = 0;
|
|
||||||
|
|
||||||
for (int i = 1; i <= adfront->GetNF(); i++)
|
|
||||||
{
|
|
||||||
const MiniElement2d & el = adfront->GetFace(i);
|
|
||||||
for (int j = 1; j <= 3; j++)
|
|
||||||
{
|
|
||||||
const Point3d & p1 = adfront->GetPoint (el.PNumMod(j));
|
|
||||||
const Point3d & p2 = adfront->GetPoint (el.PNumMod(j+1));
|
|
||||||
|
|
||||||
double hi = Dist (p1, p2);
|
|
||||||
if (hi > maxh) maxh = hi;
|
|
||||||
|
|
||||||
bbox.Add (p1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Point3d mpmin = bbox.PMin();
|
|
||||||
Point3d mpmax = bbox.PMax();
|
|
||||||
Point3d mpc = Center (mpmin, mpmax);
|
|
||||||
double d = max3(mpmax.X()-mpmin.X(),
|
|
||||||
mpmax.Y()-mpmin.Y(),
|
|
||||||
mpmax.Z()-mpmin.Z()) / 2;
|
|
||||||
mpmin = mpc - Vec3d (d, d, d);
|
|
||||||
mpmax = mpc + Vec3d (d, d, d);
|
|
||||||
Box3d meshbox (mpmin, mpmax);
|
|
||||||
|
|
||||||
LocalH loch2 (mpmin, mpmax, 1);
|
|
||||||
|
|
||||||
if (mp.maxh < maxh) maxh = mp.maxh;
|
|
||||||
|
|
||||||
if (debugparam.slowchecks)
|
if (debugparam.slowchecks)
|
||||||
(*testout) << "Blockfill with points: " << endl;
|
(*testout) << "Blockfill with points: " << endl;
|
||||||
|
@ -28,7 +28,6 @@ class Meshing3
|
|||||||
NgArray<char*> problems;
|
NgArray<char*> problems;
|
||||||
/// tolerance criterion
|
/// tolerance criterion
|
||||||
double tolfak;
|
double tolfak;
|
||||||
NgArray<Point<3> > npoints;
|
|
||||||
public:
|
public:
|
||||||
///
|
///
|
||||||
Meshing3 (const string & rulefilename);
|
Meshing3 (const string & rulefilename);
|
||||||
@ -64,7 +63,6 @@ public:
|
|||||||
///
|
///
|
||||||
void BlockFill (Mesh & mesh, double gh);
|
void BlockFill (Mesh & mesh, double gh);
|
||||||
///
|
///
|
||||||
void PrepareBlockFillLocalH (Mesh & mesh, const MeshingParameters & mp);
|
|
||||||
void BlockFillLocalH (Mesh & mesh, const MeshingParameters & mp);
|
void BlockFillLocalH (Mesh & mesh, const MeshingParameters & mp);
|
||||||
|
|
||||||
/// uses points of adfront, and puts new elements into mesh
|
/// uses points of adfront, and puts new elements into mesh
|
||||||
|
Loading…
Reference in New Issue
Block a user