Dune Core Modules (2.6.0)

Dune::Torus< CollectiveCommunication, d > Class Template Reference

#include <dune/grid/yaspgrid/torus.hh>

Classes

class  ProcListIterator
 

Public Types

typedef std::array< int, d > iTupel
 type used to pass tupels in and out
 

Public Member Functions

 Torus ()
 constructor making uninitialized object
 
 Torus (CollectiveCommunication comm, int tag, iTupel size, const YLoadBalance< d > *lb)
 make partitioner from communicator and coarse mesh size
 
int rank () const
 return own rank
 
iTupel coord () const
 return own coordinates
 
int procs () const
 return number of processes
 
const iTupeldims () const
 return dimensions of torus
 
int dims (int i) const
 return dimensions of torus in direction i
 
CollectiveCommunication comm () const
 return communicator
 
int tag () const
 return tag used by torus
 
bool inside (iTupel c) const
 return true if coordinate is inside torus
 
iTupel rank_to_coord (int rank) const
 map rank to coordinate in torus using lexicographic ordering
 
int coord_to_rank (iTupel coord) const
 map coordinate in torus to rank using lexicographic ordering
 
int rank_relative (int rank, int dir, int cnt) const
 return rank of process where its coordinate in direction dir has offset cnt (handles periodic case)
 
int color (const iTupel &coord) const
 assign color to given coordinate
 
int color (int rank) const
 assign color to given rank
 
int neighbors () const
 return the number of neighbors, which is \(3^d-1\)
 
bool is_neighbor (iTupel delta, std::bitset< d > periodic) const
 return true if neighbor with given delta is a neighbor under the given periodicity
 
double partition (int rank, iTupel origin_in, iTupel size_in, iTupel &origin_out, iTupel &size_out) const
 partition the given grid onto the torus and return the piece of the process with given rank; returns load imbalance More...
 
ProcListIterator sendbegin () const
 first process in send list
 
ProcListIterator sendend () const
 end of send list
 
ProcListIterator recvbegin () const
 first process in receive list
 
ProcListIterator recvend () const
 last process in receive list
 
void send (int rank, void *buffer, int size) const
 store a send request; buffers are sent in order; handles also local requests with memcpy
 
void recv (int rank, void *buffer, int size) const
 store a receive request; buffers are received in order; handles also local requests with memcpy
 
void exchange () const
 exchange messages stored in request buffers; clear request buffers afterwards
 
double global_max (double x) const
 global max
 
void print (std::ostream &s) const
 print contents of torus object
 

Detailed Description

template<class CollectiveCommunication, int d>
class Dune::Torus< CollectiveCommunication, d >

Torus provides all the functionality to handle a toroidal communication structure:

  • Map a set of processes (given by an MPI communicator) to a torus of dimension d. The "optimal" torus dimensions are determined by a coarse mesh. The maximum side length is minimized.
  • Provide lists of neighboring processes and a method for nearest neighbor exchange using asynchronous communication with MPI. The periodic case is handled where one process might have to exchange several messages with the same process. (Logically, a process has always \(3^d-1\) neighbors, but several of these logical neighbors might be identical)
  • Provide means to partition a grid to the torus.

Member Function Documentation

◆ partition()

template<class CollectiveCommunication , int d>
double Dune::Torus< CollectiveCommunication, d >::partition ( int  rank,
iTupel  origin_in,
iTupel  size_in,
iTupel origin_out,
iTupel size_out 
) const
inline

partition the given grid onto the torus and return the piece of the process with given rank; returns load imbalance

Parameters
rankrank of our processor
origin_inglobal origin
size_inglobal size
origin_outorigin of this processors interior
size_outsize of this processors interior

References Dune::Torus< CollectiveCommunication, d >::coord(), Dune::Torus< CollectiveCommunication, d >::rank(), Dune::Torus< CollectiveCommunication, d >::rank_to_coord(), and Dune::CollectiveCommunication< Communicator >::size().


The documentation for this class was generated from the following file:
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden  |  generated with Hugo v0.80.0 (Apr 19, 22:31, 2024)