ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/NVT.cpp
(Generate patch)

Comparing trunk/OOPSE/libmdtools/NVT.cpp (file contents):
Revision 855 by mmeineke, Thu Nov 6 22:01:37 2003 UTC vs.
Revision 1097 by gezelter, Mon Apr 12 20:32:20 2004 UTC

# Line 50 | Line 50 | template<typename T> NVT<T>::NVT ( SimInfo *theInfo, F
50      }
51    }
52  
53 <  oldVel = new double[3*nAtoms];
54 <  oldJi = new double[3*nAtoms];
53 >
54 >  std::cerr << "building oldVel with \t" << integrableObjects.size() << "\n";
55 >  oldVel = new double[3*integrableObjects.size()];
56 >  oldJi = new double[3*integrableObjects.size()];
57   }
58  
59   template<typename T> NVT<T>::~NVT() {
# Line 73 | Line 75 | template<typename T> void NVT<T>::moveA() {
75  
76    instTemp = tStats->getTemperature();
77  
78 <  for( i=0; i<nAtoms; i++ ){
78 >  for( i=0; i < integrableObjects.size(); i++ ){
79  
80 <    atoms[i]->getVel( vel );
81 <    atoms[i]->getPos( pos );
82 <    atoms[i]->getFrc( frc );
80 >    integrableObjects[i]->getVel( vel );
81 >    integrableObjects[i]->getPos( pos );
82 >    integrableObjects[i]->getFrc( frc );
83  
84 <    mass = atoms[i]->getMass();
84 >    mass = integrableObjects[i]->getMass();
85  
86      for (j=0; j < 3; j++) {
87        // velocity half step  (use chi from previous step here):
# Line 88 | Line 90 | template<typename T> void NVT<T>::moveA() {
90        pos[j] += dt * vel[j];
91      }
92  
93 <    atoms[i]->setVel( vel );
94 <    atoms[i]->setPos( pos );
93 >    integrableObjects[i]->setVel( vel );
94 >    integrableObjects[i]->setPos( pos );
95  
96 <    if( atoms[i]->isDirectional() ){
96 >    if( integrableObjects[i]->isDirectional() ){
97  
96      dAtom = (DirectionalAtom *)atoms[i];
97
98        // get and convert the torque to body frame
99  
100 <      dAtom->getTrq( Tb );
101 <      dAtom->lab2Body( Tb );
100 >      integrableObjects[i]->getTrq( Tb );
101 >      integrableObjects[i]->lab2Body( Tb );
102  
103        // get the angular momentum, and propagate a half step
104  
105 <      dAtom->getJ( ji );
105 >      integrableObjects[i]->getJ( ji );
106  
107        for (j=0; j < 3; j++)
108          ji[j] += dt2 * (Tb[j] * eConvert - ji[j]*chi);
109  
110 <      this->rotationPropagation( dAtom, ji );
110 >      this->rotationPropagation( integrableObjects[i], ji );
111  
112 <      dAtom->setJ( ji );
112 >      integrableObjects[i]->setJ( ji );
113      }
114    }
115  
# Line 127 | Line 127 | template<typename T> void NVT<T>::moveB( void ){
127  
128   template<typename T> void NVT<T>::moveB( void ){
129    int i, j, k;
130  DirectionalAtom* dAtom;
130    double Tb[3], ji[3];
131    double vel[3], frc[3];
132    double mass;
# Line 138 | Line 137 | template<typename T> void NVT<T>::moveB( void ){
137  
138    oldChi = chi;
139  
140 <  for( i=0; i<nAtoms; i++ ){
140 >  for( i=0; i < integrableObjects.size(); i++ ){
141  
142 <    atoms[i]->getVel( vel );
142 >    integrableObjects[i]->getVel( vel );
143  
144      for (j=0; j < 3; j++)
145        oldVel[3*i + j]  = vel[j];
146  
147 <    if( atoms[i]->isDirectional() ){
147 >    if( integrableObjects[i]->isDirectional() ){
148  
149 <      dAtom = (DirectionalAtom *)atoms[i];
149 >      integrableObjects[i]->getJ( ji );
150  
152      dAtom->getJ( ji );
153
151        for (j=0; j < 3; j++)
152          oldJi[3*i + j] = ji[j];
153  
# Line 169 | Line 166 | template<typename T> void NVT<T>::moveB( void ){
166      chi = oldChi + dt2 * ( instTemp / targetTemp - 1.0) /
167        (tauThermostat*tauThermostat);
168  
169 <    for( i=0; i<nAtoms; i++ ){
169 >    for( i=0; i < integrableObjects.size(); i++ ){
170  
171 <      atoms[i]->getFrc( frc );
172 <      atoms[i]->getVel(vel);
171 >      integrableObjects[i]->getFrc( frc );
172 >      integrableObjects[i]->getVel(vel);
173  
174 <      mass = atoms[i]->getMass();
174 >      mass = integrableObjects[i]->getMass();
175  
176        // velocity half step
177        for (j=0; j < 3; j++)
178          vel[j] = oldVel[3*i+j] + dt2 * ((frc[j] / mass ) * eConvert - oldVel[3*i + j]*chi);
179  
180 <      atoms[i]->setVel( vel );
180 >      integrableObjects[i]->setVel( vel );
181  
182 <      if( atoms[i]->isDirectional() ){
182 >      if( integrableObjects[i]->isDirectional() ){
183  
187        dAtom = (DirectionalAtom *)atoms[i];
188
184          // get and convert the torque to body frame
185  
186 <        dAtom->getTrq( Tb );
187 <        dAtom->lab2Body( Tb );
186 >        integrableObjects[i]->getTrq( Tb );
187 >        integrableObjects[i]->lab2Body( Tb );
188  
189          for (j=0; j < 3; j++)
190            ji[j] = oldJi[3*i + j] + dt2 * (Tb[j] * eConvert - oldJi[3*i+j]*chi);
191  
192 <        dAtom->setJ( ji );
192 >        integrableObjects[i]->setJ( ji );
193        }
194      }
195  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines