C++ mpi module for stochmagnet_main Package
Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
MPI_DirectionalGridEnvironment< N, D > Class Template Reference

This class is a grid Environment of templated dimension N=1,2,3. More...

#include <MPI_DirectionalGridEnvironment.h>

Inheritance diagram for MPI_DirectionalGridEnvironment< N, D >:
Inheritance graph
[legend]
Collaboration diagram for MPI_DirectionalGridEnvironment< N, D >:
Collaboration graph
[legend]

Public Member Functions

virtual tMemSize getMemorySize () const override
 return the memory size of the class
 
virtual tMemSize getContentsMemorySize () const override
 return the memory size of the included associations More...
 
constexpr tUCInt GetNeighborsDepth ()
 get the depth of neighbors
 
void getFaceNeighbors (std::array< tMPICoreId, 2 *N > &neighbors) const
 get the coreId in canonical face More...
 
tMPICoreId getDirectionalNeighbor (const std::array< tCInt, N > &dir) const
 get the neighbor core in the dierction dir More...
 
tMPICoreId getDirectionalNeighbor (const tUCInt &dirIndex) const
 get the neighbor core More...
 
const std::map< tUCInt, tMPICoreId > & getDirectionalNeighbors () const
 get the neighbor cores in all directions More...
 
void setDirectionalNeighbors (const std::map< tUCInt, tMPICoreId > &neighbors)
 set neighbors grids per face More...
 
virtual void initialize ()
 initialize the environment More...
 
- Public Member Functions inherited from MPI_GridEnvironment< N >
template<typename Q >
void setGridSize (const std::array< Q, N > &Ns)
 get the grids number More...
 
const std::array< tMPICoreId, N > & getGridSize () const
 get the grids number
 
template<typename Q >
void setIndices (const std::array< Q, N > &indices)
 set the indices of the current core More...
 
const std::array< tMPICoreId, N > & getIndices () const
 get the indices of the current core within the grid environment
 
const std::array< tBoolean, N > & getGridPeriodicity () const
 return the periodicity of the grid
 
const tBoolean & isPeriodic (const tUCInt &k) const
 return true if the grid is periodic in direction k More...
 
template<typename Q >
void setGridPeriodicity (const std::array< Q, N > &Ts)
 set grid periodicity More...
 
tMPIError getCoreIdAtIndices (const std::array< tMPICoreId, N > &indices, tMPICoreId &coreId) const
 the core id within the grid at indices More...
 
tMPIError getCoreIndices (const tMPICoreId &coreId, std::array< tMPICoreId, N > &indices) const
 get the indices of the core with coreId More...
 
- Public Member Functions inherited from MPI_Environment
const tMPIComm & getWorld () const
 get the world of the environment for reading
 
tMPIComm & getWorld ()
 get the world of the environment for reading
 
const tMPICoreId & getCoresNumber () const
 get the number of cores of this environment of common environment More...
 
const tMPICoreId & getCoreId () const
 get the id of the current process of this environment More...
 
tMPIError abort (const tMPIError &errCode) const
 abort the process on all cores with the error code More...
 
tBoolean synchronize () const
 wait that all the cores has finished her job
 
tBoolean isMessageAvaliable (tMPICoreId &source, tMPITag &tag, tMPIBoolean &isAvailable, tMPIStatus &status) const
 test if the message is available frm the environment this More...
 
- Public Member Functions inherited from CORE_Object
template<class T >
std::shared_ptr< T > getSharedPointer ()
 return the shared pointer for this More...
 
template<class T >
std::shared_ptr< const T > getConstSharedPointer () const
 return a const shared pointer for this More...
 
template<class T >
tBoolean isInstanceOf () const
 test if the clas T is an instance of this class More...
 
tString getClassName () const
 return the name of the class More...
 
tString getPointerString () const
 retrun the pointer of the class as a string More...
 
tString getIdentityString () const
 retrun the string identification of the class More...
 
virtual tString toString () const
 return the string representation of the object node More...
 

Static Public Member Functions

