preprocess_windio_for_BE.WindIOPreprocessor Class Reference
|
Kynema API
A flexible multibody structural dynamics code for wind turbines
|
Loading...
Searching...
No Matches
preprocess_windio_for_BE.WindIOPreprocessor Class Reference
Public Member Functions | |
| __init__ (self, str windIO_file) | |
| Dict[str, Any] | process_all_data (self, np.ndarray aero_nodes) |
| None | save_processed_data (self, Dict[str, Any] processed_data, str output_file) |
Public Attributes | |
| windIO_file | |
| windIO_data | |
| blade_data | |
| span_positions | |
| airfoil_labels | |
| airfoil_data | |
| polar_data | |
| outer_shape_data | |
Protected Member Functions | |
| _initialize_data (self) | |
| None | _load_windIO_file (self) |
| None | _extract_blade_data (self) |
| None | _extract_airfoil_data (self) |
| None | _extract_polar_data (self) |
| Tuple[Dict[str, Any], Dict[str, Any]] | _interpolate_airfoil_cross_sections (self, np.ndarray aero_nodes) |
| Dict[str, np.ndarray] | _normalize_airfoil_coordinates (self, str airfoil_name, int num_points=300) |
| Dict[str, Dict[str, Any]] | _setup_property_interpolators (self) |
| Dict[str, Dict[str, Any]] | _normalize_all_airfoil_polars (self, Dict[str, np.ndarray] target_conditions) |
| Dict[str, Any] | _normalize_single_airfoil_polars (self, Dict[str, Any] polar_set, Dict[str, np.ndarray] target_conditions) |
| Dict[str, Any] | _interpolate_polars_at_aero_node (self, str node_name, float node_position, List[str] source_airfoils, Dict[str, Dict[str, Any]] normalized_polars) |
| _interpolate_polars_via_pchip (self, normalized_polars, weight) | |
| Dict[str, Tuple[float, float]] | _calculate_aerodynamic_center_coords (self, Dict[str, Any] interpolated_cross_sections) |
Detailed Description
Preprocessor for windIO airfoil and polar data interpolation.
Constructor & Destructor Documentation
◆ __init__()
| preprocess_windio_for_BE.WindIOPreprocessor.__init__ | ( | self, | |
| str | windIO_file | ||
| ) |
Initializes the preprocessor with a windIO file and loads all data attributes.
Args:
windIO_file: Path to the input windIO YAML file
Member Function Documentation
◆ _calculate_aerodynamic_center_coords()
|
protected |
Calculate local x-y coordinates of aerodynamic centers for each aerodynamic node.
This function performs the following steps:
- Scales airfoil coordinates by chord length
- Positions aerodynamic center along x-axis (chord line) based on aerodynamic_center value
- Applies section offsets (section_offset_x, section_offset_y)
- Applies twist rotation around leading edge
Args:
interpolated_cross_sections: Dictionary containing interpolated cross-section data
Returns:
Dictionary with node_name -> (x_ac, y_ac) coordinates of aerodynamic centers
◆ _extract_airfoil_data()
|
protected |
Extracts airfoil data from windIO structure.
◆ _extract_blade_data()
|
protected |
Extracts blade and outer_shape_data from windIO structure.
◆ _extract_polar_data()
|
protected |
Extracts polar data from airfoil data.
◆ _initialize_data()
|
protected |
Initializes all data attributes. Calls the following methods in order: - _load_windIO_file -> loads and parses the windIO YAML file - _extract_blade_data -> extracts blade and outer_shape_data from windIO structure - _extract_airfoil_data -> extracts airfoil data from windIO structure - _extract_polar_data -> extracts polar data from airfoil data
◆ _interpolate_airfoil_cross_sections()
|
protected |
Interpolates airfoil cross-sections at aerodynamic nodes along the blade span.
This function:
- Uses spanwise positions from windIO outer_shape data to locate provided airfoils
- Normalizes all windIO-provided airfoils to a common grid
- Interpolates new airfoil cross-section between normalized airfoils using the piecewise
cubic hermite polynomial (PCHIP) interpolation
- Interpolates chord, twist, section_offset_y, section_offset_x, relative thickness (rthick),
and aerodynamic center using PCHIP
Args:
aero_nodes: Array of aerodynamic node positions [0-1] along blade span, r/R
Returns:
Tuple with two dictionaries:
- normalized_airfoils: Dictionary with normalized airfoil cross-sections
- interpolated_cross_sections: Dictionary with interpolated airfoil cross-sections at each node, including:
- airfoil_coordinates: normalized x,y coordinates
- interpolation_method: 'direct_copy' or 'pchip'
- source_airfoils: list of provided airfoils used
- interpolation_weight: weight for interpolation between two airfoils
- chord: interpolated chord
- twist: interpolated twist
- section_offset_y: interpolated section offset y
- section_offset_x: interpolated section offset x
- relative_thickness: interpolated thickness ratio
- aerodynamic_center: interpolated aerodynamic center
◆ _interpolate_polars_at_aero_node()
|
protected |
Interpolates polar data at a specific aerodynamic node using pre-normalized data.
Args:
node_name: Name of the aerodynamic node
node_position: Position along blade span, r/R [0-1]
source_airfoils: List of source airfoil names for interpolation
normalized_polars: Pre-normalized polar data for all windIO-provided airfoils
Returns:
Dictionary containing interpolated polar data for this node
◆ _interpolate_polars_via_pchip()
|
protected |
Interpolates polar data at a specific spanwise position using PCHIP interpolation
across all available airfoils.
Args:
normalized_polars: Dictionary of normalized polar data for all airfoils
weight: Spanwise position for interpolation [0-1]
Returns:
Interpolated polar data
◆ _load_windIO_file()
|
protected |
Loads and parses the windIO YAML file.
◆ _normalize_airfoil_coordinates()
|
protected |
Normalizes/regularizes airfoil coordinates to a common grid based on normalized surface curve fraction.
Uses PCHIP interpolation with open trailing edge.
This normalization/regularization is necessary for blade element analysis because:
- Different airfoils may have different numbers of coordinate points
- Original coordinates may have non-uniform spacing along the surface
- Blade span interpolation i.e. interpolation between two airfoils requires the
airfoils to be in comparable formats
The process splits the airfoil into upper/lower surfaces, parameterizes each by arc
length, then interpolates to a uniform grid (uniform spacing, 300 points by default)
for consistent analysis.
Args:
airfoil_name: Name of the airfoil
num_points: Number of points for normalized grid
Returns:
Dictionary with normalized x, y coordinates
◆ _normalize_all_airfoil_polars()
|
protected |
Normalizes/regularizes polar data for all available airfoils to a common angle-of-attack grid.
This function processes all airfoils that have polar data available in the windIO file.
For each airfoil, it interpolates the polar coefficients (cl, cd, cm) to a common
angle-of-attack grid using linear interpolation.
Args:
target_conditions: Target conditions i.e. angle-of-attack range for interpolation.
The target conditions typically include a standardized angle-of-attack range
(e.g., -π to +π radians at 1° resolution) that will be used consistently across
all airfoils for blade element analysis.
Returns:
Dictionary with airfoil names as keys and their normalized polar data as values
◆ _normalize_single_airfoil_polars()
|
protected |
Processes a single airfoil polar set by extracting coefficients and interpolating to target angle-of-attack
(AoA) conditions using linear interpolation to ensure bounded behavior.
Args:
polar_set: Single airfoil polar dataset containing 'alpha', 'cl', 'cd', 'cm'
target_conditions: Target conditions for interpolation
Returns:
Interpolated polar data as dictionary
◆ _setup_property_interpolators()
|
protected |
Sets up interpolators for blade properties including outer_shape properties
namely chord, twist, section_offset_y, section_offset_x, and rthick, and
airfoil-specific properties namely aerodynamic center.
Returns:
Dictionary of interpolators for each property
◆ process_all_data()
| Dict[str, Any] preprocess_windio_for_BE.WindIOPreprocessor.process_all_data | ( | self, | |
| np.ndarray | aero_nodes | ||
| ) |
Processes all airfoil cross-sections and polars by
- normalizing/regularizing the cross-sections and then interpolating the normalized
cross-sections at each aerodynamic node
- normalizing/regularizing the provided polars in windIO file to a common angle-of-attack
grid
- interpolating the normalized polars at each aerodynamic node
Args:
aero_nodes: Aerodynamic node positions
Returns:
Complete processed dataset
◆ save_processed_data()
| None preprocess_windio_for_BE.WindIOPreprocessor.save_processed_data | ( | self, | |
| Dict[str, Any] | processed_data, | ||
| str | output_file | ||
| ) |
Saves processed data as a new windIO v2.0 file with additional airfoil information
for Blade Element Analysis at aerodynamic nodes.
This method creates a new windIO file that includes:
- All original windIO data
- Processed airfoil cross-sections at aerodynamic nodes
- Processed polar data at aerodynamic nodes
Args:
processed_data: Processed airfoil and polar data
output_file: Output windIO file path
Member Data Documentation
◆ airfoil_data
| preprocess_windio_for_BE.WindIOPreprocessor.airfoil_data |
◆ airfoil_labels
| preprocess_windio_for_BE.WindIOPreprocessor.airfoil_labels |
◆ blade_data
| preprocess_windio_for_BE.WindIOPreprocessor.blade_data |
◆ outer_shape_data
| preprocess_windio_for_BE.WindIOPreprocessor.outer_shape_data |
◆ polar_data
| preprocess_windio_for_BE.WindIOPreprocessor.polar_data |
◆ span_positions
| preprocess_windio_for_BE.WindIOPreprocessor.span_positions |
◆ windIO_data
| preprocess_windio_for_BE.WindIOPreprocessor.windIO_data |
◆ windIO_file
| preprocess_windio_for_BE.WindIOPreprocessor.windIO_file |
The documentation for this class was generated from the following file:
- /home/runner/work/kynema/kynema/kynema/src/utilities/scripts/preprocess_windio_for_BE.py
Generated by