/home/runner/work/kynema/kynema/kynema/src/interfaces/turbine/turbine_interface.hpp Source File

Kynema API: /home/runner/work/kynema/kynema/kynema/src/interfaces/turbine/turbine_interface.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
turbine_interface.hpp
Go to the documentation of this file.
1#pragma once
2
11#include "model/model.hpp"
14
16struct SolutionInput;
17struct TurbineInput;
18struct OutputsConfig;
19} // namespace kynema::interfaces::components
20
21namespace kynema::interfaces {
22
30public:
31 using DeviceType =
32 Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>;
33
42 explicit TurbineInterface(
43 const components::SolutionInput& solution_input,
44 const components::TurbineInput& turbine_input,
45 const components::AerodynamicsInput& aerodynamics_input = {},
46 const components::ControllerInput& controller_input = {},
47 const components::OutputsConfig& outputs_config = {}
48 );
49
51
53
55
57
58 ~TurbineInterface() = default;
59
61 [[nodiscard]] components::Turbine& Turbine() { return this->turbine; }
62
65 if (!aerodynamics) {
66 throw std::runtime_error("Aerodynamics component not initialized in TurbineInterface.");
67 }
68 return *aerodynamics;
69 }
70
79 double fluid_density,
80 const std::function<std::array<double, 3>(const std::array<double, 3>&)>& inflow_function
81 );
82
83 std::array<double, 3> GetHubNodePosition() const;
84
85 void SetHubInflow(const std::array<double, 3>& inflow);
86
90 void ApplyController(double t);
91
100 [[nodiscard]] bool Step();
101
103 void SaveState();
104
106 void RestoreState();
107
109 Model& GetModel() { return model; }
110
112 HostState<DeviceType>& GetHostState() { return host_state; }
113
118 [[nodiscard]] double CalculateAzimuthAngle() const;
119
124 [[nodiscard]] double CalculateRotorSpeed() const;
125
126 void WriteOutput();
127
128 void OpenOutputFile();
129
130 void CloseOutputFile();
131
132private:
133 Model model;
134 components::Turbine turbine;
135 State<DeviceType> state;
136 Elements<DeviceType> elements;
137 Constraints<DeviceType> constraints;
138 StepParameters parameters;
139 Solver<DeviceType> solver;
140 State<DeviceType> state_save;
141 HostState<DeviceType> host_state;
142 HostConstraints<DeviceType> host_constraints;
143 std::unique_ptr<Outputs> outputs;
144 std::unique_ptr<util::TurbineController> controller;
145 std::unique_ptr<components::Aerodynamics> aerodynamics;
146 std::array<double, 3> hub_inflow{0., 0., 0.};
147
157 void WriteTimeSeriesData() const;
158
163 void InitializeController(
164 const components::TurbineInput& turbine_input,
165 const components::SolutionInput& solution_input
166 );
167};
168
169} // namespace kynema::interfaces
Struct to define the connectivity structure of elements, nodes, and constraints defining an Kynema pr...
Definition model.hpp:74
Interface for blade simulation that manages state, solver, and components.
Definition turbine_interface.hpp:29
std::array< double, 3 > GetHubNodePosition() const
Definition turbine_interface.cpp:475
HostState< DeviceType > & GetHostState()
Return a reference to this interface's host state.
Definition turbine_interface.hpp:112
TurbineInterface & operator=(const TurbineInterface &)=delete
void SaveState()
Saves the current state for potential restoration (in correction step)
Definition turbine_interface.cpp:178
void CloseOutputFile()
Definition turbine_interface.cpp:598
TurbineInterface(TurbineInterface &other)=delete
components::Aerodynamics & Aerodynamics()
Returns a reference to the aerodynamics model.
Definition turbine_interface.hpp:64
void WriteOutput()
Definition turbine_interface.cpp:604
void ApplyController(double t)
Update controller inputs from current system state.
Definition turbine_interface.cpp:526
void RestoreState()
Restores the previously saved state (in correction step)
Definition turbine_interface.cpp:182
bool Step()
Steps forward in time.
Definition turbine_interface.cpp:138
double CalculateRotorSpeed() const
Calculates rotor speed from constraint output.
Definition turbine_interface.cpp:470
void SetHubInflow(const std::array< double, 3 > &inflow)
Definition turbine_interface.cpp:481
components::Turbine & Turbine()
Returns a reference to the turbine model.
Definition turbine_interface.hpp:61
TurbineInterface(TurbineInterface &&other)=delete
void UpdateAerodynamicLoads(double fluid_density, const std::function< std::array< double, 3 >(const std::array< double, 3 > &)> &inflow_function)
Updates the aerodynamic loads to be applied to the structure based on a provided function.
Definition turbine_interface.cpp:116
double CalculateAzimuthAngle() const
Calculates and normalizes azimuth angle from constraint output.
Definition turbine_interface.cpp:457
void OpenOutputFile()
Definition turbine_interface.cpp:592
Kokkos::Device< Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space > DeviceType
Definition turbine_interface.hpp:32
TurbineInterface & operator=(TurbineInterface &&)=delete
Model & GetModel()
Return a reference of the model owned by this interface.
Definition turbine_interface.hpp:109
Definition aerodynamics_input.hpp:27
Definition aerodynamics.hpp:335
Represents a turbine with nodes, elements, and constraints.
Definition turbine.hpp:87
Definition aerodynamics.cpp:5
Definition blade_interface.cpp:9
Container class for managing multiple constraints in a simulation.
Definition constraints.hpp:29
A container providing handle to all structural elements present in the model.
Definition elements.hpp:20
This object manages the assembly and solution of linear system arising from the generalized-alpha bas...
Definition solver.hpp:21
Container for storing the complete system state of the simulation at a given time increment.
Definition state.hpp:18
A Struct containing the paramters used to control the time stepping process.
Definition step_parameters.hpp:12
Host-side mirror of the constraint input, output, and loads for a given time increment.
Definition host_constraints.hpp:21
Host-side mirror of the simulation state for a given time increment.
Definition host_state.hpp:22
Configuration parameters for a DISCON-style turbine controller.
Definition controller_input.hpp:15
A configuration object used to create the low level StepParameters object.
Definition solution_input.hpp:13
Complete input specification for a turbine.
Definition turbine_input.hpp:17