ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/OpenMD/trunk/src/brains/Stats.cpp
Revision: 2022
Committed: Fri Sep 26 22:22:28 2014 UTC (10 years, 7 months ago) by gezelter
File size: 23023 byte(s)
Log Message:
Added support for accumulateBoxQuadrupole flag

File Contents

# User Rev Content
1 gezelter 507 /*
2 chuckv 1402 * Copyright (c) 2005, 2009 The University of Notre Dame. All Rights Reserved.
3 gezelter 246 *
4     * The University of Notre Dame grants you ("Licensee") a
5     * non-exclusive, royalty free, license to use, modify and
6     * redistribute this software in source and binary code form, provided
7     * that the following conditions are met:
8     *
9 gezelter 1390 * 1. Redistributions of source code must retain the above copyright
10 gezelter 246 * notice, this list of conditions and the following disclaimer.
11     *
12 gezelter 1390 * 2. Redistributions in binary form must reproduce the above copyright
13 gezelter 246 * notice, this list of conditions and the following disclaimer in the
14     * documentation and/or other materials provided with the
15     * distribution.
16     *
17     * This software is provided "AS IS," without a warranty of any
18     * kind. All express or implied conditions, representations and
19     * warranties, including any implied warranty of merchantability,
20     * fitness for a particular purpose or non-infringement, are hereby
21     * excluded. The University of Notre Dame and its licensors shall not
22     * be liable for any damages suffered by licensee as a result of
23     * using, modifying or distributing the software or its
24     * derivatives. In no event will the University of Notre Dame or its
25     * licensors be liable for any lost revenue, profit or data, or for
26     * direct, indirect, special, consequential, incidental or punitive
27     * damages, however caused and regardless of the theory of liability,
28     * arising out of the use of or inability to use software, even if the
29     * University of Notre Dame has been advised of the possibility of
30     * such damages.
31 gezelter 1390 *
32     * SUPPORT OPEN SCIENCE! If you use OpenMD or its source code in your
33     * research, please cite the appropriate papers when you publish your
34     * work. Good starting points are:
35     *
36     * [1] Meineke, et al., J. Comp. Chem. 26, 252-271 (2005).
37     * [2] Fennell & Gezelter, J. Chem. Phys. 124, 234104 (2006).
38 gezelter 1879 * [3] Sun, Lin & Gezelter, J. Chem. Phys. 128, 234107 (2008).
39 gezelter 1782 * [4] Kuang & Gezelter, J. Chem. Phys. 133, 164101 (2010).
40     * [5] Vardeman, Stocker & Gezelter, J. Chem. Theory Comput. 7, 834 (2011).
41 gezelter 246 */
42    
43 gezelter 507 /**
44     * @file Stats.cpp
45     * @author tlin
46     * @date 11/04/2004
47     * @time 14:26am
48     * @version 1.0
49     */
50 gezelter 246
51     #include "brains/Stats.hpp"
52 gezelter 1782 #include "brains/Thermo.hpp"
53 gezelter 246
54 gezelter 1390 namespace OpenMD {
55 gezelter 246
56 gezelter 1782 Stats::Stats(SimInfo* info) : isInit_(false), info_(info) {
57 gezelter 246
58     if (!isInit_) {
59 gezelter 507 init();
60     isInit_ = true;
61 gezelter 246 }
62 gezelter 507 }
63 gezelter 246
64 gezelter 507 void Stats::init() {
65 gezelter 1782
66     data_.resize(Stats::ENDINDEX);
67 gezelter 246
68 gezelter 1782 StatsData time;
69     time.units = "fs";
70     time.title = "Time";
71     time.dataType = "RealType";
72     time.accumulator = new Accumulator();
73     data_[TIME] = time;
74     statsMap_["TIME"] = TIME;
75    
76     StatsData total_energy;
77     total_energy.units = "kcal/mol";
78     total_energy.title = "Total Energy";
79     total_energy.dataType = "RealType";
80     total_energy.accumulator = new Accumulator();
81     data_[TOTAL_ENERGY] = total_energy;
82     statsMap_["TOTAL_ENERGY"] = TOTAL_ENERGY;
83    
84     StatsData potential_energy;
85     potential_energy.units = "kcal/mol";
86     potential_energy.title = "Potential Energy";
87     potential_energy.dataType = "RealType";
88     potential_energy.accumulator = new Accumulator();
89     data_[POTENTIAL_ENERGY] = potential_energy;
90     statsMap_["POTENTIAL_ENERGY"] = POTENTIAL_ENERGY;
91    
92     StatsData kinetic_energy;
93     kinetic_energy.units = "kcal/mol";
94     kinetic_energy.title = "Kinetic Energy";
95     kinetic_energy.dataType = "RealType";
96     kinetic_energy.accumulator = new Accumulator();
97     data_[KINETIC_ENERGY] = kinetic_energy;
98     statsMap_["KINETIC_ENERGY"] = KINETIC_ENERGY;
99    
100     StatsData temperature;
101     temperature.units = "K";
102     temperature.title = "Temperature";
103     temperature.dataType = "RealType";
104     temperature.accumulator = new Accumulator();
105     data_[TEMPERATURE] = temperature;
106     statsMap_["TEMPERATURE"] = TEMPERATURE;
107    
108     StatsData pressure;
109     pressure.units = "atm";
110     pressure.title = "Pressure";
111     pressure.dataType = "RealType";
112     pressure.accumulator = new Accumulator();
113     data_[PRESSURE] = pressure;
114     statsMap_["PRESSURE"] = PRESSURE;
115    
116     StatsData volume;
117     volume.units = "A^3";
118     volume.title = "Volume";
119     volume.dataType = "RealType";
120     volume.accumulator = new Accumulator();
121     data_[VOLUME] = volume;
122     statsMap_["VOLUME"] = VOLUME;
123    
124     StatsData hullvolume;
125     hullvolume.units = "A^3";
126     hullvolume.title = "Hull Volume";
127     hullvolume.dataType = "RealType";
128     hullvolume.accumulator = new Accumulator();
129     data_[HULLVOLUME] = hullvolume;
130     statsMap_["HULLVOLUME"] = HULLVOLUME;
131    
132     StatsData gyrvolume;
133     gyrvolume.units = "A^3";
134     gyrvolume.title = "Gyrational Volume";
135     gyrvolume.dataType = "RealType";
136     gyrvolume.accumulator = new Accumulator();
137     data_[GYRVOLUME] = gyrvolume;
138     statsMap_["GYRVOLUME"] = GYRVOLUME;
139    
140     StatsData conserved_quantity;
141     conserved_quantity.units = "kcal/mol";
142     conserved_quantity.title = "Conserved Quantity";
143     conserved_quantity.dataType = "RealType";
144     conserved_quantity.accumulator = new Accumulator();
145     data_[CONSERVED_QUANTITY] = conserved_quantity;
146     statsMap_["CONSERVED_QUANTITY"] = CONSERVED_QUANTITY;
147    
148     StatsData translational_kinetic;
149     translational_kinetic.units = "kcal/mol";
150     translational_kinetic.title = "Translational Kinetic";
151     translational_kinetic.dataType = "RealType";
152     translational_kinetic.accumulator = new Accumulator();
153     data_[TRANSLATIONAL_KINETIC] = translational_kinetic;
154     statsMap_["TRANSLATIONAL_KINETIC"] = TRANSLATIONAL_KINETIC;
155    
156     StatsData rotational_kinetic;
157     rotational_kinetic.units = "kcal/mol";
158     rotational_kinetic.title = "Rotational Kinetic";
159     rotational_kinetic.dataType = "RealType";
160     rotational_kinetic.accumulator = new Accumulator();
161     data_[ROTATIONAL_KINETIC] = rotational_kinetic;
162     statsMap_["ROTATIONAL_KINETIC"] = ROTATIONAL_KINETIC;
163    
164     StatsData long_range_potential;
165     long_range_potential.units = "kcal/mol";
166     long_range_potential.title = "Long Range Potential";
167     long_range_potential.dataType = "RealType";
168     long_range_potential.accumulator = new Accumulator();
169     data_[LONG_RANGE_POTENTIAL] = long_range_potential;
170     statsMap_["LONG_RANGE_POTENTIAL"] = LONG_RANGE_POTENTIAL;
171    
172     StatsData vanderwaals_potential;
173     vanderwaals_potential.units = "kcal/mol";
174     vanderwaals_potential.title = "van der waals Potential";
175     vanderwaals_potential.dataType = "RealType";
176     vanderwaals_potential.accumulator = new Accumulator();
177     data_[VANDERWAALS_POTENTIAL] = vanderwaals_potential;
178     statsMap_["VANDERWAALS_POTENTIAL"] = VANDERWAALS_POTENTIAL;
179    
180     StatsData electrostatic_potential;
181     electrostatic_potential.units = "kcal/mol";
182     electrostatic_potential.title = "Electrostatic Potential";
183     electrostatic_potential.dataType = "RealType";
184     electrostatic_potential.accumulator = new Accumulator();
185     data_[ELECTROSTATIC_POTENTIAL] = electrostatic_potential;
186     statsMap_["ELECTROSTATIC_POTENTIAL"] = ELECTROSTATIC_POTENTIAL;
187    
188     StatsData metallic_potential;
189     metallic_potential.units = "kcal/mol";
190     metallic_potential.title = "Metallic Potential";
191     metallic_potential.dataType = "RealType";
192     metallic_potential.accumulator = new Accumulator();
193     data_[METALLIC_POTENTIAL] = metallic_potential;
194     statsMap_["METALLIC_POTENTIAL"] = METALLIC_POTENTIAL;
195    
196     StatsData hydrogenbonding_potential;
197     hydrogenbonding_potential.units = "kcal/mol";
198 gezelter 1834 hydrogenbonding_potential.title = "Hydrogen Bonding Potential";
199 gezelter 1782 hydrogenbonding_potential.dataType = "RealType";
200     hydrogenbonding_potential.accumulator = new Accumulator();
201     data_[HYDROGENBONDING_POTENTIAL] = hydrogenbonding_potential;
202     statsMap_["HYDROGENBONDING_POTENTIAL"] = HYDROGENBONDING_POTENTIAL;
203    
204 gezelter 1925 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 gezelter 1782 StatsData short_range_potential;
213     short_range_potential.units = "kcal/mol";
214     short_range_potential.title = "Short Range Potential";
215     short_range_potential.dataType = "RealType";
216     short_range_potential.accumulator = new Accumulator();
217     data_[SHORT_RANGE_POTENTIAL] = short_range_potential;
218     statsMap_["SHORT_RANGE_POTENTIAL"] = SHORT_RANGE_POTENTIAL;
219    
220     StatsData bond_potential;
221     bond_potential.units = "kcal/mol";
222     bond_potential.title = "Bond Potential";
223     bond_potential.dataType = "RealType";
224     bond_potential.accumulator = new Accumulator();
225     data_[BOND_POTENTIAL] = bond_potential;
226     statsMap_["BOND_POTENTIAL"] = BOND_POTENTIAL;
227    
228     StatsData bend_potential;
229     bend_potential.units = "kcal/mol";
230     bend_potential.title = "Bend Potential";
231     bend_potential.dataType = "RealType";
232     bend_potential.accumulator = new Accumulator();
233     data_[BEND_POTENTIAL] = bend_potential;
234     statsMap_["BEND_POTENTIAL"] = BEND_POTENTIAL;
235 gezelter 1291
236 gezelter 1782 StatsData dihedral_potential;
237     dihedral_potential.units = "kcal/mol";
238     dihedral_potential.title = "Dihedral Potential";
239     dihedral_potential.dataType = "RealType";
240     dihedral_potential.accumulator = new Accumulator();
241     data_[DIHEDRAL_POTENTIAL] = dihedral_potential;
242     statsMap_["DIHEDRAL_POTENTIAL"] = DIHEDRAL_POTENTIAL;
243 tim 681
244 gezelter 1782 StatsData inversion_potential;
245     inversion_potential.units = "kcal/mol";
246     inversion_potential.title = "Inversion Potential";
247     inversion_potential.dataType = "RealType";
248     inversion_potential.accumulator = new Accumulator();
249     data_[INVERSION_POTENTIAL] = inversion_potential;
250     statsMap_["INVERSION_POTENTIAL"] = INVERSION_POTENTIAL;
251    
252     StatsData vraw;
253     vraw.units = "kcal/mol";
254     vraw.title = "Raw Potential";
255     vraw.dataType = "RealType";
256     vraw.accumulator = new Accumulator();
257     data_[RAW_POTENTIAL] = vraw;
258     statsMap_["RAW_POTENTIAL"] = RAW_POTENTIAL;
259    
260     StatsData vrestraint;
261     vrestraint.units = "kcal/mol";
262     vrestraint.title = "Restraint Potential";
263     vrestraint.dataType = "RealType";
264     vrestraint.accumulator = new Accumulator();
265     data_[RESTRAINT_POTENTIAL] = vrestraint;
266     statsMap_["RESTRAINT_POTENTIAL"] = RESTRAINT_POTENTIAL;
267    
268     StatsData pressure_tensor;
269     pressure_tensor.units = "amu*fs^-2*Ang^-1";
270     pressure_tensor.title = "Ptensor";
271     pressure_tensor.dataType = "Mat3x3d";
272     pressure_tensor.accumulator = new MatrixAccumulator();
273     data_[PRESSURE_TENSOR] = pressure_tensor;
274     statsMap_["PRESSURE_TENSOR"] = PRESSURE_TENSOR;
275    
276     StatsData system_dipole;
277     system_dipole.units = "C*m";
278     system_dipole.title = "System Dipole";
279     system_dipole.dataType = "Vector3d";
280     system_dipole.accumulator = new VectorAccumulator();
281     data_[SYSTEM_DIPOLE] = system_dipole;
282     statsMap_["SYSTEM_DIPOLE"] = SYSTEM_DIPOLE;
283    
284 gezelter 2022 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 gezelter 1782 StatsData tagged_pair_distance;
293     tagged_pair_distance.units = "Ang";
294     tagged_pair_distance.title = "Tagged_Pair_Distance";
295     tagged_pair_distance.dataType = "RealType";
296     tagged_pair_distance.accumulator = new Accumulator();
297     data_[TAGGED_PAIR_DISTANCE] = tagged_pair_distance;
298     statsMap_["TAGGED_PAIR_DISTANCE"] = TAGGED_PAIR_DISTANCE;
299    
300     StatsData shadowh;
301     shadowh.units = "kcal/mol";
302     shadowh.title = "Shadow Hamiltonian";
303     shadowh.dataType = "RealType";
304     shadowh.accumulator = new Accumulator();
305     data_[SHADOWH] = shadowh;
306     statsMap_["SHADOWH"] = SHADOWH;
307    
308     StatsData helfandmoment;
309     helfandmoment.units = "Ang*kcal/mol";
310     helfandmoment.title = "Thermal Helfand Moment";
311     helfandmoment.dataType = "Vector3d";
312     helfandmoment.accumulator = new VectorAccumulator();
313     data_[HELFANDMOMENT] = helfandmoment;
314     statsMap_["HELFANDMOMENT"] = HELFANDMOMENT;
315    
316     StatsData heatflux;
317     heatflux.units = "amu/fs^3";
318     heatflux.title = "Heat Flux";
319     heatflux.dataType = "Vector3d";
320     heatflux.accumulator = new VectorAccumulator();
321     data_[HEATFLUX] = heatflux;
322     statsMap_["HEATFLUX"] = HEATFLUX;
323    
324     StatsData electronic_temperature;
325     electronic_temperature.units = "K";
326     electronic_temperature.title = "Electronic Temperature";
327     electronic_temperature.dataType = "RealType";
328     electronic_temperature.accumulator = new Accumulator();
329     data_[ELECTRONIC_TEMPERATURE] = electronic_temperature;
330     statsMap_["ELECTRONIC_TEMPERATURE"] = ELECTRONIC_TEMPERATURE;
331    
332 gezelter 1879 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 gezelter 1782 // Now, set some defaults in the mask:
357    
358     Globals* simParams = info_->getSimParams();
359     std::string statFileFormatString = simParams->getStatFileFormat();
360     parseStatFileFormat(statFileFormatString);
361    
362     // if we're doing a thermodynamic integration, we'll want the raw
363     // potential as well as the full potential:
364    
365     if (simParams->getUseThermodynamicIntegration())
366     statsMask_.set(RAW_POTENTIAL);
367    
368     // if we've got restraints turned on, we'll also want a report of the
369     // total harmonic restraints
370     if (simParams->getUseRestraints()){
371     statsMask_.set(RESTRAINT_POTENTIAL);
372     }
373    
374     if (simParams->havePrintPressureTensor() &&
375     simParams->getPrintPressureTensor()){
376     statsMask_.set(PRESSURE_TENSOR);
377     }
378    
379     // Why do we have both of these?
380     if (simParams->getAccumulateBoxDipole()) {
381     statsMask_.set(SYSTEM_DIPOLE);
382     }
383     if (info_->getCalcBoxDipole()){
384     statsMask_.set(SYSTEM_DIPOLE);
385     }
386    
387 gezelter 2022 // 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 gezelter 1782 if (simParams->havePrintHeatFlux()) {
396     if (simParams->getPrintHeatFlux()){
397     statsMask_.set(HEATFLUX);
398     }
399     }
400    
401    
402     if (simParams->haveTaggedAtomPair() && simParams->havePrintTaggedPairDistance()) {
403     if (simParams->getPrintTaggedPairDistance()) {
404     statsMask_.set(TAGGED_PAIR_DISTANCE);
405     }
406     }
407    
408 gezelter 507 }
409 gezelter 246
410 gezelter 1782 void Stats::parseStatFileFormat(const std::string& format) {
411     StringTokenizer tokenizer(format, " ,;|\t\n\r");
412    
413     while(tokenizer.hasMoreTokens()) {
414     std::string token(tokenizer.nextToken());
415     toUpper(token);
416     StatsMapType::iterator i = statsMap_.find(token);
417     if (i != statsMap_.end()) {
418     statsMask_.set(i->second);
419     } else {
420     sprintf( painCave.errMsg,
421     "Stats::parseStatFileFormat: %s is not a recognized\n"
422     "\tstatFileFormat keyword.\n", token.c_str() );
423     painCave.isFatal = 0;
424     painCave.severity = OPENMD_ERROR;
425     simError();
426     }
427     }
428     }
429    
430 gezelter 1879 Stats::~Stats() {
431     data_.clear();
432     statsMap_.clear();
433     }
434 gezelter 1782
435     std::string Stats::getTitle(int index) {
436     assert(index >=0 && index < ENDINDEX);
437     return data_[index].title;
438     }
439    
440     std::string Stats::getUnits(int index) {
441     assert(index >=0 && index < ENDINDEX);
442     return data_[index].units;
443     }
444    
445     std::string Stats::getDataType(int index) {
446     assert(index >=0 && index < ENDINDEX);
447     return data_[index].dataType;
448     }
449    
450     void Stats::collectStats(){
451     Snapshot* snap = info_->getSnapshotManager()->getCurrentSnapshot();
452     Thermo thermo(info_);
453    
454     for (unsigned int i = 0; i < statsMask_.size(); ++i) {
455     if (statsMask_[i]) {
456     switch (i) {
457     case TIME:
458 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getTime());
459 gezelter 1782 break;
460     case KINETIC_ENERGY:
461 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getKinetic());
462 gezelter 1782 break;
463     case POTENTIAL_ENERGY:
464 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getPotential());
465 gezelter 1782 break;
466     case TOTAL_ENERGY:
467 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTotalEnergy());
468 gezelter 1782 break;
469     case TEMPERATURE:
470 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTemperature());
471 gezelter 1782 break;
472     case PRESSURE:
473 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getPressure());
474 gezelter 1782 break;
475     case VOLUME:
476 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getVolume());
477 gezelter 1782 break;
478     case CONSERVED_QUANTITY:
479 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getConservedQuantity());
480 gezelter 1782 break;
481     case PRESSURE_TENSOR:
482     dynamic_cast<MatrixAccumulator *>(data_[i].accumulator)->add(thermo.getPressureTensor());
483     break;
484     case SYSTEM_DIPOLE:
485     dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getSystemDipole());
486     break;
487 gezelter 2022 case SYSTEM_QUADRUPOLE:
488     dynamic_cast<MatrixAccumulator *>(data_[i].accumulator)->add(thermo.getSystemQuadrupole());
489     break;
490 gezelter 1782 case HEATFLUX:
491     dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getHeatFlux());
492     break;
493     case HULLVOLUME:
494 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getHullVolume());
495 gezelter 1782 break;
496     case GYRVOLUME:
497 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getGyrationalVolume());
498 gezelter 1782 break;
499     case TRANSLATIONAL_KINETIC:
500 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTranslationalKinetic());
501 gezelter 1782 break;
502     case ROTATIONAL_KINETIC:
503 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getRotationalKinetic());
504 gezelter 1782 break;
505     case LONG_RANGE_POTENTIAL:
506 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotential());
507 gezelter 1782 break;
508     case VANDERWAALS_POTENTIAL:
509 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[VANDERWAALS_FAMILY]);
510 gezelter 1782 break;
511     case ELECTROSTATIC_POTENTIAL:
512 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[ELECTROSTATIC_FAMILY]);
513 gezelter 1782 break;
514     case METALLIC_POTENTIAL:
515 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[METALLIC_FAMILY]);
516 gezelter 1782 break;
517     case HYDROGENBONDING_POTENTIAL:
518 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getLongRangePotentials()[HYDROGENBONDING_FAMILY]);
519 gezelter 1782 break;
520 gezelter 1925 case RECIPROCAL_POTENTIAL:
521     dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getReciprocalPotential());
522     break;
523 gezelter 1782 case SHORT_RANGE_POTENTIAL:
524 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getShortRangePotential());
525 gezelter 1782 break;
526     case BOND_POTENTIAL:
527 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getBondPotential());
528 gezelter 1782 break;
529     case BEND_POTENTIAL:
530 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getBendPotential());
531 gezelter 1782 break;
532     case DIHEDRAL_POTENTIAL:
533 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getTorsionPotential());
534 gezelter 1782 break;
535     case INVERSION_POTENTIAL:
536 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getInversionPotential());
537 gezelter 1782 break;
538     case RAW_POTENTIAL:
539 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getRawPotential());
540 gezelter 1782 break;
541     case RESTRAINT_POTENTIAL:
542 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(snap->getRestraintPotential());
543 gezelter 1782 break;
544     case TAGGED_PAIR_DISTANCE:
545 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getTaggedAtomPairDistance());
546 gezelter 1782 break;
547 gezelter 1879 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 gezelter 1782 /*
560     case SHADOWH:
561 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getShadowHamiltionian());
562 gezelter 1782 break;
563     case HELFANDMOMENT:
564 gezelter 1791 dynamic_cast<Accumulator *>(data_[i].accumulator)->add(thermo.getHelfandMoment());
565 gezelter 1782 break;
566     */
567     }
568     }
569     }
570     }
571    
572     int Stats::getIntData(int index) {
573     assert(index >=0 && index < ENDINDEX);
574     RealType value;
575 gezelter 1791 dynamic_cast<Accumulator *>(data_[index].accumulator)->getLastValue(value);
576 gezelter 1782 return (int) value;
577     }
578     RealType Stats::getRealData(int index) {
579     assert(index >=0 && index < ENDINDEX);
580     RealType value(0.0);
581 gezelter 1791 dynamic_cast<Accumulator *>(data_[index].accumulator)->getLastValue(value);
582 gezelter 1782 return value;
583     }
584     Vector3d Stats::getVectorData(int index) {
585     assert(index >=0 && index < ENDINDEX);
586     Vector3d value;
587     dynamic_cast<VectorAccumulator*>(data_[index].accumulator)->getLastValue(value);
588     return value;
589     }
590     Mat3x3d Stats::getMatrixData(int index) {
591     assert(index >=0 && index < ENDINDEX);
592     Mat3x3d value;
593     dynamic_cast<MatrixAccumulator*>(data_[index].accumulator)->getLastValue(value);
594     return value;
595     }
596    
597     Stats::StatsBitSet Stats::getStatsMask() {
598     return statsMask_;
599     }
600     Stats::StatsMapType Stats::getStatsMap() {
601     return statsMap_;
602     }
603     void Stats::setStatsMask(Stats::StatsBitSet mask) {
604     statsMask_ = mask;
605     }
606    
607 gezelter 246 }

Properties

Name Value
svn:executable *
svn:keywords Author Id Revision Date