# | Line 35 | Line 35 | |
---|---|---|
35 | * | |
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). |
38 | > | * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008). |
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 <iostream> | |
# | Line 57 | Line 58 | namespace OpenMD { | |
58 | calcRef(); | |
59 | } | |
60 | ||
61 | < | void MoLocator::placeMol( const Vector3d& offset, const Vector3d& ort, Molecule* mol){ |
61 | > | void MoLocator::placeMol( const Vector3d& offset, const Vector3d& ort, |
62 | > | Molecule* mol) { |
63 | ||
64 | Vector3d newCoor; | |
65 | Vector3d curRefCoor; | |
# | Line 65 | Line 67 | namespace OpenMD { | |
67 | ||
68 | if(mol->getNIntegrableObjects() != nIntegrableObjects){ | |
69 | sprintf( painCave.errMsg, | |
70 | < | "MoLocator error.\n" |
71 | < | " The number of integrable objects of MoleculeStamp is not the same as that of Molecule\n"); |
70 | > | "MoLocator::placeMol error.\n" |
71 | > | "\tThe number of integrable objects of MoleculeStamp is not\n" |
72 | > | "\tthe same as that of Molecule\n"); |
73 | painCave.isFatal = 1; | |
74 | simError(); | |
75 | } | |
76 | ||
77 | Molecule::IntegrableObjectIterator ii; | |
78 | < | StuntDouble* integrableObject; |
78 | > | StuntDouble* sd; |
79 | int i; | |
80 | < | for (integrableObject = mol->beginIntegrableObject(ii), i = 0; integrableObject != NULL; |
81 | < | integrableObject = mol->nextIntegrableObject(ii), ++i) { |
80 | > | for (sd = mol->beginIntegrableObject(ii), i = 0; sd != NULL; |
81 | > | sd = mol->nextIntegrableObject(ii), ++i) { |
82 | ||
83 | newCoor = rotMat * refCoords[i]; | |
84 | newCoor += offset; | |
85 | ||
86 | < | integrableObject->setPos(newCoor); |
87 | < | integrableObject->setVel(V3Zero); |
86 | > | sd->setPos(newCoor); |
87 | > | sd->setVel(V3Zero); |
88 | ||
89 | < | if(integrableObject->isDirectional()){ |
90 | < | integrableObject->setA(rotMat * integrableObject->getA()); |
91 | < | integrableObject->setJ(V3Zero); |
89 | > | if(sd->isDirectional()){ |
90 | > | sd->setA(rotMat * sd->getA()); |
91 | > | sd->setJ(V3Zero); |
92 | } | |
93 | } | |
94 | } | |
# | Line 93 | Line 96 | namespace OpenMD { | |
96 | void MoLocator::calcRef( void ){ | |
97 | AtomStamp* currAtomStamp; | |
98 | RigidBodyStamp* rbStamp; | |
99 | < | int nAtoms; |
99 | > | unsigned int nAtoms; |
100 | int nRigidBodies; | |
101 | std::vector<RealType> mass; | |
102 | Vector3d coor; | |
# | Line 106 | Line 109 | namespace OpenMD { | |
109 | nAtoms= myStamp->getNAtoms(); | |
110 | nRigidBodies = myStamp->getNRigidBodies(); | |
111 | ||
112 | < | for(size_t i=0; i<nAtoms; i++){ |
112 | > | for(unsigned int i = 0; i < nAtoms; i++){ |
113 | ||
114 | currAtomStamp = myStamp->getAtomStamp(i); | |
115 | ||
116 | if( !currAtomStamp->havePosition() ){ | |
117 | sprintf( painCave.errMsg, | |
118 | < | "MoLocator error.\n" |
119 | < | " Component %s, atom %s does not have a position specified.\n" |
120 | < | " This means MoLocator cannot initalize it's position.\n", |
118 | > | "MoLocator::calcRef error.\n" |
119 | > | "\tComponent %s, atom %s does not have a position specified.\n" |
120 | > | "\tThis means MoLocator cannot initalize it's position.\n", |
121 | myStamp->getName().c_str(), | |
122 | currAtomStamp->getType().c_str()); | |
123 | ||
# | Line 177 | Line 180 | namespace OpenMD { | |
180 | ||
181 | refMolCom /= molMass; | |
182 | ||
183 | < | //move the reference center of mass to (0,0,0) and adjust the reference coordinate |
184 | < | //of the integrabel objects |
183 | > | //move the reference center of mass to (0,0,0) and adjust the |
184 | > | //reference coordinate of the integrabel objects |
185 | for(int i = 0; i < nIntegrableObjects; i++) | |
186 | refCoords[i] -= refMolCom; | |
187 | } | |
188 | ||
189 | < | RealType getAtomMass(const std::string& at, ForceField* myFF) { |
189 | > | RealType MoLocator::getAtomMass(const std::string& at, ForceField* myFF) { |
190 | RealType mass; | |
191 | AtomType* atomType= myFF->getAtomType(at); | |
192 | if (atomType != NULL) { | |
# | Line 195 | Line 198 | namespace OpenMD { | |
198 | return mass; | |
199 | } | |
200 | ||
201 | < | RealType getMolMass(MoleculeStamp *molStamp, ForceField *myFF) { |
202 | < | int nAtoms; |
201 | > | RealType MoLocator::getMolMass(MoleculeStamp *molStamp, ForceField *myFF) { |
202 | > | unsigned int nAtoms; |
203 | RealType totMass = 0; | |
204 | nAtoms = molStamp->getNAtoms(); | |
205 | ||
206 | < | for(size_t i = 0; i < nAtoms; i++) { |
206 | > | for(unsigned int i = 0; i < nAtoms; i++) { |
207 | AtomStamp *currAtomStamp = molStamp->getAtomStamp(i); | |
208 | totMass += getAtomMass(currAtomStamp->getType(), myFF); | |
209 | } | |
210 | return totMass; | |
211 | } | |
212 | < | RotMat3x3d latVec2RotMat(const Vector3d& lv){ |
212 | > | |
213 | > | RotMat3x3d MoLocator::latVec2RotMat(const Vector3d& lv){ |
214 | ||
215 | RealType theta =acos(lv[2]); | |
216 | RealType phi = atan2(lv[1], lv[0]); | |
217 | RealType psi = 0; | |
218 | ||
219 | < | return RotMat3x3d(phi, theta, psi); |
216 | < | |
219 | > | return RotMat3x3d(phi, theta, psi); |
220 | } | |
221 | } | |
222 |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |