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 |