/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 nacelle_cm_mass_element_id{invalid_id}; //< Nacelle center of mass mass element ID
113 size_t yaw_bearing_mass_element_id{invalid_id}; //< Yaw bearing mass element ID
114
115 //--------------------------------------------------------------------------
116 // Nodes
117 //--------------------------------------------------------------------------
118
119 std::vector<NodeData> apex_nodes; //< Blade root nodes
120 NodeData hub_node; //< Hub node
121 NodeData azimuth_node; //< Azimuth node
122 NodeData shaft_base_node; //< Shaft base node
123 NodeData nacelle_cm_node; //< Nacelle center of mass node
124 NodeData yaw_bearing_node; //< Yaw bearing node
125
126 //--------------------------------------------------------------------------
127 // Constraints
128 //--------------------------------------------------------------------------
129
130 ConstraintData tower_base; //< Tower base constraint
131 ConstraintData tower_top_to_yaw_bearing; //< Tower top to yaw bearing constraint
132 ConstraintData yaw_bearing_to_shaft_base; //< Yaw bearing to shaft base constraint
133 ConstraintData yaw_bearing_to_nacelle_cm; //< Yaw bearing to nacelle center of mass constraint
134 ConstraintData shaft_base_to_azimuth; //< Nacelle mass to generator constraint
135 ConstraintData azimuth_to_hub; //< Azimuth to hub constraint
136 std::vector<ConstraintData> blade_pitch; //< Blade root to apex constraints
137 std::vector<ConstraintData> apex_to_hub; //< Apex to hub constraints
138
139 //--------------------------------------------------------------------------
140 // Control inputs
141 //--------------------------------------------------------------------------
142
143 std::vector<double> blade_pitch_control; //< Blade pitch angles
144 double torque_control{0.}; //< Torque control value
145 double yaw_control{0.}; //< Yaw control value
146
170 Turbine(const TurbineInput& input, Model& model);
171
172 Turbine(Turbine& other) = delete;
173
174 Turbine(Turbine&& other) = delete;
175
176 Turbine& operator=(const Turbine&) = delete;
177
179
180 ~Turbine() = default;
181
186 void GetMotion(const HostState<DeviceType>& host_state);
187
192 void GetLoads(const HostConstraints<DeviceType>& host_constraints);
193
198 void SetLoads(HostState<DeviceType>& host_state) const;
199
204 [[nodiscard]] const TurbineInput& GetTurbineInput() const;
205
206private:
207 //--------------------------------------------------------------------------
208 // Node ID collections of turbine components
209 //--------------------------------------------------------------------------
210
211 std::vector<size_t> tower_node_ids;
212 std::vector<size_t> drivetrain_node_ids;
214 std::vector<size_t> blade_node_ids;
215 std::vector<size_t> rotor_node_ids;
217 std::vector<size_t> nacelle_node_ids;
218 std::vector<size_t>
219 all_turbine_node_ids;
220
221 //--------------------------------------------------------------------------
222 // Turbine inputs
223 //--------------------------------------------------------------------------
224
225 TurbineInput turbine_input;
226
233 [[nodiscard]] static std::vector<Beam> CreateBlades(
234 std::span<const BeamInput> blade_inputs, Model& model
235 );
236
249 static void ValidateInput(const TurbineInput& input);
250
271 void PositionNodes(const TurbineInput& input, Model& model);
272
287 void CreateIntermediateNodes(const TurbineInput& input, Model& model);
288
300 void AddMassElements(const TurbineInput& input, Model& model);
378 void AddConstraints(const TurbineInput& input, Model& model);
379
386 void SetInitialConditions(const TurbineInput& input, Model& model);
407 void SetInitialDisplacements(const TurbineInput& input, Model& model);
408
419 void SetInitialRotorVelocity(const TurbineInput& input, Model& model);
420};
421
422} // 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:132
double torque_control
Definition turbine.hpp:144
ConstraintData yaw_bearing_to_nacelle_cm
Definition turbine.hpp:133
NodeData shaft_base_node
Definition turbine.hpp:122
double yaw_control
Definition turbine.hpp:145
std::vector< ConstraintData > blade_pitch
Definition turbine.hpp:136
void GetLoads(const HostConstraints< DeviceType > &host_constraints)
Populate constraint loads from host constraints.
Definition turbine.cpp:62
void GetMotion(const HostState< DeviceType > &host_state)
Populate node motion from host state.
Definition turbine.cpp:48
void SetLoads(HostState< DeviceType > &host_state) const
Update the host state with current node forces and moments.
Definition turbine.cpp:76
ConstraintData tower_base
Definition turbine.hpp:130
NodeData yaw_bearing_node
Definition turbine.hpp:124
Beam tower
Definition turbine.hpp:110
std::vector< double > blade_pitch_control
Definition turbine.hpp:143
NodeData hub_node
Definition turbine.hpp:120
std::vector< Beam > blades
Definition turbine.hpp:109
ConstraintData azimuth_to_hub
Definition turbine.hpp:135
ConstraintData shaft_base_to_azimuth
Definition turbine.hpp:134
size_t yaw_bearing_mass_element_id
Definition turbine.hpp:113
Kokkos::Device< Kokkos::DefaultExecutionSpace, Kokkos::DefaultExecutionSpace::memory_space > DeviceType
Definition turbine.hpp:94
Turbine & operator=(const Turbine &)=delete
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:90
ConstraintData tower_top_to_yaw_bearing
Definition turbine.hpp:131
Turbine & operator=(Turbine &&)=delete
NodeData azimuth_node
Definition turbine.hpp:121
size_t nacelle_cm_mass_element_id
Definition turbine.hpp:112
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:137
std::vector< NodeData > apex_nodes
Definition turbine.hpp:119
NodeData nacelle_cm_node
Definition turbine.hpp:123
size_t hub_mass_element_id
Definition turbine.hpp:111
Definition aerodynamics.cpp:5
Definition calculate_constraint_output.hpp:8
A wrapper around the Constraint ID of a given constraint.
Definition constraint_data.hpp:16
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
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