Ability to fill any initial points properly into any surfaces. Using conformationSurfaces class to handle geometric queries to the surfaces to be conformed to.

This commit is contained in:
graham
2009-04-08 14:56:44 +01:00
parent 3e0dfb6abd
commit c9e580d266
14 changed files with 489 additions and 224 deletions

View File

@ -13,6 +13,7 @@ EXE_INC = \
-I$(LIB_SRC)/conformalVoronoiMesh/lnInclude \ -I$(LIB_SRC)/conformalVoronoiMesh/lnInclude \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/edgeMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/triSurface/lnInclude -I$(LIB_SRC)/triSurface/lnInclude
@ -21,6 +22,7 @@ EXE_LIBS = \
-L$(WM_THIRD_PARTY_DIR)/mpfr-2.4.1/platforms/$(WM_ARCH)$(WM_COMPILER_ARCH)/lib \ -L$(WM_THIRD_PARTY_DIR)/mpfr-2.4.1/platforms/$(WM_ARCH)$(WM_COMPILER_ARCH)/lib \
-lconformalVoronoiMesh \ -lconformalVoronoiMesh \
-lmeshTools \ -lmeshTools \
-ledgeMesh \
-ltriSurface \ -ltriSurface \
-ldynamicMesh \ -ldynamicMesh \
-lboost_thread-gcc43-mt-1_38 \ -lboost_thread-gcc43-mt-1_38 \

View File

@ -1,10 +1,11 @@
#include CGAL_FILES #include CGAL_FILES
conformalVoronoiMesh/conformalVoronoiMesh.C conformalVoronoiMesh/conformalVoronoiMesh.C
conformalVoronoiMesh/conformalVoronoiMeshIO.C
cvControls/cvControls.C cvControls/cvControls.C
cvSearchableSurfaces/cvSearchableSurfaces.C conformationSurfaces/conformationSurfaces.C
initialPointsMethod/initialPointsMethod/initialPointsMethod.C initialPointsMethod/initialPointsMethod/initialPointsMethod.C
initialPointsMethod/uniformGrid/uniformGrid.C initialPointsMethod/uniformGrid/uniformGrid.C

View File

@ -12,6 +12,7 @@ EXE_INC = \
-I$(WM_THIRD_PARTY_DIR)/mpfr-2.4.1 \ -I$(WM_THIRD_PARTY_DIR)/mpfr-2.4.1 \
-I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \
-I$(LIB_SRC)/meshTools/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude \
-I$(LIB_SRC)/edgeMesh/lnInclude \
-I$(LIB_SRC)/dynamicMesh/lnInclude \ -I$(LIB_SRC)/dynamicMesh/lnInclude \
-I$(LIB_SRC)/triSurface/lnInclude -I$(LIB_SRC)/triSurface/lnInclude
@ -19,6 +20,7 @@ EXE_LIBS = \
-L$(BOOST_ROOT)/lib \ -L$(BOOST_ROOT)/lib \
-L$(WM_THIRD_PARTY_DIR)/mpfr-2.4.1/platforms/$(WM_ARCH)$(WM_COMPILER_ARCH)/lib \ -L$(WM_THIRD_PARTY_DIR)/mpfr-2.4.1/platforms/$(WM_ARCH)$(WM_COMPILER_ARCH)/lib \
-lmeshTools \ -lmeshTools \
-ledgeMesh \
-ltriSurface \ -ltriSurface \
-ldynamicMesh \ -ldynamicMesh \
-lboost_thread-gcc43-mt-1_38 \ -lboost_thread-gcc43-mt-1_38 \

View File

@ -39,7 +39,25 @@ Foam::conformalVoronoiMesh::conformalVoronoiMesh
: :
HTriangulation(), HTriangulation(),
runTime_(runTime), runTime_(runTime),
cvSurfaces_(*this, cvMeshDict.subDict("geometry")), allGeometry_
(
IOobject
(
"cvSearchableSurfacesDirectory",
runTime_.constant(),
"triSurface",
runTime_,
IOobject::MUST_READ,
IOobject::NO_WRITE
),
cvMeshDict.subDict("geometry")
),
geometryToConformTo_
(
*this,
allGeometry_,
cvMeshDict.subDict("surfaceConformation")
),
cvMeshControls_(*this, cvMeshDict), cvMeshControls_(*this, cvMeshDict),
startOfInternalPoints_(0), startOfInternalPoints_(0),
startOfSurfacePointPairs_(0), startOfSurfacePointPairs_(0),
@ -47,7 +65,7 @@ Foam::conformalVoronoiMesh::conformalVoronoiMesh
( (
initialPointsMethod::New initialPointsMethod::New
( (
cvMeshDict.subDict("surfaceConformation").subDict("initialPoints"), cvMeshDict.subDict("initialPoints"),
*this *this
) )
) )
@ -123,6 +141,8 @@ void Foam::conformalVoronoiMesh::insertInitialPoints()
vit->index() = nVert++; vit->index() = nVert++;
} }
} }
writePoints("initialPoints.obj", true);
} }

