ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/md_code/DumpWriter.cpp
(Generate patch)

Comparing trunk/mdtools/md_code/DumpWriter.cpp (file contents):
Revision 256 by chuckv, Thu Jan 30 20:32:45 2003 UTC vs.
Revision 260 by chuckv, Fri Jan 31 21:04:27 2003 UTC

# Line 5 | Line 5
5   #ifdef IS_MPI
6   #include <mpi.h>
7   #include "mpiSimulation.hpp"
8 + #define TAKE_THIS_TAG 0
9   #endif //is_mpi
10  
11   #include "ReadWrite.hpp"
# Line 41 | Line 42 | DumpWriter::DumpWriter( SimInfo* the_entry_plug ){
42  
43   #ifdef IS_MPI
44    }
45 +
46 +  sprintf( checkPointMsg,
47 +           "Sucessfully opened output file for dumping.\n");
48 +  MPIcheckPoint();
49   #endif // is_mpi
50   }
51  
# Line 60 | Line 65 | void DumpWriter::writeDump( double currentTime ){
65   void DumpWriter::writeDump( double currentTime ){
66    
67    const int BUFFERSIZE = 2000;
68 <  char tempBuffer[500];
68 >  char tempBuffer[BUFFERSIZE];
69    char writeLine[BUFFERSIZE];
70  
71    int i;
# Line 175 | Line 180 | void DumpWriter::writeDump( double currentTime ){
180      }
181      outFile.flush();
182    }
183 +
184 +  sprintf( checkPointMsg,
185 +           "Sucessfully wrote node 0's dump configuration.\n");
186 +  MPIcheckPoint();
187      
188    for (procIndex = 1; procIndex < mpiSim->getNumberProcessors();
189         procIndex++){
190  
191      if( worldRank == 0 ){
192 <        
192 >      
193        mpiErr = MPI_Recv(&nodeAtomsStart,1,MPI_INT,procIndex,
194 <                        MPI_ANY_TAG,MPI_COMM_WORLD,istatus);
195 <
194 >                        TAKE_THIS_TAG,MPI_COMM_WORLD,istatus);
195 >      
196        mpiErr = MPI_Recv(&nodeAtomsEnd,1,MPI_INT,procIndex,
197 <                        MPI_ANY_TAG,MPI_COMM_WORLD, istatus);
198 <        
197 >                        TAKE_THIS_TAG,MPI_COMM_WORLD, istatus);
198 >      
199        // Make sure where node 0 is writing to, matches where the
200        // receiving node expects it to be.
201 <        
201 >      
202        if (masterIndex != nodeAtomsStart){
203          sendError = 1;
204 <        mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,MPI_ANY_TAG,
204 >        mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,TAKE_THIS_TAG,
205                            MPI_COMM_WORLD);
206          sprintf(painCave.errMsg,
207                  "DumpWriter error: atoms start index (%d) for "
# Line 201 | Line 210 | void DumpWriter::writeDump( double currentTime ){
210          painCave.isFatal = 1;
211          simError();
212        }
213 <        
213 >      
214        sendError = 0;
215 <      mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,MPI_ANY_TAG,
215 >      mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,TAKE_THIS_TAG,
216                          MPI_COMM_WORLD);
217 <
217 >      
218        // recieve the nodes writeLines
219 <
219 >      
220        for ( i = nodeAtomsStart; i <= nodeAtomsEnd; i++){
221 <          
221 >        
222          mpiErr = MPI_Recv(writeLine,BUFFERSIZE,MPI_CHAR,procIndex,
223 <                          MPI_ANY_TAG,MPI_COMM_WORLD,istatus );
224 <
223 >                          TAKE_THIS_TAG,MPI_COMM_WORLD,istatus );
224 >        
225          outFile << writeLine;
226          masterIndex++;
227        }
# Line 223 | Line 232 | void DumpWriter::writeDump( double currentTime ){
232        nodeAtomsStart = mpiSim->getMyAtomStart();
233        nodeAtomsEnd = mpiSim->getMyAtomEnd();
234          
235 <      mpiErr = MPI_Send(&nodeAtomsStart,1,MPI_INT,0,MPI_ANY_TAG,
235 >      fprintf( stderr,
236 >               "node %d: myatomStart-> %d; myatomEnd-> %d\n",
237 >               worldRank, nodeAtomsStart, nodeAtomsEnd );
238 >
239 >      mpiErr = MPI_Send(&nodeAtomsStart,1,MPI_INT,0,TAKE_THIS_TAG,
240                          MPI_COMM_WORLD);
241 <      mpiErr = MPI_Send(&nodeAtomsEnd,1,MPI_INT,0,MPI_ANY_TAG,
241 >      mpiErr = MPI_Send(&nodeAtomsEnd,1,MPI_INT,0,TAKE_THIS_TAG,
242                          MPI_COMM_WORLD);
243          
244 <      mpiErr = MPI_Recv(&sendError,1,MPI_INT,0,MPI_ANY_TAG,
244 >      fprintf( stderr, "node %d: sent off the start and end\n", worldRank );
245 >
246 >      sendError = -1;
247 >      mpiErr = MPI_Recv(&sendError,1,MPI_INT,0,TAKE_THIS_TAG,
248                          MPI_COMM_WORLD, istatus);
249 +
250 +      fprintf( stderr, "node %d: value of sendError is %d\n", worldRank, sendError );
251 +
252        if (sendError) MPIcheckPoint();
253  
254        // send current node's configuration line by line.
# Line 266 | Line 285 | void DumpWriter::writeDump( double currentTime ){
285          else
286            strcat( writeLine, "0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\n" );
287            
288 <        mpiErr = MPI_Send(writeLine,BUFFERSIZE,MPI_CHAR,0,MPI_ANY_TAG,
288 >        fprintf( stderr,
289 >                 "node %d: I'm sending the line:\n->%s\n", worldRank, writeLine );
290 >        
291 >        mpiErr = MPI_Send(writeLine,BUFFERSIZE,MPI_CHAR,0,TAKE_THIS_TAG,
292                            MPI_COMM_WORLD);
293        }
294      }
# Line 438 | Line 460 | void DumpWriter::writeFinal(){
460      if( worldRank == 0 ){
461          
462        mpiErr = MPI_Recv(&nodeAtomsStart,1,MPI_INT,procIndex,
463 <                        MPI_ANY_TAG,MPI_COMM_WORLD,istatus);
463 >                        TAKE_THIS_TAG,MPI_COMM_WORLD,istatus);
464  
465        mpiErr = MPI_Recv(&nodeAtomsEnd,1,MPI_INT,procIndex,
466 <                        MPI_ANY_TAG,MPI_COMM_WORLD, istatus);
466 >                        TAKE_THIS_TAG,MPI_COMM_WORLD, istatus);
467          
468        // Make sure where node 0 is writing to, matches where the
469        // receiving node expects it to be.
470          
471        if (masterIndex != nodeAtomsStart){
472          sendError = 1;
473 <        mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,MPI_ANY_TAG,
473 >        mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,TAKE_THIS_TAG,
474                            MPI_COMM_WORLD);
475          sprintf(painCave.errMsg,
476                  "DumpWriter error: atoms start index (%d) for "
# Line 459 | Line 481 | void DumpWriter::writeFinal(){
481        }
482          
483        sendError = 0;
484 <      mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,MPI_ANY_TAG,
484 >      mpiErr = MPI_Send(&sendError,1,MPI_INT,procIndex,TAKE_THIS_TAG,
485                          MPI_COMM_WORLD);
486  
487        // recieve the nodes writeLines
# Line 467 | Line 489 | void DumpWriter::writeFinal(){
489        for ( i = nodeAtomsStart; i <= nodeAtomsEnd; i++){
490            
491          mpiErr = MPI_Recv(writeLine,BUFFERSIZE,MPI_CHAR,procIndex,
492 <                          MPI_ANY_TAG,MPI_COMM_WORLD,istatus );
492 >                          TAKE_THIS_TAG,MPI_COMM_WORLD,istatus );
493  
494          finalOut << writeLine;
495          masterIndex++;
# Line 481 | Line 503 | void DumpWriter::writeFinal(){
503        nodeAtomsStart = mpiSim->getMyAtomStart();
504        nodeAtomsEnd = mpiSim->getMyAtomEnd();
505          
506 <      mpiErr = MPI_Send(&nodeAtomsStart,1,MPI_INT,0,MPI_ANY_TAG,
506 >      mpiErr = MPI_Send(&nodeAtomsStart,1,MPI_INT,0,TAKE_THIS_TAG,
507                          MPI_COMM_WORLD);
508 <      mpiErr = MPI_Send(&nodeAtomsEnd,1,MPI_INT,0,MPI_ANY_TAG,
508 >      mpiErr = MPI_Send(&nodeAtomsEnd,1,MPI_INT,0,TAKE_THIS_TAG,
509                          MPI_COMM_WORLD);
510          
511 <      mpiErr = MPI_Recv(&sendError,1,MPI_INT,0,MPI_ANY_TAG,
511 >      mpiErr = MPI_Recv(&sendError,1,MPI_INT,0,TAKE_THIS_TAG,
512                          MPI_COMM_WORLD, istatus);
513        if (sendError) MPIcheckPoint();
514  
# Line 524 | Line 546 | void DumpWriter::writeFinal(){
546          else
547            strcat( writeLine, "0.0\t0.0\t0.0\t0.0\t0.0\t0.0\t0.0\n" );
548            
549 <        mpiErr = MPI_Send(writeLine,BUFFERSIZE,MPI_CHAR,0,MPI_ANY_TAG,
549 >        mpiErr = MPI_Send(writeLine,BUFFERSIZE,MPI_CHAR,0,TAKE_THIS_TAG,
550                            MPI_COMM_WORLD);
551        }
552      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines