mirror of
https://github.com/NGSolve/netgen.git
synced 2025-02-03 08:40:33 +05:00
Merge branch 'meshing_fixes' into 'master'
Meshing fixes See merge request jschoeberl/netgen!481
This commit is contained in:
commit
58af9adb03
@ -35,6 +35,7 @@ namespace netgen
|
|||||||
|
|
||||||
if (t2 == -1) return false;
|
if (t2 == -1) return false;
|
||||||
if (swapped[t1] || swapped[t2]) return false;
|
if (swapped[t1] || swapped[t2]) return false;
|
||||||
|
if (mesh[t2].IsDeleted()) return false;
|
||||||
|
|
||||||
const int faceindex = mesh[t1].GetIndex();
|
const int faceindex = mesh[t1].GetIndex();
|
||||||
const int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr();
|
const int surfnr = mesh.GetFaceDescriptor (faceindex).SurfNr();
|
||||||
@ -278,6 +279,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto sel = mesh[sei];
|
const auto sel = mesh[sei];
|
||||||
|
auto index = sel.GetIndex();
|
||||||
for (int j = 0; j < 3; j++)
|
for (int j = 0; j < 3; j++)
|
||||||
{
|
{
|
||||||
PointIndex pi1 = sel.PNumMod(j+2);
|
PointIndex pi1 = sel.PNumMod(j+2);
|
||||||
@ -286,6 +288,7 @@ namespace netgen
|
|||||||
for (auto sei_other : elements_on_node[pi1])
|
for (auto sei_other : elements_on_node[pi1])
|
||||||
{
|
{
|
||||||
if(sei_other==sei) continue;
|
if(sei_other==sei) continue;
|
||||||
|
if(mesh[sei_other].GetIndex()!=index) continue;
|
||||||
const auto & other = mesh[sei_other];
|
const auto & other = mesh[sei_other];
|
||||||
int pi1_other = -1;
|
int pi1_other = -1;
|
||||||
int pi2_other = -1;
|
int pi2_other = -1;
|
||||||
@ -333,7 +336,7 @@ namespace netgen
|
|||||||
if (mesh[t1].IsDeleted())
|
if (mesh[t1].IsDeleted())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (mesh[t1].GetIndex() != faceindex)
|
if (swapped[t1])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (multithread.terminate)
|
if (multithread.terminate)
|
||||||
@ -363,6 +366,7 @@ namespace netgen
|
|||||||
Array<Vec<3>, PointIndex> & normals,
|
Array<Vec<3>, PointIndex> & normals,
|
||||||
Array<bool, PointIndex> & fixed,
|
Array<bool, PointIndex> & fixed,
|
||||||
PointIndex pi1, PointIndex pi2,
|
PointIndex pi1, PointIndex pi2,
|
||||||
|
double metricweight,
|
||||||
bool check_only = true)
|
bool check_only = true)
|
||||||
{
|
{
|
||||||
Vec<3> nv;
|
Vec<3> nv;
|
||||||
@ -438,7 +442,7 @@ namespace netgen
|
|||||||
for (const Element2d & el : mesh.SurfaceElements()[hasonepi])
|
for (const Element2d & el : mesh.SurfaceElements()[hasonepi])
|
||||||
{
|
{
|
||||||
bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]],
|
bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]],
|
||||||
nv, -1, loch);
|
nv, metricweight, loch);
|
||||||
illegal1 += 1-mesh.LegalTrig(el);
|
illegal1 += 1-mesh.LegalTrig(el);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -446,7 +450,7 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
const Element2d & el = mesh[hasbothpi[k]];
|
const Element2d & el = mesh[hasbothpi[k]];
|
||||||
bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]],
|
bad1 += CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]],
|
||||||
nv, -1, loch);
|
nv, metricweight, loch);
|
||||||
illegal1 += 1-mesh.LegalTrig(el);
|
illegal1 += 1-mesh.LegalTrig(el);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -460,7 +464,7 @@ namespace netgen
|
|||||||
|
|
||||||
double err =
|
double err =
|
||||||
CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]],
|
CalcTriangleBadness (mesh[el[0]], mesh[el[1]], mesh[el[2]],
|
||||||
nv, -1, loch);
|
nv, metricweight, loch);
|
||||||
bad2 += err;
|
bad2 += err;
|
||||||
|
|
||||||
Vec<3> hnv = Cross (Vec3d (mesh[el[0]],
|
Vec<3> hnv = Cross (Vec3d (mesh[el[0]],
|
||||||
@ -669,7 +673,7 @@ namespace netgen
|
|||||||
ParallelFor( Range(edges), [&] (auto i) NETGEN_LAMBDA_INLINE
|
ParallelFor( Range(edges), [&] (auto i) NETGEN_LAMBDA_INLINE
|
||||||
{
|
{
|
||||||
auto [pi1, pi2] = edges[i];
|
auto [pi1, pi2] = edges[i];
|
||||||
double d_badness = CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, true);
|
double d_badness = CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, metricweight, true);
|
||||||
if(d_badness < 0.0)
|
if(d_badness < 0.0)
|
||||||
candidate_edges[improvement_counter++] = make_tuple(d_badness, i);
|
candidate_edges[improvement_counter++] = make_tuple(d_badness, i);
|
||||||
}, TasksPerThread(4));
|
}, TasksPerThread(4));
|
||||||
@ -680,7 +684,7 @@ namespace netgen
|
|||||||
for(auto [d_badness, ei] : edges_with_improvement)
|
for(auto [d_badness, ei] : edges_with_improvement)
|
||||||
{
|
{
|
||||||
auto [pi1, pi2] = edges[ei];
|
auto [pi1, pi2] = edges[ei];
|
||||||
CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, false);
|
CombineImproveEdge(mesh, elementsonnode, normals, fixed, pi1, pi2, metricweight, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// mesh.Compress();
|
// mesh.Compress();
|
||||||
|
@ -6063,7 +6063,11 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
GetSurfaceElementsOfFace (fdi, els_of_face);
|
GetSurfaceElementsOfFace (fdi, els_of_face);
|
||||||
|
|
||||||
if (els_of_face.Size() == 0) continue;
|
if (els_of_face.Size() == 0)
|
||||||
|
{
|
||||||
|
fdi++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
SurfaceElementIndex firstel = els_of_face[0];
|
SurfaceElementIndex firstel = els_of_face[0];
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user