ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/branches/development/src/io/RestReader.cpp
(Generate patch)

Comparing trunk/src/io/RestReader.cpp (file contents):
Revision 989 by chrisfen, Wed Jun 7 18:05:19 2006 UTC vs.
Revision 990 by chrisfen, Mon Jun 19 01:36:06 2006 UTC

# Line 122 | Line 122 | namespace oopse {
122    
123    
124    void RestReader :: readIdealCrystal(){
125 <    
125 >        
126      int i;
127      unsigned int j;
128 <    
128 >
129   #ifdef IS_MPI
130      int done, which_node, which_atom; // loop counter
131   #endif //is_mpi
# Line 260 | Line 260 | namespace oopse {
260          simError();
261        }
262  
263 +      MPI_Bcast(read_buffer, BUFFERSIZE, MPI_CHAR, masterNode, MPI_COMM_WORLD);
264 +
265        for (i=0 ; i < info_->getNGlobalMolecules(); i++) {
266          int which_node = info_->getMolToProc(i);
267          
# Line 295 | Line 297 | namespace oopse {
297              parseIdealLine(read_buffer, integrableObject);
298          
299            }
300 +
301          } else {
302            //molecule belongs to slave nodes
303            
304            MPI_Recv(&nCurObj, 1, MPI_INT, which_node,
305                     TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus);
306            
307 <          for(j=0; j < nCurObj; j++){
307 >          for(j = 0; j < nCurObj; j++){
308              
309              eof_test = fgets(read_buffer, sizeof(read_buffer), inIdealFile);
310              if(eof_test == NULL){
# Line 320 | Line 323 | namespace oopse {
323          }
324        }
325      } else {
326 <      //actions taken at slave nodes
326 >      //actions taken at slave nodes
327 >      MPI_Bcast(read_buffer, BUFFERSIZE, MPI_CHAR, masterNode, MPI_COMM_WORLD);
328 >
329        for (i=0 ; i < info_->getNGlobalMolecules(); i++) {
330 <        int which_node = info_->getMolToProc(i);
331 <        
330 >        int which_node = info_->getMolToProc(i);
331 >
332          if(which_node == worldRank){
333            //molecule with global index i belongs to this processor
334            
# Line 363 | Line 368 | namespace oopse {
368    }
369    
370    char* RestReader::parseIdealLine(char* readLine, StuntDouble* sd){
366    
367    char *foo; // the pointer to the current string token
371      
372      RealType pos[3];        // position place holders
373      RealType q[4];          // the quaternions
# Line 597 | Line 600 | namespace oopse {
600      int masterNode = 0;
601      int myStatus; // 1 = wakeup & success; 0 = error; -1 = AllDone
602      int haveError;
603 <    int index;    
603 >    int intObjIndex;    
604 >    int intObjIndexTransfer;    
605  
606      int nCurObj;
607      RealType angleTranfer;
# Line 623 | Line 627 | namespace oopse {
627            tempZangs.push_back( atof(read_buffer) );
628          eof_test = fgets(read_buffer, sizeof(read_buffer), inAngFile);
629        }
630 <      
630 >
631        // Check to see that the number of integrable objects in the
632        // intial configuration file is the same as derived from the
633        // meta-data file.
# Line 638 | Line 642 | namespace oopse {
642        
643        // At this point, node 0 has a tempZangs vector completed, and
644        // everyone else has nada
641      index = 0;
645        
646        for (i=0 ; i < info_->getNGlobalMolecules(); i++) {
647          // Get the Node number which has this atom
# Line 656 | Line 659 | namespace oopse {
659            for (integrableObject = mol->beginIntegrableObject(ii);
660                 integrableObject != NULL;
661                 integrableObject = mol->nextIntegrableObject(ii)){
662 <            
663 <            integrableObject->setZangle(tempZangs[index]);
661 <            index++;
662 >            intObjIndex = integrableObject->getGlobalIndex();
663 >            integrableObject->setZangle(tempZangs[intObjIndex]);
664            }    
665            
666          } else {
667            // I am MASTER OF THE UNIVERSE, but I don't own this molecule
668 <          
668 >          // listen for the number of integrableObjects in the molecule
669            MPI_Recv(&nCurObj, 1, MPI_INT, which_node,
670                     TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus);
671            
672 <          for(j=0; j < nCurObj; j++){            
673 <            angleTransfer = tempZangs[index];
672 >          for(j=0; j < nCurObj; j++){          
673 >            // listen for which integrableObject we need to send the value for
674 >            MPI_Recv(&intObjIndexTransfer, 1, MPI_INT, which_node,
675 >                   TAKE_THIS_TAG_INT, MPI_COMM_WORLD, &istatus);
676 >            angleTransfer = tempZangs[intObjIndexTransfer];
677 >            // send the value to the node so it can initialize the object
678              MPI_Send(&angleTransfer, 1, MPI_REALTYPE, which_node,
679                       TAKE_THIS_TAG_DOUBLE, MPI_COMM_WORLD);              
674            index++;
680            }
676          
681          }
682        }
683      } else {
# Line 696 | Line 700 | namespace oopse {
700            }
701  
702            nCurObj = mol->getNIntegrableObjects();
703 <        
703 >          // send the number of integrableObjects in the molecule
704            MPI_Send(&nCurObj, 1, MPI_INT, 0,
705                     TAKE_THIS_TAG_INT, MPI_COMM_WORLD);
706            
707            for (integrableObject = mol->beginIntegrableObject(ii);
708                 integrableObject != NULL;
709                 integrableObject = mol->nextIntegrableObject(ii)){
710 <            
710 >            intObjIndexTransfer = integrableObject->getGlobalIndex();
711 >            // send the global index of the integrableObject
712 >            MPI_Send(&intObjIndexTransfer, 1, MPI_INT, 0,
713 >                     TAKE_THIS_TAG_INT, MPI_COMM_WORLD);
714 >            // listen for the value we want to set locally
715              MPI_Recv(&angleTransfer, 1, MPI_REALTYPE, 0,
716                       TAKE_THIS_TAG_DOUBLE, MPI_COMM_WORLD, &istatus);
717  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines