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

Comparing trunk/src/brains/Stats.cpp (file contents):
Revision 1782 by gezelter, Wed Aug 22 02:28:28 2012 UTC vs.
Revision 2022 by gezelter, Fri Sep 26 22:22:28 2014 UTC

# 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).          
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   */
# Line 195 | Line 195 | namespace OpenMD {
195  
196      StatsData hydrogenbonding_potential;
197      hydrogenbonding_potential.units =  "kcal/mol";
198 <    hydrogenbonding_potential.title =  "Metallic Potential";    
198 >    hydrogenbonding_potential.title =  "Hydrogen Bonding Potential";    
199      hydrogenbonding_potential.dataType = "RealType";
200      hydrogenbonding_potential.accumulator = new Accumulator();
201      data_[HYDROGENBONDING_POTENTIAL] = hydrogenbonding_potential;
202      statsMap_["HYDROGENBONDING_POTENTIAL"] =  HYDROGENBONDING_POTENTIAL;
203 +
204 +    StatsData reciprocal_potential;
205 +    reciprocal_potential.units =  "kcal/mol";
206 +    reciprocal_potential.title =  "Reciprocal Space Potential";    
207 +    reciprocal_potential.dataType = "RealType";
208 +    reciprocal_potential.accumulator = new Accumulator();
209 +    data_[RECIPROCAL_POTENTIAL] = reciprocal_potential;
210 +    statsMap_["RECIPROCAL_POTENTIAL"] =  RECIPROCAL_POTENTIAL;
211  
212      StatsData short_range_potential;
213      short_range_potential.units =  "kcal/mol";
# Line 273 | Line 281 | namespace OpenMD {
281      data_[SYSTEM_DIPOLE] = system_dipole;
282      statsMap_["SYSTEM_DIPOLE"] =  SYSTEM_DIPOLE;
283  
284 +    StatsData system_quadrupole;
285 +    system_quadrupole.units =  "C*m*m";
286 +    system_quadrupole.title =  "System Quadrupole";
287 +    system_quadrupole.dataType = "Mat3x3d";
288 +    system_quadrupole.accumulator = new MatrixAccumulator();
289 +    data_[SYSTEM_QUADRUPOLE] = system_quadrupole;
290 +    statsMap_["SYSTEM_QUADRUPOLE"] =  SYSTEM_QUADRUPOLE;
291 +
292      StatsData tagged_pair_distance;
293      tagged_pair_distance.units =  "Ang";
294      tagged_pair_distance.title =  "Tagged_Pair_Distance";
# Line 312 | Line 328 | namespace OpenMD {
328      electronic_temperature.accumulator = new Accumulator();
329      data_[ELECTRONIC_TEMPERATURE] = electronic_temperature;
330      statsMap_["ELECTRONIC_TEMPERATURE"] = ELECTRONIC_TEMPERATURE;
331 +
332 +    StatsData com;
333 +    com.units =  "A";
334 +    com.title =  "Center of Mass";
335 +    com.dataType = "Vector3d";
336 +    com.accumulator = new VectorAccumulator();
337 +    data_[COM] = com;
338 +    statsMap_["COM"] =  COM;
339 +
340 +    StatsData comVel;
341 +    comVel.units =  "A/fs";
342 +    comVel.title =  "Center of Mass Velocity";
343 +    comVel.dataType = "Vector3d";
344 +    comVel.accumulator = new VectorAccumulator();
345 +    data_[COM_VELOCITY] = comVel;
346 +    statsMap_["COM_VELOCITY"] =  COM_VELOCITY;
347 +
348 +    StatsData angMom;
349 +    angMom.units =  "amu A^2/fs";
350 +    angMom.title =  "Angular Momentum";
351 +    angMom.dataType = "Vector3d";
352 +    angMom.accumulator = new VectorAccumulator();
353 +    data_[ANGULAR_MOMENTUM] = angMom;
354 +    statsMap_["ANGULAR_MOMENTUM"] =  ANGULAR_MOMENTUM;
355  
356      // Now, set some defaults in the mask:
357  
# Line 344 | Line 384 | namespace OpenMD {
384        statsMask_.set(SYSTEM_DIPOLE);
385      }
386  
387 +    // Why do we have both of these?
388 +    if (simParams->getAccumulateBoxQuadrupole()) {
389 +      statsMask_.set(SYSTEM_QUADRUPOLE);
390 +    }
391 +    if (info_->getCalcBoxQuadrupole()){
392 +      statsMask_.set(SYSTEM_QUADRUPOLE);
393 +    }
394 +
395      if (simParams->havePrintHeatFlux()) {
396        if (simParams->getPrintHeatFlux()){
397          statsMask_.set(HEATFLUX);
# Line 379 | Line 427 | namespace OpenMD {
427      }  
428    }
429  
430 +  Stats::~Stats() {
431 +    data_.clear();
432 +    statsMap_.clear();
433 +  }
434  
435    std::string Stats::getTitle(int index) {
436      assert(index >=0 && index < ENDINDEX);
# Line 396 | Line 448 | namespace OpenMD {
448    }
449  
450    void Stats::collectStats(){
399    Globals* simParams = info_->getSimParams();
451      Snapshot* snap = info_->getSnapshotManager()->getCurrentSnapshot();
452      Thermo thermo(info_);
453    
# Line 404 | Line 455 | namespace OpenMD {
455        if (statsMask_[i]) {
456          switch (i) {
457          case TIME:
458 <          data_[i].accumulator->add(snap->getTime());
458 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getTime());
459            break;
460          case KINETIC_ENERGY:
461 <          data_[i].accumulator->add(thermo.getKinetic());
461 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getKinetic());
462            break;
463          case POTENTIAL_ENERGY:
464 <          data_[i].accumulator->add(thermo.getPotential());
464 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getPotential());
465            break;
466          case TOTAL_ENERGY:
467 <          data_[i].accumulator->add(thermo.getTotalEnergy());
467 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTotalEnergy());
468            break;
469          case TEMPERATURE:
470 <          data_[i].accumulator->add(thermo.getTemperature());
470 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTemperature());
471            break;
472          case PRESSURE:
473 <          data_[i].accumulator->add(thermo.getPressure());
473 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getPressure());
474            break;
475          case VOLUME:
476 <          data_[i].accumulator->add(thermo.getVolume());
476 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getVolume());
477            break;
478          case CONSERVED_QUANTITY:
479 <          data_[i].accumulator->add(snap->getConservedQuantity());
479 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getConservedQuantity());
480            break;
481          case PRESSURE_TENSOR:
482            dynamic_cast<MatrixAccumulator *>(data_[i].accumulator)->add(thermo.getPressureTensor());
# Line 433 | Line 484 | namespace OpenMD {
484          case SYSTEM_DIPOLE:
485            dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getSystemDipole());
486            break;
487 +        case SYSTEM_QUADRUPOLE:
488 +          dynamic_cast<MatrixAccumulator *>(data_[i].accumulator)->add(thermo.getSystemQuadrupole());
489 +          break;
490          case HEATFLUX:
491            dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getHeatFlux());
492            break;
493          case HULLVOLUME:
494 <          data_[i].accumulator->add(thermo.getHullVolume());
494 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getHullVolume());
495            break;
496          case GYRVOLUME:
497 <          data_[i].accumulator->add(thermo.getGyrationalVolume());
497 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getGyrationalVolume());
498            break;
499          case TRANSLATIONAL_KINETIC:
500 <          data_[i].accumulator->add(thermo.getTranslationalKinetic());
500 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTranslationalKinetic());
501            break;
502          case ROTATIONAL_KINETIC:
503 <          data_[i].accumulator->add(thermo.getRotationalKinetic());
503 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getRotationalKinetic());
504            break;
505          case LONG_RANGE_POTENTIAL:
506 <          data_[i].accumulator->add(snap->getLongRangePotential());
506 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotential());
507            break;
508          case VANDERWAALS_POTENTIAL:
509 <          data_[i].accumulator->add(snap->getLongRangePotentials()[VANDERWAALS_FAMILY]);
509 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[VANDERWAALS_FAMILY]);
510            break;
511          case ELECTROSTATIC_POTENTIAL:
512 <          data_[i].accumulator->add(snap->getLongRangePotentials()[ELECTROSTATIC_FAMILY]);
512 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[ELECTROSTATIC_FAMILY]);
513            break;
514          case METALLIC_POTENTIAL:
515 <          data_[i].accumulator->add(snap->getLongRangePotentials()[METALLIC_FAMILY]);
515 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[METALLIC_FAMILY]);
516            break;
517          case HYDROGENBONDING_POTENTIAL:
518 <          data_[i].accumulator->add(snap->getLongRangePotentials()[HYDROGENBONDING_FAMILY]);
518 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[HYDROGENBONDING_FAMILY]);
519            break;
520 +        case RECIPROCAL_POTENTIAL:
521 +          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getReciprocalPotential());
522 +          break;
523          case SHORT_RANGE_POTENTIAL:
524 <          data_[i].accumulator->add(snap->getShortRangePotential());
524 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getShortRangePotential());
525            break;
526          case BOND_POTENTIAL:
527 <          data_[i].accumulator->add(snap->getBondPotential());
527 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getBondPotential());
528            break;
529          case BEND_POTENTIAL:
530 <          data_[i].accumulator->add(snap->getBendPotential());
530 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getBendPotential());
531            break;
532          case DIHEDRAL_POTENTIAL:
533 <          data_[i].accumulator->add(snap->getTorsionPotential());
533 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getTorsionPotential());
534            break;
535          case INVERSION_POTENTIAL:
536 <          data_[i].accumulator->add(snap->getInversionPotential());
536 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getInversionPotential());
537            break;
538          case RAW_POTENTIAL:
539 <          data_[i].accumulator->add(snap->getRawPotential());
539 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getRawPotential());
540            break;
541          case RESTRAINT_POTENTIAL:
542 <          data_[i].accumulator->add(snap->getRestraintPotential());
542 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getRestraintPotential());
543            break;
544          case TAGGED_PAIR_DISTANCE:
545 <          data_[i].accumulator->add(thermo.getTaggedAtomPairDistance());
545 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTaggedAtomPairDistance());
546            break;
547 +        case ELECTRONIC_TEMPERATURE:
548 +          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getElectronicTemperature());
549 +          break;
550 +        case COM:
551 +          dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getCom());
552 +          break;
553 +        case COM_VELOCITY:
554 +          dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getComVel());
555 +          break;
556 +        case ANGULAR_MOMENTUM:
557 +          dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getAngularMomentum());
558 +          break;
559            /*
560          case SHADOWH:
561 <          data_[i].accumulator->add(thermo.getShadowHamiltionian());
561 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getShadowHamiltionian());
562            break;
563          case HELFANDMOMENT:
564 <          data_[i].accumulator->add(thermo.getHelfandMoment());
564 >          dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getHelfandMoment());
565            break;
566            */
498        case ELECTRONIC_TEMPERATURE:
499          data_[i].accumulator->add(thermo.getElectronicTemperature());
500          break;
567          }
568        }
569      }
# Line 506 | Line 572 | namespace OpenMD {
572    int Stats::getIntData(int index) {
573      assert(index >=0 && index < ENDINDEX);
574      RealType value;
575 <    data_[index].accumulator->getLastValue(value);
575 >    dynamic_cast<Accumulator *>(data_[index].accumulator)->getLastValue(value);
576      return (int) value;
577    }
578    RealType Stats::getRealData(int index) {
579      assert(index >=0 && index < ENDINDEX);
580      RealType value(0.0);
581 <    data_[index].accumulator->getLastValue(value);
581 >    dynamic_cast<Accumulator *>(data_[index].accumulator)->getLastValue(value);
582      return value;
583    }
584    Vector3d Stats::getVectorData(int index) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines