/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
46 [[nodiscard]] std::unique_ptr<util::NodeStateWriter>& GetOutputWriter();
47
51 [[nodiscard]] std::unique_ptr<util::TimeSeriesWriter>& GetTimeSeriesWriter();
52
59 void WriteNodeOutputsAtTimestep(const HostState<DeviceType>& host_state, size_t timestep);
60
68 void WriteValueAtTimestep(size_t timestep, const std::string& name, double value);
69
71 void Close();
72
74 void Open();
75
76private:
77 std::unique_ptr<util::NodeStateWriter> output_writer_;
78 size_t num_nodes_;
79 std::unique_ptr<util::TimeSeriesWriter> time_series_writer_;
80 std::vector<std::string> enabled_state_prefixes_;
81
82 // Pre-allocated vectors for storing output data
83 std::vector<double> x_data_;
84 std::vector<double> y_data_;
85 std::vector<double> z_data_;
86 std::vector<double> i_data_;
87 std::vector<double> j_data_;
88 std::vector<double> k_data_;
89 std::vector<double> w_data_;
90
96 [[nodiscard]] bool IsStateComponentEnabled(const std::string& prefix) const;
97};
98
99} // namespace kynema::interfaces
Handles writing state data to disk as simulation outputs and provides a means for post-processing e....
Definition outputs.hpp:21
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:35
void WriteNodeOutputsAtTimestep(const HostState< DeviceType > &host_state, size_t timestep)
Write node state outputs to NetCDF file at specified timestep.
Definition outputs.cpp:45
void WriteValueAtTimestep(size_t timestep, const std::string &name, double value)
Write rotor time-series data at specified timestep.
Definition outputs.cpp:133
std::unique_ptr< util::NodeStateWriter > & GetOutputWriter()
Gets a reference to the NodeStateWriter for direct usage.
Definition outputs.cpp:31
void Open()
Manually (re)open the underlying NetCDF files.
Definition outputs.cpp:148
void Close()
Manually close the underlying NetCDF files.
Definition outputs.cpp:139
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
Definition blade_interface.cpp:9
Host-side mirror of the simulation state for a given time increment.
Definition host_state.hpp:22