Loading...
Searching...
No Matches
surface_skd_tree.cpp
94double SurfaceSkdTree::evalPointDistance(const std::array<double, 3> &point, double maxDistance) const
118double SurfaceSkdTree::evalPointDistance(const std::array<double, 3> &point, double maxDistance, bool interiorCellsOnly) const
138void SurfaceSkdTree::evalPointDistance(int nPoints, const std::array<double, 3> *points, double *distances) const
162void SurfaceSkdTree::evalPointDistance(int nPoints, const std::array<double, 3> *points, double maxDistance, double *distances) const
186void SurfaceSkdTree::evalPointDistance(int nPoints, const std::array<double, 3> *points, const double *maxDistances, double *distances) const
211void SurfaceSkdTree::evalPointDistance(int nPoints, const std::array<double, 3> *points, const double *maxDistances, bool interiorCellsOnly, double *distances) const
230void SurfaceSkdTree::evalPointGlobalDistance(int nPoints, const std::array<double, 3> *points, double *distances) const
255void SurfaceSkdTree::evalPointGlobalDistance(int nPoints, const std::array<double, 3> *points, double maxDistance, double *distances) const
280void SurfaceSkdTree::evalPointGlobalDistance(int nPoints, const std::array<double, 3> *points, const double *maxDistances, double *distances) const
304long SurfaceSkdTree::findPointClosestCell(const std::array<double, 3> &point, long *id, double *distance) const
326long SurfaceSkdTree::findPointClosestCell(const std::array<double, 3> &point, double maxDistance,
351long SurfaceSkdTree::findPointClosestCell(const std::array<double, 3> &point, double maxDistance,
386 if (utils::DoubleFloatingGreater()(closestCellCandidates->minDistances.at(k), closestCellCandidates->maxDistance, tolerance, tolerance)) {
394 node.updatePointClosestCell(point, interiorCellsOnly, id, &(closestCellCandidates->maxDistance));
413long SurfaceSkdTree::findPointClosestCell(int nPoints, const std::array<double, 3> *points, long *ids, double *distances) const
417 nDistanceEvaluations += findPointClosestCell(points[i], std::numeric_limits<double>::max(), false, ids + i, distances + i);
439long SurfaceSkdTree::findPointClosestCell(int nPoints, const std::array<double, 3> *points, double maxDistance, long *ids, double *distances) const
443 nDistanceEvaluations += findPointClosestCell(points[i], maxDistance, false, ids + i, distances + i);
466long SurfaceSkdTree::findPointClosestCell(int nPoints, const std::array<double, 3> *points, const double *maxDistances, long *ids, double *distances) const
490long SurfaceSkdTree::findPointClosestCell(int nPoints, const std::array<double, 3> *points, const double *maxDistances, bool interiorCellsOnly, long *ids, double *distances) const
494 nDistanceEvaluations += findPointClosestCell(points[i], maxDistances[i], interiorCellsOnly, ids + i, distances + i);
515long SurfaceSkdTree::findPointClosestCells(const std::array<double, 3> &point, std::vector<long> &ids, double *distance) const
537long SurfaceSkdTree::findPointClosestCells(const std::array<double, 3> &point, double maxDistance,
563long SurfaceSkdTree::findPointClosestCells(const std::array<double, 3> &point, double maxDistance,
601 if (utils::DoubleFloatingGreater()(closestCellCandidates->minDistances.at(k), *distance, tolerance, tolerance)) {
631void SurfaceSkdTree::findPointClosestCandidates(const std::array<double, 3> &point, double maxDistance,
657 double squareDistanceEstimate = std::min(root.evalPointMaxSquareDistance(point), squaredMaxDistance);
677 if (utils::DoubleFloatingGreater()(nodeMinSquareDistance, squareDistanceEstimate, tolerance, tolerance)) {
728long SurfaceSkdTree::findPointClosestGlobalCell(int nPoints, const std::array<double, 3> *points,
731 return findPointClosestGlobalCell(nPoints, points, std::numeric_limits<double>::max(), ids, ranks, distances);
753long SurfaceSkdTree::findPointClosestGlobalCell(int nPoints, const std::array<double, 3> *points, double maxDistance,
781long SurfaceSkdTree::findPointClosestGlobalCell(int nPoints, const std::array<double, 3> *points, const double *maxDistances,
791 nDistanceEvaluations += findPointClosestCell(points[i], maxDistances[i], ids + i, distances + i);
849 pointMaxDistance = std::min(getPartitionBox(rank).evalPointMaxDistance(point, std::numeric_limits<double>::max()), pointMaxDistance);
860 nDistanceEvaluations += findPointClosestCell(point, pointMaxDistance, interiorCellsOnly, &cellId, &cellDistance);
872 SkdGlobalCellDistance *globalCellDistance = globalCellDistances.data() + globalPointsOffsets[rank];
874 MPI_Reduce(MPI_IN_PLACE, globalCellDistance, pointsCount[rank], globalCellDistanceDatatype, globalCellDistanceMinOp, rank, communicator);
The PatchKernel class provides an interface for defining patches.
Definition patch_kernel.hpp:54
bool isCommunicatorSet() const
Definition patch_skd_tree.cpp:1469
const SkdBox & getPartitionBox(int rank) const
Definition patch_skd_tree.cpp:1527
bool areLookupsThreadSafe() const
Definition patch_skd_tree.cpp:1409
PatchSkdTree(const PatchKernel *patch, bool interiorCellsOnly=false)
Definition patch_skd_tree.cpp:1023
const MPI_Comm & getCommunicator() const
Definition patch_skd_tree.cpp:1479
const PatchKernel & getPatch() const
Definition patch_skd_tree.cpp:1198
The SkdPatchInfo class defines a node of the skd-tree.
Definition patch_skd_tree.hpp:96
void updatePointClosestCell(const std::array< double, 3 > &point, bool interiorCellsOnly, long *closestId, double *closestDistance) const
Definition patch_skd_tree.cpp:709
void updatePointClosestCells(const std::array< double, 3 > &point, bool interiorCellsOnly, std::vector< long > *closestIds, double *closestDistance) const
Definition patch_skd_tree.cpp:802
static BITPIT_PUBLIC_API const std::size_t NULL_ID
Definition patch_skd_tree.hpp:101
The SurfaceKernel class provides an interface for defining surface patches.
Definition surface_kernel.hpp:35
long findPointClosestGlobalCell(int nPoints, const std::array< double, 3 > *points, long *ids, int *ranks, double *distances) const
Definition surface_skd_tree.cpp:728
void evalPointGlobalDistance(int nPoints, const std::array< double, 3 > *points, double *distances) const
Definition surface_skd_tree.cpp:230
long findPointClosestCells(const std::array< double, 3 > &point, std::vector< long > &ids, double *distance) const
Definition surface_skd_tree.cpp:515
SurfaceSkdTree(const SurfaceKernel *patch, bool interorOnly=false)
Definition surface_skd_tree.cpp:44
double evalPointDistance(const std::array< double, 3 > &point) const
Definition surface_skd_tree.cpp:73
long findPointClosestCell(const std::array< double, 3 > &point, long *id, double *distance) const
Definition surface_skd_tree.cpp:304
The namespace 'patch' contains routines for interacting with the patch manager.
Definition patch_manager.cpp:185
The SkdGlobalCellDistance class allows to define a distance between a point and a cell.
Definition patch_skd_tree.hpp:147
static MPI_Datatype getMPIDatatype()
Definition patch_skd_tree.cpp:863
void exportData(int *rank, long *id, double *distance) const
Definition patch_skd_tree.cpp:958
static MPI_Op getMPIMinOperation()
Definition patch_skd_tree.cpp:882
