OOFEM
2.4
OOFEM.org - Object Oriented Finite Element Solver
|
Class representing communicator for engng model. More...
#include <problemcomm.h>
Public Member Functions | |
ProblemCommunicator (EngngModel *emodel, CommunicatorBuff *b, int rank, int size) | |
Constructor. More... | |
virtual | ~ProblemCommunicator () |
Destructor. More... | |
virtual void | setUpCommunicationMaps (EngngModel *emodel, bool excludeSelfCommFlag, bool forceReinit=false)=0 |
Service for setting up the communication patterns with other remote process. More... | |
virtual int | setProcessCommunicatorToSendArry (ProcessCommunicator *processComm, IntArray &map)=0 |
Assigns given map to given process communicator. More... | |
virtual int | setProcessCommunicatorToRecvArry (ProcessCommunicator *processComm, IntArray &map)=0 |
Assigns given map to given process communicator. More... | |
int | DofManCmp (int, int) |
Global dofManager number comparison function. More... | |
int | ElemCmp (int, int) |
Global element comparison function. More... | |
Public Member Functions inherited from oofem::Communicator | |
Communicator (EngngModel *emodel, CommunicatorBuff *buff, int rank, int size, CommunicatorMode mode=CommMode_Static) | |
Constructor. More... | |
virtual | ~Communicator () |
Destructor. More... | |
ProcessCommunicator * | giveProcessCommunicator (int i) |
Returns i-th problem communicator. More... | |
template<class T > | |
int | packAllData (T *ptr, int(T::*packFunc)(ProcessCommunicator &)) |
Pack all problemCommunicators data to their send buffers. More... | |
template<class T , class P > | |
int | packAllData (T *ptr, P *src, int(T::*packFunc)(P *, ProcessCommunicator &)) |
Pack all problemCommuncators data to their send buffers. More... | |
template<class T > | |
int | unpackAllData (T *ptr, int(T::*unpackFunc)(ProcessCommunicator &)) |
Unpack all problemCommuncators data from recv buffers. More... | |
template<class T , class P > | |
int | unpackAllData (T *ptr, P *src, int(T::*unpackFunc)(P *, ProcessCommunicator &)) |
Unpack all problemCommuncators data from recv buffers. More... | |
int | initExchange (int tag) |
Initializes data exchange with all problems. More... | |
int | initSend (int tag) |
Initializes data send exchange with all problems. More... | |
int | initReceive (int tag) |
Initializes data receive exchange with all problems. More... | |
int | finishExchange () |
Finishes the exchange. More... | |
void | clearBuffers () |
Clears all buffer content. More... | |
virtual void | setUpCommunicationMaps (EngngModel *pm) |
Service for setting up the communication patterns with other remote processes. More... | |
std::string | errorInfo (const char *func) const |
Returns string for prepending output (used by error reporting macros). More... | |
Protected Member Functions | |
void | sortCommMap (IntArray &map, int(ProblemCommunicator::*cmp)(int, int)) |
Sorts given communication map, containing local DofManager numbers according to their corresponding global numbers. More... | |
void | quickSortCommMap (IntArray &map, int l, int r, int(ProblemCommunicator::*cmp)(int, int)) |
Implementation of quicksort algorithm. More... | |
int | quickSortPartition (IntArray &map, int l, int r, int(ProblemCommunicator::*cmp)(int, int)) |
Partitioning used in quicksort. More... | |
Protected Attributes | |
bool | initialized |
Protected Attributes inherited from oofem::Communicator | |
int | rank |
Rank of process. More... | |
int | size |
Number of processes. More... | |
ProcessCommunicator ** | processComms |
Array of process communicators. More... | |
EngngModel * | engngModel |
Engineering model. More... | |
CommunicatorMode | mode |
Mode. More... | |
Class representing communicator for engng model.
It is assumed to be an attribute of an engineering model. The communicator provides all services for communication with associated remote partitions. It manages several process communicators.
Definition at line 50 of file problemcomm.h.
oofem::ProblemCommunicator::ProblemCommunicator | ( | EngngModel * | emodel, |
CommunicatorBuff * | b, | ||
int | rank, | ||
int | size | ||
) |
Constructor.
emodel | Associated engineering model. |
b | Buffer object. |
rank | Rank of associated partition. |
size | Number of collaborating processes. |
Definition at line 49 of file problemcomm.C.
References initialized.
|
virtual |
Destructor.
Definition at line 56 of file problemcomm.C.
int oofem::ProblemCommunicator::DofManCmp | ( | int | i, |
int | j | ||
) |
Global dofManager number comparison function.
Definition at line 456 of file problemcomm.C.
References oofem::Communicator::engngModel, oofem::Domain::giveDofManager(), oofem::EngngModel::giveDomain(), and oofem::DofManager::giveGlobalNumber().
Referenced by oofem::NodeCommunicator::setProcessCommunicatorToRecvArry(), and oofem::NodeCommunicator::setProcessCommunicatorToSendArry().
int oofem::ProblemCommunicator::ElemCmp | ( | int | i, |
int | j | ||
) |
Global element comparison function.
Definition at line 462 of file problemcomm.C.
References oofem::Communicator::engngModel, oofem::EngngModel::giveDomain(), oofem::Domain::giveElement(), and oofem::Element::giveGlobalNumber().
Referenced by oofem::ElementCommunicator::setProcessCommunicatorToRecvArry(), and oofem::ElementCommunicator::setProcessCommunicatorToSendArry().
|
protected |
Implementation of quicksort algorithm.
Definition at line 409 of file problemcomm.C.
References quickSortPartition().
Referenced by sortCommMap().
|
protected |
Partitioning used in quicksort.
Definition at line 422 of file problemcomm.C.
References oofem::IntArray::at().
Referenced by quickSortCommMap().
|
pure virtual |
Assigns given map to given process communicator.
Sorts map according to global entity (dofmanagers or element) numbers to ensure, that local and corresponding remote process have the identical map with same ordering. This will ensure proper packing/unpacking order. The corresponding processCommunicator buffer takes care about resizing itself accordingly to hold all outgoing/incoming data using engngModel->estimateMaxPackSize service.
processComm | Process comm which received map will be set. |
map | Received map. |
Implemented in oofem::ElementCommunicator, and oofem::NodeCommunicator.
|
pure virtual |
Assigns given map to given process communicator.
Sorts map according to global entity (dofmanagers or element) numbers to ensure, that local and corresponding remote process have the identical map with same ordering. This will ensure proper packing/unpacking order. The corresponding processCommunicator buffer takes care about resizing itself accordingly to hold all outgoing/incoming data using engngModel->estimateMaxPackSize service.
processComm | Domain comm which send map will be set. |
map | Send map. |
Implemented in oofem::ElementCommunicator, and oofem::NodeCommunicator.
|
pure virtual |
Service for setting up the communication patterns with other remote process.
Sets up the toSend and toRecv attributes in associated process communicators.
emodel | Associated engineering model. |
excludeSelfCommFlag | If set to true, the communication map of receiver with itself will be forced to be empty, otherwise it will be assembled. |
forceReinit | Forces reinitilaization. |
Implemented in oofem::ElementCommunicator, and oofem::NodeCommunicator.
Referenced by oofem::DirectErrorIndicatorRC::estimateMeshDensities(), oofem::EngngModel::initializeCommMaps(), and oofem::StaticStructural::solveYourself().
|
protected |
Sorts given communication map, containing local DofManager numbers according to their corresponding global numbers.
It could not be sorted by standard techniques, because it is necessary to ask DofMAnager form domain and determine its global Number.
map | Map to sort. |
cmp | Comparison function must return a negative value if first argument is less than the second, zero if the arguments are equal, and a positive number otherwise. |
Definition at line 402 of file problemcomm.C.
References oofem::IntArray::giveSize(), and quickSortCommMap().
Referenced by oofem::NodeCommunicator::setProcessCommunicatorToRecvArry(), oofem::ElementCommunicator::setProcessCommunicatorToRecvArry(), oofem::NodeCommunicator::setProcessCommunicatorToSendArry(), and oofem::ElementCommunicator::setProcessCommunicatorToSendArry().
|
protected |
Definition at line 53 of file problemcomm.h.
Referenced by ProblemCommunicator(), oofem::NodeCommunicator::setUpCommunicationMaps(), and oofem::ElementCommunicator::setUpCommunicationMaps().