| 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 |  | } |