Source code for RCAIDE.Library.Plots.Aerodynamics.plot_airfoil_surface_forces

## @ingroup Library-Plots-Performance-Aerodynamics  
# RCAIDE/Library/Plots/Performance/Aerodynamics/plot_airfoil_surface_forces.py
# 
# 
# Created:  Jul 2023, M. Clarke

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------  
 
from RCAIDE.Framework.Core import Units  
import matplotlib.pyplot as plt    

# ----------------------------------------------------------------------------------------------------------------------
#  PLOTS
# ----------------------------------------------------------------------------------------------------------------------     
[docs] def plot_airfoil_surface_forces(ap, save_figure = False, arrow_color = 'red', save_filename = 'Airfoil_Cp_Distribution', show_figure = True, file_type = ".png"): """ Generate plots showing pressure forces on airfoil surface using arrows. Parameters ---------- ap : Data Airfoil properties data structure containing: - x : array Airfoil surface x-coordinates - y : array Airfoil surface y-coordinates - cp : array Pressure coefficients at surface points - normals : array Surface normal vectors [nx, ny] - AoA : array Angles of attack [rad] - Re : array Reynolds numbers save_figure : bool, optional Save figure to file if True, default False arrow_color : str, optional Color specification for force arrows, default 'red' save_filename : str, optional Name for saved figure file, default 'Airfoil_Cp_Distribution' show_figure : bool, optional Display figure if True, default True file_type : str, optional File extension for saved figure, default ".png" Returns ------- fig : matplotlib.figure.Figure Notes ----- Creates a figure showing: - Airfoil profile - Pressure force vectors as arrows normal to surface - Arrow length proportional to local pressure coefficient - Arrows point inward for negative Cp (suction) - Arrows point outward for positive Cp (pressure) A separate figure is created for each combination of angle of attack and Reynolds number. **Definitions** 'Surface Normal' Unit vector perpendicular to airfoil surface See Also -------- RCAIDE.Library.Plots.Common.set_axes : Standardized axis formatting RCAIDE.Library.Analysis.Aerodynamics.compute_pressure_forces : Analysis module """ # determine dimension of angle of attack and reynolds number n_cpts = len(ap.AoA) nAoA = len(ap.AoA[0]) n_pts = len(ap.x[0,0,:])- 1 for i in range(n_cpts): for j in range(nAoA): label = '_AoA_' + str(round(ap.AoA[i][j]/Units.degrees,2)) + '_deg_Re_' + str(round(ap.Re[i][j]/1000000,2)) + 'E6' fig = plt.figure('Airfoil_Pressure_Normals' + label ) axis = fig.add_subplot(1,1,1) axis.plot(ap.x[0,0,:], ap.y[0,0,:],'k-') for k in range(n_pts): dx_val = ap.normals[i,j,k,0]*abs(ap.cp[i,j,k])*0.1 dy_val = ap.normals[i,j,k,1]*abs(ap.cp[i,j,k])*0.1 if ap.cp[i,j,k] < 0: plt.arrow(x= ap.x[i,j,k], y=ap.y[i,j,k] , dx= dx_val , dy = dy_val , fc=arrow_color, ec=arrow_color,head_width=0.005, head_length=0.01 ) else: plt.arrow(x= ap.x[i,j,k]+dx_val , y= ap.y[i,j,k]+dy_val , dx= -dx_val , dy = -dy_val , fc=arrow_color, ec=arrow_color,head_width=0.005, head_length=0.01 ) return fig