mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-25 05:20:34 +05:00
copy localh tree (but skip parts outside of bounding box)
This commit is contained in:
parent
8baccf0a08
commit
d997ac0bbe
@ -130,6 +130,54 @@ namespace netgen
|
|||||||
return lh;
|
return lh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unique_ptr<LocalH> LocalH :: CopyRec ( const Box<3> & bbox, GradingBox *current )
|
||||||
|
{
|
||||||
|
static Timer t("LocalH::Copy with bounding box"); RegionTimer rt(t);
|
||||||
|
auto lh = make_unique<LocalH>(boundingbox, grading, dimension);
|
||||||
|
std::map<GradingBox*, GradingBox*> mapping;
|
||||||
|
lh->boxes.SetAllocSize(boxes.Size());
|
||||||
|
|
||||||
|
for(auto i : boxes.Range())
|
||||||
|
{
|
||||||
|
auto & b = *boxes[i];
|
||||||
|
auto h = b.H2();
|
||||||
|
Vec<3> vh = {h,h,h};
|
||||||
|
Box<3> box( b.PMid() - vh, b.PMid() + vh);
|
||||||
|
if(!box.Intersect(bbox))
|
||||||
|
continue;
|
||||||
|
lh->boxes.Append(new GradingBox());
|
||||||
|
auto & bnew = *lh->boxes.Last();
|
||||||
|
bnew.xmid[0] = b.xmid[0];
|
||||||
|
bnew.xmid[1] = b.xmid[1];
|
||||||
|
bnew.xmid[2] = b.xmid[2];
|
||||||
|
bnew.h2 = b.h2;
|
||||||
|
bnew.hopt = b.hopt;
|
||||||
|
bnew.flags = b.flags;
|
||||||
|
mapping[&b] = &bnew;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(auto i : boxes.Range())
|
||||||
|
{
|
||||||
|
auto & b = *boxes[i];
|
||||||
|
if(mapping.count(&b)==0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
auto & bnew = *mapping[&b];
|
||||||
|
for(auto k : Range(8))
|
||||||
|
{
|
||||||
|
if(b.childs[k] && mapping.count(b.childs[k]))
|
||||||
|
bnew.childs[k] = mapping[b.childs[k]];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(b.father && mapping.count(b.father))
|
||||||
|
bnew.father = mapping[b.father];
|
||||||
|
}
|
||||||
|
|
||||||
|
lh->root = mapping[root];
|
||||||
|
return lh;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void LocalH :: Delete ()
|
void LocalH :: Delete ()
|
||||||
{
|
{
|
||||||
root->DeleteChilds();
|
root->DeleteChilds();
|
||||||
|
@ -99,6 +99,7 @@ namespace netgen
|
|||||||
~LocalH();
|
~LocalH();
|
||||||
///
|
///
|
||||||
unique_ptr<LocalH> Copy();
|
unique_ptr<LocalH> Copy();
|
||||||
|
unique_ptr<LocalH> Copy( const Box<3> & bbox ) { return CopyRec(bbox, root); }
|
||||||
///
|
///
|
||||||
void Delete();
|
void Delete();
|
||||||
///
|
///
|
||||||
@ -191,6 +192,8 @@ namespace netgen
|
|||||||
///
|
///
|
||||||
void ConvexifyRec (GradingBox * box);
|
void ConvexifyRec (GradingBox * box);
|
||||||
|
|
||||||
|
unique_ptr<LocalH> CopyRec( const Box<3> & bbox, GradingBox * current );
|
||||||
|
|
||||||
friend ostream & operator<< (ostream & ost, const LocalH & loch);
|
friend ostream & operator<< (ostream & ost, const LocalH & loch);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ namespace netgen
|
|||||||
ret[i].mesh = make_unique<Mesh>();
|
ret[i].mesh = make_unique<Mesh>();
|
||||||
auto & m = *ret[i].mesh;
|
auto & m = *ret[i].mesh;
|
||||||
|
|
||||||
m.SetLocalH(mesh.GetLocalH());
|
// m.SetLocalH(mesh.GetLocalH()->Copy());
|
||||||
|
|
||||||
ipmap[i].SetSize(num_points);
|
ipmap[i].SetSize(num_points);
|
||||||
ipmap[i] = PointIndex::INVALID;
|
ipmap[i] = PointIndex::INVALID;
|
||||||
|
@ -1109,6 +1109,7 @@ void Meshing3 :: PrepareBlockFillLocalH (Mesh & mesh,
|
|||||||
adfront -> CreateTrees();
|
adfront -> CreateTrees();
|
||||||
|
|
||||||
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++)
|
||||||
{
|
{
|
||||||
@ -1117,6 +1118,7 @@ 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;
|
||||||
@ -1126,9 +1128,9 @@ void Meshing3 :: PrepareBlockFillLocalH (Mesh & mesh,
|
|||||||
|
|
||||||
if (mp.maxh < maxh) maxh = mp.maxh;
|
if (mp.maxh < maxh) maxh = mp.maxh;
|
||||||
|
|
||||||
// auto loch_ptr = mesh.LocalHFunction().Copy();
|
auto loch_ptr = mesh.LocalHFunction().Copy(bounding_box);
|
||||||
// auto & loch = *loch_ptr;
|
auto & loch = *loch_ptr;
|
||||||
auto & loch = mesh.LocalHFunction();
|
// auto & loch = mesh.LocalHFunction();
|
||||||
|
|
||||||
bool changed;
|
bool changed;
|
||||||
static Timer t1("loop1");
|
static Timer t1("loop1");
|
||||||
|
Loading…
Reference in New Issue
Block a user