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 |
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) { |
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(); |
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(); |
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; |
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); |
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; |
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); |
617 |
+ |
std::set<int> rigidSetC = getRigidSet(c, atomGroups); |
618 |
+ |
std::set<int> rigidSetD = getRigidSet(d, atomGroups); |
619 |
+ |
|
620 |
+ |
exclude_.removePairs(rigidSetA, rigidSetB); |
621 |
+ |
exclude_.removePairs(rigidSetA, rigidSetC); |
622 |
+ |
exclude_.removePairs(rigidSetA, rigidSetD); |
623 |
+ |
exclude_.removePairs(rigidSetB, rigidSetC); |
624 |
+ |
exclude_.removePairs(rigidSetB, rigidSetD); |
625 |
+ |
exclude_.removePairs(rigidSetC, rigidSetD); |
626 |
+ |
|
627 |
+ |
/* |
628 |
+ |
exclude_.removePairs(rigidSetA.begin(), rigidSetA.end(), rigidSetB.begin(), rigidSetB.end()); |
629 |
+ |
exclude_.removePairs(rigidSetA.begin(), rigidSetA.end(), rigidSetC.begin(), rigidSetC.end()); |
630 |
+ |
exclude_.removePairs(rigidSetA.begin(), rigidSetA.end(), rigidSetD.begin(), rigidSetD.end()); |
631 |
+ |
exclude_.removePairs(rigidSetB.begin(), rigidSetB.end(), rigidSetC.begin(), rigidSetC.end()); |
632 |
+ |
exclude_.removePairs(rigidSetB.begin(), rigidSetB.end(), rigidSetD.begin(), rigidSetD.end()); |
633 |
+ |
exclude_.removePairs(rigidSetC.begin(), rigidSetC.end(), rigidSetD.begin(), rigidSetD.end()); |
634 |
+ |
|
635 |
+ |
|
636 |
+ |
exclude_.removePair(a, b); |
637 |
+ |
exclude_.removePair(a, c); |
638 |
+ |
exclude_.removePair(a, d); |
639 |
+ |
exclude_.removePair(b, c); |
640 |
+ |
exclude_.removePair(b, d); |
641 |
+ |
exclude_.removePair(c, d); |
642 |
+ |
*/ |
643 |
+ |
} |
644 |
+ |
|
645 |
|
for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) { |
646 |
|
std::vector<Atom*> atoms = rb->getAtoms(); |
647 |
|
for (int i = 0; i < atoms.size() -1 ; ++i) { |