--- trunk/OOPSE/libmdtools/DumpWriter.cpp 2004/05/07 21:36:10 1151 +++ trunk/OOPSE/libmdtools/DumpWriter.cpp 2004/05/10 20:28:14 1152 @@ -216,12 +216,12 @@ void DumpWriter::writeFrame( vector& outFil int nProc; int j, which_node, done, which_atom, local_index, currentIndex; - double atomData6[6]; - double atomData13[13]; + double atomData[13]; int isDirectional; char* atomTypeString; char MPIatomTypeString[MINIBUFFERSIZE]; int nObjects; + int msgLen; // the length of message actually recieved at master nodes #endif //is_mpi double q[4], ji[3]; @@ -379,7 +379,7 @@ void DumpWriter::writeFrame( vector& outFil for(int l = 0; l < nCurObj; l++){ - if (potatoes[which_node] + 3 >= MAXTAG) { + if (potatoes[which_node] + 2 >= MAXTAG) { // The potato was going to exceed the maximum value, // so wrap this processor potato back to 0: @@ -395,20 +395,16 @@ void DumpWriter::writeFrame( vector& outFil myPotato++; - MPI_Recv(&isDirectional, 1, MPI_INT, which_node, - myPotato, MPI_COMM_WORLD, &istatus); - + MPI_Recv(atomData, 13, MPI_DOUBLE, which_node, myPotato, MPI_COMM_WORLD, &istatus); myPotato++; - if (isDirectional) { - MPI_Recv(atomData13, 13, MPI_DOUBLE, which_node, - myPotato, MPI_COMM_WORLD, &istatus); - } else { - MPI_Recv(atomData6, 6, MPI_DOUBLE, which_node, - myPotato, MPI_COMM_WORLD, &istatus); - } + MPI_Get_count(&istatus, MPI_DOUBLE, &msgLen); - myPotato++; + if(msgLen == 13) + isDirectional = 1; + else + isDirectional = 0; + } potatoes[which_node] = myPotato; @@ -427,13 +423,13 @@ void DumpWriter::writeFrame( vector& outFil sd->getPos(pos); sd->getVel(vel); - atomData6[0] = pos[0]; - atomData6[1] = pos[1]; - atomData6[2] = pos[2]; + atomData[0] = pos[0]; + atomData[1] = pos[1]; + atomData[2] = pos[2]; - atomData6[3] = vel[0]; - atomData6[4] = vel[1]; - atomData6[5] = vel[2]; + atomData[3] = vel[0]; + atomData[4] = vel[1]; + atomData[5] = vel[2]; isDirectional = 0; @@ -445,16 +441,16 @@ void DumpWriter::writeFrame( vector& outFil sd->getJ( ji ); for (int j = 0; j < 6 ; j++) - atomData13[j] = atomData6[j]; + atomData[j] = atomData[j]; - atomData13[6] = q[0]; - atomData13[7] = q[1]; - atomData13[8] = q[2]; - atomData13[9] = q[3]; + atomData[6] = q[0]; + atomData[7] = q[1]; + atomData[8] = q[2]; + atomData[9] = q[3]; - atomData13[10] = ji[0]; - atomData13[11] = ji[1]; - atomData13[12] = ji[2]; + atomData[10] = ji[0]; + atomData[11] = ji[1]; + atomData[12] = ji[2]; } } @@ -468,12 +464,12 @@ void DumpWriter::writeFrame( vector& outFil sprintf( writeLine, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t", atomTypeString, - atomData6[0], - atomData6[1], - atomData6[2], - atomData6[3], - atomData6[4], - atomData6[5]); + atomData[0], + atomData[1], + atomData[2], + atomData[3], + atomData[4], + atomData[5]); strcat( writeLine, "0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\n" ); @@ -482,19 +478,19 @@ void DumpWriter::writeFrame( vector& outFil sprintf( writeLine, "%s\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\t%lf\n", atomTypeString, - atomData13[0], - atomData13[1], - atomData13[2], - atomData13[3], - atomData13[4], - atomData13[5], - atomData13[6], - atomData13[7], - atomData13[8], - atomData13[9], - atomData13[10], - atomData13[11], - atomData13[12]); + atomData[0], + atomData[1], + atomData[2], + atomData[3], + atomData[4], + atomData[5], + atomData[6], + atomData[7], + atomData[8], + atomData[9], + atomData[10], + atomData[11], + atomData[12]); } @@ -549,7 +545,7 @@ void DumpWriter::writeFrame( vector& outFil for( iter = integrableObjects.begin(); iter != integrableObjects.end(); iter++){ - if (myPotato + 3 >= MAXTAG) { + if (myPotato + 2 >= MAXTAG) { // The potato was going to exceed the maximum value, // so wrap this processor potato back to 0 (and block until @@ -566,13 +562,13 @@ void DumpWriter::writeFrame( vector& outFil sd->getPos(pos); sd->getVel(vel); - atomData6[0] = pos[0]; - atomData6[1] = pos[1]; - atomData6[2] = pos[2]; + atomData[0] = pos[0]; + atomData[1] = pos[1]; + atomData[2] = pos[2]; - atomData6[3] = vel[0]; - atomData6[4] = vel[1]; - atomData6[5] = vel[2]; + atomData[3] = vel[0]; + atomData[4] = vel[1]; + atomData[5] = vel[2]; isDirectional = 0; @@ -583,17 +579,15 @@ void DumpWriter::writeFrame( vector& outFil sd->getQ( q ); sd->getJ( ji ); - for (int j = 0; j < 6 ; j++) - atomData13[j] = atomData6[j]; - atomData13[6] = q[0]; - atomData13[7] = q[1]; - atomData13[8] = q[2]; - atomData13[9] = q[3]; + atomData[6] = q[0]; + atomData[7] = q[1]; + atomData[8] = q[2]; + atomData[9] = q[3]; - atomData13[10] = ji[0]; - atomData13[11] = ji[1]; - atomData13[12] = ji[2]; + atomData[10] = ji[0]; + atomData[11] = ji[1]; + atomData[12] = ji[2]; } @@ -606,20 +600,15 @@ void DumpWriter::writeFrame( vector& outFil myPotato, MPI_COMM_WORLD); myPotato++; - - MPI_Send(&isDirectional, 1, MPI_INT, 0, - myPotato, MPI_COMM_WORLD); - myPotato++; - if (isDirectional) { - MPI_Send(atomData13, 13, MPI_DOUBLE, 0, + MPI_Send(atomData, 13, MPI_DOUBLE, 0, myPotato, MPI_COMM_WORLD); } else { - MPI_Send(atomData6, 6, MPI_DOUBLE, 0, + MPI_Send(atomData, 6, MPI_DOUBLE, 0, myPotato, MPI_COMM_WORLD); }