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

Comparing trunk/OOPSE/libmdtools/Thermo.cpp (file contents):
Revision 1127 by tim, Tue Apr 20 16:56:40 2004 UTC vs.
Revision 1192 by gezelter, Mon May 24 21:03:30 2004 UTC

# Line 10 | Line 10 | using namespace std;
10   #include "SRI.hpp"
11   #include "Integrator.hpp"
12   #include "simError.h"
13 + #include "MatVec3.h"
14  
15   #ifdef IS_MPI
16   #define __C
17   #include "mpiSimulation.hpp"
18   #endif // is_mpi
19  
20 + inline double roundMe( double x ){
21 +          return ( x >= 0 ) ? floor( x + 0.5 ) : ceil( x - 0.5 );
22 + }
23 +
24   Thermo::Thermo( SimInfo* the_info ) {
25    info = the_info;
26    int baseSeed = the_info->getSeed();
# Line 195 | Line 200 | void Thermo::getPressureTensor(double press[3][3]){
200    const double e_convert = 4.184e-4;
201  
202    double molmass, volume;
203 <  double vcom[3];
203 >  double vcom[3], pcom[3], fcom[3], scaled[3];
204    double p_local[9], p_global[9];
205    int i, j, k, nMols;
206    Molecule* molecules;
# Line 210 | Line 215 | void Thermo::getPressureTensor(double press[3][3]){
215      p_global[i] = 0.0;
216    }
217  
218 <  for (i=0; i < nMols; i++) {
214 <    molmass = molecules[i].getCOMvel(vcom);
218 >  for (i=0; i < info->integrableObjects.size(); i++) {
219  
220 +    molmass = info->integrableObjects[i]->getMass();
221 +    
222 +    info->integrableObjects[i]->getVel(vcom);
223 +    info->integrableObjects[i]->getPos(pcom);
224 +    info->integrableObjects[i]->getFrc(fcom);
225 +
226 +    matVecMul3(info->HmatInv, pcom, scaled);
227 +  
228 +    for(j=0; j<3; j++)
229 +      scaled[j] -= roundMe(scaled[j]);
230 +
231 +    // calc the wrapped real coordinates from the wrapped scaled coordinates
232 +  
233 +    matVecMul3(info->Hmat, scaled, pcom);
234 +    
235      p_local[0] += molmass * (vcom[0] * vcom[0]);
236      p_local[1] += molmass * (vcom[0] * vcom[1]);
237      p_local[2] += molmass * (vcom[0] * vcom[2]);
# Line 222 | Line 241 | void Thermo::getPressureTensor(double press[3][3]){
241      p_local[6] += molmass * (vcom[2] * vcom[0]);
242      p_local[7] += molmass * (vcom[2] * vcom[1]);
243      p_local[8] += molmass * (vcom[2] * vcom[2]);
244 +    
245    }
246  
247    // Get total for entire system from MPI.
# Line 240 | Line 260 | void Thermo::getPressureTensor(double press[3][3]){
260      for (j = 0; j < 3; j++) {
261        k = 3*i + j;
262        press[i][j] = (p_global[k] + info->tau[k]*e_convert) / volume;
243
263      }
264    }
265   }
# Line 431 | Line 450 | void Thermo::removeCOMdrift() {
450          
451      info->integrableObjects[vd]->setVel( aVel );
452    }
453 < }
453 > }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines