| 47 |  | * @version 1.0 | 
| 48 |  | */ | 
| 49 |  |  | 
| 50 | – | #include <sprng.h> | 
| 51 | – |  | 
| 50 |  | #include "brains/MoleculeCreator.hpp" | 
| 51 |  | #include "brains/SimCreator.hpp" | 
| 52 |  | #include "brains/SimSnapshotManager.hpp" | 
| 55 |  | #include "UseTheForce/ForceFieldFactory.hpp" | 
| 56 |  | #include "utils/simError.h" | 
| 57 |  | #include "utils/StringUtils.hpp" | 
| 58 | + | #include "math/SeqRandNumGen.hpp" | 
| 59 |  | #ifdef IS_MPI | 
| 60 |  | #include "io/mpiBASS.h" | 
| 61 | < | #include "math/randomSPRNG.hpp" | 
| 61 | > | #include "math/ParallelRandNumGen.hpp" | 
| 62 |  | #endif | 
| 63 |  |  | 
| 64 |  | namespace oopse { | 
| 187 |  | } | 
| 188 |  |  | 
| 189 |  | void SimCreator::gatherParameters(SimInfo *info, const std::string& mdfile) { | 
| 191 | – |  | 
| 192 | – | //setup seed for random number generator | 
| 193 | – | int seedValue; | 
| 194 | – | Globals * simParams = info->getSimParams(); | 
| 195 | – |  | 
| 196 | – | if (simParams->haveSeed()) { | 
| 197 | – | seedValue = simParams->getSeed(); | 
| 198 | – |  | 
| 199 | – | if (seedValue < 100000000 ) { | 
| 200 | – | sprintf(painCave.errMsg, | 
| 201 | – | "Seed for sprng library should contain at least 9 digits\n" | 
| 202 | – | "OOPSE will generate a seed for user\n"); | 
| 203 | – |  | 
| 204 | – | painCave.isFatal = 0; | 
| 205 | – | simError(); | 
| 206 | – |  | 
| 207 | – | //using seed generated by system instead of invalid seed set by user | 
| 208 | – |  | 
| 209 | – | #ifndef IS_MPI | 
| 210 | – |  | 
| 211 | – | seedValue = make_sprng_seed(); | 
| 212 | – |  | 
| 213 | – | #else | 
| 214 | – |  | 
| 215 | – | if (worldRank == 0) { | 
| 216 | – | seedValue = make_sprng_seed(); | 
| 217 | – | } | 
| 218 | – |  | 
| 219 | – | MPI_Bcast(&seedValue, 1, MPI_INT, 0, MPI_COMM_WORLD); | 
| 220 | – |  | 
| 221 | – | #endif | 
| 222 | – |  | 
| 223 | – | } //end if (seedValue /1000000000 == 0) | 
| 224 | – | } else { | 
| 190 |  |  | 
| 226 | – | #ifndef IS_MPI | 
| 227 | – |  | 
| 228 | – | seedValue = make_sprng_seed(); | 
| 229 | – |  | 
| 230 | – | #else | 
| 231 | – |  | 
| 232 | – | if (worldRank == 0) { | 
| 233 | – | seedValue = make_sprng_seed(); | 
| 234 | – | } | 
| 235 | – |  | 
| 236 | – | MPI_Bcast(&seedValue, 1, MPI_INT, 0, MPI_COMM_WORLD); | 
| 237 | – |  | 
| 238 | – | #endif | 
| 239 | – |  | 
| 240 | – | } //end of simParams->haveSeed() | 
| 241 | – |  | 
| 242 | – | info->setSeed(seedValue); | 
| 243 | – |  | 
| 244 | – |  | 
| 191 |  | //figure out the ouput file names | 
| 192 |  | std::string prefix; | 
| 193 |  |  | 
| 195 |  |  | 
| 196 |  | if (worldRank == 0) { | 
| 197 |  | #endif // is_mpi | 
| 198 | < |  | 
| 198 | > | Globals * simParams = info->getSimParams(); | 
| 199 |  | if (simParams->haveFinalConfig()) { | 
| 200 |  | prefix = getPrefix(simParams->getFinalConfig()); | 
| 201 |  | } else { | 
| 251 |  | simError(); | 
| 252 |  | } | 
| 253 |  |  | 
| 254 | < | MTRand myRandom(info->getSeed(), nProcessors, worldRank); | 
| 254 | > | int seedValue; | 
| 255 | > | Globals * simParams = info->getSimParams(); | 
| 256 | > | SeqRandNumGen* myRandom; //divide labor does not need Parallel random number generator | 
| 257 | > | if (simParams->haveSeed()) { | 
| 258 | > | seedValue = simParams->getSeed(); | 
| 259 | > | myRandom = new SeqRandNumGen(seedValue); | 
| 260 | > | }else { | 
| 261 | > | myRandom = new SeqRandNumGen(); | 
| 262 | > | } | 
| 263 |  |  | 
| 264 |  |  | 
| 265 |  | a = 3.0 * nGlobalMols / info->getNGlobalAtoms(); | 
| 282 |  |  | 
| 283 |  | // Pick a processor at random | 
| 284 |  |  | 
| 285 | < | which_proc = (int) (myRandom.rand() * nProcessors); | 
| 285 | > | which_proc = (int) (myRandom->rand() * nProcessors); | 
| 286 |  |  | 
| 287 |  | //get the molecule stamp first | 
| 288 |  | int stampId = info->getMoleculeStampId(i); | 
| 334 |  | // where a = penalty / (average atoms per molecule) | 
| 335 |  |  | 
| 336 |  | x = (double)(new_atoms - nTarget); | 
| 337 | < | y = myRandom.getRandom(); | 
| 337 | > | y = myRandom->rand(); | 
| 338 |  |  | 
| 339 |  | if (y < exp(- a * x)) { | 
| 340 |  | molToProcMap[i] = which_proc; | 
| 348 |  | } | 
| 349 |  | } | 
| 350 |  |  | 
| 351 | + | delete myRandom; | 
| 352 | + |  | 
| 353 |  | // Spray out this nonsense to all other processors: | 
| 354 |  |  | 
| 355 |  | MPI_Bcast(&molToProcMap[0], nGlobalMols, MPI_INT, 0, MPI_COMM_WORLD); |