View File

@ -42,11 +42,13 @@ SourceFiles
#include "CGALTriangulation3Ddefs.H" #include "CGALTriangulation3Ddefs.H"
#include "cvSearchableSurfaces.H" #include "searchableSurfaces.H"
#include "conformationSurfaces.H"
#include "cvControls.H" #include "cvControls.H"
#include "DynamicList.H" #include "DynamicList.H"
#include "Time.H" #include "Time.H"
#include "polyMesh.H" #include "polyMesh.H"
#include "meshTools.H"
#include "triSurfaceTools.H" #include "triSurfaceTools.H"
#include "mathematicalConstants.H" #include "mathematicalConstants.H"
#include "transform.H" #include "transform.H"
@ -73,8 +75,12 @@ class conformalVoronoiMesh
//- The time registry of the application //- The time registry of the application
const Time& runTime_; const Time& runTime_;
//- The surfaces to conform to and to use for refinement //- All geometry of the meshing process, including surfaces to be
cvSearchableSurfaces cvSurfaces_; // conformed to and those to be used for refinement
searchableSurfaces allGeometry_;
//- The surfaces to conform to
conformationSurfaces geometryToConformTo_;
//- Controls for the conformal Voronoi meshing process //- Controls for the conformal Voronoi meshing process
cvControls cvMeshControls_; cvControls cvMeshControls_;
@ -170,6 +176,9 @@ public:
//- Return the Time object //- Return the Time object
inline const Time& time() const; inline const Time& time() const;
//- Return the conformationSurfaces object
inline const conformationSurfaces& geometryToConformTo() const;
//- Return the cvMeshControls object //- Return the cvMeshControls object
inline const cvControls& cvMeshControls() const; inline const cvControls& cvMeshControls() const;
@ -179,6 +188,8 @@ public:
// Write // Write
//- Write Delaunay points to .obj file
void writePoints(const fileName& fName, bool internalOnly) const;
}; };

View File

@ -28,14 +28,69 @@ License
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
#ifdef CGAL_INEXACT
inline Foam::conformalVoronoiMesh::pointFromPoint
Foam::conformalVoronoiMesh::topoint
(
const Point& P
) const
{
return reinterpret_cast<pointFromPoint>(P);
}
inline Foam::conformalVoronoiMesh::PointFrompoint
Foam::conformalVoronoiMesh::toPoint
(
const point& p
) const
{
return reinterpret_cast<PointFrompoint>(p);
}
#else
inline Foam::conformalVoronoiMesh::pointFromPoint
Foam::conformalVoronoiMesh::topoint
(
const Point& P
) const
{
return point
(
CGAL::to_double(P.x()),
CGAL::to_double(P.y()),
CGAL::to_double(P.z())
);
}
inline Foam::conformalVoronoiMesh::PointFrompoint
Foam::conformalVoronoiMesh::toPoint
(
const point& p
) const
{
return Point(p.x(), p.y(), p.z());
}
#endif
inline const Foam::Time& Foam::conformalVoronoiMesh::time() const inline const Foam::Time& Foam::conformalVoronoiMesh::time() const
{ {
return runTime_; return runTime_;
} }
inline const Foam::cvControls& Foam::conformalVoronoiMesh::cvMeshControls() inline const Foam::conformationSurfaces&
const Foam::conformalVoronoiMesh::geometryToConformTo() const
{
return geometryToConformTo_;
}
inline const Foam::cvControls&
Foam::conformalVoronoiMesh::cvMeshControls() const
{ {
return cvMeshControls_; return cvMeshControls_;
} }

View File

