# | Line 90 | Line 90 | namespace oopse { | |
---|---|---|
90 | ndf_(0), fdf_local(0), ndfRaw_(0), ndfTrans_(0), nZconstraint_(0), | |
91 | nGlobalMols_(0), nGlobalAtoms_(0), nGlobalCutoffGroups_(0), | |
92 | nGlobalIntegrableObjects_(0), nGlobalRigidBodies_(0), | |
93 | < | nAtoms_(0), nBonds_(0), nBends_(0), nTorsions_(0), nRigidBodies_(0), |
94 | < | nIntegrableObjects_(0), nCutoffGroups_(0), nConstraints_(0), |
95 | < | sman_(NULL), fortranInitialized_(false), calcBoxDipole_(false), |
96 | < | useAtomicVirial_(true) { |
93 | > | nAtoms_(0), nBonds_(0), nBends_(0), nTorsions_(0), nInversions_(0), |
94 | > | nRigidBodies_(0), nIntegrableObjects_(0), nCutoffGroups_(0), |
95 | > | nConstraints_(0), sman_(NULL), fortranInitialized_(false), |
96 | > | calcBoxDipole_(false), useAtomicVirial_(true) { |
97 | ||
98 | + | |
99 | MoleculeStamp* molStamp; | |
100 | int nMolWithSameStamp; | |
101 | int nCutoffAtoms = 0; // number of atoms belong to cutoff groups | |
# | Line 102 | Line 103 | namespace oopse { | |
103 | CutoffGroupStamp* cgStamp; | |
104 | RigidBodyStamp* rbStamp; | |
105 | int nRigidAtoms = 0; | |
106 | + | |
107 | std::vector<Component*> components = simParams->getComponents(); | |
108 | ||
109 | for (std::vector<Component*>::iterator i = components.begin(); i !=components.end(); ++i) { | |
# | Line 156 | Line 158 | namespace oopse { | |
158 | + nGlobalRigidBodies_; | |
159 | ||
160 | nGlobalMols_ = molStampIds_.size(); | |
159 | – | |
160 | – | #ifdef IS_MPI |
161 | molToProcMap_.resize(nGlobalMols_); | |
162 | – | #endif |
163 | – | |
162 | } | |
163 | ||
164 | SimInfo::~SimInfo() { | |
# | Line 198 | Line 196 | namespace oopse { | |
196 | nBonds_ += mol->getNBonds(); | |
197 | nBends_ += mol->getNBends(); | |
198 | nTorsions_ += mol->getNTorsions(); | |
199 | + | nInversions_ += mol->getNInversions(); |
200 | nRigidBodies_ += mol->getNRigidBodies(); | |
201 | nIntegrableObjects_ += mol->getNIntegrableObjects(); | |
202 | nCutoffGroups_ += mol->getNCutoffGroups(); | |
# | Line 223 | Line 222 | namespace oopse { | |
222 | nBonds_ -= mol->getNBonds(); | |
223 | nBends_ -= mol->getNBends(); | |
224 | nTorsions_ -= mol->getNTorsions(); | |
225 | + | nInversions_ -= mol->getNInversions(); |
226 | nRigidBodies_ -= mol->getNRigidBodies(); | |
227 | nIntegrableObjects_ -= mol->getNIntegrableObjects(); | |
228 | nCutoffGroups_ -= mol->getNCutoffGroups(); | |
# | Line 358 | Line 358 | namespace oopse { | |
358 | std::vector<Bond*>::iterator bondIter; | |
359 | std::vector<Bend*>::iterator bendIter; | |
360 | std::vector<Torsion*>::iterator torsionIter; | |
361 | + | std::vector<Inversion*>::iterator inversionIter; |
362 | Bond* bond; | |
363 | Bend* bend; | |
364 | Torsion* torsion; | |
365 | + | Inversion* inversion; |
366 | int a; | |
367 | int b; | |
368 | int c; | |
# | Line 423 | Line 425 | namespace oopse { | |
425 | b = torsion->getAtomB()->getGlobalIndex(); | |
426 | c = torsion->getAtomC()->getGlobalIndex(); | |
427 | d = torsion->getAtomD()->getGlobalIndex(); | |
428 | + | std::set<int> rigidSetA = getRigidSet(a, atomGroups); |
429 | + | std::set<int> rigidSetB = getRigidSet(b, atomGroups); |
430 | + | std::set<int> rigidSetC = getRigidSet(c, atomGroups); |
431 | + | std::set<int> rigidSetD = getRigidSet(d, atomGroups); |
432 | + | |
433 | + | exclude_.addPairs(rigidSetA, rigidSetB); |
434 | + | exclude_.addPairs(rigidSetA, rigidSetC); |
435 | + | exclude_.addPairs(rigidSetA, rigidSetD); |
436 | + | exclude_.addPairs(rigidSetB, rigidSetC); |
437 | + | exclude_.addPairs(rigidSetB, rigidSetD); |
438 | + | exclude_.addPairs(rigidSetC, rigidSetD); |
439 | + | |
440 | + | /* |
441 | + | exclude_.addPairs(rigidSetA.begin(), rigidSetA.end(), rigidSetB.begin(), rigidSetB.end()); |
442 | + | exclude_.addPairs(rigidSetA.begin(), rigidSetA.end(), rigidSetC.begin(), rigidSetC.end()); |
443 | + | exclude_.addPairs(rigidSetA.begin(), rigidSetA.end(), rigidSetD.begin(), rigidSetD.end()); |
444 | + | exclude_.addPairs(rigidSetB.begin(), rigidSetB.end(), rigidSetC.begin(), rigidSetC.end()); |
445 | + | exclude_.addPairs(rigidSetB.begin(), rigidSetB.end(), rigidSetD.begin(), rigidSetD.end()); |
446 | + | exclude_.addPairs(rigidSetC.begin(), rigidSetC.end(), rigidSetD.begin(), rigidSetD.end()); |
447 | + | |
448 | + | |
449 | + | exclude_.addPair(a, b); |
450 | + | exclude_.addPair(a, c); |
451 | + | exclude_.addPair(a, d); |
452 | + | exclude_.addPair(b, c); |
453 | + | exclude_.addPair(b, d); |
454 | + | exclude_.addPair(c, d); |
455 | + | */ |
456 | + | } |
457 | + | |
458 | + | for (inversion= mol->beginInversion(inversionIter); inversion != NULL; |
459 | + | inversion = mol->nextInversion(inversionIter)) { |
460 | + | a = inversion->getAtomA()->getGlobalIndex(); |
461 | + | b = inversion->getAtomB()->getGlobalIndex(); |
462 | + | c = inversion->getAtomC()->getGlobalIndex(); |
463 | + | d = inversion->getAtomD()->getGlobalIndex(); |
464 | std::set<int> rigidSetA = getRigidSet(a, atomGroups); | |
465 | std::set<int> rigidSetB = getRigidSet(b, atomGroups); | |
466 | std::set<int> rigidSetC = getRigidSet(c, atomGroups); | |
# | Line 470 | Line 508 | namespace oopse { | |
508 | std::vector<Bond*>::iterator bondIter; | |
509 | std::vector<Bend*>::iterator bendIter; | |
510 | std::vector<Torsion*>::iterator torsionIter; | |
511 | + | std::vector<Inversion*>::iterator inversionIter; |
512 | Bond* bond; | |
513 | Bend* bend; | |
514 | Torsion* torsion; | |
515 | + | Inversion* inversion; |
516 | int a; | |
517 | int b; | |
518 | int c; | |
# | Line 535 | Line 575 | namespace oopse { | |
575 | b = torsion->getAtomB()->getGlobalIndex(); | |
576 | c = torsion->getAtomC()->getGlobalIndex(); | |
577 | d = torsion->getAtomD()->getGlobalIndex(); | |
578 | + | |
579 | + | std::set<int> rigidSetA = getRigidSet(a, atomGroups); |
580 | + | std::set<int> rigidSetB = getRigidSet(b, atomGroups); |
581 | + | std::set<int> rigidSetC = getRigidSet(c, atomGroups); |
582 | + | std::set<int> rigidSetD = getRigidSet(d, atomGroups); |
583 | + | |
584 | + | exclude_.removePairs(rigidSetA, rigidSetB); |
585 | + | exclude_.removePairs(rigidSetA, rigidSetC); |
586 | + | exclude_.removePairs(rigidSetA, rigidSetD); |
587 | + | exclude_.removePairs(rigidSetB, rigidSetC); |
588 | + | exclude_.removePairs(rigidSetB, rigidSetD); |
589 | + | exclude_.removePairs(rigidSetC, rigidSetD); |
590 | + | |
591 | + | /* |
592 | + | exclude_.removePairs(rigidSetA.begin(), rigidSetA.end(), rigidSetB.begin(), rigidSetB.end()); |
593 | + | exclude_.removePairs(rigidSetA.begin(), rigidSetA.end(), rigidSetC.begin(), rigidSetC.end()); |
594 | + | exclude_.removePairs(rigidSetA.begin(), rigidSetA.end(), rigidSetD.begin(), rigidSetD.end()); |
595 | + | exclude_.removePairs(rigidSetB.begin(), rigidSetB.end(), rigidSetC.begin(), rigidSetC.end()); |
596 | + | exclude_.removePairs(rigidSetB.begin(), rigidSetB.end(), rigidSetD.begin(), rigidSetD.end()); |
597 | + | exclude_.removePairs(rigidSetC.begin(), rigidSetC.end(), rigidSetD.begin(), rigidSetD.end()); |
598 | + | |
599 | + | |
600 | + | exclude_.removePair(a, b); |
601 | + | exclude_.removePair(a, c); |
602 | + | exclude_.removePair(a, d); |
603 | + | exclude_.removePair(b, c); |
604 | + | exclude_.removePair(b, d); |
605 | + | exclude_.removePair(c, d); |
606 | + | */ |
607 | + | } |
608 | + | |
609 | + | for (inversion= mol->beginInversion(inversionIter); inversion != NULL; inversion = mol->nextInversion(inversionIter)) { |
610 | + | a = inversion->getAtomA()->getGlobalIndex(); |
611 | + | b = inversion->getAtomB()->getGlobalIndex(); |
612 | + | c = inversion->getAtomC()->getGlobalIndex(); |
613 | + | d = inversion->getAtomD()->getGlobalIndex(); |
614 | ||
615 | std::set<int> rigidSetA = getRigidSet(a, atomGroups); | |
616 | std::set<int> rigidSetB = getRigidSet(b, atomGroups); | |
# | Line 860 | Line 936 | namespace oopse { | |
936 | int nGlobalExcludes = 0; | |
937 | int* globalExcludes = NULL; | |
938 | int* excludeList = exclude_.getExcludeList(); | |
939 | < | setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray[0], &nExclude, excludeList , |
940 | < | &nGlobalExcludes, globalExcludes, &molMembershipArray[0], |
941 | < | &mfact[0], &nCutoffGroups_, &fortranGlobalGroupMembership[0], &isError); |
942 | < | |
939 | > | setFortranSim( &fInfo_, &nGlobalAtoms_, &nAtoms_, &identArray[0], |
940 | > | &nExclude, excludeList , &nGlobalExcludes, globalExcludes, |
941 | > | &molMembershipArray[0], &mfact[0], &nCutoffGroups_, |
942 | > | &fortranGlobalGroupMembership[0], &isError); |
943 | > | |
944 | if( isError ){ | |
945 | < | |
945 | > | |
946 | sprintf( painCave.errMsg, | |
947 | "There was an error setting the simulation information in fortran.\n" ); | |
948 | painCave.isFatal = 1; | |
949 | painCave.severity = OOPSE_ERROR; | |
950 | simError(); | |
951 | } | |
952 | < | |
953 | < | #ifdef IS_MPI |
952 | > | |
953 | > | |
954 | sprintf( checkPointMsg, | |
955 | "succesfully sent the simulation information to fortran.\n"); | |
956 | < | MPIcheckPoint(); |
957 | < | #endif // is_mpi |
958 | < | |
956 | > | |
957 | > | errorCheckPoint(); |
958 | > | |
959 | // Setup number of neighbors in neighbor list if present | |
960 | if (simParams_->haveNeighborListNeighbors()) { | |
961 | int nlistNeighbors = simParams_->getNeighborListNeighbors(); | |
# | Line 889 | Line 966 | namespace oopse { | |
966 | } | |
967 | ||
968 | ||
892 | – | #ifdef IS_MPI |
969 | void SimInfo::setupFortranParallel() { | |
970 | < | |
970 | > | #ifdef IS_MPI |
971 | //SimInfo is responsible for creating localToGlobalAtomIndex and localToGlobalGroupIndex | |
972 | std::vector<int> localToGlobalAtomIndex(getNAtoms(), 0); | |
973 | std::vector<int> localToGlobalCutoffGroupIndex; | |
# | Line 941 | Line 1017 | namespace oopse { | |
1017 | } | |
1018 | ||
1019 | sprintf(checkPointMsg, " mpiRefresh successful.\n"); | |
1020 | < | MPIcheckPoint(); |
945 | < | |
946 | < | |
947 | < | } |
1020 | > | errorCheckPoint(); |
1021 | ||
1022 | #endif | |
1023 | + | } |
1024 | ||
1025 | void SimInfo::setupCutoff() { | |
1026 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |