mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-11 16:49:16 +05:00
Boundarylayer limitation fixes
Squashed commit of the following: commit a1007d6728c01343a321aa135c24bbb1d3e6f059 Author: vgeza <vg@cenos-platform.com> Date: Fri Sep 1 13:01:01 2023 +0300 put back commit 74b145cf7fb9bf36eae36e01c2cc6c7ab8f1504b Author: vgeza <vgeza@users.noreply.github.com> Date: Fri Sep 1 12:44:06 2023 +0300 Update smoothing commit 18a2a95a61ac56db3274c669b91d2bbd8a84ec2f Author: vgeza <vgeza@users.noreply.github.com> Date: Fri Sep 1 12:32:35 2023 +0300 More restrictive fixes commit cc715804ac8825909e2c0b4a86333c0c3fc29a80 Author: vgeza <vgeza@users.noreply.github.com> Date: Fri Sep 1 12:31:50 2023 +0300 fix commit 36a7b522c3e97745d4ff84de09df05dc766ddae7 Author: vgeza <vgeza@users.noreply.github.com> Date: Fri Sep 1 12:31:15 2023 +0300 Update limits at the end of loop Bounarylayer - safety parameter to limit maximum vector growth
This commit is contained in:
parent
499c9086b0
commit
125c21b200
@ -96,7 +96,7 @@ namespace netgen
|
||||
|
||||
array<Point<3>, 2> BoundaryLayerTool :: GetMappedSeg( PointIndex pi )
|
||||
{
|
||||
return { mesh[pi], mesh[pi] + height*limits[pi]*growthvectors[pi] };
|
||||
return { mesh[pi], mesh[pi] + height*limits[pi]*growthvectors[pi] * 1.5 };
|
||||
}
|
||||
|
||||
ArrayMem<Point<3>, 4> BoundaryLayerTool :: GetFace( SurfaceElementIndex sei )
|
||||
@ -288,6 +288,9 @@ namespace netgen
|
||||
|
||||
while(limit_reached || step<3)
|
||||
{
|
||||
Array<double, PointIndex> new_limits;
|
||||
new_limits.SetSize(np);
|
||||
new_limits = 1.0;
|
||||
|
||||
if(step>1)
|
||||
lam_lower_limit *= 0.8;
|
||||
@ -345,7 +348,7 @@ namespace netgen
|
||||
if (isIntersectingFace(seg, face, lam_))
|
||||
{
|
||||
if (is_bl_sel)
|
||||
lam_ *= 0.5;
|
||||
lam_ *= params.limit_safety;
|
||||
lam = min(lam, lam_);
|
||||
}
|
||||
}
|
||||
@ -355,7 +358,7 @@ namespace netgen
|
||||
if(isIntersectingFace(seg, face, lam_))
|
||||
{
|
||||
if(is_bl_sel) // allow only half the distance if the opposing surface element has a boundary layer too
|
||||
lam_ *= 0.5;
|
||||
lam_ *= params.limit_safety;
|
||||
lam = min(lam, lam_);
|
||||
}
|
||||
}
|
||||
@ -375,19 +378,23 @@ namespace netgen
|
||||
});
|
||||
if(lam<1)
|
||||
{
|
||||
if(lam<lam_lower_limit && step>0)
|
||||
if(lam<lam_lower_limit && step>1)
|
||||
{
|
||||
limit_reached = true;
|
||||
lam = lam_lower_limit;
|
||||
}
|
||||
limits[pi] = min(limits[pi], lam);
|
||||
}
|
||||
|
||||
new_limits[pi] = min(limits[pi], lam* limits[pi]);
|
||||
}
|
||||
step++;
|
||||
limits = new_limits;
|
||||
if (step > 0)
|
||||
modifiedsmooth(1);
|
||||
}
|
||||
|
||||
self_intersection();
|
||||
modifiedsmooth(3);
|
||||
modifiedsmooth(1);
|
||||
|
||||
for(auto pi : Range(growthvectors))
|
||||
growthvectors[pi] *= limits[pi];
|
||||
@ -1498,10 +1505,11 @@ namespace netgen
|
||||
auto segmap = BuildSegMap();
|
||||
|
||||
auto in_surface_direction = ProjectGrowthVectorsOnSurface();
|
||||
InterpolateGrowthVectors();
|
||||
|
||||
if(params.limit_growth_vectors)
|
||||
LimitGrowthVectorLengths();
|
||||
|
||||
InterpolateGrowthVectors();
|
||||
FixVolumeElements();
|
||||
InsertNewElements(segmap, in_surface_direction);
|
||||
SetDomInOut();
|
||||
|
@ -19,6 +19,7 @@ public:
|
||||
bool outside = false; // set the boundary layer on the outside
|
||||
bool grow_edges = false;
|
||||
bool limit_growth_vectors = true;
|
||||
double limit_safety = 0.3; // alloow only 30% of the growth vector length
|
||||
bool sides_keep_surfaceindex = false;
|
||||
Array<size_t> project_boundaries;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user