mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'master' of ssh://noisy/home/noisy2/OpenFOAM/OpenFOAM-dev
This commit is contained in:
@ -418,19 +418,55 @@ Foam::instant Foam::Time::findClosestTime(const scalar t) const
|
||||
return times[times.size() - 1];
|
||||
}
|
||||
|
||||
label nearestIndex = -1;
|
||||
scalar deltaT = GREAT;
|
||||
label closesti = 0;
|
||||
|
||||
for (label i=1; i<times.size(); i++)
|
||||
{
|
||||
if (mag(times[i].value() - t) < deltaT)
|
||||
scalar diff = mag(times[i].value() - t);
|
||||
if (diff < deltaT)
|
||||
{
|
||||
deltaT = mag(times[i].value() - t);
|
||||
closesti = i;
|
||||
deltaT = diff;
|
||||
nearestIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
return times[closesti];
|
||||
return times[nearestIndex];
|
||||
}
|
||||
|
||||
//
|
||||
// This should work too,
|
||||
// if we don't worry about checking "constant" explicitly
|
||||
//
|
||||
// Foam::instant Foam::Time::findClosestTime(const scalar t) const
|
||||
// {
|
||||
// instantList times = Time::findTimes(path());
|
||||
// label timeIndex = min(findClosestTimeIndex(times, t), 0);
|
||||
// return times[timeIndex];
|
||||
// }
|
||||
|
||||
Foam::label Foam::Time::findClosestTimeIndex
|
||||
(
|
||||
const instantList& times,
|
||||
const scalar t
|
||||
)
|
||||
{
|
||||
label nearestIndex = -1;
|
||||
scalar deltaT = GREAT;
|
||||
|
||||
forAll (times, i)
|
||||
{
|
||||
if (times[i].name() == "constant") continue;
|
||||
|
||||
scalar diff = fabs(times[i].value() - t);
|
||||
if (diff < deltaT)
|
||||
{
|
||||
deltaT = diff;
|
||||
nearestIndex = i;
|
||||
}
|
||||
}
|
||||
|
||||
return nearestIndex;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -300,6 +300,9 @@ public:
|
||||
//- Search the case for the time closest to the given time
|
||||
instant findClosestTime(const scalar) const;
|
||||
|
||||
//- Search instantList for the time index closest to the given time
|
||||
static label findClosestTimeIndex(const instantList&, const scalar);
|
||||
|
||||
//- Write using given format, version and compression
|
||||
virtual bool writeObject
|
||||
(
|
||||
|
||||
@ -33,10 +33,7 @@ Description
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
word Time::findInstance
|
||||
Foam::word Foam::Time::findInstance
|
||||
(
|
||||
const fileName& dir,
|
||||
const word& name,
|
||||
@ -110,7 +107,7 @@ word Time::findInstance
|
||||
// constant function of the time, because the latter points to
|
||||
// the case constant directory in parallel cases
|
||||
|
||||
if
|
||||
if
|
||||
(
|
||||
file(path()/constant()/dir/name)
|
||||
&& IOobject(name, constant(), dir, *this).headerOk()
|
||||
@ -139,9 +136,4 @@ word Time::findInstance
|
||||
return constant();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -35,12 +35,7 @@ Description
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
instantList Time::findTimes(const fileName& directory)
|
||||
Foam::instantList Foam::Time::findTimes(const fileName& directory)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
@ -101,9 +96,4 @@ instantList Time::findTimes(const fileName& directory)
|
||||
return Times;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -337,23 +337,21 @@ Foam::argList::argList
|
||||
|
||||
Switch distributed(false);
|
||||
|
||||
if (decompositionDict.found("distributed"))
|
||||
if
|
||||
(
|
||||
decompositionDict.readIfPresent("distributed", distributed)
|
||||
&& distributed
|
||||
)
|
||||
{
|
||||
decompositionDict.lookup("distributed") >> distributed;
|
||||
decompositionDict.lookup("roots") >> roots;
|
||||
|
||||
if (distributed)
|
||||
if (roots.size() != Pstream::nProcs()-1)
|
||||
{
|
||||
decompositionDict.lookup("roots") >> roots;
|
||||
|
||||
if (roots.size() != Pstream::nProcs())
|
||||
{
|
||||
FatalError
|
||||
<< "number of entries in "
|
||||
<< "decompositionDict::roots"
|
||||
<< " is not equal to the number of processors "
|
||||
<< Pstream::nProcs()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
FatalError
|
||||
<< "number of entries in decompositionDict::roots"
|
||||
<< " is not equal to the number of slaves "
|
||||
<< Pstream::nProcs()-1
|
||||
<< exit(FatalError);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1,22 +1,7 @@
|
||||
if (args.options().found("time"))
|
||||
{
|
||||
scalar time(readScalar(IStringStream(args.options()["time"])()));
|
||||
scalar timeValue(readScalar(IStringStream(args.options()["time"])()));
|
||||
|
||||
int nearestIndex = -1;
|
||||
scalar nearestDiff = Foam::GREAT;
|
||||
|
||||
forAll(Times, timeIndex)
|
||||
{
|
||||
if (Times[timeIndex].name() == "constant") continue;
|
||||
|
||||
scalar diff = fabs(Times[timeIndex].value() - time);
|
||||
if (diff < nearestDiff)
|
||||
{
|
||||
nearestDiff = diff;
|
||||
nearestIndex = timeIndex;
|
||||
}
|
||||
}
|
||||
|
||||
startTime = nearestIndex;
|
||||
endTime = nearestIndex + 1;
|
||||
startTime = Time::findClosestTimeIndex(Times, timeValue);
|
||||
endTime = startTime + 1;
|
||||
}
|
||||
|
||||
@ -1072,7 +1072,7 @@ const Foam::globalMeshData& Foam::polyMesh::globalData() const
|
||||
// Remove all files and some subdirs (eg, sets)
|
||||
void Foam::polyMesh::removeFiles(const fileName& instanceDir) const
|
||||
{
|
||||
fileName meshFilesPath = db().path()/instanceDir/meshSubDir;
|
||||
fileName meshFilesPath = db().path()/instanceDir/meshDir();
|
||||
|
||||
rm(meshFilesPath/"points");
|
||||
rm(meshFilesPath/"faces");
|
||||
|
||||
@ -102,7 +102,7 @@ Foam::scalar Foam::layerAdditionRemoval::readOldThickness
|
||||
const dictionary& dict
|
||||
)
|
||||
{
|
||||
dict.lookupOrDefault("oldLayerThickness", -1.0);
|
||||
return dict.lookupOrDefault("oldLayerThickness", -1.0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1,126 +0,0 @@
|
||||
cellClassification/cellClassification.C
|
||||
cellClassification/cellInfo.C
|
||||
|
||||
cellQuality/cellQuality.C
|
||||
|
||||
cellDist/cellDistFuncs.C
|
||||
cellDist/patchWave/patchWave.C
|
||||
cellDist/wallPoint/wallPoint.C
|
||||
|
||||
cellFeatures/cellFeatures.C
|
||||
|
||||
coordinateSystems/parabolicCylindricalCS.C
|
||||
coordinateSystems/coordinateSystem.C
|
||||
coordinateSystems/toroidalCS.C
|
||||
coordinateSystems/cartesianCS.C
|
||||
coordinateSystems/newCoordinateSystem.C
|
||||
coordinateSystems/cylindricalCS.C
|
||||
coordinateSystems/sphericalCS.C
|
||||
coordinateSystems/coordinateRotation/coordinateRotation.C
|
||||
coordinateSystems/coordinateRotation/EulerCoordinateRotation.C
|
||||
coordinateSystems/coordinateRotation/STARCDCoordinateRotation.C
|
||||
|
||||
polyMeshZipUpCells/polyMeshZipUpCells.C
|
||||
|
||||
primitiveMeshGeometry/primitiveMeshGeometry.C
|
||||
|
||||
meshSearch/meshSearch.C
|
||||
|
||||
meshTools/meshTools.C
|
||||
|
||||
PointEdgeWave/PointEdgeWaveName.C
|
||||
PointEdgeWave/pointEdgePoint.C
|
||||
|
||||
regionSplit/regionSplit.C
|
||||
|
||||
octree/octreeName.C
|
||||
octree/octreeDataPoint.C
|
||||
octree/octreeDataPointTreeLeaf.C
|
||||
octree/octreeDataEdges.C
|
||||
octree/octreeDataCell.C
|
||||
octree/octreeDataFace.C
|
||||
octree/treeBoundBox.C
|
||||
octree/treeNodeName.C
|
||||
octree/treeLeafName.C
|
||||
octree/pointIndexHitIOList.C
|
||||
|
||||
indexedOctree/indexedOctreeName.C
|
||||
indexedOctree/treeDataTriSurface.C
|
||||
|
||||
topoSets = sets/topoSets
|
||||
$(topoSets)/cellSet.C
|
||||
$(topoSets)/topoSet.C
|
||||
$(topoSets)/faceSet.C
|
||||
$(topoSets)/pointSet.C
|
||||
|
||||
sets/topoSetSource/topoSetSource.C
|
||||
|
||||
cellSources = sets/cellSources
|
||||
$(cellSources)/faceToCell/faceToCell.C
|
||||
$(cellSources)/fieldToCell/fieldToCell.C
|
||||
$(cellSources)/pointToCell/pointToCell.C
|
||||
$(cellSources)/shapeToCell/shapeToCell.C
|
||||
$(cellSources)/boxToCell/boxToCell.C
|
||||
$(cellSources)/rotatedBoxToCell/rotatedBoxToCell.C
|
||||
$(cellSources)/labelToCell/labelToCell.C
|
||||
$(cellSources)/surfaceToCell/surfaceToCell.C
|
||||
$(cellSources)/cellToCell/cellToCell.C
|
||||
$(cellSources)/nearestToCell/nearestToCell.C
|
||||
$(cellSources)/nbrToCell/nbrToCell.C
|
||||
$(cellSources)/zoneToCell/zoneToCell.C
|
||||
|
||||
faceSources = sets/faceSources
|
||||
$(faceSources)/faceToFace/faceToFace.C
|
||||
$(faceSources)/labelToFace/labelToFace.C
|
||||
$(faceSources)/cellToFace/cellToFace.C
|
||||
$(faceSources)/normalToFace/normalToFace.C
|
||||
$(faceSources)/pointToFace/pointToFace.C
|
||||
$(faceSources)/patchToFace/patchToFace.C
|
||||
$(faceSources)/boundaryToFace/boundaryToFace.C
|
||||
$(faceSources)/zoneToFace/zoneToFace.C
|
||||
$(faceSources)/boxToFace/boxToFace.C
|
||||
|
||||
pointSources = sets/pointSources
|
||||
$(pointSources)/labelToPoint/labelToPoint.C
|
||||
$(pointSources)/pointToPoint/pointToPoint.C
|
||||
$(pointSources)/cellToPoint/cellToPoint.C
|
||||
$(pointSources)/faceToPoint/faceToPoint.C
|
||||
$(pointSources)/boxToPoint/boxToPoint.C
|
||||
$(pointSources)/surfaceToPoint/surfaceToPoint.C
|
||||
$(pointSources)/zoneToPoint/zoneToPoint.C
|
||||
|
||||
surfaceSets/surfaceSets.C
|
||||
|
||||
triSurface/orientedSurface/orientedSurface.C
|
||||
|
||||
booleanOps = triSurface/booleanOps
|
||||
|
||||
surfaceIntersection = $(booleanOps)/surfaceIntersection
|
||||
$(surfaceIntersection)/surfaceIntersection.C
|
||||
$(surfaceIntersection)/surfaceIntersectionFuncs.C
|
||||
$(surfaceIntersection)/edgeIntersections.C
|
||||
|
||||
booleanSurface = $(booleanOps)/booleanSurface
|
||||
$(booleanSurface)/booleanSurface.C
|
||||
|
||||
intersectedSurface = $(booleanOps)/intersectedSurface
|
||||
$(intersectedSurface)/intersectedSurface.C
|
||||
$(intersectedSurface)/edgeSurface.C
|
||||
|
||||
triSurface/triSurfaceSearch/triSurfaceSearch.C
|
||||
|
||||
triSurface/octreeData/octreeDataTriSurface.C
|
||||
triSurface/octreeData/octreeDataTriSurfaceTreeLeaf.C
|
||||
|
||||
triSurface/triangleFuncs/triangleFuncs.C
|
||||
|
||||
triSurface/surfaceFeatures/surfaceFeatures.C
|
||||
|
||||
triSurface/triSurfaceMeshes/triSurfaceMeshes.C
|
||||
|
||||
twoDPointCorrector/twoDPointCorrector.C
|
||||
|
||||
directMapped/directMappedPolyPatch/directMappedPolyPatch.C
|
||||
directMapped/directMappedPointPatch/directMappedPointPatch.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libmeshTools
|
||||
@ -29,6 +29,15 @@ License
|
||||
#include "linePointRef.H"
|
||||
#include "meshTools.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
// set values for what is close to zero and what is considered to
|
||||
// be positive (and not just rounding noise)
|
||||
//! @cond localScope
|
||||
const Foam::scalar zeroish = Foam::SMALL;
|
||||
const Foam::scalar positive = Foam::SMALL * 1E3;
|
||||
//! @endcond localScope
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
// Find cut cells
|
||||
@ -71,8 +80,8 @@ void Foam::cuttingPlane::calcCutCells
|
||||
|
||||
if
|
||||
(
|
||||
(dotProducts[e[0]] < 0 && dotProducts[e[1]] > 0)
|
||||
|| (dotProducts[e[1]] < 0 && dotProducts[e[0]] > 0)
|
||||
(dotProducts[e[0]] < zeroish && dotProducts[e[1]] > positive)
|
||||
|| (dotProducts[e[1]] < zeroish && dotProducts[e[0]] > positive)
|
||||
)
|
||||
{
|
||||
nCutEdges++;
|
||||
@ -116,8 +125,8 @@ Foam::labelList Foam::cuttingPlane::intersectEdges
|
||||
|
||||
if
|
||||
(
|
||||
(dotProducts[e[0]] < 0 && dotProducts[e[1]] > 0)
|
||||
|| (dotProducts[e[1]] < 0 && dotProducts[e[0]] > 0)
|
||||
(dotProducts[e[0]] < zeroish && dotProducts[e[1]] > positive)
|
||||
|| (dotProducts[e[1]] < zeroish && dotProducts[e[0]] > positive)
|
||||
)
|
||||
{
|
||||
// Edge is cut.
|
||||
@ -126,7 +135,19 @@ Foam::labelList Foam::cuttingPlane::intersectEdges
|
||||
|
||||
scalar alpha = lineIntersect(linePointRef(p0, p1));
|
||||
|
||||
dynCuttingPoints.append((1-alpha)*p0 + alpha*p1);
|
||||
if (alpha < zeroish)
|
||||
{
|
||||
dynCuttingPoints.append(p0);
|
||||
}
|
||||
else if (alpha > 1.0)
|
||||
{
|
||||
dynCuttingPoints.append(p1);
|
||||
}
|
||||
else
|
||||
{
|
||||
dynCuttingPoints.append((1-alpha)*p0 + alpha*p1);
|
||||
}
|
||||
|
||||
edgePoint[edgeI] = dynCuttingPoints.size() - 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -30,6 +30,10 @@ Description
|
||||
|
||||
No attempt at resolving degenerate cases.
|
||||
|
||||
Note
|
||||
When the cutting plane coincides with a mesh face, the cell edge on the
|
||||
positive side of the plane is taken.
|
||||
|
||||
SourceFiles
|
||||
cuttingPlane.C
|
||||
|
||||
|
||||
Reference in New Issue
Block a user