static CORE_UniquePointer< SelfClassNew (const std::array< tMPICoreId, N > &nCoresPerDirection, int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a new cart environment More...
 
static tUCInt GetMaximumDirectionalNeighborsNumber ()
 get the maximum direction number : (2*D+1)^N when D is the neighbor Depth (D=0,1,2)
 
static tUCInt GetFaceDirectionalIndex (const tUCInt &f, std::array< tCInt, N > &dir)
 get the face index in direction More...
 
static tUCInt GetFaceDirectionalIndex (const tUCInt &f)
 get the face index in direction More...
 
static void GetDirection (const tUCInt &index, std::array< tCInt, N > &dir)
 get the direction dir from index: index=dir[0]+1+D*(dir[1]+1+3*(dir[2]+1)) in {0,27} More...
 
static tUCInt GetDirectionIndex (const std::array< tCInt, N > &dir)
 get the direction index from dir index=dir[0]+1+3*(dir[1]+1+3*(dir[2]+1)) in {0,27} More...
 
- Static Public Member Functions inherited from MPI_GridEnvironment< N >
static CORE_UniquePointer< SelfClassNew (const std::array< tMPICoreId, N > &nCoresPerDirection, int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a new cart environment More...
 
static tMPIError ComputeGridSize (const MPI_Environment &parent, std::array< tMPICoreId, N > &coresNumber)
 get the cores number per direction if possible More...
 
static tMPIError ComputeGridSize (const tMPICoreId &nAvailableCores, std::array< tMPICoreId, N > &coresNumber)
 get the cores number per direction if possible More...
 
static tBoolean ComputeGridSize (const std::array< tReal, N > &Hs, const std::array< tInteger, N > &Ns, const tMPICoreId &nCores, std::array< tMPICoreId, N > &Gs)
 compute the grid size in order to minimize the ratio S/V where S is the surface of 1 cpu block and V the volume on 1 cpu block More...
 
- Static Public Member Functions inherited from MPI_Environment
static CORE_UniquePointer< MPI_EnvironmentNew (int argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a test class More...
 
static CORE_UniquePointer< MPI_EnvironmentNew (int argc, char *argv[])
 create a test class More...
 
static void GetCoresNumber (tMPICoreId &coresNumber)
 get the number of cores More...
 
static void GetCoresNumber (const MPI_Environment &env, tMPICoreId &coresNumber)
 get the number of cores More...
 
static void GetCoreId (tMPICoreId &id)
 get the id of the current process of common environment More...
 
static void GetCoreId (const MPI_Environment &env, tMPICoreId &id)
 get the id of the current process of common environment More...
 
static tReal GetTime ()
 get the time More...
 
static tMPIError Abort (const MPI_Environment &env, const tMPIError &errCode)
 abort the process on all cores of the environment with the eroor code More...
 
static tMPIError Abort (const tMPIError &errCode)
 abort the process on all cores with the error code More...
 
static tBoolean Synchronize (const MPI_Environment &env)
 wait that all the core of an environment has finished her job More...
 
static tBoolean Synchronize ()
 wait that all the cores has finished her job
 
static tBoolean Wait (tMPIRequest &request, tMPIStatus &status)
 wait the end the the communication by blocking More...
 
static tBoolean Wait (tMPIRequest &request)
 wait for the request is finished More...
 
static tBoolean WaitAll (const tMPICount &nRequests, tMPIRequest requests[], tMPIStatus statuses[])
 wait the end the the communication by blocking More...
 
static tBoolean WaitAll (std::valarray< tMPIRequest > &requests)
 wait for all the requests are finished More...
 
template<size_t D>
static tBoolean WaitAll (std::array< tMPIRequest, D > &requests)
 wait for all the requests are finished More...
 
static tBoolean WaitAll (const tMPICount &nRequests, tMPIRequest *requests)
 wait for all the requests are finished More...
 
static tBoolean IsFinished (tMPIRequest &request, tMPIInteger &isFinished)
 test if the requets is finished More...
 
static tBoolean IsAllFinished (std::valarray< tMPIRequest > &requests, tMPIInteger &isFinished)
 test if the requets is finished More...
 
static tBoolean IsFinished (tMPIRequest &request, tMPIStatus &status, tMPIInteger &isFinished)
 return true if the communication is finished More...
 
static tBoolean IsMessageAvaliable (const MPI_Environment &env, tMPICoreId &source, tMPITag &tag, tMPIBoolean &isAvailable, tMPIStatus &status)
 test if a message is available form any tag and any source More...
 
static tBoolean IsMessageAvaliable (const MPI_Environment &env, const tMPITag &tag, const tMPICoreId &source, tMPIBoolean &isAvailable)
 test if the message with tag from source is available More...
 
static tBoolean IsTagMessageAvaliable (const MPI_Environment &env, const tMPITag &tag, tMPICoreId &source, tMPIBoolean &isAvailable, tMPIStatus &status)
 test if the message with tag is avalaible More...
 
template<typename T >
static tBoolean GetCount (const tMPIStatus &status, tMPICount &nElements)
 get the number of element of the message More...
 
- Static Public Member Functions inherited from CORE_Object
static tBoolean EnableMemoryStack (const tBoolean &isMemoryChecked)
 enable the memory stack More...
 
static void EnableMemoryStack ()
 enable the memory stack
 
static void DisableMemoryStack ()
 disable the memory stack
 
static tBoolean IsMemoryStackEnabled ()
 return trur if the memory stack is enabled
 
static tString MemoryStackToString ()
 get the memory stack in string More...
 
static tIndex GetRegisteredClassesNumber ()
 get the memory stack in string More...
 

Protected Member Functions

 MPI_DirectionalGridEnvironment ()
 create a root environment
 
 MPI_DirectionalGridEnvironment (int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a root environment More...
 
virtual ~MPI_DirectionalGridEnvironment (void)
 destroy
 
- Protected Member Functions inherited from MPI_GridEnvironment< N >
 MPI_GridEnvironment ()
 create a root environment
 
 MPI_GridEnvironment (int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a root environment More...
 
virtual ~MPI_GridEnvironment (void)
 destroy
 
- Protected Member Functions inherited from MPI_Environment
 MPI_Environment ()
 create a root environment
 
 MPI_Environment (int &argc, char *argv[], const tBoolean &isOpenMPEnabled)
 create a root environment More...
 
virtual ~MPI_Environment (void)
 destroy
 
void setIsRootEnvironment (const tBoolean &isRoot)
 set true when the environemnt created is a root one but not a common world
 
- Protected Member Functions inherited from MPI_Object
 MPI_Object (void)
 create
 
virtual ~MPI_Object (void)
 destroy
 
- Protected Member Functions inherited from CORE_Object
 CORE_Object ()
 build an instance of the object
 
virtual ~CORE_Object ()
 destroy the instance of object std

 

Detailed Description

template<tUCInt N, tUCInt D = 1>
class MPI_DirectionalGridEnvironment< N, D >

This class is a grid Environment of templated dimension N=1,2,3.

Template Parameters
N: size of the grid
Dneighbor depth

To create a grid from a pranet environment call MPI_GridEnvironment::New(const MPI_Environment& parent,const std::array<tMPICoreId,N>& nCoresPerDirections,const std::array<tBoolean,N>& isPeriodicPerDirections,const tBoolean& canCoreIdBeChanged) .

the nCoresPerDirections array can be set to 0 and it can be built by the method GetGridsNumber(parent.getCoresNumber(),nCoresPerDirections).

To get the indices & thge coreId of the current process per direction, call the method getCoreId(std::array<tMPICoreId,N>& indices,tMPICoreId& coreId) :

To get the coordinates of a process within the grid, call the method getIndices(std::array<tMPICoreId,N>& indices

To create an hyperplan of the grid call New(onst MPI_GridEnvironment<N>& parent,const tUCInt& dir) where dir is the normal of the hyperplan

Author
Stephane Despreaux
Version
2.0

Constructor & Destructor Documentation

◆ MPI_DirectionalGridEnvironment()

template<tUCInt N, tUCInt D = 1>
MPI_DirectionalGridEnvironment< N, D >::MPI_DirectionalGridEnvironment ( int &  argc,
char *  argv[],
const tBoolean &  isOpenMPEnabled 
)
inlineprotected

create a root environment

Parameters
[in]argc: number of arguments
[in]argv: values of arguments
[in]isOpenMPEnabledenable both OpenMP & MPI

It choose MPI_THREAD_FUNNELED by default.

  • MPI_THREAD_SINGLE: Only one thread will execute.
  • MPI_THREAD_FUNNELED: The process may be multi-threaded, but only the main thread will make MPI calls.
  • MPI_THREAD_SERIALIZED: The process may be multi-threaded, and multiple threads may make MPI calls, but only one at a time: MPI calls are not made concurrently from two distinct threads.
  • MPI_THREAD_MULTIPLE: Multiple threads may call MPI, with no restrictions.

Member Function Documentation

◆ getContentsMemorySize()

template<tUCInt N, tUCInt D = 1>
virtual tMemSize MPI_DirectionalGridEnvironment< N, D >::getContentsMemorySize ( ) const
inlineoverridevirtual

return the memory size of the included associations

Returns
the memory size of the storage in bytes 1 Kb = 1024 bytes 1 Mb = 1024 Kb 1 Gb = 1024 Mb 1 Tb = 1024 Gb 1 Hb = 1024 Tb

Reimplemented from MPI_GridEnvironment< N >.

◆ GetDirection()

template<tUCInt N, tUCInt D = 1>
static void MPI_DirectionalGridEnvironment< N, D >::GetDirection ( const tUCInt &  index,
std::array< tCInt, N > &  dir 
)
inlinestatic

get the direction dir from index: index=dir[0]+1+D*(dir[1]+1+3*(dir[2]+1)) in {0,27}

Parameters
[in]index: index
[out]dir: dir values

◆ getDirectionalNeighbor() [1/2]

template<tUCInt N, tUCInt D = 1>
tMPICoreId MPI_DirectionalGridEnvironment< N, D >::getDirectionalNeighbor ( const std::array< tCInt, N > &  dir) const
inline

get the neighbor core in the dierction dir

Parameters
[in]dirdirection the the k-th direction dir[k] in {-D,...,0,...,D}
Returns
the null core id NULL_CORE if direction is unvalid or no core

◆ getDirectionalNeighbor() [2/2]

template<tUCInt N, tUCInt D = 1>
tMPICoreId MPI_DirectionalGridEnvironment< N, D >::getDirectionalNeighbor ( const tUCInt &  dirIndex) const
inline

get the neighbor core

Parameters
[in]dirINdexindex of the dierction
Returns
the null core id NULL_CORE if direction is unvalid or no core

◆ getDirectionalNeighbors()

template<tUCInt N, tUCInt D = 1>
const std::map<tUCInt,tMPICoreId>& MPI_DirectionalGridEnvironment< N, D >::getDirectionalNeighbors ( ) const
inline

get the neighbor cores in all directions

Returns
the neihbors grids in all direction D where Dk in {-1,0,1

◆ GetDirectionIndex()

template<tUCInt N, tUCInt D = 1>
static tUCInt MPI_DirectionalGridEnvironment< N, D >::GetDirectionIndex ( const std::array< tCInt, N > &  dir)
inlinestatic

get the direction index from dir index=dir[0]+1+3*(dir[1]+1+3*(dir[2]+1)) in {0,27}

Parameters
[in]dir: dierction vector return the index of the dircetion

◆ GetFaceDirectionalIndex() [1/2]

template<tUCInt N, tUCInt D = 1>
static tUCInt MPI_DirectionalGridEnvironment< N, D >::GetFaceDirectionalIndex ( const tUCInt &  f)
inlinestatic

get the face index in direction

Parameters
[in]findex of face f= 2*k+eps : 2 faces per dierction k
Returns
the index of the canonical dierction

◆ GetFaceDirectionalIndex() [2/2]

template<tUCInt N, tUCInt D = 1>
static tUCInt MPI_DirectionalGridEnvironment< N, D >::GetFaceDirectionalIndex ( const tUCInt &  f,
std::array< tCInt, N > &  dir 
)
inlinestatic

get the face index in direction

Parameters
[in]findex of face f= 2*k+eps : 2 faces per dierction k
[out]dirdirections of the face per direction
Returns
the index of the canonical dierction

◆ getFaceNeighbors()

template<tUCInt N, tUCInt D = 1>
void MPI_DirectionalGridEnvironment< N, D >::getFaceNeighbors ( std::array< tMPICoreId, 2 *N > &  neighbors) const
inline

get the coreId in canonical face

Parameters
[out]neigbors: list of core id of the neighbor cores

◆ initialize()

template<tUCInt N, tUCInt D = 1>
virtual void MPI_DirectionalGridEnvironment< N, D >::initialize ( )
inlinevirtual

initialize the environment

  • Sets the cores number & core id of the core
  • Sets the grid size , the indice of the core within the grid size
  • Sets the periodicity of the grid

Reimplemented from MPI_GridEnvironment< N >.

Reimplemented in MPI_GraphGridEnvironment< N, D >, and MPI_CartEnvironment< N, D >.

◆ New()

template<tUCInt N, tUCInt D = 1>
static CORE_UniquePointer<SelfClass> MPI_DirectionalGridEnvironment< N, D >::New ( const std::array< tMPICoreId, N > &  nCoresPerDirection,
int &  argc,
char *  argv[],
const tBoolean &  isOpenMPEnabled 
)
inlinestatic

create a new cart environment

Parameters
[in]nCoresPerDirection: an array of size nDirections with the number of cores per direction
[in]argc: number of arguments
[in]argv: values of arguments
[in]isOpenMPEnabledenable both OpenMP & MPI
Returns
a new grid environment

◆ setDirectionalNeighbors()

template<tUCInt N, tUCInt D = 1>
void MPI_DirectionalGridEnvironment< N, D >::setDirectionalNeighbors ( const std::map< tUCInt, tMPICoreId > &  neighbors)
inline

set neighbors grids per face

Parameters
[in]neighbors: neighbor core id per face

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