1 #ifndef VTESTBED_CORE_STATISTICS_HH 2 #define VTESTBED_CORE_STATISTICS_HH 7 #include <vtestbed/base/blitz.hh> 8 #include <vtestbed/core/circular_buffer.hh> 9 #include <vtestbed/core/grid.hh> 10 #include <vtestbed/core/wave_numbers.hh> 25 Angular_velocity = 10,
27 Angular_acceleration = 16,
28 Underwater_volume = 19,
33 Angular_momentum = 30,
34 Number_of_records = 33,
36 Surge = 1, Sway = 2, Heave = 3,
37 Roll = 4, Pitch = 5, Yaw = 6,
38 Velocity_x = 7, Velocity_y = 8, Velocity_z = 9,
39 Angular_velocity_x = 10, Angular_velocity_y = 11, Angular_velocity_z = 12,
40 Acceleration_x = 13, Acceleration_y = 14, Acceleration_z = 15,
41 Angular_acceleration_x = 16,
42 Angular_acceleration_y = 17,
43 Angular_acceleration_z = 18,
44 Wave_length_t = 20, Wave_length_x = 21, Wave_length_y = 22,
45 Wave_number_t = 23, Wave_number_x = 24, Wave_number_y = 25,
46 Wave_height_t = 26, Wave_height_x = 27, Wave_height_y = 28,
47 Angular_momentum_x = 30, Angular_momentum_y = 31, Angular_momentum_z = 32,
55 return static_cast<size_type>(Record::Number_of_records);
72 using array1 = blitz::Array<T,1>;
73 using array2 = blitz::Array<T,2>;
75 using shape2 = blitz::TinyVector<int,2>;
76 using wave_statistics_vector = Wave_statistics_vector<T,3>;
80 wave_statistics_vector _waves;
86 for (
auto& s : this->_series) { s.resize(n); }
95 record(Record rec, T value) {
97 stats[rec].record(value);
101 record(Record rec,
const blitz::TinyVector<T,3>& value) {
102 auto& series = this->_series;
103 auto i = static_cast<size_type>(rec);
104 series[i].record(value(0));
105 series[i+1].record(value(1));
106 series[i+2].record(value(2));
110 operator[](Record rec)
const {
111 return this->_series[static_cast<size_type>(rec)];
115 operator[](Record rec) {
116 return this->_series[static_cast<size_type>(rec)];
119 inline pointer begin() {
return this->_series; }
121 inline pointer end() {
return this->begin() + this->size(); }
122 inline const_pointer end()
const {
return this->begin() + this->size(); }
123 inline size_type series_size()
const {
return this->_series[0].size(); }
130 time_instant_series()
const {
131 return this->operator[](Record::Time);
135 wavy_surface_series()
const {
136 return this->operator[](Record::Wavy_surface);
140 inline wave_statistics_vector& waves() {
return this->_waves; }
141 inline const wave_statistics_vector& waves()
const {
return this->_waves; }
155 #endif // vim:filetype=cpp
A region defined by start and end index and lower and upper bound for each dimension.
void write_back(std::ostream &out) const
Write the last sample.
Fixed-size circular buffer. Used as time series storage.