#include <DistanceMapCalculator.hpp>
Public Member Functions | |
DistanceMapCalculator (AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > &rMesh) | |
~DistanceMapCalculator () | |
void | ComputeDistanceMap (const std::vector< unsigned > &rSourceNodeIndices, std::vector< double > &rNodeDistances) |
double | SingleDistance (unsigned sourceNodeIndex, unsigned destinationNodeIndex) |
Private Member Functions | |
bool | WorkOnLocalQueue (std::vector< double > &rNodeDistances) |
bool | UpdateQueueFromRemote (std::vector< double > &rNodeDistances) |
void | PushLocal (double priority, unsigned nodeIndex) |
Private Attributes | |
AbstractTetrahedralMesh < ELEMENT_DIM, SPACE_DIM > & | mrMesh |
unsigned | mNumNodes |
unsigned | mLo |
unsigned | mHi |
bool | mWorkOnEntireMesh |
unsigned * | mNumHalosPerProcess |
std::vector< unsigned > | mHaloNodeIndices |
unsigned | mRoundCounter |
unsigned | mPopCounter |
unsigned | mTargetNodeIndex |
bool | mSingleTarget |
c_vector< double, SPACE_DIM > | mTargetNodePoint |
std::priority_queue< std::pair < double, unsigned > > | mActivePriorityNodeIndexQueue |
Friends | |
class | TestDistanceMapCalculator |
The mesh is specified in the constructor, and the ComputeDistanceMap computes (and returns by reference) the map.
Definition at line 45 of file DistanceMapCalculator.hpp.
DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator | ( | AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > & | rMesh | ) | [inline] |
Constructor
rMesh | the mesh for which to compute maps |
Definition at line 34 of file DistanceMapCalculator.cpp.
References DistributedTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetHaloNodeIndices(), PetscTools::GetNumProcs(), PetscTools::IsSequential(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHaloNodeIndices, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHi, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mLo, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumHalosPerProcess, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumNodes, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mrMesh, and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mWorkOnEntireMesh.
DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::~DistanceMapCalculator | ( | ) | [inline] |
Destructor - cleans up mNumHalosPerProcess (which is normally set to NULL anyway).
Definition at line 131 of file DistanceMapCalculator.hpp.
References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumHalosPerProcess.
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue | ( | std::vector< double > & | rNodeDistances | ) | [inline, private] |
Work on the Queue of node indices (grass-fire across the mesh)
rNodeDistances | distance map computed |
false when there is work remaining or the queue is flushed
Definition at line 189 of file DistanceMapCalculator.cpp.
References Node< SPACE_DIM >::ContainingElementsBegin(), Node< SPACE_DIM >::ContainingElementsEnd(), Node< SPACE_DIM >::GetIndex(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNode(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), PetscTools::GetNumProcs(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumNodes, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mPopCounter, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mrMesh, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mSingleTarget, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodeIndex, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodePoint, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal(), and Node< SPACE_DIM >::rGetLocation().
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap().
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote | ( | std::vector< double > & | rNodeDistances | ) | [inline, private] |
Update the local Queue of node indices using data that are from the halo nodes of remote processes.
rNodeDistances | distance map computed |
false without working or side-effects if we don't have a true distributed mesh
Definition at line 136 of file DistanceMapCalculator.cpp.
References PetscTools::GetMyRank(), PetscTools::GetNumProcs(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHaloNodeIndices, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumHalosPerProcess, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mWorkOnEntireMesh, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal(), and PetscTools::ReplicateBool().
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap().
void DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal | ( | double | priority, | |
unsigned | nodeIndex | |||
) | [inline, private] |
Push a node index onto the queue. In the parallel case this will only push a locally-owned (not halo) node. Halo nodes will be updated, but never pushed to the local queue
priority | Current priority/distance of this node. | |
nodeIndex | A global node index. |
Definition at line 110 of file DistanceMapCalculator.hpp.
References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHi, and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mLo.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
void DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap | ( | const std::vector< unsigned > & | rSourceNodeIndices, | |
std::vector< double > & | rNodeDistances | |||
) | [inline] |
Generates a distance map of all the nodes of the mesh to the given source
rSourceNodeIndices | set of node indices defining the source set or surface | |
rNodeDistances | distance map computed. The method will resize it if it's not big enough. |
Definition at line 70 of file DistanceMapCalculator.cpp.
References PetscTools::GetNumProcs(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHi, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mLo, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumNodes, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mPopCounter, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mrMesh, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mRoundCounter, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mSingleTarget, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodePoint, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mWorkOnEntireMesh, NEVER_REACHED, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal(), PetscTools::ReplicateBool(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
Referenced by HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance(), and PostProcessingWriter< ELEMENT_DIM, SPACE_DIM >::WritePostProcessingFiles().
double DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance | ( | unsigned | sourceNodeIndex, | |
unsigned | destinationNodeIndex | |||
) | [inline] |
Calculates a single point-to-point distance
sourceNodeIndex | node index for source of distance computation. Calculations will be cached so that multiple point-to-point distance computations will get faster. | |
destinationNodeIndex | target destination node |
Definition at line 266 of file DistanceMapCalculator.cpp.
References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mrMesh, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mSingleTarget, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodeIndex, and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodePoint.
AbstractTetrahedralMesh<ELEMENT_DIM, SPACE_DIM>& DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mrMesh [private] |
The mesh
Definition at line 51 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumNodes [private] |
Number of nodes in the mesh
Definition at line 53 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mLo [private] |
Local cache of the nodes owned by this process, from mesh's DistributedVectorFactory
Definition at line 55 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal().
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHi [private] |
Local cache of the nodes owned by this process, from mesh's DistributedVectorFactory
Definition at line 57 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal().
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mWorkOnEntireMesh [private] |
Whether we should work on the entire mesh. True if sequential. True is the mesh is a plain TetrahedralMesh.
Definition at line 59 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote().
unsigned* DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumHalosPerProcess [private] |
(Only used when mWorkOnEntrireMesh == false). This forms an array of with the number of halo nodes known by each process.
Definition at line 61 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::~DistanceMapCalculator().
std::vector<unsigned> DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHaloNodeIndices [private] |
(Only used when mWorkOnEntrireMesh == false). This is a local cache of halo node indices.
Definition at line 63 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote().
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mRoundCounter [private] |
Used to check parallel implementation
Definition at line 65 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap().
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mPopCounter [private] |
Used to check implementation for number of queue pops per calculation
Definition at line 67 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodeIndex [private] |
Used in the calculation of point-to-point distances.
Definition at line 69 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mSingleTarget [private] |
True for point-to-point distances.
Definition at line 71 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
c_vector<double, SPACE_DIM> DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodePoint [private] |
Also used in the calculation of point-to-point distances with A* heuristic -- this requires a parallel communication
Definition at line 73 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().
std::priority_queue<std::pair<double, unsigned> > DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue [private] |
Queue of nodes to be processed (initialised with the nodes defining the surface) Priorities (given as the first in the pair for lexographical ordering) are initialised to -best_distance_to_source so that nodes closest to the source are dealt with first.
Definition at line 81 of file DistanceMapCalculator.hpp.
Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance(), DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue().