59 |
|
#include "utils/StringUtils.hpp" |
60 |
|
|
61 |
|
namespace oopse { |
62 |
< |
|
62 |
> |
|
63 |
|
Molecule* MoleculeCreator::createMolecule(ForceField* ff, MoleculeStamp *molStamp, |
64 |
|
int stampId, int globalIndex, LocalIndexManager* localIndexMan) { |
65 |
|
|
128 |
|
} |
129 |
|
|
130 |
|
//every free atom is a cutoff group |
131 |
< |
std::set<Atom*> allAtoms; |
132 |
< |
Molecule::AtomIterator ai; |
131 |
> |
std::vector<Atom*> freeAtoms; |
132 |
> |
std::vector<Atom*>::iterator ai; |
133 |
> |
std::vector<Atom*>::iterator fai; |
134 |
|
|
135 |
|
//add all atoms into allAtoms set |
136 |
< |
for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) { |
137 |
< |
allAtoms.insert(atom); |
136 |
> |
for(atom = mol->beginAtom(fai); atom != NULL; atom = mol->nextAtom(fai)) { |
137 |
> |
freeAtoms.push_back(atom); |
138 |
|
} |
139 |
|
|
140 |
|
Molecule::CutoffGroupIterator ci; |
141 |
|
CutoffGroup* cg; |
141 |
– |
std::set<Atom*> cutoffAtoms; |
142 |
|
|
143 |
– |
//add all of the atoms belong to cutoff groups into cutoffAtoms set |
143 |
|
for (cg = mol->beginCutoffGroup(ci); cg != NULL; cg = mol->nextCutoffGroup(ci)) { |
144 |
|
|
145 |
|
for(atom = cg->beginAtom(ai); atom != NULL; atom = cg->nextAtom(ai)) { |
146 |
< |
cutoffAtoms.insert(atom); |
146 |
> |
//erase the atoms belong to cutoff groups from freeAtoms vector |
147 |
> |
freeAtoms.erase(std::remove(freeAtoms.begin(), freeAtoms.end(), atom), freeAtoms.end()); |
148 |
|
} |
149 |
|
|
150 |
|
} |
151 |
|
|
152 |
< |
//find all free atoms (which do not belong to cutoff groups) |
153 |
< |
//performs the "difference" operation from set theory, the output range contains a copy of every |
154 |
< |
//element that is contained in [allAtoms.begin(), allAtoms.end()) and not contained in |
155 |
< |
//[cutoffAtoms.begin(), cutoffAtoms.end()). |
156 |
< |
std::vector<Atom*> freeAtoms; |
157 |
< |
std::set_difference(allAtoms.begin(), allAtoms.end(), cutoffAtoms.begin(), cutoffAtoms.end(), |
158 |
< |
std::back_inserter(freeAtoms)); |
159 |
< |
|
160 |
< |
if (freeAtoms.size() != allAtoms.size() - cutoffAtoms.size()) { |
161 |
< |
//Some atoms in rigidAtoms are not in allAtoms, something must be wrong |
162 |
< |
sprintf(painCave.errMsg, "Atoms in cutoff groups are not in the atom list of the same molecule"); |
163 |
< |
|
164 |
< |
painCave.isFatal = 1; |
165 |
< |
simError(); |
166 |
< |
} |
167 |
< |
|
168 |
< |
//loop over the free atoms and then create one cutoff group for every single free atom |
169 |
< |
std::vector<Atom*>::iterator fai; |
170 |
< |
|
152 |
> |
//loop over the free atoms and then create one cutoff group for every single free atom |
153 |
> |
|
154 |
|
for (fai = freeAtoms.begin(); fai != freeAtoms.end(); ++fai) { |
155 |
|
cutoffGroup = createCutoffGroup(mol, *fai); |
156 |
|
mol->addCutoffGroup(cutoffGroup); |