| 510 |
|
|
| 511 |
|
#ifdef IS_MPI |
| 512 |
|
void SimCreator::divideMolecules(SimInfo *info) { |
| 513 |
– |
RealType numerator; |
| 514 |
– |
RealType denominator; |
| 515 |
– |
RealType precast; |
| 516 |
– |
RealType x; |
| 517 |
– |
RealType y; |
| 513 |
|
RealType a; |
| 514 |
|
int nProcessors; |
| 515 |
|
std::vector<int> atomsPerProc; |
| 551 |
|
atomsPerProc.insert(atomsPerProc.end(), nProcessors, 0); |
| 552 |
|
|
| 553 |
|
if (worldRank == 0) { |
| 554 |
< |
numerator = info->getNGlobalAtoms(); |
| 555 |
< |
denominator = nProcessors; |
| 556 |
< |
precast = numerator / denominator; |
| 554 |
> |
RealType numerator = info->getNGlobalAtoms(); |
| 555 |
> |
RealType denominator = nProcessors; |
| 556 |
> |
RealType precast = numerator / denominator; |
| 557 |
|
int nTarget = (int)(precast + 0.5); |
| 558 |
|
|
| 559 |
|
for(int i = 0; i < nGlobalMols; i++) { |
| 619 |
|
// Pacc(x) = exp(- a * x) |
| 620 |
|
// where a = penalty / (average atoms per molecule) |
| 621 |
|
|
| 622 |
< |
x = (RealType)(new_atoms - nTarget); |
| 623 |
< |
y = myRandom->rand(); |
| 622 |
> |
RealType x = (RealType)(new_atoms - nTarget); |
| 623 |
> |
RealType y = myRandom->rand(); |
| 624 |
|
|
| 625 |
|
if (y < exp(- a * x)) { |
| 626 |
|
molToProcMap[i] = which_proc; |