| 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 | 
| 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() {} | 
| 77 |  | StuntDouble* integrableObject; | 
| 78 |  | SimInfo::MoleculeIterator mi; | 
| 79 |  | Molecule::IntegrableObjectIterator ii; | 
| 80 | < |  | 
| 80 | > |  | 
| 81 |  | #ifdef IS_MPI | 
| 82 |  | if(worldRank == 0 ){ | 
| 83 |  | #endif | 
| 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 |  | } | 
| 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; | 
| 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 |  | } |