FEI Version of the Day

#include <fei_EqnCommMgr.hpp>
Public Member Functions  
EqnCommMgr (MPI_Comm comm, bool accumulate=true)  
EqnCommMgr (const EqnCommMgr &src)  
EqnCommMgr &  operator= (const EqnCommMgr &src) 
virtual  ~EqnCommMgr () 
EqnCommMgr *  deepCopy () 
size_t  getNumSharingProcs () 
size_t  getNumOwnerProcs () 
void  addLocalEqn (int eqnNumber, int srcProc) 
int  mirrorProcEqns (ProcEqns &inProcEqns, ProcEqns &outProcEqns) 
int  mirrorProcEqnLengths (ProcEqns &inProcEqns, ProcEqns &outProcEqns) 
The EqnCommMgr (Equation communication manager) class is responsible for keeping track of equations that require communications. There are two types of equations in this class:
1. Local equations which remote processors contribute to (e.g., because they share some local active nodes).
2. Remote equations that the local processor contributes to (the mirror of case 1.).
Usage Notes:
1. You can't call exchangeEqns until after exchangeIndices has been called. 2. You can't call addSolnValues until after exchangeIndices has been called.
In general, usage will proceed like this:
in snl_fei::Structure::initComplete: addLocalEqn (a bunch of times, probably) addRemoteIndices (also a bunch of times)
exchangeIndices
getNumLocalEqns localEqnNumbers localIndicesPtr
in Filter::sumInElem/sumInElemMatrix/sumInElemRHS addRemoteEqn and/or addRemoteRHS
in Filter::exchangeRemoteEquations exchangeEqns getNumLocalEqns recvEqnNumbersPtr localIndicesPtr localCoefsPtr localRHSsPtr
in Filter::unpackSolution getNumLocalEqns localEqnNumbers addSolnValues exchangeSoln
in Filter various getSoln functions getNumSendEqns sendEqnNumbersPtr sendEqnSolnPtr
This class also provides general support functions for exchanging equations among processors. At the start of an alltoall exchange, all processors usually know which equations they need to receive, and which processors they'll be receiving from, OR they know which equations they need to send, and which processors they'll be sending to. Usually they don't know both the sending and receiving information though. This eqnprocessor pairing information (for either the "recvequations" or the "sendequations") is held in a ProcEqns object. Thus, an alltoall exchange of equation data requires two ProcEqns objects  one holding the recv info, the other holding the send info.
An EqnCommMgr function (mirrorProcEqns) is provided which does the communications necessary to populate the 'send' ProcEqns object given a populated 'recv' ProcEqns object, or viceversa. Note that at this point, the equationlengths need not be known by either the sending or the receiving processors.
Once the ProcEqns objects have been correctly mirrored, another EqnCommMgr function (mirrorProcEqnLengths) is available for mirroring the eqnlength data from one ProcEqns object to the other.
The next step is: given equations (with all associated data) that we need to send, along with previously known equationnumbers that we need to receive, an EqnCommMgr function (exchangeEqnBuffers) is provided to first send the equationlengths to the receiving processors, followed by the actual equation data. At this point the exchange is complete. The equation data is supplied/returned in EqnBuffer objects.
Definition at line 104 of file fei_EqnCommMgr.hpp.
EqnCommMgr::EqnCommMgr  (  MPI_Comm  comm, 
bool  accumulate = true 

) 
Constructor.
localProc  The MPI rank of 'this' processor. 
Definition at line 28 of file fei_EqnCommMgr.cpp.
EqnCommMgr::EqnCommMgr  (  const EqnCommMgr &  src  ) 
copy constructor
Definition at line 51 of file fei_EqnCommMgr.cpp.
EqnCommMgr::~EqnCommMgr  (  )  [virtual] 
Destructor.
Definition at line 68 of file fei_EqnCommMgr.cpp.
EqnCommMgr & EqnCommMgr::operator=  (  const EqnCommMgr &  src  ) 
assignment operator
Definition at line 79 of file fei_EqnCommMgr.cpp.
EqnCommMgr * EqnCommMgr::deepCopy  (  ) 
Produce a clone of 'this' object, including all of its internal data.
Definition at line 118 of file fei_EqnCommMgr.cpp.
size_t EqnCommMgr::getNumSharingProcs  (  )  [inline] 
return the number of processors that share (contribute to) equations that are locally owned.
Definition at line 126 of file fei_EqnCommMgr.hpp.
size_t EqnCommMgr::getNumOwnerProcs  (  )  [inline] 
return the number of processors that own equations that we share (equations that we contribute to).
Definition at line 132 of file fei_EqnCommMgr.hpp.
void EqnCommMgr::addLocalEqn  (  int  eqnNumber, 
int  srcProc  
) 
add a local equation to which a remote processor will be contributing.
Definition at line 131 of file fei_EqnCommMgr.cpp.
Support function to set up information needed for exchanging equation info among processors. Beginning assumption: we (the local processor) have a populated ProcEqns object (inProcEqns) which contains information pairing certain equations with certain remote processors. These can be equations that we will be receiving in an alltoall exchange, or equations that we will be sending in an alltoall exchange. In either case, the "mirror" of that information is needed before the exchange can be performed. i.e., if we know which eqns we'll be sending, then the mirror info concerns the eqns we'll be recv'ing, and viceversa if we already know which eqns we'll be recv'ing.
This function is to obtain that mirror info, and return it in outProcEqns. Given a populated ProcEqns object, we want to populate the mirror ProcEqns object. Note that this function IGNORES any equation lengths, if they are present. i.e., the eqnlength info in 'inProcEqns' is not referenced, and on completion the eqnlength info in 'outProcEqns' is not populated.
inProcEqns  Contains the input equationnumbers and associated processors. 
outProcEqns  Output. 
Definition at line 744 of file fei_EqnCommMgr.cpp.
Support function to set up information needed for exchanging equation info among processors. This function plays a similar role to that of the above 'mirrorProcEqns' function, but exchanges the length information rather than the equationnumber information. THIS FUNCTION ASSUMES that both inProcEqns and outProcEqns are already populated with eqnnumber information.
inProcEqns  Contains equationnumbers, and their associated lengths. 
outProcEqns  Input/Output. On entry, contains the equationnumbers (but not their lengths. 
Definition at line 854 of file fei_EqnCommMgr.cpp.