| 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 |  | */ | 
| 47 |  | * @version 1.0 | 
| 48 |  | */ | 
| 49 |  |  | 
| 50 | + | #ifdef IS_MPI | 
| 51 | + | #include <mpi.h> | 
| 52 | + | #endif | 
| 53 |  | #include <algorithm> | 
| 54 |  | #include <set> | 
| 55 |  | #include <map> | 
| 64 |  | #include "io/ForceFieldOptions.hpp" | 
| 65 |  | #include "brains/ForceField.hpp" | 
| 66 |  | #include "nonbonded/SwitchingFunction.hpp" | 
| 64 | – | #ifdef IS_MPI | 
| 65 | – | #include <mpi.h> | 
| 66 | – | #endif | 
| 67 |  |  | 
| 68 |  | using namespace std; | 
| 69 |  | namespace OpenMD { | 
| 91 |  | for (vector<Component*>::iterator i = components.begin(); | 
| 92 |  | i !=components.end(); ++i) { | 
| 93 |  | molStamp = (*i)->getMoleculeStamp(); | 
| 94 | + | if ( (*i)->haveRegion() ) { | 
| 95 | + | molStamp->setRegion( (*i)->getRegion() ); | 
| 96 | + | } else { | 
| 97 | + | // set the region to a disallowed value: | 
| 98 | + | molStamp->setRegion( -1 ); | 
| 99 | + | } | 
| 100 | + |  | 
| 101 |  | nMolWithSameStamp = (*i)->getNMol(); | 
| 102 |  |  | 
| 103 |  | addMoleculeStamp(molStamp, nMolWithSameStamp); | 
| 275 |  | ndf_local -= nConstraints_; | 
| 276 |  |  | 
| 277 |  | #ifdef IS_MPI | 
| 278 | < | MPI_Allreduce(&ndf_local,&ndf_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 279 | < | MPI_Allreduce(&nfq_local,&nGlobalFluctuatingCharges_,1, MPI_INT, MPI_SUM, MPI_COMM_WORLD); | 
| 278 | > | MPI::COMM_WORLD.Allreduce(&ndf_local, &ndf_, 1, MPI::INT,MPI::SUM); | 
| 279 | > | MPI::COMM_WORLD.Allreduce(&nfq_local, &nGlobalFluctuatingCharges_, 1, | 
| 280 | > | MPI::INT, MPI::SUM); | 
| 281 |  | #else | 
| 282 |  | ndf_ = ndf_local; | 
| 283 |  | nGlobalFluctuatingCharges_ = nfq_local; | 
| 291 |  |  | 
| 292 |  | int SimInfo::getFdf() { | 
| 293 |  | #ifdef IS_MPI | 
| 294 | < | MPI_Allreduce(&fdf_local,&fdf_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 294 | > | MPI::COMM_WORLD.Allreduce(&fdf_local, &fdf_, 1, MPI::INT, MPI::SUM); | 
| 295 |  | #else | 
| 296 |  | fdf_ = fdf_local; | 
| 297 |  | #endif | 
| 347 |  | } | 
| 348 |  |  | 
| 349 |  | #ifdef IS_MPI | 
| 350 | < | MPI_Allreduce(&ndfRaw_local,&ndfRaw_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 350 | > | MPI::COMM_WORLD.Allreduce(&ndfRaw_local, &ndfRaw_, 1, MPI::INT, MPI::SUM); | 
| 351 |  | #else | 
| 352 |  | ndfRaw_ = ndfRaw_local; | 
| 353 |  | #endif | 
| 360 |  |  | 
| 361 |  |  | 
| 362 |  | #ifdef IS_MPI | 
| 363 | < | MPI_Allreduce(&ndfTrans_local,&ndfTrans_,1,MPI_INT,MPI_SUM, MPI_COMM_WORLD); | 
| 363 | > | MPI::COMM_WORLD.Allreduce(&ndfTrans_local, &ndfTrans_, 1, | 
| 364 | > | MPI::INT, MPI::SUM); | 
| 365 |  | #else | 
| 366 |  | ndfTrans_ = ndfTrans_local; | 
| 367 |  | #endif | 
| 372 |  |  | 
| 373 |  | void SimInfo::addInteractionPairs(Molecule* mol) { | 
| 374 |  | ForceFieldOptions& options_ = forceField_->getForceFieldOptions(); | 
| 375 | + | vector<Atom*>::iterator atomIter; | 
| 376 |  | vector<Bond*>::iterator bondIter; | 
| 377 |  | vector<Bend*>::iterator bendIter; | 
| 378 |  | vector<Torsion*>::iterator torsionIter; | 
| 379 |  | vector<Inversion*>::iterator inversionIter; | 
| 380 | + | Atom* atom; | 
| 381 |  | Bond* bond; | 
| 382 |  | Bend* bend; | 
| 383 |  | Torsion* torsion; | 
| 420 |  | atomGroups.insert(map<int, set<int> >::value_type(sd->getGlobalIndex(), oneAtomSet)); | 
| 421 |  | } | 
| 422 |  | } | 
| 423 | + |  | 
| 424 |  |  | 
| 425 |  | for (bond= mol->beginBond(bondIter); bond != NULL; | 
| 426 |  | bond = mol->nextBond(bondIter)) { | 
| 790 |  | #endif | 
| 791 |  |  | 
| 792 |  | return atomTypes; | 
| 793 | + | } | 
| 794 | + |  | 
| 795 | + |  | 
| 796 | + | int getGlobalCountOfType(AtomType* atype) { | 
| 797 | + | /* | 
| 798 | + | set<AtomType*> atypes = getSimulatedAtomTypes(); | 
| 799 | + | map<AtomType*, int> counts_; | 
| 800 | + |  | 
| 801 | + | for(mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) { | 
| 802 | + | for(atom = mol->beginAtom(ai); atom != NULL; | 
| 803 | + | atom = mol->nextAtom(ai)) { | 
| 804 | + | atom->getAtomType(); | 
| 805 | + | } | 
| 806 | + | } | 
| 807 | + | */ | 
| 808 | + | return 0; | 
| 809 |  | } | 
| 810 |  |  | 
| 811 |  | void SimInfo::setupSimVariables() { | 
| 941 |  | } | 
| 942 |  | } | 
| 943 |  |  | 
| 944 | < | // Build the identArray_ | 
| 944 | > | // Build the identArray_ and regions_ | 
| 945 |  |  | 
| 946 |  | identArray_.clear(); | 
| 947 | < | identArray_.reserve(getNAtoms()); | 
| 948 | < | for(mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) { | 
| 947 | > | identArray_.reserve(getNAtoms()); | 
| 948 | > | regions_.clear(); | 
| 949 | > | regions_.reserve(getNAtoms()); | 
| 950 | > |  | 
| 951 | > | for(mol = beginMolecule(mi); mol != NULL; mol = nextMolecule(mi)) { | 
| 952 | > | int reg = mol->getRegion(); | 
| 953 |  | for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) { | 
| 954 |  | identArray_.push_back(atom->getIdent()); | 
| 955 | + | regions_.push_back(reg); | 
| 956 |  | } | 
| 957 |  | } | 
| 958 | < |  | 
| 926 | < | //scan topology | 
| 927 | < |  | 
| 928 | < | int* excludeList = excludedInteractions_.getPairList(); | 
| 929 | < | int* oneTwoList = oneTwoInteractions_.getPairList(); | 
| 930 | < | int* oneThreeList = oneThreeInteractions_.getPairList(); | 
| 931 | < | int* oneFourList = oneFourInteractions_.getPairList(); | 
| 932 | < |  | 
| 958 | > |  | 
| 959 |  | topologyDone_ = true; | 
| 960 |  | } | 
| 961 |  |  | 
| 1027 |  |  | 
| 1028 |  |  | 
| 1029 |  | StuntDouble* SimInfo::getIOIndexToIntegrableObject(int index) { | 
| 1030 | < | if (index >= IOIndexToIntegrableObject.size()) { | 
| 1030 | > | if (index >= int(IOIndexToIntegrableObject.size())) { | 
| 1031 |  | sprintf(painCave.errMsg, | 
| 1032 |  | "SimInfo::getIOIndexToIntegrableObject Error: Integrable Object\n" | 
| 1033 |  | "\tindex exceeds number of known objects!\n"); | 
| 1045 |  | int SimInfo::getNGlobalConstraints() { | 
| 1046 |  | int nGlobalConstraints; | 
| 1047 |  | #ifdef IS_MPI | 
| 1048 | < | MPI_Allreduce(&nConstraints_, &nGlobalConstraints, 1, MPI_INT, MPI_SUM, | 
| 1049 | < | MPI_COMM_WORLD); | 
| 1048 | > | MPI::COMM_WORLD.Allreduce(&nConstraints_, &nGlobalConstraints, 1, | 
| 1049 | > | MPI::INT, MPI::SUM); | 
| 1050 |  | #else | 
| 1051 |  | nGlobalConstraints =  nConstraints_; | 
| 1052 |  | #endif |