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

#include <DistanceMapCalculator.hpp>

Collaboration diagram for DistanceMapCalculator< ELEMENT_DIM, SPACE_DIM >:

List of all members.

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 138 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 
) [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

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 
)

Calculates a 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: