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

Kynema API: /home/runner/work/kynema/kynema/kynema/src/interfaces/components/turbine.hpp Source File
Kynema API
A flexible multibody structural dynamics code for wind turbines
Loading...
Searching...
No Matches
turbine.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <span>
4#include <vector>
5
11
12namespace kynema {
13class Model;
14}
15
87class Turbine {
88public:
89 //--------------------------------------------------------------------------
90 // Types and Constants
91 //--------------------------------------------------------------------------
92
93 using DeviceType =
94 Kokkos::Device<Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space>;
95
97 static constexpr size_t invalid_id{9999999};
98
100 static constexpr double kMinHubDiameter{1e-8};
101
103 static constexpr double kZeroTolerance{1e-12};
104
105 //--------------------------------------------------------------------------
106 // Elements
107 //--------------------------------------------------------------------------
108
109 std::vector<Beam> blades; //< Blades in the turbine
110 Beam tower; //< Tower in the turbine
111 size_t hub_mass_element_id{invalid_id}; //< Hub mass element ID
112 size_t yaw_bearing_mass_element_id{invalid_id}; //< Yaw bearing mass element ID
113
114 //--------------------------------------------------------------------------
115 // Nodes
116 //--------------------------------------------------------------------------
117
118 std::vector<NodeData> apex_nodes; //< Blade root nodes
119 NodeData hub_node; //< Hub node
120 NodeData azimuth_node; //< Azimuth node
121 NodeData shaft_base_node; //< Shaft base node
122 NodeData yaw_bearing_node; //< Yaw bearing node
123
124 //--------------------------------------------------------------------------
125 // Constraints
126 //--------------------------------------------------------------------------
127
128 ConstraintData tower_base; //< Tower base constraint
129 ConstraintData tower_top_to_yaw_bearing; //< Tower top to yaw bearing constraint
130 ConstraintData yaw_bearing_to_shaft_base; //< Yaw bearing to shaft base constraint
131 ConstraintData shaft_base_to_azimuth; //< Nacelle mass to generator constraint
132 ConstraintData azimuth_to_hub; //< Azimuth to hub constraint
133 std::vector<ConstraintData> blade_pitch; //< Blade root to apex constraints
134 std::vector<ConstraintData> apex_to_hub; //< Apex to hub constraints
135
136 //--------------------------------------------------------------------------
137 // Control inputs
138 //--------------------------------------------------------------------------
139
140 std::vector<double> blade_pitch_control; //< Blade pitch angles
141 double torque_control{0.}; //< Torque control value
142 double yaw_control{0.}; //< Yaw control value
143
167 Turbine(const TurbineInput& input, Model& model);
168
173 void GetMotion(const HostState<DeviceType>& host_state);
178 void SetLoads(HostState<DeviceType>& host_state) const;
183 [[nodiscard]] const TurbineInput& GetTurbineInput() const;
184
185private:
186 //--------------------------------------------------------------------------
187 // Node ID collections of turbine components
188 //--------------------------------------------------------------------------
189
190 std::vector<size_t> tower_node_ids;
191 std::vector<size_t> drivetrain_node_ids;
193 std::vector<size_t> blade_node_ids;
194 std::vector<size_t> rotor_node_ids;
196 std::vector<size_t> nacelle_node_ids;
197 std::vector<size_t>
198 all_turbine_node_ids;
199
200 //--------------------------------------------------------------------------
201 // Turbine inputs
202 //--------------------------------------------------------------------------
203
204 TurbineInput turbine_input;
205
212 [[nodiscard]] static std::vector<Beam> CreateBlades(
213 std::span<const BeamInput> blade_inputs, Model& model
214 );
215
228 static void ValidateInput(const TurbineInput& input);
229
250 void PositionNodes(const TurbineInput& input, Model& model);
251
266 void CreateIntermediateNodes(const TurbineInput& input, Model& model);
267
279 void AddMassElements(const TurbineInput& input, Model& model);
357 void AddConstraints(const TurbineInput& input, Model& model);
358
365 void SetInitialConditions(const TurbineInput& input, Model& model);
386 void SetInitialDisplacements(const TurbineInput& input, Model& model);
387
398 void SetInitialRotorVelocity(const TurbineInput& input, Model& model);
399};
400
401} // namespace kynema::interfaces::components
Struct to define the connectivity structure of elements, nodes, and constraints defining an Kynema pr...
Definition model.hpp:74
Represents a turbine blade with nodes, elements, and constraints.
Definition beam.hpp:24
Represents a turbine with nodes, elements, and constraints.
Definition turbine.hpp:87
ConstraintData yaw_bearing_to_shaft_base
Definition turbine.hpp:130
double torque_control
Definition turbine.hpp:141
NodeData shaft_base_node
Definition turbine.hpp:121
double yaw_control
Definition turbine.hpp:142
std::vector< ConstraintData > blade_pitch
Definition turbine.hpp:133
void GetMotion(const HostState< DeviceType > &host_state)
Populate node motion from host state.
Definition turbine.cpp:46
void SetLoads(HostState< DeviceType > &host_state) const
Update the host state with current node forces and moments.
Definition turbine.cpp:53
ConstraintData tower_base
Definition turbine.hpp:128
NodeData yaw_bearing_node
Definition turbine.hpp:122
Beam tower
Definition turbine.hpp:110
std::vector< double > blade_pitch_control
Definition turbine.hpp:140
NodeData hub_node
Definition turbine.hpp:119
std::vector< Beam > blades
Definition turbine.hpp:109
ConstraintData azimuth_to_hub
Definition turbine.hpp:132
ConstraintData shaft_base_to_azimuth
Definition turbine.hpp:131
size_t yaw_bearing_mass_element_id
Definition turbine.hpp:112
Kokkos::Device< Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space > DeviceType
Definition turbine.hpp:94
static constexpr double kZeroTolerance
Tolerance for near zero comparisons.
Definition turbine.hpp:103
static constexpr double kMinHubDiameter
Minimum valid hub diameter.
Definition turbine.hpp:100
const TurbineInput & GetTurbineInput() const
Get the turbine input configuration.
Definition turbine.cpp:60
ConstraintData tower_top_to_yaw_bearing
Definition turbine.hpp:129
NodeData azimuth_node
Definition turbine.hpp:120
static constexpr size_t invalid_id
Placeholder node ID value for uninitialized components.
Definition turbine.hpp:97
std::vector< ConstraintData > apex_to_hub
Definition turbine.hpp:134
std::vector< NodeData > apex_nodes
Definition turbine.hpp:118
size_t hub_mass_element_id
Definition turbine.hpp:111
Definition aerodynamics.cpp:3
Definition calculate_constraint_output.hpp:8
A wrapper around the Constraint ID of a given constraint.
Definition constraint_data.hpp:10
Host-side mirror of the simulation state for a given time increment.
Definition host_state.hpp:22
A collection of data defining the state at a given node and providing an ergonomic way to extract tha...
Definition node_data.hpp:16
Complete input specification for a turbine.
Definition turbine_input.hpp:17