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

Comparing trunk/src/io/RestWriter.cpp (file contents):
Revision 417 by chrisfen, Thu Mar 10 15:10:24 2005 UTC vs.
Revision 990 by chrisfen, Mon Jun 19 01:36:06 2006 UTC

# Line 1 | Line 1
1 < /*
1 > /*
2   * Copyright (c) 2005 The University of Notre Dame. All Rights Reserved.
3   *
4   * The University of Notre Dame grants you ("Licensee") a
# Line 50 | Line 50 | namespace oopse {
50  
51   namespace oopse {
52    RestWriter::RestWriter(SimInfo* info) :
53 <  info_(info) {
54 <    
55 <    //we use master - slave mode, only master node writes to disk
56 <    outName = info_->getRestFileName();
53 >    info_(info) {
54 >
55 >    // only the master node writes to the disk
56 > #ifdef IS_MPI
57 >    if (worldRank == 0) {
58 > #endif // is_mpi
59 >
60 >      outName = info_->getRestFileName();
61 >
62 > #ifdef IS_MPI
63 >    }
64 > #endif // is_mpi
65    }
66    
67    RestWriter::~RestWriter() {}
# Line 69 | Line 77 | namespace oopse {
77      StuntDouble* integrableObject;
78      SimInfo::MoleculeIterator mi;
79      Molecule::IntegrableObjectIterator ii;
80 <    
80 >
81   #ifdef IS_MPI
82      if(worldRank == 0 ){
83   #endif    
# Line 77 | Line 85 | namespace oopse {
85        if( !finalOut ){
86          sprintf( painCave.errMsg,
87                   "Could not open \"%s\" for zAngle output.\n",
88 <                 outName );
88 >                 outName.c_str() );
89          painCave.isFatal = 1;
90          simError();
91        }
# Line 123 | Line 131 | namespace oopse {
131      
132      MPI_Status ierr;
133      int intObIndex;
134 <    double zAngle;
135 <    
136 <    if (masterNode == 0) {
137 <      std::map<int, double> zAngData;
134 >    RealType zAngle;
135 >  
136 >    if (worldRank == masterNode) {
137 >      std::map<int, RealType> zAngData;
138        for(int i = 0 ; i < nproc; ++i) {
139          if (i == masterNode) {
140            for (mol = info_->beginMolecule(mi); mol != NULL;
# Line 136 | Line 144 | namespace oopse {
144                   integrableObject != NULL;
145                   integrableObject = mol->nextIntegrableObject(ii)) {
146                
147 <              intObIndex = integrableObject->getGlobalIndex() ;
147 >              intObIndex = integrableObject->getGlobalIndex();
148 >
149                zAngle = integrableObject->getZangle();
150 <              zAngData.insert(pair<int, double>(intObIndex, zAngle));
150 >              zAngData.insert(std::pair<int, RealType>(intObIndex, zAngle));
151              }      
152            }
144          
153          } else {
154 <          for(int k = 0; k < nIntObjectsInProc[i]; ++k) {
155 <            MPI_Recv(&intObIndex, 1, MPI_INT, i, 0, MPI_COMM_WORLD,&ierr);
156 <            MPI_Recv(&zAngle, 1, MPI_DOUBLE, i, 0, MPI_COMM_WORLD,&ierr);
157 <            zAngData.insert(pair<int, double>(intObIndex, zAngle));
158 <          }
154 >          for (mol = info_->beginMolecule(mi); mol != NULL;
155 >               mol = info_->nextMolecule(mi)) {
156 >            
157 >            for (integrableObject = mol->beginIntegrableObject(ii);
158 >                 integrableObject != NULL;
159 >                 integrableObject = mol->nextIntegrableObject(ii)) {
160 >              
161 >              MPI_Recv(&intObIndex, 1, MPI_INT, i, 0, MPI_COMM_WORLD,&ierr);
162 >              MPI_Recv(&zAngle, 1, MPI_REALTYPE, i, 0, MPI_COMM_WORLD,&ierr);
163 >              zAngData.insert(std::pair<int, RealType>(intObIndex, zAngle));
164 >            }
165 >          }
166          }
152        
167        }
168        
169        finalOut
170          << info_->getSnapshotManager()->getCurrentSnapshot()->getTime()
171          << " : omega values at this time\n";
172        
173 <      std::map<int, double>::iterator l;
173 >      std::map<int, RealType>::iterator l;
174        for (l = zAngData.begin(); l != zAngData.end(); ++l) {
175 <        finalOut << l->second << "\n";
175 >        sprintf( tempBuffer,
176 >                 "%14.10lf\n",
177 >                 l->second);
178 >        strcpy( writeLine, tempBuffer );
179 >        
180 >        finalOut << writeLine;      
181        }
182 +
183 +      finalOut.close();
184        
185      } else {
186 <      
187 <      for (mol = info_->beginMolecule(mi); mol != NULL;
188 <           mol = info_->nextMolecule(mi)) {
189 <        
190 <        for (integrableObject = mol->beginIntegrableObject(ii);
191 <             integrableObject != NULL;
192 <             integrableObject = mol->nextIntegrableObject(ii)) {
193 <          intObIndex = integrableObject->getGlobalIndex();            
194 <          zAngle = integrableObject->getZangle();
195 <          MPI_Send(&intObIndex, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD);
196 <          MPI_Send(&zAngle, 1, MPI_DOUBLE, masterNode, 0, MPI_COMM_WORLD);
197 <        }
186 >      for(int j = 1; j < nproc; ++j) {
187 >        for (mol = info_->beginMolecule(mi); mol != NULL;
188 >             mol = info_->nextMolecule(mi)) {
189 >          
190 >          for (integrableObject = mol->beginIntegrableObject(ii);
191 >               integrableObject != NULL;
192 >               integrableObject = mol->nextIntegrableObject(ii)) {
193 >            intObIndex = integrableObject->getGlobalIndex();            
194 >            zAngle = integrableObject->getZangle();
195 >
196 >            MPI_Send(&intObIndex, 1, MPI_INT, masterNode, 0, MPI_COMM_WORLD);
197 >            MPI_Send(&zAngle, 1, MPI_REALTYPE, masterNode, 0, MPI_COMM_WORLD);
198 >          }
199 >        }
200        }
201      }
202 +
203   #endif
180    
181 #ifdef IS_MPI
182    finalOut.close();
183 #endif
184    
204    }
205    
206   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines