44 |
|
* @file Stats.cpp |
45 |
|
* @author tlin |
46 |
|
* @date 11/04/2004 |
47 |
– |
* @time 14:26am |
47 |
|
* @version 1.0 |
48 |
|
*/ |
49 |
|
|
50 |
|
#include "brains/Stats.hpp" |
51 |
+ |
#include "brains/Thermo.hpp" |
52 |
|
|
53 |
|
namespace OpenMD { |
54 |
|
|
55 |
< |
bool Stats::isInit_ = false; |
56 |
< |
std::string Stats::title_[Stats::ENDINDEX - Stats::BEGININDEX]; |
57 |
< |
std::string Stats::units_[Stats::ENDINDEX - Stats::BEGININDEX]; |
58 |
< |
Stats::StatsMapType Stats::statsMap; |
59 |
< |
Stats::Stats() { |
55 |
> |
Stats::Stats(SimInfo* info) : isInit_(false), info_(info) { |
56 |
|
|
57 |
|
if (!isInit_) { |
58 |
|
init(); |
59 |
|
isInit_ = true; |
60 |
|
} |
65 |
– |
|
61 |
|
} |
62 |
|
|
63 |
|
void Stats::init() { |
64 |
+ |
|
65 |
+ |
data_.resize(Stats::ENDINDEX); |
66 |
|
|
67 |
< |
Stats::title_[TIME] = "Time"; |
68 |
< |
Stats::title_[TOTAL_ENERGY] = "Total Energy"; |
69 |
< |
Stats::title_[POTENTIAL_ENERGY] = "Potential Energy"; |
70 |
< |
Stats::title_[KINETIC_ENERGY] = "Kinetic Energy"; |
71 |
< |
Stats::title_[TEMPERATURE] = "Temperature"; |
72 |
< |
Stats::title_[PRESSURE] = "Pressure"; |
73 |
< |
Stats::title_[VOLUME] = "Volume"; |
77 |
< |
Stats::title_[HULLVOLUME] = "Hull Volume"; |
78 |
< |
Stats::title_[GYRVOLUME] = "Gyrational Volume"; |
79 |
< |
Stats::title_[CONSERVED_QUANTITY] = "Conserved Quantity"; |
80 |
< |
Stats::title_[TRANSLATIONAL_KINETIC] = "Translational Kinetic"; |
81 |
< |
Stats::title_[ROTATIONAL_KINETIC] = "Rotational Kinetic"; |
82 |
< |
Stats::title_[LONG_RANGE_POTENTIAL] = "Long Range Potential"; |
83 |
< |
Stats::title_[SHORT_RANGE_POTENTIAL] = "Short Range Potential"; |
84 |
< |
Stats::title_[VANDERWAALS_POTENTIAL] = "van der waals Potential"; |
85 |
< |
Stats::title_[ELECTROSTATIC_POTENTIAL] = "Electrostatic Potential"; |
86 |
< |
Stats::title_[BOND_POTENTIAL] = "Bond Potential"; |
87 |
< |
Stats::title_[BEND_POTENTIAL] = "Bend Potential"; |
88 |
< |
Stats::title_[DIHEDRAL_POTENTIAL] = "Dihedral Potential"; |
89 |
< |
Stats::title_[INVERSION_POTENTIAL] = "Inversion Potential"; |
90 |
< |
Stats::title_[VRAW] = "Raw Potential"; |
91 |
< |
Stats::title_[VHARM] = "Harmonic Potential"; |
92 |
< |
Stats::title_[SHADOWH] = "Shadow Hamiltonian"; |
93 |
< |
Stats::title_[PRESSURE_TENSOR_XX] = "P_xx"; |
94 |
< |
Stats::title_[PRESSURE_TENSOR_XY] = "P_xy"; |
95 |
< |
Stats::title_[PRESSURE_TENSOR_XZ] = "P_xz"; |
96 |
< |
Stats::title_[PRESSURE_TENSOR_YX] = "P_yx"; |
97 |
< |
Stats::title_[PRESSURE_TENSOR_YY] = "P_yy"; |
98 |
< |
Stats::title_[PRESSURE_TENSOR_YZ] = "P_yz"; |
99 |
< |
Stats::title_[PRESSURE_TENSOR_ZX] = "P_zx"; |
100 |
< |
Stats::title_[PRESSURE_TENSOR_ZY] = "P_zy"; |
101 |
< |
Stats::title_[PRESSURE_TENSOR_ZZ] = "P_zz"; |
102 |
< |
Stats::title_[BOX_DIPOLE_X] = "box dipole x"; |
103 |
< |
Stats::title_[BOX_DIPOLE_Y] = "box dipole y"; |
104 |
< |
Stats::title_[BOX_DIPOLE_Z] = "box dipole z"; |
105 |
< |
Stats::title_[TAGGED_PAIR_DISTANCE] = "Tagged_Pair_Distance"; |
106 |
< |
Stats::title_[RNEMD_EXCHANGE_TOTAL] = "RNEMD_exchange_total"; |
107 |
< |
Stats::title_[THERMAL_HELFANDMOMENT_X] = "Thermal Helfand Moment x"; |
108 |
< |
Stats::title_[THERMAL_HELFANDMOMENT_Y] = "Thermal Helfand Moment y"; |
109 |
< |
Stats::title_[THERMAL_HELFANDMOMENT_Z] = "Thermal Helfand Moment z"; |
110 |
< |
Stats::title_[HEATFLUX_X]= "Heat Flux x component"; |
111 |
< |
Stats::title_[HEATFLUX_Y]= "Heat Flux y component"; |
112 |
< |
Stats::title_[HEATFLUX_Z]= "Heat Flux z component"; |
67 |
> |
StatsData time; |
68 |
> |
time.units = "fs"; |
69 |
> |
time.title = "Time"; |
70 |
> |
time.dataType = "RealType"; |
71 |
> |
time.accumulator = new Accumulator(); |
72 |
> |
data_[TIME] = time; |
73 |
> |
statsMap_["TIME"] = TIME; |
74 |
|
|
75 |
< |
Stats::units_[TIME] = "fs"; |
76 |
< |
Stats::units_[TOTAL_ENERGY] = "kcal/mol"; |
77 |
< |
Stats::units_[POTENTIAL_ENERGY] = "kcal/mol"; |
78 |
< |
Stats::units_[KINETIC_ENERGY] = "kcal/mol"; |
79 |
< |
Stats::units_[TEMPERATURE] = "K"; |
80 |
< |
Stats::units_[PRESSURE] = "atm"; |
81 |
< |
Stats::units_[VOLUME] = "A^3"; |
82 |
< |
Stats::units_[HULLVOLUME] = "A^3"; |
83 |
< |
Stats::units_[GYRVOLUME] = "A^3"; |
84 |
< |
Stats::units_[CONSERVED_QUANTITY] = "kcal/mol"; |
85 |
< |
Stats::units_[TRANSLATIONAL_KINETIC] = "kcal/mol"; |
86 |
< |
Stats::units_[ROTATIONAL_KINETIC] = "kcal/mol"; |
87 |
< |
Stats::units_[LONG_RANGE_POTENTIAL] = "kcal/mol"; |
88 |
< |
Stats::units_[SHORT_RANGE_POTENTIAL] = "kcal/mol"; |
89 |
< |
Stats::units_[VANDERWAALS_POTENTIAL] = "kcal/mol"; |
129 |
< |
Stats::units_[ELECTROSTATIC_POTENTIAL] = "kcal/mol"; |
130 |
< |
Stats::units_[BOND_POTENTIAL] = "kcal/mol"; |
131 |
< |
Stats::units_[BEND_POTENTIAL] = "kcal/mol"; |
132 |
< |
Stats::units_[DIHEDRAL_POTENTIAL] = "kcal/mol"; |
133 |
< |
Stats::units_[INVERSION_POTENTIAL] = "kcal/mol"; |
134 |
< |
Stats::units_[VRAW] = "kcal/mol"; |
135 |
< |
Stats::units_[VHARM] = "kcal/mol"; |
136 |
< |
Stats::units_[SHADOWH] = "kcal/mol"; |
137 |
< |
Stats::units_[PRESSURE_TENSOR_XX] = "amu*fs^-2*Ang^-1"; |
138 |
< |
Stats::units_[PRESSURE_TENSOR_XY] = "amu*fs^-2*Ang^-1"; |
139 |
< |
Stats::units_[PRESSURE_TENSOR_XZ] = "amu*fs^-2*Ang^-1"; |
140 |
< |
Stats::units_[PRESSURE_TENSOR_YX] = "amu*fs^-2*Ang^-1"; |
141 |
< |
Stats::units_[PRESSURE_TENSOR_YY] = "amu*fs^-2*Ang^-1"; |
142 |
< |
Stats::units_[PRESSURE_TENSOR_YZ] = "amu*fs^-2*Ang^-1"; |
143 |
< |
Stats::units_[PRESSURE_TENSOR_ZX] = "amu*fs^-2*Ang^-1"; |
144 |
< |
Stats::units_[PRESSURE_TENSOR_ZY] = "amu*fs^-2*Ang^-1"; |
145 |
< |
Stats::units_[PRESSURE_TENSOR_ZZ] = "amu*fs^-2*Ang^-1"; |
146 |
< |
Stats::units_[BOX_DIPOLE_X] = "C*m"; |
147 |
< |
Stats::units_[BOX_DIPOLE_Y] = "C*m"; |
148 |
< |
Stats::units_[BOX_DIPOLE_Z] = "C*m"; |
149 |
< |
Stats::units_[TAGGED_PAIR_DISTANCE] = "Ang"; |
150 |
< |
Stats::units_[RNEMD_EXCHANGE_TOTAL] = "Variable"; |
151 |
< |
Stats::units_[THERMAL_HELFANDMOMENT_X] = "Ang*kcal/mol"; |
152 |
< |
Stats::units_[THERMAL_HELFANDMOMENT_Y] = "Ang*kcal/mol"; |
153 |
< |
Stats::units_[THERMAL_HELFANDMOMENT_Z] = "Ang*kcal/mol"; |
154 |
< |
Stats::units_[HEATFLUX_X]="amu/fs^3"; |
155 |
< |
Stats::units_[HEATFLUX_Y]="amu/fs^3"; |
156 |
< |
Stats::units_[HEATFLUX_Z]="amu/fs^3"; |
75 |
> |
StatsData total_energy; |
76 |
> |
total_energy.units = "kcal/mol"; |
77 |
> |
total_energy.title = "Total Energy"; |
78 |
> |
total_energy.dataType = "RealType"; |
79 |
> |
total_energy.accumulator = new Accumulator(); |
80 |
> |
data_[TOTAL_ENERGY] = total_energy; |
81 |
> |
statsMap_["TOTAL_ENERGY"] = TOTAL_ENERGY; |
82 |
> |
|
83 |
> |
StatsData potential_energy; |
84 |
> |
potential_energy.units = "kcal/mol"; |
85 |
> |
potential_energy.title = "Potential Energy"; |
86 |
> |
potential_energy.dataType = "RealType"; |
87 |
> |
potential_energy.accumulator = new Accumulator(); |
88 |
> |
data_[POTENTIAL_ENERGY] = potential_energy; |
89 |
> |
statsMap_["POTENTIAL_ENERGY"] = POTENTIAL_ENERGY; |
90 |
|
|
91 |
< |
Stats::statsMap.insert(StatsMapType::value_type("TIME", TIME)); |
92 |
< |
Stats::statsMap.insert(StatsMapType::value_type("TOTAL_ENERGY", TOTAL_ENERGY)); |
93 |
< |
Stats::statsMap.insert(StatsMapType::value_type("POTENTIAL_ENERGY", POTENTIAL_ENERGY)); |
94 |
< |
Stats::statsMap.insert(StatsMapType::value_type("KINETIC_ENERGY", KINETIC_ENERGY)); |
95 |
< |
Stats::statsMap.insert(StatsMapType::value_type("TEMPERATURE", TEMPERATURE)); |
96 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE", PRESSURE)); |
97 |
< |
Stats::statsMap.insert(StatsMapType::value_type("VOLUME", VOLUME)); |
98 |
< |
Stats::statsMap.insert(StatsMapType::value_type("HULLVOLUME", HULLVOLUME)); |
99 |
< |
Stats::statsMap.insert(StatsMapType::value_type("GYRVOLUME", GYRVOLUME)); |
100 |
< |
Stats::statsMap.insert(StatsMapType::value_type("CONSERVED_QUANTITY", CONSERVED_QUANTITY)); |
101 |
< |
Stats::statsMap.insert(StatsMapType::value_type("TRANSLATIONAL_KINETIC", TRANSLATIONAL_KINETIC)); |
102 |
< |
Stats::statsMap.insert(StatsMapType::value_type("ROTATIONAL_KINETIC", ROTATIONAL_KINETIC)); |
103 |
< |
Stats::statsMap.insert(StatsMapType::value_type("LONG_RANGE_POTENTIAL", LONG_RANGE_POTENTIAL)); |
104 |
< |
Stats::statsMap.insert(StatsMapType::value_type("SHORT_RANGE_POTENTIAL", SHORT_RANGE_POTENTIAL)); |
105 |
< |
Stats::statsMap.insert(StatsMapType::value_type("VANDERWAALS_POTENTIAL", VANDERWAALS_POTENTIAL)); |
106 |
< |
Stats::statsMap.insert(StatsMapType::value_type("ELECTROSTATIC_POTENTIAL", ELECTROSTATIC_POTENTIAL)); |
107 |
< |
Stats::statsMap.insert(StatsMapType::value_type("BOND_POTENTIAL", BOND_POTENTIAL)); |
108 |
< |
Stats::statsMap.insert(StatsMapType::value_type("BEND_POTENTIAL", BEND_POTENTIAL)); |
109 |
< |
Stats::statsMap.insert(StatsMapType::value_type("DIHEDRAL_POTENTIAL", DIHEDRAL_POTENTIAL)); |
110 |
< |
Stats::statsMap.insert(StatsMapType::value_type("INVERSION_POTENTIAL", INVERSION_POTENTIAL)); |
111 |
< |
Stats::statsMap.insert(StatsMapType::value_type("VRAW", VRAW)); |
112 |
< |
Stats::statsMap.insert(StatsMapType::value_type("VHARM", VHARM)); |
113 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_XX", PRESSURE_TENSOR_XX)); |
114 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_XY", PRESSURE_TENSOR_XY)); |
115 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_XZ", PRESSURE_TENSOR_XZ)); |
116 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_YX", PRESSURE_TENSOR_YX)); |
117 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_YY", PRESSURE_TENSOR_YY)); |
118 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_YZ", PRESSURE_TENSOR_YZ)); |
119 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_ZX", PRESSURE_TENSOR_ZX)); |
120 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_ZY", PRESSURE_TENSOR_ZY)); |
121 |
< |
Stats::statsMap.insert(StatsMapType::value_type("PRESSURE_TENSOR_ZZ", PRESSURE_TENSOR_ZZ)); |
122 |
< |
Stats::statsMap.insert(StatsMapType::value_type("BOX_DIPOLE_X", BOX_DIPOLE_X)); |
123 |
< |
Stats::statsMap.insert(StatsMapType::value_type("BOX_DIPOLE_Y", BOX_DIPOLE_Y)); |
124 |
< |
Stats::statsMap.insert(StatsMapType::value_type("BOX_DIPOLE_Z", BOX_DIPOLE_Z)); |
125 |
< |
Stats::statsMap.insert(StatsMapType::value_type("TAGGED_PAIR_DISTANCE", TAGGED_PAIR_DISTANCE)); |
126 |
< |
Stats::statsMap.insert(StatsMapType::value_type("RNEMD_EXCHANGE_TOTAL", RNEMD_EXCHANGE_TOTAL)); |
127 |
< |
Stats::statsMap.insert(StatsMapType::value_type("SHADOWH", SHADOWH)); |
128 |
< |
Stats::statsMap.insert(StatsMapType::value_type("THERMAL_HELFANDMOMENT_X",THERMAL_HELFANDMOMENT_X)); |
129 |
< |
Stats::statsMap.insert(StatsMapType::value_type("THERMAL_HELFANDMOMENT_Y",THERMAL_HELFANDMOMENT_Y)); |
130 |
< |
Stats::statsMap.insert(StatsMapType::value_type("THERMAL_HELFANDMOMENT_Z",THERMAL_HELFANDMOMENT_Z)); |
131 |
< |
Stats::statsMap.insert(StatsMapType::value_type("HEATFLUX_X",HEATFLUX_X)); |
132 |
< |
Stats::statsMap.insert(StatsMapType::value_type("HEATFLUX_Y",HEATFLUX_Y)); |
133 |
< |
Stats::statsMap.insert(StatsMapType::value_type("HEATFLUX_Z",HEATFLUX_Z)); |
91 |
> |
StatsData kinetic_energy; |
92 |
> |
kinetic_energy.units = "kcal/mol"; |
93 |
> |
kinetic_energy.title = "Kinetic Energy"; |
94 |
> |
kinetic_energy.dataType = "RealType"; |
95 |
> |
kinetic_energy.accumulator = new Accumulator(); |
96 |
> |
data_[KINETIC_ENERGY] = kinetic_energy; |
97 |
> |
statsMap_["KINETIC_ENERGY"] = KINETIC_ENERGY; |
98 |
> |
|
99 |
> |
StatsData temperature; |
100 |
> |
temperature.units = "K"; |
101 |
> |
temperature.title = "Temperature"; |
102 |
> |
temperature.dataType = "RealType"; |
103 |
> |
temperature.accumulator = new Accumulator(); |
104 |
> |
data_[TEMPERATURE] = temperature; |
105 |
> |
statsMap_["TEMPERATURE"] = TEMPERATURE; |
106 |
> |
|
107 |
> |
StatsData pressure; |
108 |
> |
pressure.units = "atm"; |
109 |
> |
pressure.title = "Pressure"; |
110 |
> |
pressure.dataType = "RealType"; |
111 |
> |
pressure.accumulator = new Accumulator(); |
112 |
> |
data_[PRESSURE] = pressure; |
113 |
> |
statsMap_["PRESSURE"] = PRESSURE; |
114 |
> |
|
115 |
> |
StatsData volume; |
116 |
> |
volume.units = "A^3"; |
117 |
> |
volume.title = "Volume"; |
118 |
> |
volume.dataType = "RealType"; |
119 |
> |
volume.accumulator = new Accumulator(); |
120 |
> |
data_[VOLUME] = volume; |
121 |
> |
statsMap_["VOLUME"] = VOLUME; |
122 |
> |
|
123 |
> |
StatsData hullvolume; |
124 |
> |
hullvolume.units = "A^3"; |
125 |
> |
hullvolume.title = "Hull Volume"; |
126 |
> |
hullvolume.dataType = "RealType"; |
127 |
> |
hullvolume.accumulator = new Accumulator(); |
128 |
> |
data_[HULLVOLUME] = hullvolume; |
129 |
> |
statsMap_["HULLVOLUME"] = HULLVOLUME; |
130 |
> |
|
131 |
> |
StatsData gyrvolume; |
132 |
> |
gyrvolume.units = "A^3"; |
133 |
> |
gyrvolume.title = "Gyrational Volume"; |
134 |
> |
gyrvolume.dataType = "RealType"; |
135 |
> |
gyrvolume.accumulator = new Accumulator(); |
136 |
> |
data_[GYRVOLUME] = gyrvolume; |
137 |
> |
statsMap_["GYRVOLUME"] = GYRVOLUME; |
138 |
> |
|
139 |
> |
StatsData conserved_quantity; |
140 |
> |
conserved_quantity.units = "kcal/mol"; |
141 |
> |
conserved_quantity.title = "Conserved Quantity"; |
142 |
> |
conserved_quantity.dataType = "RealType"; |
143 |
> |
conserved_quantity.accumulator = new Accumulator(); |
144 |
> |
data_[CONSERVED_QUANTITY] = conserved_quantity; |
145 |
> |
statsMap_["CONSERVED_QUANTITY"] = CONSERVED_QUANTITY; |
146 |
> |
|
147 |
> |
StatsData translational_kinetic; |
148 |
> |
translational_kinetic.units = "kcal/mol"; |
149 |
> |
translational_kinetic.title = "Translational Kinetic"; |
150 |
> |
translational_kinetic.dataType = "RealType"; |
151 |
> |
translational_kinetic.accumulator = new Accumulator(); |
152 |
> |
data_[TRANSLATIONAL_KINETIC] = translational_kinetic; |
153 |
> |
statsMap_["TRANSLATIONAL_KINETIC"] = TRANSLATIONAL_KINETIC; |
154 |
> |
|
155 |
> |
StatsData rotational_kinetic; |
156 |
> |
rotational_kinetic.units = "kcal/mol"; |
157 |
> |
rotational_kinetic.title = "Rotational Kinetic"; |
158 |
> |
rotational_kinetic.dataType = "RealType"; |
159 |
> |
rotational_kinetic.accumulator = new Accumulator(); |
160 |
> |
data_[ROTATIONAL_KINETIC] = rotational_kinetic; |
161 |
> |
statsMap_["ROTATIONAL_KINETIC"] = ROTATIONAL_KINETIC; |
162 |
> |
|
163 |
> |
StatsData long_range_potential; |
164 |
> |
long_range_potential.units = "kcal/mol"; |
165 |
> |
long_range_potential.title = "Long Range Potential"; |
166 |
> |
long_range_potential.dataType = "RealType"; |
167 |
> |
long_range_potential.accumulator = new Accumulator(); |
168 |
> |
data_[LONG_RANGE_POTENTIAL] = long_range_potential; |
169 |
> |
statsMap_["LONG_RANGE_POTENTIAL"] = LONG_RANGE_POTENTIAL; |
170 |
> |
|
171 |
> |
StatsData vanderwaals_potential; |
172 |
> |
vanderwaals_potential.units = "kcal/mol"; |
173 |
> |
vanderwaals_potential.title = "van der waals Potential"; |
174 |
> |
vanderwaals_potential.dataType = "RealType"; |
175 |
> |
vanderwaals_potential.accumulator = new Accumulator(); |
176 |
> |
data_[VANDERWAALS_POTENTIAL] = vanderwaals_potential; |
177 |
> |
statsMap_["VANDERWAALS_POTENTIAL"] = VANDERWAALS_POTENTIAL; |
178 |
> |
|
179 |
> |
StatsData electrostatic_potential; |
180 |
> |
electrostatic_potential.units = "kcal/mol"; |
181 |
> |
electrostatic_potential.title = "Electrostatic Potential"; |
182 |
> |
electrostatic_potential.dataType = "RealType"; |
183 |
> |
electrostatic_potential.accumulator = new Accumulator(); |
184 |
> |
data_[ELECTROSTATIC_POTENTIAL] = electrostatic_potential; |
185 |
> |
statsMap_["ELECTROSTATIC_POTENTIAL"] = ELECTROSTATIC_POTENTIAL; |
186 |
> |
|
187 |
> |
StatsData metallic_potential; |
188 |
> |
metallic_potential.units = "kcal/mol"; |
189 |
> |
metallic_potential.title = "Metallic Potential"; |
190 |
> |
metallic_potential.dataType = "RealType"; |
191 |
> |
metallic_potential.accumulator = new Accumulator(); |
192 |
> |
data_[METALLIC_POTENTIAL] = metallic_potential; |
193 |
> |
statsMap_["METALLIC_POTENTIAL"] = METALLIC_POTENTIAL; |
194 |
> |
|
195 |
> |
StatsData hydrogenbonding_potential; |
196 |
> |
hydrogenbonding_potential.units = "kcal/mol"; |
197 |
> |
hydrogenbonding_potential.title = "Metallic Potential"; |
198 |
> |
hydrogenbonding_potential.dataType = "RealType"; |
199 |
> |
hydrogenbonding_potential.accumulator = new Accumulator(); |
200 |
> |
data_[HYDROGENBONDING_POTENTIAL] = hydrogenbonding_potential; |
201 |
> |
statsMap_["HYDROGENBONDING_POTENTIAL"] = HYDROGENBONDING_POTENTIAL; |
202 |
> |
|
203 |
> |
StatsData short_range_potential; |
204 |
> |
short_range_potential.units = "kcal/mol"; |
205 |
> |
short_range_potential.title = "Short Range Potential"; |
206 |
> |
short_range_potential.dataType = "RealType"; |
207 |
> |
short_range_potential.accumulator = new Accumulator(); |
208 |
> |
data_[SHORT_RANGE_POTENTIAL] = short_range_potential; |
209 |
> |
statsMap_["SHORT_RANGE_POTENTIAL"] = SHORT_RANGE_POTENTIAL; |
210 |
> |
|
211 |
> |
StatsData bond_potential; |
212 |
> |
bond_potential.units = "kcal/mol"; |
213 |
> |
bond_potential.title = "Bond Potential"; |
214 |
> |
bond_potential.dataType = "RealType"; |
215 |
> |
bond_potential.accumulator = new Accumulator(); |
216 |
> |
data_[BOND_POTENTIAL] = bond_potential; |
217 |
> |
statsMap_["BOND_POTENTIAL"] = BOND_POTENTIAL; |
218 |
> |
|
219 |
> |
StatsData bend_potential; |
220 |
> |
bend_potential.units = "kcal/mol"; |
221 |
> |
bend_potential.title = "Bend Potential"; |
222 |
> |
bend_potential.dataType = "RealType"; |
223 |
> |
bend_potential.accumulator = new Accumulator(); |
224 |
> |
data_[BEND_POTENTIAL] = bend_potential; |
225 |
> |
statsMap_["BEND_POTENTIAL"] = BEND_POTENTIAL; |
226 |
> |
|
227 |
> |
StatsData dihedral_potential; |
228 |
> |
dihedral_potential.units = "kcal/mol"; |
229 |
> |
dihedral_potential.title = "Dihedral Potential"; |
230 |
> |
dihedral_potential.dataType = "RealType"; |
231 |
> |
dihedral_potential.accumulator = new Accumulator(); |
232 |
> |
data_[DIHEDRAL_POTENTIAL] = dihedral_potential; |
233 |
> |
statsMap_["DIHEDRAL_POTENTIAL"] = DIHEDRAL_POTENTIAL; |
234 |
> |
|
235 |
> |
StatsData inversion_potential; |
236 |
> |
inversion_potential.units = "kcal/mol"; |
237 |
> |
inversion_potential.title = "Inversion Potential"; |
238 |
> |
inversion_potential.dataType = "RealType"; |
239 |
> |
inversion_potential.accumulator = new Accumulator(); |
240 |
> |
data_[INVERSION_POTENTIAL] = inversion_potential; |
241 |
> |
statsMap_["INVERSION_POTENTIAL"] = INVERSION_POTENTIAL; |
242 |
> |
|
243 |
> |
StatsData vraw; |
244 |
> |
vraw.units = "kcal/mol"; |
245 |
> |
vraw.title = "Raw Potential"; |
246 |
> |
vraw.dataType = "RealType"; |
247 |
> |
vraw.accumulator = new Accumulator(); |
248 |
> |
data_[RAW_POTENTIAL] = vraw; |
249 |
> |
statsMap_["RAW_POTENTIAL"] = RAW_POTENTIAL; |
250 |
> |
|
251 |
> |
StatsData vrestraint; |
252 |
> |
vrestraint.units = "kcal/mol"; |
253 |
> |
vrestraint.title = "Restraint Potential"; |
254 |
> |
vrestraint.dataType = "RealType"; |
255 |
> |
vrestraint.accumulator = new Accumulator(); |
256 |
> |
data_[RESTRAINT_POTENTIAL] = vrestraint; |
257 |
> |
statsMap_["RESTRAINT_POTENTIAL"] = RESTRAINT_POTENTIAL; |
258 |
> |
|
259 |
> |
StatsData pressure_tensor; |
260 |
> |
pressure_tensor.units = "amu*fs^-2*Ang^-1"; |
261 |
> |
pressure_tensor.title = "Ptensor"; |
262 |
> |
pressure_tensor.dataType = "Mat3x3d"; |
263 |
> |
pressure_tensor.accumulator = new MatrixAccumulator(); |
264 |
> |
data_[PRESSURE_TENSOR] = pressure_tensor; |
265 |
> |
statsMap_["PRESSURE_TENSOR"] = PRESSURE_TENSOR; |
266 |
> |
|
267 |
> |
StatsData system_dipole; |
268 |
> |
system_dipole.units = "C*m"; |
269 |
> |
system_dipole.title = "System Dipole"; |
270 |
> |
system_dipole.dataType = "Vector3d"; |
271 |
> |
system_dipole.accumulator = new VectorAccumulator(); |
272 |
> |
data_[SYSTEM_DIPOLE] = system_dipole; |
273 |
> |
statsMap_["SYSTEM_DIPOLE"] = SYSTEM_DIPOLE; |
274 |
> |
|
275 |
> |
StatsData tagged_pair_distance; |
276 |
> |
tagged_pair_distance.units = "Ang"; |
277 |
> |
tagged_pair_distance.title = "Tagged_Pair_Distance"; |
278 |
> |
tagged_pair_distance.dataType = "RealType"; |
279 |
> |
tagged_pair_distance.accumulator = new Accumulator(); |
280 |
> |
data_[TAGGED_PAIR_DISTANCE] = tagged_pair_distance; |
281 |
> |
statsMap_["TAGGED_PAIR_DISTANCE"] = TAGGED_PAIR_DISTANCE; |
282 |
> |
|
283 |
> |
StatsData shadowh; |
284 |
> |
shadowh.units = "kcal/mol"; |
285 |
> |
shadowh.title = "Shadow Hamiltonian"; |
286 |
> |
shadowh.dataType = "RealType"; |
287 |
> |
shadowh.accumulator = new Accumulator(); |
288 |
> |
data_[SHADOWH] = shadowh; |
289 |
> |
statsMap_["SHADOWH"] = SHADOWH; |
290 |
> |
|
291 |
> |
StatsData helfandmoment; |
292 |
> |
helfandmoment.units = "Ang*kcal/mol"; |
293 |
> |
helfandmoment.title = "Thermal Helfand Moment"; |
294 |
> |
helfandmoment.dataType = "Vector3d"; |
295 |
> |
helfandmoment.accumulator = new VectorAccumulator(); |
296 |
> |
data_[HELFANDMOMENT] = helfandmoment; |
297 |
> |
statsMap_["HELFANDMOMENT"] = HELFANDMOMENT; |
298 |
> |
|
299 |
> |
StatsData heatflux; |
300 |
> |
heatflux.units = "amu/fs^3"; |
301 |
> |
heatflux.title = "Heat Flux"; |
302 |
> |
heatflux.dataType = "Vector3d"; |
303 |
> |
heatflux.accumulator = new VectorAccumulator(); |
304 |
> |
data_[HEATFLUX] = heatflux; |
305 |
> |
statsMap_["HEATFLUX"] = HEATFLUX; |
306 |
> |
|
307 |
> |
StatsData electronic_temperature; |
308 |
> |
electronic_temperature.units = "K"; |
309 |
> |
electronic_temperature.title = "Electronic Temperature"; |
310 |
> |
electronic_temperature.dataType = "RealType"; |
311 |
> |
electronic_temperature.accumulator = new Accumulator(); |
312 |
> |
data_[ELECTRONIC_TEMPERATURE] = electronic_temperature; |
313 |
> |
statsMap_["ELECTRONIC_TEMPERATURE"] = ELECTRONIC_TEMPERATURE; |
314 |
> |
|
315 |
> |
// Now, set some defaults in the mask: |
316 |
> |
|
317 |
> |
Globals* simParams = info_->getSimParams(); |
318 |
> |
std::string statFileFormatString = simParams->getStatFileFormat(); |
319 |
> |
parseStatFileFormat(statFileFormatString); |
320 |
> |
|
321 |
> |
// if we're doing a thermodynamic integration, we'll want the raw |
322 |
> |
// potential as well as the full potential: |
323 |
> |
|
324 |
> |
if (simParams->getUseThermodynamicIntegration()) |
325 |
> |
statsMask_.set(RAW_POTENTIAL); |
326 |
> |
|
327 |
> |
// if we've got restraints turned on, we'll also want a report of the |
328 |
> |
// total harmonic restraints |
329 |
> |
if (simParams->getUseRestraints()){ |
330 |
> |
statsMask_.set(RESTRAINT_POTENTIAL); |
331 |
> |
} |
332 |
> |
|
333 |
> |
if (simParams->havePrintPressureTensor() && |
334 |
> |
simParams->getPrintPressureTensor()){ |
335 |
> |
statsMask_.set(PRESSURE_TENSOR); |
336 |
> |
} |
337 |
> |
|
338 |
> |
// Why do we have both of these? |
339 |
> |
if (simParams->getAccumulateBoxDipole()) { |
340 |
> |
statsMask_.set(SYSTEM_DIPOLE); |
341 |
> |
} |
342 |
> |
if (info_->getCalcBoxDipole()){ |
343 |
> |
statsMask_.set(SYSTEM_DIPOLE); |
344 |
> |
} |
345 |
> |
|
346 |
> |
if (simParams->havePrintHeatFlux()) { |
347 |
> |
if (simParams->getPrintHeatFlux()){ |
348 |
> |
statsMask_.set(HEATFLUX); |
349 |
> |
} |
350 |
> |
} |
351 |
> |
|
352 |
> |
|
353 |
> |
if (simParams->haveTaggedAtomPair() && simParams->havePrintTaggedPairDistance()) { |
354 |
> |
if (simParams->getPrintTaggedPairDistance()) { |
355 |
> |
statsMask_.set(TAGGED_PAIR_DISTANCE); |
356 |
> |
} |
357 |
> |
} |
358 |
> |
|
359 |
|
} |
360 |
|
|
361 |
+ |
void Stats::parseStatFileFormat(const std::string& format) { |
362 |
+ |
StringTokenizer tokenizer(format, " ,;|\t\n\r"); |
363 |
+ |
|
364 |
+ |
while(tokenizer.hasMoreTokens()) { |
365 |
+ |
std::string token(tokenizer.nextToken()); |
366 |
+ |
toUpper(token); |
367 |
+ |
StatsMapType::iterator i = statsMap_.find(token); |
368 |
+ |
if (i != statsMap_.end()) { |
369 |
+ |
statsMask_.set(i->second); |
370 |
+ |
} else { |
371 |
+ |
sprintf( painCave.errMsg, |
372 |
+ |
"Stats::parseStatFileFormat: %s is not a recognized\n" |
373 |
+ |
"\tstatFileFormat keyword.\n", token.c_str() ); |
374 |
+ |
painCave.isFatal = 0; |
375 |
+ |
painCave.severity = OPENMD_ERROR; |
376 |
+ |
simError(); |
377 |
+ |
} |
378 |
+ |
} |
379 |
+ |
} |
380 |
+ |
|
381 |
+ |
|
382 |
+ |
std::string Stats::getTitle(int index) { |
383 |
+ |
assert(index >=0 && index < ENDINDEX); |
384 |
+ |
return data_[index].title; |
385 |
+ |
} |
386 |
+ |
|
387 |
+ |
std::string Stats::getUnits(int index) { |
388 |
+ |
assert(index >=0 && index < ENDINDEX); |
389 |
+ |
return data_[index].units; |
390 |
+ |
} |
391 |
+ |
|
392 |
+ |
std::string Stats::getDataType(int index) { |
393 |
+ |
assert(index >=0 && index < ENDINDEX); |
394 |
+ |
return data_[index].dataType; |
395 |
+ |
} |
396 |
+ |
|
397 |
+ |
void Stats::collectStats(){ |
398 |
+ |
Globals* simParams = info_->getSimParams(); |
399 |
+ |
Snapshot* snap = info_->getSnapshotManager()->getCurrentSnapshot(); |
400 |
+ |
Thermo thermo(info_); |
401 |
+ |
|
402 |
+ |
for (unsigned int i = 0; i < statsMask_.size(); ++i) { |
403 |
+ |
if (statsMask_[i]) { |
404 |
+ |
switch (i) { |
405 |
+ |
case TIME: |
406 |
+ |
data_[i].accumulator->add(snap->getTime()); |
407 |
+ |
break; |
408 |
+ |
case KINETIC_ENERGY: |
409 |
+ |
data_[i].accumulator->add(thermo.getKinetic()); |
410 |
+ |
break; |
411 |
+ |
case POTENTIAL_ENERGY: |
412 |
+ |
data_[i].accumulator->add(thermo.getPotential()); |
413 |
+ |
break; |
414 |
+ |
case TOTAL_ENERGY: |
415 |
+ |
data_[i].accumulator->add(thermo.getTotalEnergy()); |
416 |
+ |
break; |
417 |
+ |
case TEMPERATURE: |
418 |
+ |
data_[i].accumulator->add(thermo.getTemperature()); |
419 |
+ |
break; |
420 |
+ |
case PRESSURE: |
421 |
+ |
data_[i].accumulator->add(thermo.getPressure()); |
422 |
+ |
break; |
423 |
+ |
case VOLUME: |
424 |
+ |
data_[i].accumulator->add(thermo.getVolume()); |
425 |
+ |
break; |
426 |
+ |
case CONSERVED_QUANTITY: |
427 |
+ |
data_[i].accumulator->add(snap->getConservedQuantity()); |
428 |
+ |
break; |
429 |
+ |
case PRESSURE_TENSOR: |
430 |
+ |
dynamic_cast<MatrixAccumulator *>(data_[i].accumulator)->add(thermo.getPressureTensor()); |
431 |
+ |
break; |
432 |
+ |
case SYSTEM_DIPOLE: |
433 |
+ |
dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getSystemDipole()); |
434 |
+ |
break; |
435 |
+ |
case HEATFLUX: |
436 |
+ |
dynamic_cast<VectorAccumulator *>(data_[i].accumulator)->add(thermo.getHeatFlux()); |
437 |
+ |
break; |
438 |
+ |
case HULLVOLUME: |
439 |
+ |
data_[i].accumulator->add(thermo.getHullVolume()); |
440 |
+ |
break; |
441 |
+ |
case GYRVOLUME: |
442 |
+ |
data_[i].accumulator->add(thermo.getGyrationalVolume()); |
443 |
+ |
break; |
444 |
+ |
case TRANSLATIONAL_KINETIC: |
445 |
+ |
data_[i].accumulator->add(thermo.getTranslationalKinetic()); |
446 |
+ |
break; |
447 |
+ |
case ROTATIONAL_KINETIC: |
448 |
+ |
data_[i].accumulator->add(thermo.getRotationalKinetic()); |
449 |
+ |
break; |
450 |
+ |
case LONG_RANGE_POTENTIAL: |
451 |
+ |
data_[i].accumulator->add(snap->getLongRangePotential()); |
452 |
+ |
break; |
453 |
+ |
case VANDERWAALS_POTENTIAL: |
454 |
+ |
data_[i].accumulator->add(snap->getLongRangePotentials()[VANDERWAALS_FAMILY]); |
455 |
+ |
break; |
456 |
+ |
case ELECTROSTATIC_POTENTIAL: |
457 |
+ |
data_[i].accumulator->add(snap->getLongRangePotentials()[ELECTROSTATIC_FAMILY]); |
458 |
+ |
break; |
459 |
+ |
case METALLIC_POTENTIAL: |
460 |
+ |
data_[i].accumulator->add(snap->getLongRangePotentials()[METALLIC_FAMILY]); |
461 |
+ |
break; |
462 |
+ |
case HYDROGENBONDING_POTENTIAL: |
463 |
+ |
data_[i].accumulator->add(snap->getLongRangePotentials()[HYDROGENBONDING_FAMILY]); |
464 |
+ |
break; |
465 |
+ |
case SHORT_RANGE_POTENTIAL: |
466 |
+ |
data_[i].accumulator->add(snap->getShortRangePotential()); |
467 |
+ |
break; |
468 |
+ |
case BOND_POTENTIAL: |
469 |
+ |
data_[i].accumulator->add(snap->getBondPotential()); |
470 |
+ |
break; |
471 |
+ |
case BEND_POTENTIAL: |
472 |
+ |
data_[i].accumulator->add(snap->getBendPotential()); |
473 |
+ |
break; |
474 |
+ |
case DIHEDRAL_POTENTIAL: |
475 |
+ |
data_[i].accumulator->add(snap->getTorsionPotential()); |
476 |
+ |
break; |
477 |
+ |
case INVERSION_POTENTIAL: |
478 |
+ |
data_[i].accumulator->add(snap->getInversionPotential()); |
479 |
+ |
break; |
480 |
+ |
case RAW_POTENTIAL: |
481 |
+ |
data_[i].accumulator->add(snap->getRawPotential()); |
482 |
+ |
break; |
483 |
+ |
case RESTRAINT_POTENTIAL: |
484 |
+ |
data_[i].accumulator->add(snap->getRestraintPotential()); |
485 |
+ |
break; |
486 |
+ |
case TAGGED_PAIR_DISTANCE: |
487 |
+ |
data_[i].accumulator->add(thermo.getTaggedAtomPairDistance()); |
488 |
+ |
break; |
489 |
+ |
/* |
490 |
+ |
case SHADOWH: |
491 |
+ |
data_[i].accumulator->add(thermo.getShadowHamiltionian()); |
492 |
+ |
break; |
493 |
+ |
case HELFANDMOMENT: |
494 |
+ |
data_[i].accumulator->add(thermo.getHelfandMoment()); |
495 |
+ |
break; |
496 |
+ |
*/ |
497 |
+ |
case ELECTRONIC_TEMPERATURE: |
498 |
+ |
data_[i].accumulator->add(thermo.getElectronicTemperature()); |
499 |
+ |
break; |
500 |
+ |
} |
501 |
+ |
} |
502 |
+ |
} |
503 |
+ |
} |
504 |
+ |
|
505 |
+ |
int Stats::getIntData(int index) { |
506 |
+ |
assert(index >=0 && index < ENDINDEX); |
507 |
+ |
RealType value; |
508 |
+ |
data_[index].accumulator->getLastValue(value); |
509 |
+ |
return (int) value; |
510 |
+ |
} |
511 |
+ |
RealType Stats::getRealData(int index) { |
512 |
+ |
assert(index >=0 && index < ENDINDEX); |
513 |
+ |
RealType value(0.0); |
514 |
+ |
data_[index].accumulator->getLastValue(value); |
515 |
+ |
return value; |
516 |
+ |
} |
517 |
+ |
Vector3d Stats::getVectorData(int index) { |
518 |
+ |
assert(index >=0 && index < ENDINDEX); |
519 |
+ |
Vector3d value; |
520 |
+ |
dynamic_cast<VectorAccumulator*>(data_[index].accumulator)->getLastValue(value); |
521 |
+ |
return value; |
522 |
+ |
} |
523 |
+ |
Mat3x3d Stats::getMatrixData(int index) { |
524 |
+ |
assert(index >=0 && index < ENDINDEX); |
525 |
+ |
Mat3x3d value; |
526 |
+ |
dynamic_cast<MatrixAccumulator*>(data_[index].accumulator)->getLastValue(value); |
527 |
+ |
return value; |
528 |
+ |
} |
529 |
+ |
|
530 |
+ |
Stats::StatsBitSet Stats::getStatsMask() { |
531 |
+ |
return statsMask_; |
532 |
+ |
} |
533 |
+ |
Stats::StatsMapType Stats::getStatsMap() { |
534 |
+ |
return statsMap_; |
535 |
+ |
} |
536 |
+ |
void Stats::setStatsMask(Stats::StatsBitSet mask) { |
537 |
+ |
statsMask_ = mask; |
538 |
+ |
} |
539 |
+ |
|
540 |
|
} |