int NodalAveragingRecoveryModel :: packSharedDofManData(parallelStruct *s, ProcessCommunicator &processComm) { int result = 1, i, j, indx, eq, size; ProcessCommunicatorBuff *pcbuff = processComm.giveProcessCommunicatorBuff(); IntArray const *toSendMap = processComm.giveToSendMap(); size = toSendMap->giveSize(); for ( i = 1; i <= size; i++ ) { // toSendMap contains all shared dofmans with remote partition // one has to check, if particular shared node value is available for given region indx = s->regionNodalNumbers->at( toSendMap->at(i) ); if ( indx ) { // pack "1" to indicate that for given shared node this is a valid contribution result &= pcbuff->packInt(1); result &= pcbuff->packInt( s->regionDofMansConnectivity->at(indx) ); eq = ( indx - 1 ) * s->regionValSize; for ( j = 1; j <= s->regionValSize; j++ ) { result &= pcbuff->packDouble( s->lhs->at(eq + j) ); } } else { // ok shared node is not in active region (determined by s->regionNodalNumbers) result &= pcbuff->packInt(0); } } return result; }
int StructuralEngngModel :: packDofManagers(FloatArray *src, ProcessCommunicator &processComm, bool prescribedEquations) { int result = 1; int i, size; int j, ndofs, eqNum; Domain *domain = this->giveDomain(1); IntArray const *toSendMap = processComm.giveToSendMap(); ProcessCommunicatorBuff *pcbuff = processComm.giveProcessCommunicatorBuff(); DofManager *dman; Dof *jdof; size = toSendMap->giveSize(); for ( i = 1; i <= size; i++ ) { dman = domain->giveDofManager( toSendMap->at(i) ); ndofs = dman->giveNumberOfDofs(); for ( j = 1; j <= ndofs; j++ ) { jdof = dman->giveDof(j); if ( prescribedEquations ) { eqNum = jdof->__givePrescribedEquationNumber(); } else { eqNum = jdof->__giveEquationNumber(); } if ( jdof->isPrimaryDof() && eqNum ) { result &= pcbuff->packDouble( src->at(eqNum) ); } } } return result; }