unsigned int FieldElement::totNumLocalField() const { unsigned int ret = 0; unsigned int nd = numLocalData(); for ( unsigned int i = 0; i < nd; ++i ) ret += numField( i ); return ret; }
unsigned int LocalDataElement::getNode( unsigned int dataId ) const { // Assume numData = 95. DataId = 0-9: 0, DataId=80-89:8, DataId >= 90:9 if ( dataId == ALLDATA ) { if ( numLocalData() > 0 ) { return Shell::myNode(); } else { return 0; // Sure to have some data on node 0. } } return dataId / numPerNode_; }
void Element::putTargetsInDigest( unsigned int srcNum, const MsgFuncBinding& mfb, const FuncOrder& fo, vector< vector< bool > >& targetNodes ) // targetNodes[srcDataId][node] { const Msg* msg = Msg::getMsg( mfb.mid ); vector< vector < Eref > > erefs; if ( msg->e1() == this ) msg->targets( erefs ); else if ( msg->e2() == this ) msg->sources( erefs ); else assert( 0 ); if ( Shell::numNodes() > 1 ) filterOffNodeTargets( localDataStart(), localDataStart() + numLocalData(), isGlobal(), Shell::myNode(), erefs, targetNodes ); for ( unsigned int j = 0; j < erefs.size(); ++j ) { vector< MsgDigest >& md = msgDigest_[ msgBinding_.size() * j + srcNum ]; // k->func(); erefs[ j ]; if ( md.size() == 0 || md.back().func != fo.func() ) { md.push_back( MsgDigest( fo.func(), erefs[j] ) ); /* if ( md.back().targets.size() > 0 ) cout << "putTargetsInDigest: " << md.back().targets[0] << ", eref = " << erefs[j][0] << endl; else cout << "putTargetsInDigest: empty\n"; */ } else { md.back().targets.insert( md.back().targets.end(), erefs[ j ].begin(), erefs[ j ].end() ); } } }
unsigned int GlobalDataElement::getNumOnNode( unsigned int node ) const { return numLocalData(); }
// virtual func. unsigned int GlobalDataElement::numData() const { return numLocalData(); }