mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-11 21:50:34 +05:00
* Not worked on it for too long.... commit for continuing work in the future... Note: Does not effect any other parts of Netgen!
This commit is contained in:
parent
49378768b4
commit
789b56179e
@ -145,10 +145,12 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
|
ofstream dbg("BndLayerDebug.log");
|
||||||
|
|
||||||
// Angle between a surface element and a growth-vector below which
|
// Angle between a surface element and a growth-vector below which
|
||||||
// a prism is project onto that surface as a quad
|
// a prism is project onto that surface as a quad
|
||||||
// (in degrees)
|
// (in degrees)
|
||||||
double angleThreshold = 15.0;
|
double angleThreshold = 5.0;
|
||||||
|
|
||||||
cout << "Generate Prismatic Boundary Layers (Experimental)...." << endl;
|
cout << "Generate Prismatic Boundary Layers (Experimental)...." << endl;
|
||||||
|
|
||||||
@ -190,7 +192,7 @@ namespace netgen
|
|||||||
|
|
||||||
cout << "Enter layer growth / shrink factor: ";
|
cout << "Enter layer growth / shrink factor: ";
|
||||||
cin >> growthfactor;
|
cin >> growthfactor;
|
||||||
if(growthfactor <= 0.0) growthfactor = 1.0;
|
if(growthfactor <= 0.0) growthfactor = 0.5;
|
||||||
|
|
||||||
cout << "Old NP: " << mesh.GetNP() << endl;
|
cout << "Old NP: " << mesh.GetNP() << endl;
|
||||||
cout << "Old NSE: " << mesh.GetNSE() << endl;
|
cout << "Old NSE: " << mesh.GetNSE() << endl;
|
||||||
@ -199,6 +201,11 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
cout << "Generating layer: " << layer << endl;
|
cout << "Generating layer: " << layer << endl;
|
||||||
|
|
||||||
|
const MeshTopology& meshtopo = mesh.GetTopology();
|
||||||
|
const_cast<MeshTopology &> (meshtopo).SetBuildEdges(true);
|
||||||
|
const_cast<MeshTopology &> (meshtopo).SetBuildFaces(true);
|
||||||
|
const_cast<MeshTopology &> (meshtopo).Update();
|
||||||
|
|
||||||
double layerht = hfirst;
|
double layerht = hfirst;
|
||||||
|
|
||||||
if(growthfactor == 1)
|
if(growthfactor == 1)
|
||||||
@ -222,11 +229,6 @@ namespace netgen
|
|||||||
// consistency
|
// consistency
|
||||||
int nseg = mesh.GetNSeg();
|
int nseg = mesh.GetNSeg();
|
||||||
|
|
||||||
// Update the mesh topology structures
|
|
||||||
mesh.UpdateTopology();
|
|
||||||
|
|
||||||
const MeshTopology& meshtopo = mesh.GetTopology();
|
|
||||||
|
|
||||||
// Indicate which points need to be remapped
|
// Indicate which points need to be remapped
|
||||||
BitArray bndnodes(np);
|
BitArray bndnodes(np);
|
||||||
|
|
||||||
@ -296,6 +298,7 @@ namespace netgen
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
mapto.Elem(i) = 0;
|
mapto.Elem(i) = 0;
|
||||||
|
growthvectors.Elem(i) = Vec3d(0,0,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -372,17 +375,28 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vec3d surfelem_vect1, surfelem_vect2, surfelem_vect;
|
Vec3d surfelem_vect, surfelem_vect1;
|
||||||
|
|
||||||
surfelem_vect1 = mesh.Point(pnum_commelem) - mesh.Point(segpair_p1);
|
Element2d & commsel = mesh.SurfaceElement(pnt_commelem);
|
||||||
surfelem_vect2 = mesh.Point(pnum_commelem) - mesh.Point(segpair_p2);
|
|
||||||
surfelem_vect1.Normalize();
|
dbg << "NP= " << commsel.GetNP() << " : ";
|
||||||
surfelem_vect2.Normalize();
|
|
||||||
surfelem_vect = surfelem_vect1 + surfelem_vect2;
|
for(int k = 1; k <= commsel.GetNP(); k++)
|
||||||
|
{
|
||||||
|
GetSurfaceNormal(mesh,commsel,k,surfelem_vect1);
|
||||||
|
surfelem_vect += surfelem_vect1;
|
||||||
|
}
|
||||||
|
|
||||||
surfelem_vect.Normalize();
|
surfelem_vect.Normalize();
|
||||||
|
|
||||||
double surfangle = Angle(growthvectors.Elem(segpair_p1),surfelem_vect);
|
double surfangle = Angle(growthvectors.Elem(segpair_p1),surfelem_vect);
|
||||||
|
|
||||||
|
dbg << "V1= " << surfelem_vect1
|
||||||
|
<< " : V2= " << surfelem_vect1
|
||||||
|
<< " : V= " << surfelem_vect
|
||||||
|
<< " : GV= " << growthvectors.Elem(segpair_p1)
|
||||||
|
<< " : Angle= " << surfangle * 180 / 3.141592;
|
||||||
|
|
||||||
|
|
||||||
// remap the segments to the new points
|
// remap the segments to the new points
|
||||||
mesh.LineSegment(i)[0] = mapto.Get(seg_p1);
|
mesh.LineSegment(i)[0] = mapto.Get(seg_p1);
|
||||||
@ -390,12 +404,14 @@ namespace netgen
|
|||||||
mesh.LineSegment(j)[1] = mapto.Get(seg_p1);
|
mesh.LineSegment(j)[1] = mapto.Get(seg_p1);
|
||||||
mesh.LineSegment(j)[0] = mapto.Get(seg_p2);
|
mesh.LineSegment(j)[0] = mapto.Get(seg_p2);
|
||||||
|
|
||||||
if(surfangle <= angleThreshold * 3.141592 / 180.0)
|
if((surfangle < (90 + angleThreshold) * 3.141592 / 180.0)
|
||||||
|
&& (surfangle > (90 - angleThreshold) * 3.141592 / 180.0))
|
||||||
{
|
{
|
||||||
|
dbg << " : quad\n";
|
||||||
// Since the surface is lower than the threshold, change the effective
|
// Since the surface is lower than the threshold, change the effective
|
||||||
// prism growth vector to match with the surface vector, so that
|
// prism growth vector to match with the surface vector, so that
|
||||||
// the Quad which is created lies on the original surface
|
// the Quad which is created lies on the original surface
|
||||||
growthvectors.Elem(segpair_p1) = surfelem_vect;
|
//growthvectors.Elem(segpair_p1) = surfelem_vect;
|
||||||
|
|
||||||
// Add a quad element to account for the prism volume
|
// Add a quad element to account for the prism volume
|
||||||
// element which is going to be added
|
// element which is going to be added
|
||||||
@ -410,6 +426,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
dbg << "\n";
|
||||||
for (int k = 1; k <= pnt1_elems.Size(); k++)
|
for (int k = 1; k <= pnt1_elems.Size(); k++)
|
||||||
{
|
{
|
||||||
Element2d & pnt_sel = mesh.SurfaceElement(pnt1_elems.Elem(k));
|
Element2d & pnt_sel = mesh.SurfaceElement(pnt1_elems.Elem(k));
|
||||||
@ -585,6 +602,8 @@ namespace netgen
|
|||||||
cout << "Num of Quads: " << numquads << endl;
|
cout << "Num of Quads: " << numquads << endl;
|
||||||
cout << "Num of Prisms: " << numprisms << endl;
|
cout << "Num of Prisms: " << numprisms << endl;
|
||||||
cout << "Boundary Layer Generation....Done!" << endl;
|
cout << "Boundary Layer Generation....Done!" << endl;
|
||||||
|
|
||||||
|
dbg.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user