175 |
|
cutoffGroup = createCutoffGroup(mol, *fai, localIndexMan); |
176 |
|
mol->addCutoffGroup(cutoffGroup); |
177 |
|
} |
178 |
< |
//create constraints |
178 |
> |
|
179 |
> |
//create bonded constraintPairs: |
180 |
|
createConstraintPair(mol); |
181 |
+ |
|
182 |
+ |
//create non-bonded constraintPairs |
183 |
+ |
for (int i = 0; i < molStamp->getNConstraints(); ++i) { |
184 |
+ |
ConstraintStamp* cStamp = molStamp->getConstraintStamp(i); |
185 |
+ |
Atom* atomA; |
186 |
+ |
Atom* atomB; |
187 |
+ |
|
188 |
+ |
atomA = mol->getAtomAt(cStamp->getA()); |
189 |
+ |
atomB = mol->getAtomAt(cStamp->getB()); |
190 |
+ |
assert( atomA && atomB ); |
191 |
+ |
|
192 |
+ |
RealType distance; |
193 |
+ |
bool printConstraintForce = false; |
194 |
+ |
|
195 |
+ |
if (!cStamp->haveConstrainedDistance()) { |
196 |
+ |
sprintf(painCave.errMsg, |
197 |
+ |
"Constraint Error: A non-bond constraint was specified\n" |
198 |
+ |
"\twithout providing a value for the constrainedDistance.\n"); |
199 |
+ |
painCave.isFatal = 1; |
200 |
+ |
simError(); |
201 |
+ |
} else { |
202 |
+ |
distance = cStamp->getConstrainedDistance(); |
203 |
+ |
} |
204 |
+ |
|
205 |
+ |
if (cStamp->havePrintConstraintForce()) { |
206 |
+ |
printConstraintForce = cStamp->getPrintConstraintForce(); |
207 |
+ |
} |
208 |
+ |
|
209 |
+ |
ConstraintElem* consElemA = new ConstraintElem(atomA); |
210 |
+ |
ConstraintElem* consElemB = new ConstraintElem(atomB); |
211 |
+ |
ConstraintPair* cPair = new ConstraintPair(consElemA, consElemB, distance, |
212 |
+ |
printConstraintForce); |
213 |
+ |
mol->addConstraintPair(cPair); |
214 |
+ |
} |
215 |
+ |
|
216 |
+ |
// now create the constraint elements: |
217 |
+ |
|
218 |
|
createConstraintElem(mol); |
219 |
|
|
220 |
|
// Does this molecule stamp define a total constrained charge value? |
582 |
|
//add bond constraints |
583 |
|
Molecule::BondIterator bi; |
584 |
|
Bond* bond; |
585 |
+ |
ConstraintPair* cPair; |
586 |
+ |
|
587 |
|
for (bond = mol->beginBond(bi); bond != NULL; bond = mol->nextBond(bi)) { |
588 |
|
|
589 |
|
BondType* bt = bond->getBondType(); |
593 |
|
|
594 |
|
ConstraintElem* consElemA = new ConstraintElem(bond->getAtomA()); |
595 |
|
ConstraintElem* consElemB = new ConstraintElem(bond->getAtomB()); |
596 |
< |
ConstraintPair* consPair = new ConstraintPair(consElemA, consElemB, fbt->getEquilibriumBondLength()); |
597 |
< |
mol->addConstraintPair(consPair); |
596 |
> |
cPair = new ConstraintPair(consElemA, consElemB, |
597 |
> |
fbt->getEquilibriumBondLength(), false); |
598 |
> |
mol->addConstraintPair(cPair); |
599 |
|
} |
600 |
|
} |
601 |
|
|
607 |
|
ConstraintPair* consPair; |
608 |
|
Molecule::ConstraintPairIterator cpi; |
609 |
|
std::set<StuntDouble*> sdSet; |
610 |
< |
for (consPair = mol->beginConstraintPair(cpi); consPair != NULL; consPair = mol->nextConstraintPair(cpi)) { |
610 |
> |
for (consPair = mol->beginConstraintPair(cpi); consPair != NULL; |
611 |
> |
consPair = mol->nextConstraintPair(cpi)) { |
612 |
|
|
613 |
|
StuntDouble* sdA = consPair->getConsElem1()->getStuntDouble(); |
614 |
|
if (sdSet.find(sdA) == sdSet.end()){ |
615 |
|
sdSet.insert(sdA); |
616 |
|
mol->addConstraintElem(new ConstraintElem(sdA)); |
617 |
|
} |
618 |
< |
|
618 |
> |
|
619 |
|
StuntDouble* sdB = consPair->getConsElem2()->getStuntDouble(); |
620 |
|
if (sdSet.find(sdB) == sdSet.end()){ |
621 |
|
sdSet.insert(sdB); |
622 |
|
mol->addConstraintElem(new ConstraintElem(sdB)); |
623 |
< |
} |
582 |
< |
|
623 |
> |
} |
624 |
|
} |
584 |
– |
|
625 |
|
} |
586 |
– |
|
626 |
|
} |