ENH: Update cell size functions to use the regionIndices findNearest

functions
This commit is contained in:
laurence
2013-04-11 20:24:06 +01:00
parent 73bb893067
commit 2b8bbb94b1
12 changed files with 122 additions and 49 deletions

View File

@ -43,7 +43,8 @@ Foam::cellSizeFunction::cellSizeFunction
const word& type,
const dictionary& cellSizeFunctionDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
:
dictionary(cellSizeFunctionDict),
@ -59,6 +60,7 @@ Foam::cellSizeFunction::cellSizeFunction
),
coeffsDict_(subDict(type + "Coeffs")),
defaultCellSize_(defaultCellSize),
regionIndices_(regionIndices),
sideMode_(),
priority_(readLabel(cellSizeFunctionDict.lookup("priority", true)))
{
@ -106,7 +108,8 @@ Foam::autoPtr<Foam::cellSizeFunction> Foam::cellSizeFunction::New
(
const dictionary& cellSizeFunctionDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
{
word cellSizeFunctionTypeName
@ -136,7 +139,13 @@ Foam::autoPtr<Foam::cellSizeFunction> Foam::cellSizeFunction::New
return autoPtr<cellSizeFunction>
(
cstrIter()(cellSizeFunctionDict, surface, defaultCellSize)
cstrIter()
(
cellSizeFunctionDict,
surface,
defaultCellSize,
regionIndices
)
);
}

View File

@ -96,6 +96,10 @@ protected:
const scalar& defaultCellSize_;
//- Index of the region of the surface that this cell size function
// applies to
const labelList regionIndices_;
//- Mode of size specification, i.e. inside, outside or bothSides
sideMode sideMode_;
@ -125,9 +129,10 @@ public:
(
const dictionary& cellSizeFunctionDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
),
(cellSizeFunctionDict, surface, defaultCellSize)
(cellSizeFunctionDict, surface, defaultCellSize, regionIndices)
);
@ -139,7 +144,8 @@ public:
const word& type,
const dictionary& cellSizeFunctionDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);
@ -150,7 +156,8 @@ public:
(
const dictionary& cellSizeFunctionDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);

View File

@ -46,10 +46,18 @@ linearDistance::linearDistance
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
:
cellSizeFunction(typeName, initialPointsDict, surface, defaultCellSize),
cellSizeFunction
(
typeName,
initialPointsDict,
surface,
defaultCellSize,
regionIndices
),
distanceCellSize_
(
readScalar(coeffsDict().lookup("distanceCellSizeCoeff"))
@ -97,6 +105,7 @@ bool linearDistance::cellSize(const point& pt, scalar& size) const
(
pointField(1, pt),
scalarField(1, distanceSqr_),
regionIndices_,
hits
);

View File

@ -82,7 +82,8 @@ public:
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);

View File

@ -44,10 +44,18 @@ linearSpatial::linearSpatial
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
:
cellSizeFunction(typeName, initialPointsDict, surface, defaultCellSize),
cellSizeFunction
(
typeName,
initialPointsDict,
surface,
defaultCellSize,
regionIndices
),
referencePoint_(coeffsDict().lookup("referencePoint")),
referenceCellSize_
(
@ -94,6 +102,7 @@ bool linearSpatial::cellSize
(
pointField(1, pt),
scalarField(1, sqr(snapToSurfaceTol_)),
regionIndices_,
hits
);

View File

@ -86,7 +86,8 @@ public:
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);

View File

@ -48,10 +48,18 @@ surfaceOffsetLinearDistance::surfaceOffsetLinearDistance
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
:
cellSizeFunction(typeName, initialPointsDict, surface, defaultCellSize),
cellSizeFunction
(
typeName,
initialPointsDict,
surface,
defaultCellSize,
regionIndices
),
distanceCellSize_
(
readScalar(coeffsDict().lookup("distanceCellSizeCoeff"))
@ -166,6 +174,7 @@ bool surfaceOffsetLinearDistance::cellSize
(
pointField(1, pt),
scalarField(1, totalDistanceSqr_),
regionIndices_,
hits
);

View File

@ -86,7 +86,8 @@ public:
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);

