fix edges and new domains in BoundaryLayer2d with make_new_domain=True

This commit is contained in:
Christopher Lackner 2025-03-04 09:59:56 +01:00
parent d1a9f7ee3d
commit bc194027a2

View File

@ -243,10 +243,6 @@ namespace netgen
Array<SegmentIndex> segments; Array<SegmentIndex> segments;
// surface index map
Array<int> si_map(mesh.GetNFD()+2);
si_map = -1;
// int fd_old = mesh.GetNFD(); // int fd_old = mesh.GetNFD();
int max_edge_nr = -1; int max_edge_nr = -1;
@ -254,8 +250,8 @@ namespace netgen
for(const auto& seg : line_segments) for(const auto& seg : line_segments)
{ {
if(seg.epgeominfo[0].edgenr > max_edge_nr) if(seg.edgenr > max_edge_nr)
max_edge_nr = seg.epgeominfo[0].edgenr; max_edge_nr = seg.edgenr;
if(seg.domin > max_domain) if(seg.domin > max_domain)
max_domain = seg.domin; max_domain = seg.domin;
if(seg.domout > max_domain) if(seg.domout > max_domain)
@ -263,6 +259,7 @@ namespace netgen
} }
int new_domain = max_domain+1; int new_domain = max_domain+1;
int new_edge_nr = max_edge_nr+1;
BitArray active_boundaries(max_edge_nr+1); BitArray active_boundaries(max_edge_nr+1);
BitArray active_segments(nseg); BitArray active_segments(nseg);
@ -288,7 +285,10 @@ namespace netgen
// int new_fd_index = // int new_fd_index =
mesh.AddFaceDescriptor(new_fd); mesh.AddFaceDescriptor(new_fd);
if(should_make_new_domain) if(should_make_new_domain)
mesh.SetBCName(new_domain-1, "mapped_" + mesh.GetBCName(domain-1)); {
mesh.SetMaterial(new_domain, "layer_" + mesh.GetMaterial(domain));
mesh.SetBCName(new_edge_nr - 1, "moved");
}
} }
for(auto segi : Range(line_segments)) for(auto segi : Range(line_segments))
@ -618,8 +618,6 @@ namespace netgen
} }
} }
map<pair<PointIndex, PointIndex>, int> seg2edge;
// insert new elements ( and move old ones ) // insert new elements ( and move old ones )
for(auto si : moved_segs) for(auto si : moved_segs)
{ {
@ -629,8 +627,6 @@ namespace netgen
auto & pm0 = mapto[seg[0]]; auto & pm0 = mapto[seg[0]];
auto & pm1 = mapto[seg[1]]; auto & pm1 = mapto[seg[1]];
// auto newindex = si_map[domain];
Segment s = seg; Segment s = seg;
s.geominfo[0] = {}; s.geominfo[0] = {};
s.geominfo[1] = {}; s.geominfo[1] = {};
@ -638,10 +634,10 @@ namespace netgen
s[1] = pm1.Last(); s[1] = pm1.Last();
s[2] = PointIndex::INVALID; s[2] = PointIndex::INVALID;
auto pair = s[0] < s[1] ? make_pair(s[0], s[1]) : make_pair(s[1], s[0]); auto pair = s[0] < s[1] ? make_pair(s[0], s[1]) : make_pair(s[1], s[0]);
if(seg2edge.find(pair) == seg2edge.end()) s.edgenr = new_edge_nr;
seg2edge[pair] = ++max_edge_nr; s.epgeominfo[0].edgenr = -1;
s.edgenr = seg2edge[pair]; s.epgeominfo[1].edgenr = -1;
s.si = seg.si; s.si = s.edgenr;
mesh.AddSegment(s); mesh.AddSegment(s);
for ( auto i : Range(thicknesses)) for ( auto i : Range(thicknesses))