本文整理汇总了C++中ProcessCommunicatorBuff::read方法的典型用法代码示例。如果您正苦于以下问题:C++ ProcessCommunicatorBuff::read方法的具体用法?C++ ProcessCommunicatorBuff::read怎么用?C++ ProcessCommunicatorBuff::read使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProcessCommunicatorBuff
的用法示例。
在下文中一共展示了ProcessCommunicatorBuff::read方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: unpackSharedDofManData
int
SPRNodalRecoveryModel :: unpackSharedDofManData(parallelStruct *s, ProcessCommunicator &processComm)
{
int result = 1;
int i, j, eq, indx, size, flag;
IntArray const *toRecvMap = processComm.giveToRecvMap();
ProcessCommunicatorBuff *pcbuff = processComm.giveProcessCommunicatorBuff();
double value;
size = toRecvMap->giveSize();
for ( i = 1; i <= size; i++ ) {
indx = s->regionNodalNumbers->at( toRecvMap->at(i) );
// toRecvMap contains all shared dofmans with remote partition
// one has to check, if particular shared node received contribution is available for given region
result &= pcbuff->read(flag);
if ( flag ) {
// "1" to indicates that for given shared node this is a valid contribution
eq = ( indx - 1 ) * s->regionValSize;
for ( j = 1; j <= s->regionValSize; j++ ) {
result &= pcbuff->read(value);
if ( indx ) {
s->dofManValues->at(eq + j) += value;
}
}
if ( indx ) {
s->dofManPatchCount->at(indx)++;
}
}
}
return result;
}
示例2: unpackSharedDofManData
int
NodalAveragingRecoveryModel :: unpackSharedDofManData(parallelStruct *s, ProcessCommunicator &processComm)
{
int result = 1;
int size, flag, intValue;
IntArray const *toRecvMap = processComm.giveToRecvMap();
ProcessCommunicatorBuff *pcbuff = processComm.giveProcessCommunicatorBuff();
double value;
size = toRecvMap->giveSize();
for ( int i = 1; i <= size; i++ ) {
int indx = s->regionNodalNumbers->at( toRecvMap->at(i) );
// toRecvMap contains all shared dofmans with remote partition
// one has to check, if particular shared node received contribution is available for given region
result &= pcbuff->read(flag);
if ( flag ) {
// "1" to indicates that for given shared node this is a valid contribution
result &= pcbuff->read(intValue);
// now check if we have a valid number
if ( indx ) {
s->regionDofMansConnectivity->at(indx) += intValue;
}
int eq = ( indx - 1 ) * s->regionValSize;
for ( int j = 1; j <= s->regionValSize; j++ ) {
result &= pcbuff->read(value);
if ( indx ) {
s->lhs->at(eq + j) += value;
}
}
}
}
return result;
}
示例3: unpackSharedDmanPartitions
int
ParmetisLoadBalancer :: unpackSharedDmanPartitions(ProcessCommunicator &pc)
{
int myrank = domain->giveEngngModel()->giveRank();
int iproc = pc.giveRank();
int _globnum, _locnum;
IntArray _partitions;
if ( iproc == myrank ) {
return 1; // skip local partition
}
// query process communicator to use
ProcessCommunicatorBuff *pcbuff = pc.giveProcessCommunicatorBuff();
// init domain global2local map
domain->initGlobalDofManMap();
pcbuff->read(_globnum);
// unpack dofman data
while ( _globnum != PARMETISLB_END_DATA ) {
_partitions.restoreYourself(*pcbuff);
if ( ( _locnum = domain->dofmanGlobal2Local(_globnum) ) ) {
this->addSharedDofmanPartitions(_locnum, _partitions);
} else {
OOFEM_ERROR("internal error, unknown global dofman %d", _globnum);
}
/*
* fprintf (stderr,"[%d] Received shared plist of %d ", myrank, _globnum);
* for (int _i=1; _i<=dofManPartitions[_locnum-1].giveSize(); _i++)
* fprintf (stderr,"%d ", dofManPartitions[_locnum-1].at(_i));
* fprintf (stderr,"\n");
*/
pcbuff->read(_globnum);
}
return 1;
}