# | 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 | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |