MPI问题
for(interfaceMCiter = interfaceMCs.begin () ; interfaceMCiter != interfaceMCs.end () ; interfaceMCiter++)
{
MathCover* nd = (*interfaceMCiter) ;
double *coord = nd->getCentrixCoord ();
sbuf[0] =static_cast<double> (nd->_boundary .size ());
sbuf[1] = coord[0];
sbuf[2] = coord[1];
sbuf[3] = coord[2];
delete[] coord;
for(i=0;i<_numOfNeighborSubdm ;i++)
{
p2 = (*_neigborsubdms)(i);
ierr = MPI_Isend(sbuf, nn, MPI_DOUBLE, p2, _myRank ,MPI_COMM_WORLD, &reqs);
}
}
//terminate signal
sbuf[0] =-11;
for(i=0;i<_numOfNeighborSubdm ;i++)
{
p2 = (*_neigborsubdms)(i);
ierr = MPI_Isend(sbuf, nn, MPI_DOUBLE, p2, _myRank ,MPI_COMM_WORLD, &reqs);
printf("%d send to %d\n",_myRank,p2);
}
int stop=0;
do {
ierr = MPI_Irecv(rbuf, nn, MPI_DOUBLE, MPI_ANY_SOURCE, MPI_ANY_TAG,MPI_COMM_WORLD, &reqr);
ierr=MPI_Wait(&reqr,&status);
nVtxLoop = static_cast<int> (rbuf[0]) ;
if(nVtxLoop==-11)
{
stop++;
}
MathCover* nd=0;
for(interfaceMCiter = interfaceMCs.begin () ; interfaceMCiter != interfaceMCs.end () ; interfaceMCiter++)
{
if(nVtxLoop == (*interfaceMCiter)->_boundary.size ())
{
double * coord = (*interfaceMCiter)->getCentrixCoord ();
if( fabs(rbuf[1] - coord[0])<1.0e-5 &&
fabs(rbuf[2] - coord[1])<1.0e-5 &&
fabs(rbuf[3] - coord[2])<1.0e-5 )
{
nd = (*interfaceMCiter);
delete[] coord ;
break;
}
delete[] coord ;
}
}
if(nd)
{
nd->set_parallelType (INTERFACE_Node);
}
}while (stop!=_numOfNeighborSubdm);