| 35 |
|
* |
| 36 |
|
* [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005). |
| 37 |
|
* [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006). |
| 38 |
< |
* [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 24107 (2008). |
| 38 |
> |
* [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). |
| 39 |
|
* [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). |
| 40 |
|
* [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). |
| 41 |
|
*/ |
| 88 |
|
|
| 89 |
|
vector<Component*> components = simParams->getComponents(); |
| 90 |
|
|
| 91 |
< |
for (vector<Component*>::iterator i = components.begin(); i !=components.end(); ++i) { |
| 91 |
> |
for (vector<Component*>::iterator i = components.begin(); |
| 92 |
> |
i !=components.end(); ++i) { |
| 93 |
|
molStamp = (*i)->getMoleculeStamp(); |
| 94 |
|
nMolWithSameStamp = (*i)->getNMol(); |
| 95 |
|
|
| 232 |
|
vector<Atom*>::iterator k; |
| 233 |
|
|
| 234 |
|
Molecule* mol; |
| 235 |
< |
StuntDouble* integrableObject; |
| 235 |
> |
StuntDouble* sd; |
| 236 |
|
Atom* atom; |
| 237 |
|
|
| 238 |
|
ndf_local = 0; |
| 239 |
|
nfq_local = 0; |
| 240 |
|
|
| 241 |
|
for (mol = beginMolecule(i); mol != NULL; mol = nextMolecule(i)) { |
| 242 |
< |
for (integrableObject = mol->beginIntegrableObject(j); integrableObject != NULL; |
| 243 |
< |
integrableObject = mol->nextIntegrableObject(j)) { |
| 242 |
> |
|
| 243 |
> |
for (sd = mol->beginIntegrableObject(j); sd != NULL; |
| 244 |
> |
sd = mol->nextIntegrableObject(j)) { |
| 245 |
|
|
| 246 |
|
ndf_local += 3; |
| 247 |
|
|
| 248 |
< |
if (integrableObject->isDirectional()) { |
| 249 |
< |
if (integrableObject->isLinear()) { |
| 248 |
> |
if (sd->isDirectional()) { |
| 249 |
> |
if (sd->isLinear()) { |
| 250 |
|
ndf_local += 2; |
| 251 |
|
} else { |
| 252 |
|
ndf_local += 3; |
| 253 |
|
} |
| 254 |
|
} |
| 255 |
|
} |
| 256 |
+ |
|
| 257 |
|
for (atom = mol->beginFluctuatingCharge(k); atom != NULL; |
| 258 |
|
atom = mol->nextFluctuatingCharge(k)) { |
| 259 |
|
if (atom->isFluctuatingCharge()) { |
| 268 |
|
ndf_local -= nConstraints_; |
| 269 |
|
|
| 270 |
|
#ifdef IS_MPI |
| 271 |
< |
MPI_Allreduce(&ndf_local,&ndf_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); |
| 272 |
< |
MPI_Allreduce(&nfq_local,&nGlobalFluctuatingCharges_,1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); |
| 271 |
> |
MPI::COMM_WORLD.Allreduce(&ndf_local, &ndf_, 1, MPI::INT,MPI::SUM); |
| 272 |
> |
MPI::COMM_WORLD.Allreduce(&nfq_local, &nGlobalFluctuatingCharges_, 1, |
| 273 |
> |
MPI::INT, MPI::SUM); |
| 274 |
|
#else |
| 275 |
|
ndf_ = ndf_local; |
| 276 |
|
nGlobalFluctuatingCharges_ = nfq_local; |
| 284 |
|
|
| 285 |
|
int SimInfo::getFdf() { |
| 286 |
|
#ifdef IS_MPI |
| 287 |
< |
MPI_Allreduce(&fdf_local,&fdf_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); |
| 287 |
> |
MPI::COMM_WORLD.Allreduce(&fdf_local, &fdf_, 1, MPI::INT, MPI::SUM); |
| 288 |
|
#else |
| 289 |
|
fdf_ = fdf_local; |
| 290 |
|
#endif |
| 316 |
|
MoleculeIterator i; |
| 317 |
|
vector<StuntDouble*>::iterator j; |
| 318 |
|
Molecule* mol; |
| 319 |
< |
StuntDouble* integrableObject; |
| 319 |
> |
StuntDouble* sd; |
| 320 |
|
|
| 321 |
|
// Raw degrees of freedom that we have to set |
| 322 |
|
ndfRaw_local = 0; |
| 323 |
|
|
| 324 |
|
for (mol = beginMolecule(i); mol != NULL; mol = nextMolecule(i)) { |
| 321 |
– |
for (integrableObject = mol->beginIntegrableObject(j); integrableObject != NULL; |
| 322 |
– |
integrableObject = mol->nextIntegrableObject(j)) { |
| 325 |
|
|
| 326 |
+ |
for (sd = mol->beginIntegrableObject(j); sd != NULL; |
| 327 |
+ |
sd = mol->nextIntegrableObject(j)) { |
| 328 |
+ |
|
| 329 |
|
ndfRaw_local += 3; |
| 330 |
|
|
| 331 |
< |
if (integrableObject->isDirectional()) { |
| 332 |
< |
if (integrableObject->isLinear()) { |
| 331 |
> |
if (sd->isDirectional()) { |
| 332 |
> |
if (sd->isLinear()) { |
| 333 |
|
ndfRaw_local += 2; |
| 334 |
|
} else { |
| 335 |
|
ndfRaw_local += 3; |
| 340 |
|
} |
| 341 |
|
|
| 342 |
|
#ifdef IS_MPI |
| 343 |
< |
MPI_Allreduce(&ndfRaw_local,&ndfRaw_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); |
| 343 |
> |
MPI::COMM_WORLD.Allreduce(&ndfRaw_local, &ndfRaw_, 1, MPI::INT, MPI::SUM); |
| 344 |
|
#else |
| 345 |
|
ndfRaw_ = ndfRaw_local; |
| 346 |
|
#endif |
| 353 |
|
|
| 354 |
|
|
| 355 |
|
#ifdef IS_MPI |
| 356 |
< |
MPI_Allreduce(&ndfTrans_local,&ndfTrans_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); |
| 356 |
> |
MPI::COMM_WORLD.Allreduce(&ndfTrans_local, &ndfTrans_, 1, |
| 357 |
> |
MPI::INT, MPI::SUM); |
| 358 |
|
#else |
| 359 |
|
ndfTrans_ = ndfTrans_local; |
| 360 |
|
#endif |
| 390 |
|
Molecule::RigidBodyIterator rbIter; |
| 391 |
|
RigidBody* rb; |
| 392 |
|
Molecule::IntegrableObjectIterator ii; |
| 393 |
< |
StuntDouble* integrableObject; |
| 393 |
> |
StuntDouble* sd; |
| 394 |
|
|
| 395 |
< |
for (integrableObject = mol->beginIntegrableObject(ii); |
| 396 |
< |
integrableObject != NULL; |
| 391 |
< |
integrableObject = mol->nextIntegrableObject(ii)) { |
| 395 |
> |
for (sd = mol->beginIntegrableObject(ii); sd != NULL; |
| 396 |
> |
sd = mol->nextIntegrableObject(ii)) { |
| 397 |
|
|
| 398 |
< |
if (integrableObject->isRigidBody()) { |
| 399 |
< |
rb = static_cast<RigidBody*>(integrableObject); |
| 398 |
> |
if (sd->isRigidBody()) { |
| 399 |
> |
rb = static_cast<RigidBody*>(sd); |
| 400 |
|
vector<Atom*> atoms = rb->getAtoms(); |
| 401 |
|
set<int> rigidAtoms; |
| 402 |
|
for (int i = 0; i < static_cast<int>(atoms.size()); ++i) { |
| 407 |
|
} |
| 408 |
|
} else { |
| 409 |
|
set<int> oneAtomSet; |
| 410 |
< |
oneAtomSet.insert(integrableObject->getGlobalIndex()); |
| 411 |
< |
atomGroups.insert(map<int, set<int> >::value_type(integrableObject->getGlobalIndex(), oneAtomSet)); |
| 410 |
> |
oneAtomSet.insert(sd->getGlobalIndex()); |
| 411 |
> |
atomGroups.insert(map<int, set<int> >::value_type(sd->getGlobalIndex(), oneAtomSet)); |
| 412 |
|
} |
| 413 |
|
} |
| 414 |
|
|
| 542 |
|
Molecule::RigidBodyIterator rbIter; |
| 543 |
|
RigidBody* rb; |
| 544 |
|
Molecule::IntegrableObjectIterator ii; |
| 545 |
< |
StuntDouble* integrableObject; |
| 545 |
> |
StuntDouble* sd; |
| 546 |
|
|
| 547 |
< |
for (integrableObject = mol->beginIntegrableObject(ii); |
| 548 |
< |
integrableObject != NULL; |
| 544 |
< |
integrableObject = mol->nextIntegrableObject(ii)) { |
| 547 |
> |
for (sd = mol->beginIntegrableObject(ii); sd != NULL; |
| 548 |
> |
sd = mol->nextIntegrableObject(ii)) { |
| 549 |
|
|
| 550 |
< |
if (integrableObject->isRigidBody()) { |
| 551 |
< |
rb = static_cast<RigidBody*>(integrableObject); |
| 550 |
> |
if (sd->isRigidBody()) { |
| 551 |
> |
rb = static_cast<RigidBody*>(sd); |
| 552 |
|
vector<Atom*> atoms = rb->getAtoms(); |
| 553 |
|
set<int> rigidAtoms; |
| 554 |
|
for (int i = 0; i < static_cast<int>(atoms.size()); ++i) { |
| 559 |
|
} |
| 560 |
|
} else { |
| 561 |
|
set<int> oneAtomSet; |
| 562 |
< |
oneAtomSet.insert(integrableObject->getGlobalIndex()); |
| 563 |
< |
atomGroups.insert(map<int, set<int> >::value_type(integrableObject->getGlobalIndex(), oneAtomSet)); |
| 562 |
> |
oneAtomSet.insert(sd->getGlobalIndex()); |
| 563 |
> |
atomGroups.insert(map<int, set<int> >::value_type(sd->getGlobalIndex(), oneAtomSet)); |
| 564 |
|
} |
| 565 |
|
} |
| 566 |
|
|
| 780 |
|
#endif |
| 781 |
|
|
| 782 |
|
return atomTypes; |
| 783 |
+ |
} |
| 784 |
+ |
|
| 785 |
+ |
|
| 786 |
+ |
int getGlobalCountOfType(AtomType* atype) { |
| 787 |
+ |
/* |
| 788 |
+ |
set<AtomType*> atypes = getSimulatedAtomTypes(); |
| 789 |
+ |
map<AtomType*, int> counts_; |
| 790 |
+ |
|
| 791 |
+ |
for(mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) { |
| 792 |
+ |
for(atom = mol->beginAtom(ai); atom != NULL; |
| 793 |
+ |
atom = mol->nextAtom(ai)) { |
| 794 |
+ |
atom->getAtomType(); |
| 795 |
+ |
} |
| 796 |
+ |
} |
| 797 |
+ |
*/ |
| 798 |
+ |
return 0; |
| 799 |
|
} |
| 800 |
|
|
| 801 |
|
void SimInfo::setupSimVariables() { |
| 802 |
|
useAtomicVirial_ = simParams_->getUseAtomicVirial(); |
| 803 |
< |
// we only call setAccumulateBoxDipole if the accumulateBoxDipole parameter is true |
| 803 |
> |
// we only call setAccumulateBoxDipole if the accumulateBoxDipole |
| 804 |
> |
// parameter is true |
| 805 |
|
calcBoxDipole_ = false; |
| 806 |
|
if ( simParams_->haveAccumulateBoxDipole() ) |
| 807 |
|
if ( simParams_->getAccumulateBoxDipole() ) { |
| 895 |
|
|
| 896 |
|
|
| 897 |
|
void SimInfo::prepareTopology() { |
| 877 |
– |
int nExclude, nOneTwo, nOneThree, nOneFour; |
| 898 |
|
|
| 899 |
|
//calculate mass ratio of cutoff group |
| 900 |
|
SimInfo::MoleculeIterator mi; |
| 941 |
|
} |
| 942 |
|
} |
| 943 |
|
|
| 924 |
– |
//scan topology |
| 925 |
– |
|
| 926 |
– |
nExclude = excludedInteractions_.getSize(); |
| 927 |
– |
nOneTwo = oneTwoInteractions_.getSize(); |
| 928 |
– |
nOneThree = oneThreeInteractions_.getSize(); |
| 929 |
– |
nOneFour = oneFourInteractions_.getSize(); |
| 930 |
– |
|
| 931 |
– |
int* excludeList = excludedInteractions_.getPairList(); |
| 932 |
– |
int* oneTwoList = oneTwoInteractions_.getPairList(); |
| 933 |
– |
int* oneThreeList = oneThreeInteractions_.getPairList(); |
| 934 |
– |
int* oneFourList = oneFourInteractions_.getPairList(); |
| 935 |
– |
|
| 944 |
|
topologyDone_ = true; |
| 945 |
|
} |
| 946 |
|
|
| 986 |
|
|
| 987 |
|
for (mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) { |
| 988 |
|
|
| 989 |
< |
for (atom = mol->beginAtom(atomIter); atom != NULL; atom = mol->nextAtom(atomIter)) { |
| 989 |
> |
for (atom = mol->beginAtom(atomIter); atom != NULL; |
| 990 |
> |
atom = mol->nextAtom(atomIter)) { |
| 991 |
|
atom->setSnapshotManager(sman_); |
| 992 |
|
} |
| 993 |
|
|
| 994 |
< |
for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) { |
| 994 |
> |
for (rb = mol->beginRigidBody(rbIter); rb != NULL; |
| 995 |
> |
rb = mol->nextRigidBody(rbIter)) { |
| 996 |
|
rb->setSnapshotManager(sman_); |
| 997 |
|
} |
| 998 |
|
|
| 999 |
< |
for (cg = mol->beginCutoffGroup(cgIter); cg != NULL; cg = mol->nextCutoffGroup(cgIter)) { |
| 999 |
> |
for (cg = mol->beginCutoffGroup(cgIter); cg != NULL; |
| 1000 |
> |
cg = mol->nextCutoffGroup(cgIter)) { |
| 1001 |
|
cg->setSnapshotManager(sman_); |
| 1002 |
|
} |
| 1003 |
|
} |
| 1012 |
|
|
| 1013 |
|
|
| 1014 |
|
StuntDouble* SimInfo::getIOIndexToIntegrableObject(int index) { |
| 1015 |
< |
return IOIndexToIntegrableObject.at(index); |
| 1015 |
> |
if (index >= int(IOIndexToIntegrableObject.size())) { |
| 1016 |
> |
sprintf(painCave.errMsg, |
| 1017 |
> |
"SimInfo::getIOIndexToIntegrableObject Error: Integrable Object\n" |
| 1018 |
> |
"\tindex exceeds number of known objects!\n"); |
| 1019 |
> |
painCave.isFatal = 1; |
| 1020 |
> |
simError(); |
| 1021 |
> |
return NULL; |
| 1022 |
> |
} else |
| 1023 |
> |
return IOIndexToIntegrableObject.at(index); |
| 1024 |
|
} |
| 1025 |
|
|
| 1026 |
|
void SimInfo::setIOIndexToIntegrableObject(const vector<StuntDouble*>& v) { |
| 1027 |
|
IOIndexToIntegrableObject= v; |
| 1028 |
|
} |
| 1010 |
– |
/* |
| 1011 |
– |
void SimInfo::setStuntDoubleFromGlobalIndex(vector<StuntDouble*> v) { |
| 1012 |
– |
assert( v.size() == nAtoms_ + nRigidBodies_); |
| 1013 |
– |
sdByGlobalIndex_ = v; |
| 1014 |
– |
} |
| 1029 |
|
|
| 1016 |
– |
StuntDouble* SimInfo::getStuntDoubleFromGlobalIndex(int index) { |
| 1017 |
– |
//assert(index < nAtoms_ + nRigidBodies_); |
| 1018 |
– |
return sdByGlobalIndex_.at(index); |
| 1019 |
– |
} |
| 1020 |
– |
*/ |
| 1030 |
|
int SimInfo::getNGlobalConstraints() { |
| 1031 |
|
int nGlobalConstraints; |
| 1032 |
|
#ifdef IS_MPI |
| 1033 |
< |
MPI_Allreduce(&nConstraints_, &nGlobalConstraints, 1, MPI_INT, MPI_SUM, |
| 1034 |
< |
MPI_COMM_WORLD); |
| 1033 |
> |
MPI::COMM_WORLD.Allreduce(&nConstraints_, &nGlobalConstraints, 1, |
| 1034 |
> |
MPI::INT, MPI::SUM); |
| 1035 |
|
#else |
| 1036 |
|
nGlobalConstraints = nConstraints_; |
| 1037 |
|
#endif |