Source code for RCAIDE.Library.Methods.Geometry.Airfoil.generate_interpolated_airfoils
# RCAIDE/Library/Methods/Geometry/Two_Dimensional/Airfoil/generate_interpolated_airfoils.py
#
#
# Created: Jul 2024, M. Clarke
# ----------------------------------------------------------------------------------------------------------------------
# IMPORT
# ----------------------------------------------------------------------------------------------------------------------
from RCAIDE.Library.Methods.Geometry.Airfoil.import_airfoil_geometry import import_airfoil_geometry
import numpy as np
import os
# ----------------------------------------------------------------------------------------------------------------------
# generate_interpolated_airfoils
# ----------------------------------------------------------------------------------------------------------------------
[docs]
def generate_interpolated_airfoils(a1, a2, nairfoils, npoints=200, save_filename="Transition"):
""" Takes in two airfoils, interpolates between their coordinates to generate new
airfoil geometries and saves new airfoil files.
Assumptions: Linear geometric transition between airfoils
Source: None
Inputs:
a1 first airfoil [ airfoil ]
a2 second airfoil [ airfoil ]
nairfoils number of airfoils [ unitless ]
"""
# import airfoil geometry for the two airfoils
a1_name = os.path.basename(a1)
a2_name = os.path.basename(a2)
a_geo_1 = import_airfoil_geometry(a1,npoints)
a_geo_2 = import_airfoil_geometry(a2,npoints)
# for each point around the airfoil, interpolate between the two given airfoil coordinates
z = np.linspace(0,1,nairfoils)
y_u_lb = a_geo_1.y_upper_surface
y_u_ub = a_geo_2.y_upper_surface
y_l_lb = a_geo_1.y_lower_surface
y_l_ub = a_geo_2.y_lower_surface
x_u_lb = a_geo_1.x_upper_surface
x_u_ub = a_geo_2.x_upper_surface
x_l_lb = a_geo_1.x_lower_surface
x_l_ub = a_geo_2.x_lower_surface
# broadcasting interpolation
y_n_upper = (z[None,...] * (y_u_ub[...,None] - y_u_lb[...,None]) + (y_u_lb[...,None])).T
y_n_lower = (z[None,...] * (y_l_ub[...,None] - y_l_lb[...,None]) + (y_l_lb[...,None])).T
x_n_upper = (z[None,...] * (x_u_ub[...,None] - x_u_lb[...,None]) + (x_u_lb[...,None])).T
x_n_lower = (z[None,...] * (x_l_ub[...,None] - x_l_lb[...,None]) + (x_l_lb[...,None])).T
# save new airfoil geometry files:
new_files = {'a_{}'.format(i+1): [] for i in range(nairfoils-2)}
airfoil_files = []
for k in range(nairfoils-2):
# create new files and write title block for each new airfoil
title_block = "Airfoil Transition "+str(k+1)+" between "+a1_name+" and "+a2_name+"\n 61. 61.\n\n"
file ='a_'+str(k+1)
new_files[file] = open(save_filename + str(k+1) +".txt", "w+")
new_files[file].write(title_block)
y_n_u = np.reshape(y_n_upper[k+1],(npoints//2,1))
y_n_l = np.reshape(y_n_lower[k+1],(npoints//2,1))
x_n_u = np.reshape(x_n_upper[k+1],(npoints//2,1))
x_n_l = np.reshape(x_n_lower[k+1],(npoints//2,1))
airfoil_files.append(new_files[file].name)
upper_data = np.append(x_n_u, y_n_u,axis=1)
lower_data = np.append(x_n_l, y_n_l,axis=1)
# write lines to files
for lines in upper_data: #upper_data[file]:
line = str(lines[0]) + " " + str(lines[1]) + "\n"
new_files[file].write(line)
new_files[file].write("\n")
for lines in lower_data: #[file]:
line = str(lines[0]) + " " + str(lines[1]) + "\n"
new_files[file].write(line)
new_files[file].close()
# plot new and original airfoils:
airfoil_files.insert(0,a1)
airfoil_files.append(a2)
return airfoil_files