View File

@ -43,10 +43,18 @@ uniform::uniform
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
:
cellSizeFunction(typeName, initialPointsDict, surface, defaultCellSize)
cellSizeFunction
(
typeName,
initialPointsDict,
surface,
defaultCellSize,
regionIndices
)
{}
@ -64,6 +72,7 @@ bool uniform::cellSize
(
pointField(1, pt),
scalarField(1, sqr(GREAT)),
regionIndices_,
hits
);
@ -89,6 +98,7 @@ bool uniform::cellSize
(
pointField(1, pt),
scalarField(1, sqr(snapToSurfaceTol_)),
regionIndices_,
closeToSurfaceHits
);

View File

@ -67,7 +67,8 @@ public:
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);

View File

@ -43,10 +43,18 @@ uniformDistance::uniformDistance
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
)
:
cellSizeFunction(typeName, initialPointsDict, surface, defaultCellSize),
cellSizeFunction
(
typeName,
initialPointsDict,
surface,
defaultCellSize,
regionIndices
),
distance_
(
readScalar(coeffsDict().lookup("distanceCoeff"))*defaultCellSize
@ -71,6 +79,7 @@ bool uniformDistance::cellSize
(
pointField(1, pt),
scalarField(1, distanceSqr_),
regionIndices_,
hits
);
@ -78,9 +87,12 @@ bool uniformDistance::cellSize
if (hitInfo.hit())
{
const point& hitPt = hitInfo.hitPoint();
const label index = hitInfo.index();
if (sideMode_ == rmBothsides)
{
size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
size = surfaceCellSizeFunction_().interpolate(hitPt, index);
return true;
}
@ -89,7 +101,7 @@ bool uniformDistance::cellSize
// getVolumeType calculation, as it will be prone to error.
if (mag(pt - hitInfo.hitPoint()) < snapToSurfaceTol_)
{
size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
size = surfaceCellSizeFunction_().interpolate(hitPt, index);
return true;
}
@ -107,7 +119,7 @@ bool uniformDistance::cellSize
&& vTL[0] == volumeType::INSIDE
)
{
size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
size = surfaceCellSizeFunction_().interpolate(hitPt, index);
functionApplied = true;
}
@ -117,7 +129,7 @@ bool uniformDistance::cellSize
&& vTL[0] == volumeType::OUTSIDE
)
{
size = surfaceCellSizeFunction_().surfaceSize(hitInfo.index());
size = surfaceCellSizeFunction_().interpolate(hitPt, index);
functionApplied = true;
}
@ -134,30 +146,33 @@ bool uniformDistance::setCellSize
const pointField& pts
)
{
labelHashSet surfaceAlreadyHit(surface_.size());
// labelHashSet surfaceAlreadyHit(surface_.size());
//
// forAll(pts, ptI)
// {
// const Foam::point& pt = pts[ptI];
//
// List<pointIndexHit> hits;
//
// surface_.findNearest
// (
// pointField(1, pt),
// scalarField(1, distanceSqr_),
// regionIndices_,
// hits
// );
//
// if (hits[0].hit() && !surfaceAlreadyHit.found(hits[0].index()))
// {
// surfaceCellSizeFunction_().refineSurfaceSize(hits[0].index());
//
// surfaceAlreadyHit.insert(hits[0].index());
// }
// }
//
// return true;
forAll(pts, ptI)
{
const Foam::point& pt = pts[ptI];
List<pointIndexHit> hits;
surface_.findNearest
(
pointField(1, pt),
scalarField(1, distanceSqr_),
hits
);
if (hits[0].hit() && !surfaceAlreadyHit.found(hits[0].index()))
{
surfaceCellSizeFunction_().refineSurfaceSize(hits[0].index());
surfaceAlreadyHit.insert(hits[0].index());
}
}
return true;
return false;
}

View File

@ -73,7 +73,8 @@ public:
(
const dictionary& initialPointsDict,
const searchableSurface& surface,
const scalar& defaultCellSize
const scalar& defaultCellSize,
const labelList regionIndices
);