/home/runner/work/kynema/kynema/kynema/src/utilities/netcdf/time_series_writer.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/utilities/netcdf/time_series_writer.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
time_series_writer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <span>
4#include <string>
5#include <vector>
6
7#include "netcdf_file.hpp"
8
9namespace kynema::util {
10
15public:
17 static constexpr size_t kDefaultBufferSize{0};
18
26 explicit TimeSeriesWriter(const std::string& file_path, bool create = true);
27
38 const std::string& file_path, bool create, const std::vector<std::string>& channel_names,
39 const std::vector<std::string>& channel_units = {}, size_t buffer_size = kDefaultBufferSize
40 );
41
44
45 // Rule of five -> explicitly delete the copy ctor, copy assignment operator,
46 // move ctor, and move assignment operator
51
60 const std::string& variable_name, size_t timestep, std::span<const double> values
61 );
62
71 const std::string& variable_name, size_t timestep, const double& value
72 );
73
80 void WriteRowAtTimestep(size_t timestep, std::span<const double> row);
81
83 void Flush();
84
86 void Close();
87
89 void Open();
90
92 [[nodiscard]] const NetCdfFile& GetFile() const;
93
95 [[nodiscard]] const std::vector<std::string>& GetChannelNames() const;
96
98 [[nodiscard]] const std::vector<std::string>& GetChannelUnits() const;
99
101 [[nodiscard]] size_t GetNumChannels() const;
102
104 [[nodiscard]] size_t GetBufferSize() const;
105
106private:
107 NetCdfFile file_;
108
109 //-----------------------------------
110 // channel output variables
111 //-----------------------------------
112
113 std::vector<std::string> channel_names_;
114 std::vector<std::string> channel_units_;
115 size_t num_channels_;
116 size_t buffer_size_;
117
118 //-----------------------------------
119 // support for buffering
120 //-----------------------------------
121
123 struct BufferedData {
124 std::vector<double> data; //< Flattened row-major buffer
125 size_t start_timestep{0}; //< First timestep in the buffer
126 size_t num_rows{0}; //< Number of complete rows currently in buffer
127 };
128
129 BufferedData buffer_; //< Buffer for time-series data
130
134 void FlushBuffer();
135};
136
137} // namespace kynema::util
Definition netcdf_file.hpp:18
Class for writing time-series data to NetCDF file.
Definition time_series_writer.hpp:14
void Close()
Manually closes the underlying NetCDF file and flush any remaining buffered rows.
Definition time_series_writer.cpp:192
void Flush()
Flushes any remaining buffered rows.
Definition time_series_writer.cpp:187
size_t GetBufferSize() const
Gets the buffer size.
Definition time_series_writer.cpp:220
const std::vector< std::string > & GetChannelNames() const
Gets the channel names.
Definition time_series_writer.cpp:208
TimeSeriesWriter(const TimeSeriesWriter &)=delete
TimeSeriesWriter & operator=(const TimeSeriesWriter &)=delete
const NetCdfFile & GetFile() const
Gets the NetCDF file object.
Definition time_series_writer.cpp:204
static constexpr size_t kDefaultBufferSize
Default buffer size (number of rows to accumulate before auto-flush, 0 = no buffering)
Definition time_series_writer.hpp:17
void WriteValuesAtTimestep(const std::string &variable_name, size_t timestep, std::span< const double > values)
Writes multiple values for a time-series variable at a specific timestep.
Definition time_series_writer.cpp:90
void Open()
Manually (re)opens the underlying NetCDF file.
Definition time_series_writer.cpp:200
TimeSeriesWriter(TimeSeriesWriter &&)=delete
size_t GetNumChannels() const
Gets the number of channels.
Definition time_series_writer.cpp:216
~TimeSeriesWriter()
Destructor flushes any remaining buffered rows.
Definition time_series_writer.cpp:85
const std::vector< std::string > & GetChannelUnits() const
Gets the channel units.
Definition time_series_writer.cpp:212
TimeSeriesWriter & operator=(TimeSeriesWriter &&)=delete
void WriteValueAtTimestep(const std::string &variable_name, size_t timestep, const double &value)
Writes a single value for a time-series variable at a specific timestep.
Definition time_series_writer.cpp:120
void WriteRowAtTimestep(size_t timestep, std::span< const double > row)
Writes a full row (all channels) at a specific timestep.
Definition time_series_writer.cpp:126
Definition aerodyn_inflow.hpp:14