@ -26,45 +26,32 @@ License
#include "conformalVoronoiMesh.H" #include "conformalVoronoiMesh.H"
#include "IOstreams.H" #include "IOstreams.H"
#include "OFstream.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
Foam::conformalVoronoiMesh::conformalVoronoiMesh(Istream& is) void Foam::conformalVoronoiMesh::writePoints
: (
base1(is), const fileName& fName,
base2(is), bool internalOnly
member1(is), ) const
member2(is)
{ {
// Check state of Istream Info<< nl << "Writing points to " << fName << endl;
is.check("Foam::conformalVoronoiMesh::conformalVoronoiMesh(Foam::Istream&)");
}
OFstream str(fName);
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // for
Foam::Istream& Foam::operator>>(Istream& is, conformalVoronoiMesh&)
{
// Check state of Istream
is.check
( (
"Foam::Istream& Foam::operator>>(Foam::Istream&, Foam::conformalVoronoiMesh&)" Triangulation::Finite_vertices_iterator vit = finite_vertices_begin();
); vit != finite_vertices_end();
++vit
return is; )
} {
if (!internalOnly || vit->internalOrBoundaryPoint())
{
Foam::Ostream& Foam::operator<<(Ostream& os, const conformalVoronoiMesh&) meshTools::writeOBJ(str, topoint(vit->point()));
{ }
// Check state of Ostream }
os.check
(
"Foam::Ostream& Foam::operator<<(Foam::Ostream&, "
"const Foam::conformalVoronoiMesh&)"
);
return os;
} }

View File

@ -0,0 +1,237 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "conformationSurfaces.H"
#include "conformalVoronoiMesh.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::conformationSurfaces::conformationSurfaces
(
const conformalVoronoiMesh& cvMesh,
const searchableSurfaces& allGeometry,
const dictionary& surfaceConformationDict
)
:
cvMesh_(cvMesh),
allGeometry_(allGeometry),
features_
(
IOobject
(
"features",
cvMesh_.time().constant(),
"featureEdgeMesh",
cvMesh_.time(),
IOobject::NO_READ,
IOobject::NO_WRITE
),
pointField(0),
edgeList(0)
),
locationInMesh_(surfaceConformationDict.lookup("locationInMesh")),
surfaces_(0),
bounds_()
{
const dictionary& surfacesDict
(
surfaceConformationDict.subDict("geometryToConformTo")
);
surfaces_.setSize(surfacesDict.size());
label surfI = 0;
forAllConstIter(dictionary, surfacesDict, iter)
{
surfaces_[surfI] = allGeometry_.findSurfaceID(iter().keyword());
if (surfaces_[surfI] < 0)
{
FatalErrorIn("Foam::conformationSurfaces::conformationSurfaces")
<< "No surface " << iter().keyword() << " found. "
<< "Valid geometry is " << nl << allGeometry_.names()
<< exit(FatalError);
}
surfI++;
}
bounds_ = searchableSurfacesQueries::bounds(allGeometry_, surfaces_);
}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::conformationSurfaces::~conformationSurfaces()
{}
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
Foam::Field<bool> Foam::conformationSurfaces::inside
(
const pointField& samplePts
) const
{
return wellInside(samplePts, 0.0);
}
Foam::Field<bool> Foam::conformationSurfaces::outside
(
const pointField& samplePts
) const
{
return wellOutside(samplePts, 0.0);
}
Foam::Field<bool> Foam::conformationSurfaces::wellInside
(
const pointField& samplePts,
const scalar dist2
) const
{
// Look at all surfaces at determine whether the locationInMesh point is
// inside or outside each, to establish a signature for the domain to be
// meshed.
List<searchableSurface::volumeType> referenceVolumeTypes
(
surfaces_.size(),
searchableSurface::UNKNOWN
);
forAll(surfaces_, s)
{
const searchableSurface& surface(allGeometry_[surfaces_[s]]);
if (surface.hasVolumeType())
{
pointField pts(1, locationInMesh_);
List<searchableSurface::volumeType> vTypes
(
pts.size(),
searchableSurface::UNKNOWN
);
surface.getVolumeType(pts, vTypes);
referenceVolumeTypes[s] = vTypes[0];
}
}
List<List<searchableSurface::volumeType> > surfaceVolumeTests
(
surfaces_.size(),
List<searchableSurface::volumeType>
(
samplePts.size(),
searchableSurface::UNKNOWN
)
);
// Get lists for the volumeTypes for each sample wrt each surface
forAll(surfaces_, s)
{
const searchableSurface& surface(allGeometry_[surfaces_[s]]);
if (surface.hasVolumeType())
{
surface.getVolumeType(samplePts, surfaceVolumeTests[s]);
}
}
// Compare the volumeType result for each point wrt to each surface with the
// reference value and if the points are inside the surface by a given
// distanceSquared
Field<bool> insidePoints(samplePts.size(), true);
//Check if the points are inside the surface by the given distance squared
scalarField testDistSqr(insidePoints.size(), dist2);
labelList hitSurfaces;
List<pointIndexHit> hitInfo;
searchableSurfacesQueries::findNearest
(
allGeometry_,
surfaces_,
samplePts,
testDistSqr,
hitSurfaces,
hitInfo
);
forAll(samplePts, i)
{
const pointIndexHit& pHit = hitInfo[i];
if (pHit.hit())
{
insidePoints[i] = false;
continue;
}
forAll(surfaces_, s)
{
if (surfaceVolumeTests[s][i] != referenceVolumeTypes[s])
{
insidePoints[i] = false;
break;
}
}
}
return insidePoints;
}
Foam::Field<bool> Foam::conformationSurfaces::wellOutside
(
const pointField& samplePts,
const scalar dist2
) const
{
notImplemented("Field<bool> Foam::conformationSurfaces::wellOutside");
return Field<bool>(samplePts.size(), true);
}
// ************************************************************************* //

View File

@ -23,22 +23,23 @@ License
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Class Class
Foam::cvSearchableSurfaces Foam::conformationSurfaces
Description Description
The surface geometry to be meshed with a conformalVoronoiMesh, adding
inside/outside queries and features of the surface
SourceFiles SourceFiles
cvSearchableSurfaces.C conformationSurfacesI.H
conformationSurfaces.C
conformationSurfacesIO.C
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef cvSearchableSurfaces_H #ifndef conformationSurfaces_H
#define cvSearchableSurfaces_H #define conformationSurfaces_H
#include "searchableSurfaces.H" #include "searchableSurfaces.H"
#include "surfaceFeatures.H" #include "searchableSurfacesQueries.H"
#include "featureEdgeMesh.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -48,60 +49,101 @@ namespace Foam
// Forward declaration of classes // Forward declaration of classes
class conformalVoronoiMesh; class conformalVoronoiMesh;
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class cvSearchableSurfaces Declaration Class conformationSurfaces Declaration
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
class cvSearchableSurfaces class conformationSurfaces
:
public searchableSurfaces
{ {
// Private data // Private data
//- Reference to the conformalVoronoiMesh holding this cvControls object //- Reference to the conformalVoronoiMesh holding this cvControls object
const conformalVoronoiMesh& cvMesh_; const conformalVoronoiMesh& cvMesh_;
//- Reference to the searchableSurfaces object holding all geometry data
const searchableSurfaces& allGeometry_;
//- Feature Edges and points
featureEdgeMesh features_;
//- The location in the mesh that specifies which portion of surfaces is
// to be meshed.
point locationInMesh_;
//- Indices of surfaces in allGeometry that are to be conformed to
labelList surfaces_;
//- The overall boundBox of all of the surfaces to be conformed to
boundBox bounds_;
// Private Member Functions // Private Member Functions
//- Disallow default bitwise copy construct //- Disallow default bitwise copy construct
cvSearchableSurfaces(const cvSearchableSurfaces&); conformationSurfaces(const conformationSurfaces&);
//- Disallow default bitwise assignment //- Disallow default bitwise assignment
void operator=(const cvSearchableSurfaces&); void operator=(const conformationSurfaces&);
public: public:
// Constructors // Constructors
//- Construct from components //- Construct from references to conformalVoronoiMesh and
cvSearchableSurfaces //- searchableSurfaces
conformationSurfaces
( (
const conformalVoronoiMesh& cvMesh, const conformalVoronoiMesh& cvMesh,
const dictionary& geometryDict const searchableSurfaces& allGeometry,
const dictionary& surfaceConformationDict
); );
//- Destructor //- Destructor
~cvSearchableSurfaces(); ~conformationSurfaces();
// Member Functions // Member Functions
// Access // Access
//- Return reference to the searchableSurfaces object containing all
// of the geometry
inline const searchableSurfaces& geometry() const;
//- Return the surface indices
inline const labelList& surfaces() const;
//- Return the boundBox
inline const boundBox& bounds() const;
// Query // Query
//- Check if point is inside surfacesToConformTo //- Check if point is inside surfaces to conform to
bool inside(const point& pt) const; Field<bool> inside(const pointField& samplePts) const;
//- Check if point is outside surfacesToConformTo //- Check if point is outside surfaces to conform to
bool outside(const point& pt) const; Field<bool> outside(const pointField& samplePts) const;
//- Check if point is inside surfacesToConformTo by at least dist2 //- Check if point is inside surfaces to conform to by at least
bool wellInside(const point& pt, const scalar dist2) const; // dist2
Field<bool> wellInside
(
const pointField& samplePts,
const scalar dist2
) const;
//- Check if point is outside surfacesToConformTo by at least dist2 //- Check if point is outside surfaces to conform to by at least
bool wellOutside(const point& pt, const scalar dist2) const; // dist2
Field<bool> wellOutside
(
const pointField& samplePts,
const scalar dist2
) const;
// Member Operators
}; };
@ -112,7 +154,7 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "cvSearchableSurfacesI.H" #include "conformationSurfacesI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -26,31 +26,24 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * * Destructors * * * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
const Foam::searchableSurfaces& Foam::conformationSurfaces::geometry() const
// * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * // {
return allGeometry_;
}
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // const Foam::labelList& Foam::conformationSurfaces::surfaces() const
{
return surfaces_;
}
// * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * * // const Foam::boundBox& Foam::conformationSurfaces::bounds() const
{
return bounds_;
// * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // }
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -1,99 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 1991-2009 OpenCFD Ltd.
\\/ M anipulation |
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License
along with OpenFOAM; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
\*---------------------------------------------------------------------------*/
#include "cvSearchableSurfaces.H"
#include "conformalVoronoiMesh.H"
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::cvSearchableSurfaces::cvSearchableSurfaces
(
const conformalVoronoiMesh& cvMesh,
const dictionary& geometryDict
)
:
searchableSurfaces
(
IOobject
(
"cvSearchableSurfacesDirectory",
cvMesh.time().constant(),
"triSurface",
cvMesh.time(),
IOobject::MUST_READ,
IOobject::NO_WRITE
),
geometryDict
),
cvMesh_(cvMesh)
{}
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
Foam::cvSearchableSurfaces::~cvSearchableSurfaces()
{}
// * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
bool Foam::cvSearchableSurfaces::inside(const point& pt) const
{
}
bool Foam::cvSearchableSurfaces::outside(const point& pt) const
{
}
bool Foam::cvSearchableSurfaces::wellInside
(
const point& pt,
const scalar dist2
) const
{
}
bool Foam::cvSearchableSurfaces::wellOutside
(
const point& pt,
const scalar dist2
) const
{
}
// ************************************************************************* //

View File

@ -68,13 +68,20 @@ std::vector<Vb::Point> pointFile::initialPoints() const
std::vector<Vb::Point> initialPoints; std::vector<Vb::Point> initialPoints;
forAll(points, i) Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
(
points,
minimumSurfaceDistance_*minimumSurfaceDistance_
);
forAll(insidePoints, i)
{ {
const point& p = points[i]; if (insidePoints[i])
{
const point& p(points[i]);
// TODO Check if inside the surface initialPoints.push_back(Vb::Point(p.x(), p.y(), p.z()));
}
initialPoints.push_back(Vb::Point(p.x(), p.y(), p.z()));
} }
label nPointsRejected = points.size() - initialPoints.size(); label nPointsRejected = points.size() - initialPoints.size();
@ -85,7 +92,6 @@ std::vector<Vb::Point> pointFile::initialPoints() const
<< pointFileName_.name() << endl; << pointFileName_.name() << endl;
} }
return initialPoints; return initialPoints;
} }

View File

@ -48,10 +48,9 @@ uniformGrid::uniformGrid
initialPointsMethod(typeName, initialPointsDict, cvMesh), initialPointsMethod(typeName, initialPointsDict, cvMesh),
initialCellSize_(readScalar(detailsDict().lookup("initialCellSize"))), initialCellSize_(readScalar(detailsDict().lookup("initialCellSize"))),
randomiseInitialGrid_(detailsDict().lookup("randomiseInitialGrid")), randomiseInitialGrid_(detailsDict().lookup("randomiseInitialGrid")),
randomPerturbation_ randomPerturbationCoeff_
( (
readScalar(detailsDict().lookup("randomPerturbationCoeff")) readScalar(detailsDict().lookup("randomPerturbationCoeff"))
*initialCellSize_
) )
{} {}
@ -60,47 +59,41 @@ uniformGrid::uniformGrid
std::vector<Vb::Point> uniformGrid::initialPoints() const std::vector<Vb::Point> uniformGrid::initialPoints() const
{ {
// scalar x0 = qSurf_.bb().min().x(); const boundBox& bb = cvMesh_.geometryToConformTo().bounds();
// scalar xR = qSurf_.bb().max().x() - x0;
// int ni = int(xR/controls_.minCellSize) + 1;
// scalar y0 = qSurf_.bb().min().y(); Info<< bb << endl;
// scalar yR = qSurf_.bb().max().y() - y0;
// int nj = int(yR/controls_.minCellSize) + 1;
// scalar z0 = qSurf_.bb().min().z(); scalar x0 = bb.min().x();
// scalar zR = qSurf_.bb().max().z() - z0; scalar xR = bb.max().x() - x0;
// int nk = int(zR/controls_.minCellSize) + 1; int ni = int(xR/initialCellSize_) + 1;
scalar y0 = bb.min().y();
scalar yR = bb.max().y() - y0;
int nj = int(yR/initialCellSize_) + 1;
scalar z0 = bb.min().z();
scalar zR = bb.max().z() - z0;
int nk = int(zR/initialCellSize_) + 1;
Info<< " Is this actually uniform? or is it fitting the span with an " Info<< " Is this actually uniform? or is it fitting the span with an "
<< "integer number?" << endl; << "integer number?" << endl;
scalar x0 = 0.0;
scalar xR = 1.0 - x0;
int ni = int(xR/initialCellSize_) + 1;
scalar y0 = 0.0;
scalar yR = 1.0 - y0;
int nj = int(yR/initialCellSize_) + 1;
scalar z0 = 0.0;
scalar zR = 1.0 - z0;
int nk = int(zR/initialCellSize_) + 1;
vector delta(xR/ni, yR/nj, zR/nk); vector delta(xR/ni, yR/nj, zR/nk);
delta *= pow((1.0),-(1.0/3.0)); delta *= pow((1.0),-(1.0/3.0));
Random rndGen(1735621); Random rndGen(1735621);
scalar pert = randomPerturbation_*cmptMin(delta); scalar pert = randomPerturbationCoeff_*cmptMin(delta);
std::vector<Vb::Point> initialPoints; pointField points(ni*nj*nk);
for (int i=0; i<ni; i++) label pI = 0;
for (int i = 0; i < ni; i++)
{ {
for (int j=0; j<nj; j++) for (int j = 0; j < nj; j++)
{ {
for (int k=0; k<nk; k++) for (int k = 0; k < nk; k++)
{ {
point p point p
( (
@ -116,14 +109,29 @@ std::vector<Vb::Point> uniformGrid::initialPoints() const
p.z() += pert*(rndGen.scalar01() - 0.5); p.z() += pert*(rndGen.scalar01() - 0.5);
} }
// if (qSurf_.wellInside(p, 0.5*initialCellSize_2)) points[pI++] = p;
// {
initialPoints.push_back(Vb::Point(p.x(), p.y(), p.z()));
// }
} }
} }
} }
std::vector<Vb::Point> initialPoints;
Field<bool> insidePoints = cvMesh_.geometryToConformTo().wellInside
(
points,
minimumSurfaceDistance_*minimumSurfaceDistance_
);
forAll(insidePoints, i)
{
if (insidePoints[i])
{
const point& p(points[i]);
initialPoints.push_back(Vb::Point(p.x(), p.y(), p.z()));
}
}
return initialPoints; return initialPoints;
} }

View File

@ -66,7 +66,7 @@ private:
Switch randomiseInitialGrid_; Switch randomiseInitialGrid_;
//- Randomise the initial positions by fraction of the initialCellSize_ //- Randomise the initial positions by fraction of the initialCellSize_
scalar randomPerturbation_; scalar randomPerturbationCoeff_;
public: public: