mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-27 13:20:34 +05:00
extrusion bug fix
This commit is contained in:
parent
775b8401e5
commit
9b6e013ca0
@ -1491,7 +1491,6 @@ namespace netgen
|
|||||||
/// Lorenzo Codecasa (codecasa@elet.polimi.it)
|
/// Lorenzo Codecasa (codecasa@elet.polimi.it)
|
||||||
/// April 27th, 2005
|
/// April 27th, 2005
|
||||||
///
|
///
|
||||||
/// begin...
|
|
||||||
Torus :: Torus (const Point<3> & ac, const Vec<3> & an, double aR, double ar)
|
Torus :: Torus (const Point<3> & ac, const Vec<3> & an, double aR, double ar)
|
||||||
{
|
{
|
||||||
c = ac;
|
c = ac;
|
||||||
@ -1691,21 +1690,6 @@ namespace netgen
|
|||||||
<< R << " " << r << endl;
|
<< R << " " << r << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// end...
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -361,79 +361,78 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// Torus
|
/** Torus
|
||||||
/// Lorenzo Codecasa (codecasa@elet.polimi.it)
|
/// Lorenzo Codecasa (codecasa@elet.polimi.it)
|
||||||
/// April 27th, 2005
|
/// April 27th, 2005
|
||||||
///
|
*/
|
||||||
/// begin...
|
class Torus : public OneSurfacePrimitive
|
||||||
class Torus : public OneSurfacePrimitive
|
{
|
||||||
{
|
/// center of the torus
|
||||||
/// center of the torus
|
Point<3> c;
|
||||||
Point<3> c;
|
/// vector normal to the symmetry plane of the torus
|
||||||
/// vector normal to the symmetry plane of the torus
|
Vec<3> n;
|
||||||
Vec<3> n;
|
/// Large radius of the torus
|
||||||
/// Large radius of the torus
|
double R;
|
||||||
double R;
|
/// Small radius of the torus
|
||||||
/// Small radius of the torus
|
double r;
|
||||||
double r;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// OK
|
/// OK
|
||||||
Torus (const Point<3> & ac, const Vec<3> & an, double aR, double ar);
|
Torus (const Point<3> & ac, const Vec<3> & an, double aR, double ar);
|
||||||
/// OK
|
/// OK
|
||||||
const Point<3> & Center () const { return c; }
|
const Point<3> & Center () const { return c; }
|
||||||
/// OK
|
/// OK
|
||||||
const Vec<3> & NormalToPlane () const { return n; }
|
const Vec<3> & NormalToPlane () const { return n; }
|
||||||
/// OK
|
/// OK
|
||||||
double LargeRadius () const { return R; }
|
double LargeRadius () const { return R; }
|
||||||
/// OK
|
/// OK
|
||||||
double SmallRadius () const { return r; }
|
double SmallRadius () const { return r; }
|
||||||
/// OK
|
/// OK
|
||||||
virtual double CalcFunctionValue (const Point<3> & point) const;
|
virtual double CalcFunctionValue (const Point<3> & point) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;
|
virtual void CalcGradient (const Point<3> & point, Vec<3> & grad) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void CalcHesse (const Point<3> & point, Mat<3> & hesse) const;
|
virtual void CalcHesse (const Point<3> & point, Mat<3> & hesse) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual double HesseNorm () const;
|
virtual double HesseNorm () const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual Point<3> GetSurfacePoint () const;
|
virtual Point<3> GetSurfacePoint () const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void GetPrimitiveData (const char *& classname,
|
virtual void GetPrimitiveData (const char *& classname,
|
||||||
Array<double> & coeffs) const;
|
Array<double> & coeffs) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void SetPrimitiveData (Array<double> & coeffs);
|
virtual void SetPrimitiveData (Array<double> & coeffs);
|
||||||
/// OK
|
/// OK
|
||||||
static Primitive * CreateDefault ();
|
static Primitive * CreateDefault ();
|
||||||
/// OK
|
/// OK
|
||||||
virtual Primitive * Copy () const;
|
virtual Primitive * Copy () const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void Transform (Transformation<3> & trans);
|
virtual void Transform (Transformation<3> & trans);
|
||||||
/// OK
|
/// OK
|
||||||
virtual int IsIdentic (const Surface & s2, int & inv, double eps) const;
|
virtual int IsIdentic (const Surface & s2, int & inv, double eps) const;
|
||||||
/// OK
|
/// OK
|
||||||
/// virtual void DefineTangentialPlane (const Point<3> & ap1,
|
/// virtual void DefineTangentialPlane (const Point<3> & ap1,
|
||||||
// const Point<3> & ap2);
|
// const Point<3> & ap2);
|
||||||
/// OK
|
/// OK
|
||||||
/// virtual void ToPlane (const Point<3> & p3d,
|
/// virtual void ToPlane (const Point<3> & p3d,
|
||||||
/// Point<2> & pplane,
|
/// Point<2> & pplane,
|
||||||
/// double h, int & zone) const;
|
/// double h, int & zone) const;
|
||||||
/// OK
|
/// OK
|
||||||
/// virtual void FromPlane (const Point<2> & pplane,
|
/// virtual void FromPlane (const Point<2> & pplane,
|
||||||
// Point<3> & p, double h) const;
|
// Point<3> & p, double h) const;
|
||||||
/// OK
|
/// OK
|
||||||
/// virtual void Project (Point<3> & p) const;
|
/// virtual void Project (Point<3> & p) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;
|
virtual INSOLID_TYPE BoxInSolid (const BoxSphere<3> & box) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void GetTriangleApproximation (TriangleApproximation & tas,
|
virtual void GetTriangleApproximation (TriangleApproximation & tas,
|
||||||
const Box<3> & bbox,
|
const Box<3> & bbox,
|
||||||
double facets) const;
|
double facets) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void Print (ostream & ist) const;
|
virtual void Print (ostream & ist) const;
|
||||||
/// OK
|
/// OK
|
||||||
virtual void Read (istream & ist);
|
virtual void Read (istream & ist);
|
||||||
};
|
};
|
||||||
|
|
||||||
/// ...end
|
/// ...end
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ namespace netgen
|
|||||||
{ TOK_ELLIPSOID, "ellipsoid" },
|
{ TOK_ELLIPSOID, "ellipsoid" },
|
||||||
{ TOK_ORTHOBRICK, "orthobrick" },
|
{ TOK_ORTHOBRICK, "orthobrick" },
|
||||||
{ TOK_POLYHEDRON, "polyhedron" },
|
{ TOK_POLYHEDRON, "polyhedron" },
|
||||||
{ TOK_TORUS, "torus" },
|
{ TOK_TORUS, "torus" },
|
||||||
|
|
||||||
{ TOK_TUBE, "tube" },
|
{ TOK_TUBE, "tube" },
|
||||||
{ TOK_GENCYL, "gencyl" },
|
{ TOK_GENCYL, "gencyl" },
|
||||||
|
@ -155,56 +155,6 @@ namespace netgen
|
|||||||
Point<3> endp(path->GetSpline(i).EndPI());
|
Point<3> endp(path->GetSpline(i).EndPI());
|
||||||
Point<3> tanp(spline3_path[i]->TangentPoint());
|
Point<3> tanp(spline3_path[i]->TangentPoint());
|
||||||
|
|
||||||
/*
|
|
||||||
double da,db,dc;
|
|
||||||
|
|
||||||
Vec<3> dir = endp-startp;
|
|
||||||
double l = dir.Length();
|
|
||||||
dir *= 1./l;
|
|
||||||
Vec<3> topoint = point3d - startp;
|
|
||||||
double s = topoint * dir;
|
|
||||||
if(s<=0)
|
|
||||||
da = topoint.Length();
|
|
||||||
else if(s>=l)
|
|
||||||
da = Dist(endp,point3d);
|
|
||||||
else
|
|
||||||
da = sqrt(topoint.Length2() - s*s);
|
|
||||||
|
|
||||||
dir = tanp - startp;
|
|
||||||
l = dir.Length(); dir *= 1./l;
|
|
||||||
topoint = point3d - startp;
|
|
||||||
s = topoint * dir;
|
|
||||||
if(s<=0)
|
|
||||||
db = topoint.Length();
|
|
||||||
else if(s>=l)
|
|
||||||
db = Dist(tanp,point3d);
|
|
||||||
else
|
|
||||||
db = sqrt(topoint.Length2() - s*s);
|
|
||||||
|
|
||||||
dir = endp - tanp;
|
|
||||||
l = dir.Length(); dir *= 1./l;
|
|
||||||
topoint = point3d - tanp;
|
|
||||||
s = topoint * dir;
|
|
||||||
if(s<=0)
|
|
||||||
dc = topoint.Length();
|
|
||||||
else if(s>=l)
|
|
||||||
dc = Dist(endp,point3d);
|
|
||||||
else
|
|
||||||
dc = sqrt(topoint.Length2() - s*s);
|
|
||||||
|
|
||||||
|
|
||||||
// da = sqrt (MinDistLP2 (startp, endp, point3d));
|
|
||||||
// db = sqrt (MinDistLP2 (startp, tanp, point3d));
|
|
||||||
// dc = sqrt (MinDistLP2 (endp, tanp, point3d));
|
|
||||||
|
|
||||||
auxmin = min3(da,db,dc);
|
|
||||||
|
|
||||||
if(da > db && da > dc)
|
|
||||||
auxcut = da;
|
|
||||||
else
|
|
||||||
auxcut = max2(da,min2(db,dc));
|
|
||||||
*/
|
|
||||||
|
|
||||||
// lower bound for dist
|
// lower bound for dist
|
||||||
auxmin = sqrt (MinDistTP2 (startp, endp, tanp, point3d));
|
auxmin = sqrt (MinDistTP2 (startp, endp, tanp, point3d));
|
||||||
|
|
||||||
@ -213,20 +163,6 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
else if(line_path[i])
|
else if(line_path[i])
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
double l;
|
|
||||||
Vec<3> dir = path->GetSpline(i).EndPI() - path->GetSpline(i).StartPI();
|
|
||||||
l = dir.Length(); dir *= 1./l;
|
|
||||||
Vec<3> topoint = point3d - path->GetSpline(i).StartPI();
|
|
||||||
double s = topoint * dir;
|
|
||||||
if(s<=0)
|
|
||||||
auxcut = topoint.Length();
|
|
||||||
else if(s>=l)
|
|
||||||
auxcut = Dist(path->GetSpline(i).EndPI(),point3d);
|
|
||||||
else
|
|
||||||
auxcut = sqrt(topoint.Length2() - s*s);
|
|
||||||
auxmin = auxcut;
|
|
||||||
*/
|
|
||||||
auxmin = auxcut = sqrt (MinDistLP2 (path->GetSpline(i).StartPI(),
|
auxmin = auxcut = sqrt (MinDistLP2 (path->GetSpline(i).StartPI(),
|
||||||
path->GetSpline(i).EndPI(),
|
path->GetSpline(i).EndPI(),
|
||||||
point3d));
|
point3d));
|
||||||
@ -236,28 +172,9 @@ namespace netgen
|
|||||||
|
|
||||||
if(i==0 || auxcut < cutdist)
|
if(i==0 || auxcut < cutdist)
|
||||||
cutdist = auxcut;
|
cutdist = auxcut;
|
||||||
|
|
||||||
/*
|
|
||||||
double d1 = Dist2(point3d,path.GetSpline(i).StartPI());
|
|
||||||
double d2 = Dist2(point3d,path.GetSpline(i).EndPI());
|
|
||||||
if(d1 <= d2)
|
|
||||||
{
|
|
||||||
mindist[i] = d1;
|
|
||||||
if(i==0 || d2 < cutdist)
|
|
||||||
cutdist = d2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mindist[i] = d2;
|
|
||||||
if(i==0 || d1 < cutdist)
|
|
||||||
cutdist = d1;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//(*testout) << " cutdist " << cutdist << " mindist " << mindist << endl;
|
|
||||||
|
|
||||||
|
|
||||||
Point<2> testpoint2d;
|
Point<2> testpoint2d;
|
||||||
Point<3> testpoint3d;
|
Point<3> testpoint3d;
|
||||||
@ -266,16 +183,16 @@ namespace netgen
|
|||||||
bool minproj_set(false);
|
bool minproj_set(false);
|
||||||
|
|
||||||
|
|
||||||
//(*testout) << "point "<< point3d << " candidates: ";
|
|
||||||
for(int i=0; i<path->GetNSplines(); i++)
|
for(int i=0; i<path->GetNSplines(); i++)
|
||||||
{
|
{
|
||||||
if(mindist[i] > cutdist) continue;
|
if(mindist[i] > cutdist) continue;
|
||||||
|
|
||||||
double thist = CalcProj(point3d,testpoint2d,i);
|
double thist = CalcProj(point3d,testpoint2d,i);
|
||||||
|
|
||||||
testpoint3d = p0[i] + testpoint2d(0)*x_dir[i] + testpoint2d(1)*loc_z_dir[i];
|
testpoint3d = p0[i] + testpoint2d(0)*x_dir[i] + testpoint2d(1)*loc_z_dir[i];
|
||||||
double d = Dist2(point3d,testpoint3d);
|
double d = Dist2(point3d,testpoint3d);
|
||||||
|
|
||||||
//(*testout) << "(d="<<d<<") ";
|
|
||||||
|
|
||||||
if(!minproj_set || d < minproj)
|
if(!minproj_set || d < minproj)
|
||||||
{
|
{
|
||||||
@ -289,8 +206,6 @@ namespace netgen
|
|||||||
latest_point2d = point2d;
|
latest_point2d = point2d;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//(*testout) << endl;
|
|
||||||
//(*testout) << " t " << t << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double ExtrusionFace :: CalcProj(const Point<3> & point3d, Point<2> & point2d,
|
double ExtrusionFace :: CalcProj(const Point<3> & point3d, Point<2> & point2d,
|
||||||
@ -366,39 +281,6 @@ namespace netgen
|
|||||||
Vec<3> grad_t = (1.0/(phipp*phi_minus_point + phip*phip)) * phip;
|
Vec<3> grad_t = (1.0/(phipp*phi_minus_point + phip*phip)) * phip;
|
||||||
Vec<3> grad_xbar, grad_ybar;
|
Vec<3> grad_xbar, grad_ybar;
|
||||||
|
|
||||||
/*
|
|
||||||
Vec<3> dphi_dX[3];
|
|
||||||
for(int i = 0; i < 3; i++)
|
|
||||||
dphi_dX[i] = grad_t(i)*phip;
|
|
||||||
|
|
||||||
Vec<3> dx_dir_dX[3];
|
|
||||||
Vec<3> dy_dir_dX[3];
|
|
||||||
Vec<3> dz_dir_dX[3];
|
|
||||||
|
|
||||||
double lphip = phip.Length();
|
|
||||||
Vec<3> dy_dir_dt = (1./lphip) * phipp - ((phip*phipp)/pow(lphip,3)) * phip;
|
|
||||||
Vec<3> dx_dir_dt = Cross(dy_dir_dt,z_dir[seg]);
|
|
||||||
|
|
||||||
for(int i = 0; i < 3; i++)
|
|
||||||
dy_dir_dX[i] = grad_t(i) * dy_dir_dt;
|
|
||||||
for(int i = 0; i < 3; i++)
|
|
||||||
dx_dir_dX[i] = grad_t(i) * dx_dir_dt;
|
|
||||||
|
|
||||||
|
|
||||||
for(int i=0; i<3; i++)
|
|
||||||
grad_xbar(i) = -1.*(phi_minus_point * dx_dir_dX[i]) + x_dir[seg](i) - x_dir[seg] * dphi_dX[i];
|
|
||||||
|
|
||||||
double zy = z_dir[seg]*y_dir[seg];
|
|
||||||
|
|
||||||
Vec<3> aux = z_dir[seg] - zy*y_dir[seg];
|
|
||||||
|
|
||||||
for(int i=0; i<3; i++)
|
|
||||||
grad_ybar(i) = ( (z_dir[seg]*dy_dir_dX[i])*y_dir[seg] + zy*dy_dir_dX[i] ) * phi_minus_point +
|
|
||||||
aux[i] -
|
|
||||||
aux * dphi_dX[i];
|
|
||||||
*/
|
|
||||||
|
|
||||||
// new version by JS
|
|
||||||
Vec<3> hex, hey, hez, dex, dey, dez;
|
Vec<3> hex, hey, hez, dex, dey, dez;
|
||||||
CalcLocalCoordinatesDeriv (seg, t_path, hex, hey, hez, dex, dey, dez);
|
CalcLocalCoordinatesDeriv (seg, t_path, hex, hey, hez, dex, dey, dez);
|
||||||
|
|
||||||
@ -413,33 +295,13 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
grad = dFdxbar * grad_xbar + dFdybar * grad_ybar;
|
grad = dFdxbar * grad_xbar + dFdybar * grad_ybar;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
cout << "grad = " << grad << " =?= ";
|
|
||||||
Vec<3> numgrad;
|
|
||||||
|
|
||||||
for (int i = 0; i < 3; i++)
|
|
||||||
{
|
|
||||||
Point<3> hpl = point;
|
|
||||||
Point<3> hpr = point;
|
|
||||||
hpl(i) -= 1e-6;
|
|
||||||
hpr(i) += 1e-6;
|
|
||||||
double vall = CalcFunctionValue (hpl);
|
|
||||||
double valr = CalcFunctionValue (hpr);
|
|
||||||
numgrad(i) = (valr - vall) / (2e-6);
|
|
||||||
}
|
|
||||||
|
|
||||||
cout << " numgrad = " << numgrad << endl;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExtrusionFace :: CalcHesse (const Point<3> & point, Mat<3> & hesse) const
|
void ExtrusionFace :: CalcHesse (const Point<3> & point, Mat<3> & hesse) const
|
||||||
{
|
{
|
||||||
const double eps = 1e-7*Dist(path->GetSpline(0).StartPI(),path->GetSpline(0).EndPI());
|
const double eps = 1e-7*Dist(path->GetSpline(0).StartPI(),path->GetSpline(0).EndPI());
|
||||||
|
|
||||||
/*
|
|
||||||
Point<3> auxpoint1(point),auxpoint2(point);
|
Point<3> auxpoint1(point),auxpoint2(point);
|
||||||
Vec<3> auxvec,auxgrad1,auxgrad2;
|
Vec<3> auxvec,auxgrad1,auxgrad2;
|
||||||
|
|
||||||
@ -455,9 +317,8 @@ namespace netgen
|
|||||||
auxpoint1(i) = point(i);
|
auxpoint1(i) = point(i);
|
||||||
auxpoint2(i) = point(i);
|
auxpoint2(i) = point(i);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
/*
|
||||||
Vec<3> grad;
|
Vec<3> grad;
|
||||||
CalcGradient(point,grad);
|
CalcGradient(point,grad);
|
||||||
|
|
||||||
@ -473,7 +334,7 @@ namespace netgen
|
|||||||
hesse(i,j) = auxvec(j);
|
hesse(i,j) = auxvec(j);
|
||||||
auxpoint(i) = point(i);
|
auxpoint(i) = point(i);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
for(int i=0; i<3; i++)
|
for(int i=0; i<3; i++)
|
||||||
@ -739,7 +600,6 @@ namespace netgen
|
|||||||
path->GetRawData(data);
|
path->GetRawData(data);
|
||||||
for(int i=0; i<3; i++)
|
for(int i=0; i<3; i++)
|
||||||
data.Append(glob_z_direction[i]);
|
data.Append(glob_z_direction[i]);
|
||||||
//(*testout) << "written raw data " << data << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -877,11 +877,7 @@ namespace netgen
|
|||||||
INSOLID_TYPE ist = prim->PointInSolid(p, eps);
|
INSOLID_TYPE ist = prim->PointInSolid(p, eps);
|
||||||
|
|
||||||
if (ist == DOES_INTERSECT)
|
if (ist == DOES_INTERSECT)
|
||||||
{
|
ist = prim->VecInSolid3 (p, t, t2, eps);
|
||||||
//(*testout) << "Calling VecInSolid3..." << endl;
|
|
||||||
ist = prim->VecInSolid3 (p, t, t2, eps);
|
|
||||||
//(*testout) << "...done" << endl;
|
|
||||||
}
|
|
||||||
in = (ist == IS_INSIDE || ist == DOES_INTERSECT);
|
in = (ist == IS_INSIDE || ist == DOES_INTERSECT);
|
||||||
strin = (ist == IS_INSIDE);
|
strin = (ist == IS_INSIDE);
|
||||||
|
|
||||||
@ -1539,7 +1535,6 @@ namespace netgen
|
|||||||
prim->GetSurface(j).CalcGradient (p, grad);
|
prim->GetSurface(j).CalcGradient (p, grad);
|
||||||
if (sqr (grad * v) < 1e-6 * v.Length2() * grad.Length2())
|
if (sqr (grad * v) < 1e-6 * v.Length2() * grad.Length2())
|
||||||
{
|
{
|
||||||
// (*testout) << "p2" << endl;
|
|
||||||
Mat<3> hesse;
|
Mat<3> hesse;
|
||||||
prim->GetSurface(j).CalcHesse (p, hesse);
|
prim->GetSurface(j).CalcHesse (p, hesse);
|
||||||
double hv2 = v2 * grad + v * (hesse * v);
|
double hv2 = v2 * grad + v * (hesse * v);
|
||||||
@ -1549,6 +1544,19 @@ namespace netgen
|
|||||||
if (!surfind.Contains (prim->GetSurfaceId(j)))
|
if (!surfind.Contains (prim->GetSurfaceId(j)))
|
||||||
surfind.Append (prim->GetSurfaceId(j));
|
surfind.Append (prim->GetSurfaceId(j));
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*testout << "QUAD NOT OK" << endl;
|
||||||
|
*testout << "v = " << v << ", v2 = " << v2 << endl;
|
||||||
|
*testout << "v * grad = " << v*grad << endl;
|
||||||
|
*testout << "v2 * grad = " << v2*grad << endl;
|
||||||
|
*testout << "v H v = " << v*(hesse*v) << endl;
|
||||||
|
*testout << "grad = " << grad << endl;
|
||||||
|
*testout << "hesse = " << hesse << endl;
|
||||||
|
*testout << "hv2 = " << v2 * grad + v * (hesse * v) << endl;
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1691,28 +1691,17 @@ namespace netgen
|
|||||||
coord[i] = dir * Vec<3> (apoints[i]);
|
coord[i] = dir * Vec<3> (apoints[i]);
|
||||||
|
|
||||||
QuickSort (coord, apoints);
|
QuickSort (coord, apoints);
|
||||||
|
|
||||||
/*
|
|
||||||
for (int i = 0; i < apoints.Size(); i++)
|
|
||||||
for (int j = 0; j < apoints.Size()-1; j++)
|
|
||||||
if ( (dir * Vec<3> (apoints[j])) > (dir * Vec<3> (apoints[j+1])))
|
|
||||||
swap (apoints[j], apoints[j+1]);
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Box<3> bbox (apoints[0], apoints[0]);
|
Box<3> bbox (apoints[0], apoints[0]);
|
||||||
for (int i = 1; i < apoints.Size(); i++)
|
for (int i = 1; i < apoints.Size(); i++)
|
||||||
bbox.Add (apoints[i]);
|
bbox.Add (apoints[i]);
|
||||||
bbox.Increase (0.1 * bbox.Diam());
|
bbox.Increase (0.1 * bbox.Diam());
|
||||||
|
|
||||||
//testout->precision(20);
|
|
||||||
(*testout) << "bbox = " << bbox << endl;
|
|
||||||
(*testout) << "points = " << apoints << endl;
|
(*testout) << "points = " << apoints << endl;
|
||||||
|
|
||||||
Point3dTree searchtree (bbox.PMin(), bbox.PMax());
|
Point3dTree searchtree (bbox.PMin(), bbox.PMax());
|
||||||
|
@ -11,19 +11,14 @@
|
|||||||
namespace netgen
|
namespace netgen
|
||||||
{
|
{
|
||||||
|
|
||||||
// class DenseMatrix;
|
|
||||||
// class Box3dSphere;
|
|
||||||
class TriangleApproximation;
|
class TriangleApproximation;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Basis class for implicit surface geometry.
|
Basis class for implicit surface geometry.
|
||||||
This class is used for generation of surface meshes
|
This class is used for generation of surface meshes
|
||||||
in NETGEN as well as for mesh refinement in FEPP.
|
in NETGEN
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Surface
|
class Surface
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
@ -35,7 +30,7 @@ namespace netgen
|
|||||||
char * name;
|
char * name;
|
||||||
/// boundary condition nr
|
/// boundary condition nr
|
||||||
int bcprop;
|
int bcprop;
|
||||||
///
|
/// boundary condition label
|
||||||
string bcname;
|
string bcname;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -74,7 +69,7 @@ namespace netgen
|
|||||||
//@{
|
//@{
|
||||||
/**
|
/**
|
||||||
Defines tangential plane in ap1.
|
Defines tangential plane in ap1.
|
||||||
The local x-coordinate axis point to the direction of ap2 */
|
The local x-coordinate axis points to the direction of ap2 */
|
||||||
virtual void DefineTangentialPlane (const Point<3> & ap1,
|
virtual void DefineTangentialPlane (const Point<3> & ap1,
|
||||||
const Point<3> & ap2);
|
const Point<3> & ap2);
|
||||||
|
|
||||||
@ -88,12 +83,13 @@ namespace netgen
|
|||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|
||||||
/// Move Point p to closes point in surface
|
/// Project point p onto surface (closest point)
|
||||||
virtual void Project (Point<3> & p) const;
|
virtual void Project (Point<3> & p) const;
|
||||||
|
|
||||||
///
|
/// Project along direction
|
||||||
virtual void SkewProject(Point<3> & p, const Vec<3> & direction) const;
|
virtual void SkewProject(Point<3> & p, const Vec<3> & direction) const;
|
||||||
|
|
||||||
|
/// Is current surface identic to surface 2 ?
|
||||||
virtual int IsIdentic (const Surface & /* s2 */, int & /* inv */,
|
virtual int IsIdentic (const Surface & /* s2 */, int & /* inv */,
|
||||||
double /* eps */) const
|
double /* eps */) const
|
||||||
{ return 0; }
|
{ return 0; }
|
||||||
|
Loading…
Reference in New Issue
Block a user