| 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). |
| 39 |
< |
* [4] Vardeman & Gezelter, in progress (2009). |
| 39 |
> |
* [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010). |
| 40 |
> |
* [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011). |
| 41 |
|
*/ |
| 42 |
|
|
| 43 |
|
#include <stack> |
| 46 |
|
#include "primitives/DirectionalAtom.hpp" |
| 47 |
|
#include "primitives/RigidBody.hpp" |
| 48 |
|
#include "primitives/Molecule.hpp" |
| 49 |
< |
#include "io/basic_ifstrstream.hpp" |
| 49 |
> |
#include "io/ifstrstream.hpp" |
| 50 |
|
|
| 51 |
|
namespace OpenMD { |
| 52 |
|
|
| 150 |
|
OpenMDBitSet bs; |
| 151 |
|
std::stack<OpenMDBitSet> stack; |
| 152 |
|
|
| 153 |
< |
for (int pc = pcStart; pc < code.size(); ++pc) { |
| 153 |
> |
for (unsigned int pc = pcStart; pc < code.size(); ++pc) { |
| 154 |
|
Token instruction = code[pc]; |
| 155 |
|
|
| 156 |
|
switch (instruction.tok) { |
| 159 |
|
case Token::expressionEnd: |
| 160 |
|
break; |
| 161 |
|
case Token::all: |
| 162 |
< |
bs = OpenMDBitSet(nStuntDouble); |
| 162 |
< |
bs.setAll(); |
| 162 |
> |
bs = allInstruction(); |
| 163 |
|
stack.push(bs); |
| 164 |
|
break; |
| 165 |
|
case Token::none: |
| 221 |
|
int comparator = instruction.tok; |
| 222 |
|
int property = instruction.intValue; |
| 223 |
|
float comparisonValue = boost::any_cast<float>(instruction.value); |
| 224 |
– |
float propertyValue; |
| 224 |
|
OpenMDBitSet bs(nStuntDouble); |
| 225 |
|
bs.clearAll(); |
| 226 |
|
|
| 445 |
|
|
| 446 |
|
return bs; |
| 447 |
|
} |
| 448 |
+ |
|
| 449 |
+ |
OpenMDBitSet SelectionEvaluator::allInstruction() { |
| 450 |
+ |
OpenMDBitSet bs(nStuntDouble); |
| 451 |
+ |
|
| 452 |
+ |
SimInfo::MoleculeIterator mi; |
| 453 |
+ |
Molecule* mol; |
| 454 |
+ |
Molecule::AtomIterator ai; |
| 455 |
+ |
Atom* atom; |
| 456 |
+ |
Molecule::RigidBodyIterator rbIter; |
| 457 |
+ |
RigidBody* rb; |
| 458 |
|
|
| 459 |
+ |
// Doing the loop insures that we're actually on this processor. |
| 460 |
|
|
| 461 |
+ |
for (mol = info->beginMolecule(mi); mol != NULL; |
| 462 |
+ |
mol = info->nextMolecule(mi)) { |
| 463 |
+ |
|
| 464 |
+ |
for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) { |
| 465 |
+ |
bs.setBitOn(atom->getGlobalIndex()); |
| 466 |
+ |
} |
| 467 |
+ |
|
| 468 |
+ |
for (rb = mol->beginRigidBody(rbIter); rb != NULL; |
| 469 |
+ |
rb = mol->nextRigidBody(rbIter)) { |
| 470 |
+ |
bs.setBitOn(rb->getGlobalIndex()); |
| 471 |
+ |
} |
| 472 |
+ |
} |
| 473 |
+ |
|
| 474 |
+ |
return bs; |
| 475 |
+ |
} |
| 476 |
+ |
|
| 477 |
|
OpenMDBitSet SelectionEvaluator::hull() { |
| 478 |
|
OpenMDBitSet bs(nStuntDouble); |
| 479 |
|
|
| 482 |
|
return bs; |
| 483 |
|
} |
| 484 |
|
|
| 459 |
– |
|
| 460 |
– |
|
| 485 |
|
RealType SelectionEvaluator::getCharge(Atom* atom) { |
| 486 |
|
RealType charge =0.0; |
| 487 |
|
AtomType* atomType = atom->getAtomType(); |