ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/applications/staticProps/SpatialStatistics.cpp
(Generate patch)

Comparing:
branches/development/src/applications/staticProps/SpatialStatistics.cpp (file contents), Revision 1874 by gezelter, Wed May 15 15:09:35 2013 UTC vs.
trunk/src/applications/staticProps/SpatialStatistics.cpp (file contents), Revision 1945 by gezelter, Thu Nov 7 16:42:46 2013 UTC

# Line 43 | Line 43
43   #include "applications/staticProps/SpatialStatistics.hpp"
44   #include "io/DumpReader.hpp"
45   #include "primitives/Molecule.hpp"
46 + #ifdef _MSC_VER
47 + #define isnan(x) _isnan((x))
48 + #define isinf(x) (!_finite(x) && !_isnan(x))
49 + #endif
50  
51   namespace OpenMD {
52    
# Line 137 | Line 141 | namespace OpenMD {
141        processStuntDouble( sd, bin );
142  
143        dynamic_cast<Accumulator *>(counts_->accumulator[bin])->add(1);
144 <    }      
144 >    }
145    }
146    
147  
# Line 221 | Line 225 | namespace OpenMD {
225      int n = dat->accumulator[bin]->count();
226      if (n == 0) return;
227  
224    RealType r;
225    Vector3d v;
226
228      if( dat->dataType == odtReal ) {
229 +      RealType r;
230        dynamic_cast<Accumulator*>(dat->accumulator[bin])->getAverage(r);      
231        if (isinf(r) || isnan(r) ) {      
232          sprintf( painCave.errMsg,
233                   "SpatialStatistics detected a numerical error writing:\n"
234 <                 "\t%s for bin %d",
234 >                 "\t%s for bin %u",
235                   dat->title.c_str(), bin);
236          painCave.isFatal = 1;
237          simError();
# Line 238 | Line 240 | namespace OpenMD {
240        os << "\t" << r;      
241  
242      } else if ( dat->dataType == odtVector3 ) {
243 +      Vector3d v;
244        dynamic_cast<VectorAccumulator*>(dat->accumulator[bin])->getAverage(v);
245        if (isinf(v[0]) || isnan(v[0]) ||
246            isinf(v[1]) || isnan(v[1]) ||
247            isinf(v[2]) || isnan(v[2]) ) {      
248          sprintf( painCave.errMsg,
249                   "SpatialStatistics detected a numerical error writing:\n"
250 <                 "\t%s for bin %d",
250 >                 "\t%s for bin %u",
251                   dat->title.c_str(), bin);
252          painCave.isFatal = 1;
253          simError();
# Line 260 | Line 263 | namespace OpenMD {
263      int n = dat->accumulator[bin]->count();
264      if (n == 0) return;
265  
263    RealType r;
264    Vector3d v;
265
266      if( dat->dataType == odtReal ) {
267 +      RealType r;
268        dynamic_cast<Accumulator*>(dat->accumulator[bin])->getStdDev(r);      
269        if (isinf(r) || isnan(r) ) {      
270          sprintf( painCave.errMsg,
271                   "SpatialStatistics detected a numerical error writing:\n"
272 <                 "\tstandard deviation of %s for bin %d",
272 >                 "\tstandard deviation of %s for bin %u",
273                   dat->title.c_str(), bin);
274          painCave.isFatal = 1;
275          simError();
# Line 277 | Line 278 | namespace OpenMD {
278        os << "\t" << r;      
279  
280      } else if ( dat->dataType == odtVector3 ) {
281 +      Vector3d v;
282        dynamic_cast<VectorAccumulator*>(dat->accumulator[bin])->getStdDev(v);
283        if (isinf(v[0]) || isnan(v[0]) ||
284            isinf(v[1]) || isnan(v[1]) ||
285            isinf(v[2]) || isnan(v[2]) ) {      
286          sprintf( painCave.errMsg,
287                   "SpatialStatistics detected a numerical error writing:\n"
288 <                 "\tstandard deviation of %s for bin %d",
288 >                 "\tstandard deviation of %s for bin %u",
289                   dat->title.c_str(), bin);
290          painCave.isFatal = 1;
291          simError();
# Line 321 | Line 323 | namespace OpenMD {
323    }
324  
325    SlabStatistics::~SlabStatistics() {
324    delete z_;
326    }
327  
328  
329    void SlabStatistics::processFrame(int istep) {
330      RealType z;
331 +
332      hmat_ = currentSnapshot_->getHmat();
333      for (int i = 0; i < nBins_; i++) {
334        z = (((RealType)i + 0.5) / (RealType)nBins_) * hmat_(2,2);
# Line 349 | Line 351 | namespace OpenMD {
351  
352    ShellStatistics::ShellStatistics(SimInfo* info, const string& filename,
353                                     const string& sele, int nbins) :
354 <    SpatialStatistics(info, filename, sele, nbins){
354 >    SpatialStatistics(info, filename, sele, nbins), coordinateOrigin_(V3Zero) {
355      
354    coordinateOrigin_ = V3Zero;
356      binWidth_ = 1.0;
357  
358 +    Globals* simParams = info->getSimParams();
359 +    RNEMDParameters* rnemdParams = simParams->getRNEMDParameters();
360 +    bool hasCoordinateOrigin = rnemdParams->haveCoordinateOrigin();
361 +    
362 +    if (hasCoordinateOrigin) {
363 +      coordinateOrigin_ = rnemdParams->getCoordinateOrigin();
364 +    } else {
365 +      coordinateOrigin_ = V3Zero;
366 +    }
367 +    
368      r_ = new OutputData;
369      r_->units =  "Angstroms";
370      r_->title =  "R";
# Line 371 | Line 382 | namespace OpenMD {
382    }
383  
384    ShellStatistics::~ShellStatistics() {
374    delete r_;
385    }
386  
387 <  int ShellStatistics::getBin(Vector3d pos) {    
387 >  int ShellStatistics::getBin(Vector3d pos) {
388      Vector3d rPos = pos - coordinateOrigin_;
389      return int(rPos.length() / binWidth_);
390    }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines