mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: searchableCone: generalised hollow cone/cylinder
This commit is contained in:
@ -83,7 +83,7 @@ Foam::tmp<Foam::pointField> Foam::searchableCone::points() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Foam::searchableCone::findNearest
|
void Foam::searchableCone::findNearestAndNormal
|
||||||
(
|
(
|
||||||
const point& sample,
|
const point& sample,
|
||||||
const scalar nearestDistSqr,
|
const scalar nearestDistSqr,
|
||||||
@ -780,7 +780,7 @@ void Foam::searchableCone::findNearest
|
|||||||
forAll(samples, i)
|
forAll(samples, i)
|
||||||
{
|
{
|
||||||
vector normal;
|
vector normal;
|
||||||
findNearest(samples[i], nearestDistSqr[i], info[i], normal);
|
findNearestAndNormal(samples[i], nearestDistSqr[i], info[i], normal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1054,7 +1054,7 @@ void Foam::searchableCone::getNormal
|
|||||||
if (info[i].hit())
|
if (info[i].hit())
|
||||||
{
|
{
|
||||||
pointIndexHit nearInfo;
|
pointIndexHit nearInfo;
|
||||||
findNearest
|
findNearestAndNormal
|
||||||
(
|
(
|
||||||
info[i].hitPoint(),
|
info[i].hitPoint(),
|
||||||
Foam::sqr(GREAT),
|
Foam::sqr(GREAT),
|
||||||
|
|||||||
@ -100,7 +100,7 @@ class searchableCone
|
|||||||
// Private Member Functions
|
// Private Member Functions
|
||||||
|
|
||||||
//- Find nearest point on cylinder.
|
//- Find nearest point on cylinder.
|
||||||
void findNearest
|
void findNearestAndNormal
|
||||||
(
|
(
|
||||||
const point& sample,
|
const point& sample,
|
||||||
const scalar nearestDistSqr,
|
const scalar nearestDistSqr,
|
||||||
@ -236,14 +236,6 @@ public:
|
|||||||
List<pointIndexHit>&
|
List<pointIndexHit>&
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
//- Find any intersection on line from start to end
|
|
||||||
virtual void findLineAny
|
|
||||||
(
|
|
||||||
const pointField& start,
|
|
||||||
const pointField& end,
|
|
||||||
List<pointIndexHit>&
|
|
||||||
) const;
|
|
||||||
|
|
||||||
//- Find all intersections in order from start to end
|
//- Find all intersections in order from start to end
|
||||||
virtual void findLineAll
|
virtual void findLineAll
|
||||||
(
|
(
|
||||||
@ -252,6 +244,14 @@ public:
|
|||||||
List<List<pointIndexHit> >&
|
List<List<pointIndexHit> >&
|
||||||
) const;
|
) const;
|
||||||
|
|
||||||
|
//- Find any intersection on line from start to end
|
||||||
|
virtual void findLineAny
|
||||||
|
(
|
||||||
|
const pointField& start,
|
||||||
|
const pointField& end,
|
||||||
|
List<pointIndexHit>&
|
||||||
|
) const;
|
||||||
|
|
||||||
//- From a set of points and indices get the region
|
//- From a set of points and indices get the region
|
||||||
virtual void getRegion
|
virtual void getRegion
|
||||||
(
|
(
|
||||||
@ -277,7 +277,7 @@ public:
|
|||||||
|
|
||||||
// regIOobject implementation
|
// regIOobject implementation
|
||||||
|
|
||||||
bool writeData(Ostream&) const
|
virtual bool writeData(Ostream&) const
|
||||||
{
|
{
|
||||||
notImplemented("searchableCone::writeData(Ostream&) const");
|
notImplemented("searchableCone::writeData(Ostream&) const");
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
\\ / O peration |
|
\\ / O peration |
|
||||||
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
|
||||||
\\/ M anipulation |
|
\\/ M anipulation | Copyright (C) 2015 OpenCFD Ltd.
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
License
|
License
|
||||||
This file is part of OpenFOAM.
|
This file is part of OpenFOAM.
|
||||||
@ -43,8 +43,6 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declaration of classes
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class searchableCylinder Declaration
|
Class searchableCylinder Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -55,8 +55,7 @@ Foam::searchableRotatedBox::searchableRotatedBox
|
|||||||
io.db(),
|
io.db(),
|
||||||
io.readOpt(),
|
io.readOpt(),
|
||||||
io.writeOpt(),
|
io.writeOpt(),
|
||||||
false, //io.registerObject(),
|
false //io.registerObject(),
|
||||||
io.globalObject()
|
|
||||||
),
|
),
|
||||||
treeBoundBox(point::zero, dict.lookup("span"))
|
treeBoundBox(point::zero, dict.lookup("span"))
|
||||||
),
|
),
|
||||||
|
|||||||
@ -56,10 +56,8 @@ SourceFiles
|
|||||||
namespace Foam
|
namespace Foam
|
||||||
{
|
{
|
||||||
|
|
||||||
// Forward declaration of classes
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*\
|
/*---------------------------------------------------------------------------*\
|
||||||
Class searchableRotatedBox Declaration
|
Class searchableRotatedBox Declaration
|
||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
class searchableRotatedBox
|
class searchableRotatedBox
|
||||||
@ -145,6 +143,9 @@ public:
|
|||||||
|
|
||||||
// Single point queries.
|
// Single point queries.
|
||||||
|
|
||||||
|
//- Inherit findNearest from searchableSurface
|
||||||
|
using searchableSurface::findNearest;
|
||||||
|
|
||||||
//- Calculate nearest point on surface.
|
//- Calculate nearest point on surface.
|
||||||
// Returns
|
// Returns
|
||||||
// - bool : any point found nearer than nearestDistSqr
|
// - bool : any point found nearer than nearestDistSqr
|
||||||
|
|||||||
153
src/meshTools/searchableSurface/subTriSurfaceMesh.C
Normal file
153
src/meshTools/searchableSurface/subTriSurfaceMesh.C
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "subTriSurfaceMesh.H"
|
||||||
|
#include "addToRunTimeSelectionTable.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
defineTypeNameAndDebug(subTriSurfaceMesh, 0);
|
||||||
|
addToRunTimeSelectionTable(searchableSurface, subTriSurfaceMesh, dict);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::wordList Foam::subTriSurfaceMesh::patchNames(const triSurface& s)
|
||||||
|
{
|
||||||
|
const geometricSurfacePatchList& patches = s.patches();
|
||||||
|
|
||||||
|
wordList names(patches.size());
|
||||||
|
forAll(patches, patchI)
|
||||||
|
{
|
||||||
|
names[patchI] = patches[patchI].name();
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::labelList Foam::subTriSurfaceMesh::selectedRegions
|
||||||
|
(
|
||||||
|
const triSurface& s,
|
||||||
|
const wordReList& regionNames
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const wordList names(patchNames(s));
|
||||||
|
|
||||||
|
labelList regions(names.size());
|
||||||
|
|
||||||
|
label compactI = 0;
|
||||||
|
|
||||||
|
forAll(names, regionI)
|
||||||
|
{
|
||||||
|
const word& name = names[regionI];
|
||||||
|
|
||||||
|
forAll(regionNames, i)
|
||||||
|
{
|
||||||
|
if (regionNames[i].match(name))
|
||||||
|
{
|
||||||
|
regions[compactI++] = regionI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
regions.setSize(compactI);
|
||||||
|
|
||||||
|
return regions;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Foam::triSurface Foam::subTriSurfaceMesh::subset
|
||||||
|
(
|
||||||
|
const IOobject& io,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
{
|
||||||
|
const word subGeomName(dict.lookup("surface"));
|
||||||
|
|
||||||
|
const triSurfaceMesh& s =
|
||||||
|
io.db().lookupObject<triSurfaceMesh>(subGeomName);
|
||||||
|
|
||||||
|
const wordReList regionNames(dict.lookup("patches"));
|
||||||
|
|
||||||
|
labelList regionMap(selectedRegions(s, regionNames));
|
||||||
|
|
||||||
|
if (regionMap.size() == 0)
|
||||||
|
{
|
||||||
|
FatalIOErrorIn
|
||||||
|
(
|
||||||
|
"subTriSurfaceMesh::subset"
|
||||||
|
"(\n"
|
||||||
|
" const IOobject&,\n"
|
||||||
|
" const dictionary&\n"
|
||||||
|
")",
|
||||||
|
dict
|
||||||
|
) << "Found no regions in triSurface matching " << regionNames
|
||||||
|
<< ". Valid regions are " << patchNames(s)
|
||||||
|
<< exit(FatalIOError);
|
||||||
|
}
|
||||||
|
|
||||||
|
labelList reverseRegionMap(s.patches().size(), -1);
|
||||||
|
forAll(regionMap, i)
|
||||||
|
{
|
||||||
|
reverseRegionMap[regionMap[i]] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolList isSelected(s.size(), false);
|
||||||
|
forAll(s, triI)
|
||||||
|
{
|
||||||
|
if (reverseRegionMap[s.triSurface::operator[](triI).region()] != -1)
|
||||||
|
{
|
||||||
|
isSelected[triI] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
labelList pointMap;
|
||||||
|
labelList faceMap;
|
||||||
|
return s.subsetMesh(isSelected, pointMap, faceMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::subTriSurfaceMesh::subTriSurfaceMesh
|
||||||
|
(
|
||||||
|
const IOobject& io,
|
||||||
|
const dictionary& dict
|
||||||
|
)
|
||||||
|
:
|
||||||
|
triSurfaceMesh(io, subset(io, dict))
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
Foam::subTriSurfaceMesh::~subTriSurfaceMesh()
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
115
src/meshTools/searchableSurface/subTriSurfaceMesh.H
Normal file
115
src/meshTools/searchableSurface/subTriSurfaceMesh.H
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
========= |
|
||||||
|
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||||
|
\\ / O peration |
|
||||||
|
\\ / A nd | Copyright (C) 2015 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Class
|
||||||
|
Foam::subTriSurfaceMesh
|
||||||
|
|
||||||
|
Description
|
||||||
|
On-the-fly subset of triSurfaceMesh (based on selected patches)
|
||||||
|
|
||||||
|
Note
|
||||||
|
|
||||||
|
Example usage:
|
||||||
|
\verbatim
|
||||||
|
spheres.stl
|
||||||
|
{
|
||||||
|
type subTriSurfaceMesh;
|
||||||
|
|
||||||
|
// Surface to operate on. Avoid duplicate loading
|
||||||
|
surface spheres.stl;
|
||||||
|
|
||||||
|
// Regions to operate on (regular expressions allowed)
|
||||||
|
patches (solid1);
|
||||||
|
}
|
||||||
|
\endverbatim
|
||||||
|
|
||||||
|
|
||||||
|
SourceFiles
|
||||||
|
subTriSurfaceMesh.C
|
||||||
|
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef subTriSurfaceMesh_H
|
||||||
|
#define subTriSurfaceMesh_H
|
||||||
|
|
||||||
|
#include "triSurfaceMesh.H"
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
namespace Foam
|
||||||
|
{
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*\
|
||||||
|
Class subTriSurfaceMesh Declaration
|
||||||
|
\*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
class subTriSurfaceMesh
|
||||||
|
:
|
||||||
|
public triSurfaceMesh
|
||||||
|
{
|
||||||
|
// Private member functions
|
||||||
|
|
||||||
|
//- Extract patch names of triSurface
|
||||||
|
static wordList patchNames(const triSurface& s);
|
||||||
|
|
||||||
|
//- Select regions by name
|
||||||
|
static labelList selectedRegions
|
||||||
|
(
|
||||||
|
const triSurface& s,
|
||||||
|
const wordReList& regionNames
|
||||||
|
);
|
||||||
|
|
||||||
|
//- Subset triSurface based on regions
|
||||||
|
static triSurface subset(const IOobject&, const dictionary&);
|
||||||
|
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//- Runtime type information
|
||||||
|
TypeName("subTriSurfaceMesh");
|
||||||
|
|
||||||
|
|
||||||
|
// Constructors
|
||||||
|
|
||||||
|
//- Construct from IO and dictionary.
|
||||||
|
subTriSurfaceMesh
|
||||||
|
(
|
||||||
|
const IOobject& io,
|
||||||
|
const dictionary& dict
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
//- Destructor
|
||||||
|
virtual ~subTriSurfaceMesh();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
} // End namespace Foam
|
||||||
|
|
||||||
|
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ************************************************************************* //
|
||||||
Reference in New Issue
Block a user