/home/runner/work/kynema/kynema/kynema/src/interfaces/outputs.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/interfaces/outputs.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
outputs.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <string>
5#include <vector>
6
7#include <Kokkos_Core.hpp>
8
11
12namespace kynema::interfaces {
13
14template <typename DeviceType>
15struct HostState;
16
21class Outputs {
22public:
23 using DeviceType =
24 Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>;
25
37 Outputs(
38 const std::string& output_file, size_t num_nodes, const std::string& time_series_file = "",
39 const std::vector<std::string>& enabled_state_prefixes = {"x", "u", "v", "a", "f"},
41 );
42
55 Outputs(
56 const std::string& output_file, size_t num_nodes, const std::string& time_series_file,
57 const std::vector<std::string>& time_series_channel_names,
58 const std::vector<std::string>& time_series_channel_units = {},
59 const std::vector<std::string>& enabled_state_prefixes = {"x", "u", "v", "a", "f"},
60 size_t node_state_buffer_size = util::NodeStateWriter::kDefaultBufferSize,
61 size_t time_series_buffer_size = util::TimeSeriesWriter::kDefaultBufferSize
62 );
63
67 [[nodiscard]] std::unique_ptr<util::NodeStateWriter>& GetOutputWriter();
68
72 [[nodiscard]] std::unique_ptr<util::TimeSeriesWriter>& GetTimeSeriesWriter();
73
80 void WriteNodeOutputsAtTimestep(const HostState<DeviceType>& host_state, size_t timestep);
81
89 void WriteValueAtTimestep(size_t timestep, const std::string& name, double value);
90
97 void WriteTimeSeriesRowAtTimestep(size_t timestep, std::span<const double> row);
98
100 void Close();
101
103 void Open();
104
105private:
106 std::unique_ptr<util::NodeStateWriter> output_writer_;
107 size_t num_nodes_;
108 std::unique_ptr<util::TimeSeriesWriter> time_series_writer_;
109 std::vector<std::string> enabled_state_prefixes_;
110
111 // Pre-allocated vectors for storing output data
112 std::vector<double> x_data_;
113 std::vector<double> y_data_;
114 std::vector<double> z_data_;
115 std::vector<double> i_data_;
116 std::vector<double> j_data_;
117 std::vector<double> k_data_;
118 std::vector<double> w_data_;
119
125 [[nodiscard]] bool IsStateComponentEnabled(const std::string& prefix) const;
126};
127
128} // namespace kynema::interfaces
Handles writing state data to disk as simulation outputs and provides a means for post-processing e....
Definition outputs.hpp:21
void WriteTimeSeriesRowAtTimestep(size_t timestep, std::span< const double > row)
Write a full row of time-series data at specified timestep.
Definition outputs.cpp:168
Kokkos::Device< Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space > DeviceType
Definition outputs.hpp:24
std::unique_ptr< util::TimeSeriesWriter > & GetTimeSeriesWriter()
Gets a reference to the TimeSeriesWriter for direct usage.
Definition outputs.cpp:64
void WriteNodeOutputsAtTimestep(const HostState< DeviceType > &host_state, size_t timestep)
Write node state outputs to NetCDF file at specified timestep.
Definition outputs.cpp:74
void WriteValueAtTimestep(size_t timestep, const std::string &name, double value)
Write a single time-series value at specified timestep.
Definition outputs.cpp:162
std::unique_ptr< util::NodeStateWriter > & GetOutputWriter()
Gets a reference to the NodeStateWriter for direct usage.
Definition outputs.cpp:60
void Open()
Manually (re)open the underlying NetCDF files.
Definition outputs.cpp:183
void Close()
Manually close the underlying NetCDF files.
Definition outputs.cpp:174
static constexpr size_t kDefaultBufferSize
Default buffer size (number of timesteps to accumulate before auto-flush, 0 = no buffering)
Definition node_state_writer.hpp:33
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
Definition blade_interface.cpp:9