Chaste  Release::2018.1
DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM > Class Template Reference

#include <DistanceMapCalculator.hpp>

+ Collaboration diagram for DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >:

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
 
unsignedmNumHalosPerProcess
 
std::vector< unsignedmHaloNodeIndices
 
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
 

Detailed Description

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
class DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >

This class provides functionalities to compute a distance map in a given mesh from a given surface, specifying the distance from each node to the surface.

The mesh is specified in the constructor, and the ComputeDistanceMap computes (and returns by reference) the map.

Definition at line 52 of file DistanceMapCalculator.hpp.

Constructor & Destructor Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::~DistanceMapCalculator ( )
inline

Destructor - cleans up mNumHalosPerProcess (which is normally set to NULL anyway).

Definition at line 139 of file DistanceMapCalculator.hpp.

References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumHalosPerProcess.

Member Function Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::ComputeDistanceMap ( const std::vector< unsigned > &  rSourceNodeIndices,
std::vector< double > &  rNodeDistances 
)

Generates a distance map of all the nodes of the mesh to the given source

Parameters
rSourceNodeIndicesset of node indices defining the source set or surface If the vector of source nodes is empty then the results will be a vector of node distance which are all of size DBL_MAX
rNodeDistancesdistance map computed. The method will resize it if it's not big enough.

Definition at line 77 of file DistanceMapCalculator.cpp.

References PetscTools::GetNumProcs(), NEVER_REACHED, and PetscTools::ReplicateBool().

Referenced by HeartGeometryInformation< SPACE_DIM >::HeartGeometryInformation(), and PostProcessingWriter< ELEMENT_DIM, SPACE_DIM >::WritePostProcessingFiles().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
void DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal ( double  priority,
unsigned  nodeIndex 
)
inlineprivate

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

Parameters
priorityCurrent priority/distance of this node.
nodeIndexA global node index.

Definition at line 117 of file DistanceMapCalculator.hpp.

References DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mActivePriorityNodeIndexQueue, DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHi, and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mLo.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
double DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::SingleDistance ( unsigned  sourceNodeIndex,
unsigned  destinationNodeIndex 
)
Returns
calculated single point-to-point distance
Parameters
sourceNodeIndexnode index for source of distance computation. Calculations will be cached so that multiple point-to-point distance computations will get faster.
destinationNodeIndextarget destination node
Todo:
#1414 premature termination when we find the correct one (parallel)

Definition at line 277 of file DistanceMapCalculator.cpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::UpdateQueueFromRemote ( std::vector< double > &  rNodeDistances)
private

Update the local Queue of node indices using data that are from the halo nodes of remote processes.

Parameters
rNodeDistancesdistance map computed
Returns
true when this update was active => there are non-empty queues left to work on
false without working or side-effects if we don't have a true distributed mesh

Definition at line 144 of file DistanceMapCalculator.cpp.

References PetscTools::GetMyRank(), PetscTools::GetNumProcs(), and PetscTools::ReplicateBool().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::WorkOnLocalQueue ( std::vector< double > &  rNodeDistances)
private

Work on the Queue of node indices (grass-fire across the mesh)

Parameters
rNodeDistancesdistance map computed
Returns
true when a single target has been found
false when there is work remaining or the queue is flushed

Definition at line 199 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(), and Node< SPACE_DIM >::rGetLocation().

Member Data Documentation

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
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 88 of file DistanceMapCalculator.hpp.

Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::PushLocal().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
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 70 of file DistanceMapCalculator.hpp.

Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mHi
private
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mLo
private
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
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 68 of file DistanceMapCalculator.hpp.

Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator(), and DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::~DistanceMapCalculator().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mNumNodes
private

Number of nodes in the mesh

Definition at line 60 of file DistanceMapCalculator.hpp.

Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator().

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mPopCounter
private

Used to check implementation for number of queue pops per calculation

Definition at line 74 of file DistanceMapCalculator.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
AbstractTetrahedralMesh<ELEMENT_DIM, SPACE_DIM>& DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mrMesh
private
template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mRoundCounter
private

Used to check parallel implementation

Definition at line 72 of file DistanceMapCalculator.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
bool DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mSingleTarget
private

True for point-to-point distances.

Definition at line 78 of file DistanceMapCalculator.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
unsigned DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::mTargetNodeIndex
private

Used in the calculation of point-to-point distances.

Definition at line 76 of file DistanceMapCalculator.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
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 80 of file DistanceMapCalculator.hpp.

template<unsigned ELEMENT_DIM, unsigned SPACE_DIM>
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 66 of file DistanceMapCalculator.hpp.

Referenced by DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >::DistanceMapCalculator().


The documentation for this class was generated from the following files: