/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
20class Outputs {
21public:
22 using DeviceType =
23 Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>;
24
26 enum class OutputLocation : std::uint8_t {
27 kNodes = 0,
28 kQPs = 1
29 };
30
38 Outputs(
39 const std::string& output_file, size_t num_nodes,
41 );
42
51 Outputs(
52 const std::string& output_file, const std::string& time_series_file, size_t num_nodes,
54 );
55
61 [[nodiscard]] std::unique_ptr<util::NodeStateWriter>& GetOutputWriter();
62
68 [[nodiscard]] std::unique_ptr<util::TimeSeriesWriter>& GetTimeSeriesWriter();
69
75 [[nodiscard]] OutputLocation GetLocation() const;
76
83 void WriteNodeOutputsAtTimestep(const HostState<DeviceType>& host_state, size_t timestep);
84
86
93 void WriteRotorTimeSeriesAtTimestep(size_t timestep, double azimuth_angle, double rotor_speed);
94
95private:
96 std::unique_ptr<util::NodeStateWriter> output_writer_;
97 std::unique_ptr<util::TimeSeriesWriter> time_series_writer_;
98 size_t num_nodes_;
99 OutputLocation location_;
100
101 // Pre-allocated vectors for storing output data
102 std::vector<double> x_data_;
103 std::vector<double> y_data_;
104 std::vector<double> z_data_;
105 std::vector<double> i_data_;
106 std::vector<double> j_data_;
107 std::vector<double> k_data_;
108 std::vector<double> w_data_;
109};
110
111} // namespace kynema::interfaces
A class that handles writing state data to disk for analysis/visualization.
Definition outputs.hpp:20
Kokkos::Device< Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space > DeviceType
Definition outputs.hpp:23
std::unique_ptr< util::TimeSeriesWriter > & GetTimeSeriesWriter()
Gets a reference to the TimeSeriesWriter for direct usage.
Definition outputs.cpp:42
void WriteNodeOutputsAtTimestep(const HostState< DeviceType > &host_state, size_t timestep)
Write node state outputs to NetCDF file at specified timestep.
Definition outputs.cpp:50
OutputLocation
Enum for selecting where on elements to write the outputs.
Definition outputs.hpp:26
@ kNodes
Write outputs at node locations.
@ kQPs
Write outputs at quadrature points.
std::unique_ptr< util::NodeStateWriter > & GetOutputWriter()
Gets a reference to the NodeStateWriter for direct usage.
Definition outputs.cpp:38
OutputLocation GetLocation() const
Returns the output location as set by the constructor.
Definition outputs.cpp:46
void WriteRotorTimeSeriesAtTimestep(size_t timestep, double azimuth_angle, double rotor_speed)
Write rotor time-series data at specified timestep.
Definition outputs.cpp:114
Definition blade_interface.cpp:9
Host-side mirror of the simulation state for a given time increment.
Definition host_state.hpp:22