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

# RCAIDE/Library/Plots/Aerodynamics/plot_rotor_performance.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------  
import pandas as pd 
import plotly.graph_objects as go
from plotly.subplots import make_subplots 

# ----------------------------------------------------------------------------------------------------------------------
#  PLOTS
# ----------------------------------------------------------------------------------------------------------------------      
[docs] def plot_rotor_performance(rotor, outputs,title=None, show_figure = True, save_figure=False, save_filename='Rotor_Performance', file_type=".png"): """ Generate plots summarizing rotor aerodynamic performance distributions. Parameters ---------- rotor : Data Rotor data structure containing outputs with fields: - disc_radial_distribution : array Radial positions on disc [m] - disc_axial_velocity : array Total axial velocity [m/s] - disc_tangential_velocity : array Total tangential velocity [m/s] - disc_axial_induced_velocity : array Induced axial velocity [m/s] - disc_tangential_induced_velocity : array Induced tangential velocity [m/s] - disc_thrust_distribution : array Local thrust distribution [N] - disc_torque_distribution : array Local torque distribution [N-m] title : str, optional Custom plot title, default None show_figure : bool, optional Display figure if True, default True save_figure : bool, optional Save figure to file if True, default False save_filename : str, optional Name for saved figure file, default 'Rotor_Performance' file_type : str, optional File extension for saved figure, default ".png" Returns ------- fig : matplotlib.figure.Figure Figure containing four subplots: - Velocity distributions - Induced velocity distributions - Thrust distribution - Torque distribution Notes ----- Each subplot includes: - Appropriate axis labels - Legend identifying components - Consistent line styling **Definitions** 'Total Velocity' Sum of freestream and induced velocities 'Induced Velocity' Additional velocity induced by rotor 'Thrust Distribution' Local thrust force per unit radius 'Torque Distribution' Local torque per unit radius See Also -------- plot_rotor_disc_performance : Detailed disc visualization """ # unpack r_distribution = outputs.disc_radial_distribution[0, :, 0] # 2d plots fig = make_subplots(rows=2, cols=2) df1a = pd.DataFrame(dict(x=r_distribution, y=outputs.disc_axial_velocity[0, :, 0])) # label='Axial' df1b = pd.DataFrame(dict(x=r_distribution, y=outputs.disc_tangential_velocity[0, :, 0])) # label='Tangential' df2a = pd.DataFrame(dict(x=r_distribution, y=outputs.disc_axial_induced_velocity[0, :, 0])) # label='Axial' df2b = pd.DataFrame(dict(x=r_distribution, y=outputs.disc_tangential_induced_velocity[0, :, 0])) # label='Tangential' df3 = pd.DataFrame(dict(x=r_distribution, y=outputs.disc_thrust_distribution[0, :, 0])) df4 = pd.DataFrame(dict(x=r_distribution, y=outputs.disc_torque_distribution[0, :, 0])) fig.append_trace(go.Line(df1a, name='Axial', legendgroup='1',showlegend=True), row=1, col=1) fig.append_trace(go.Line(df1b, name='Tangential', legendgroup='1',showlegend=True), row=1, col=1) fig.append_trace(go.Line(df2a, name='Axial', legendgroup='2',showlegend=True), row=1, col=2) fig.append_trace(go.Line(df2b, name='Tangential', legendgroup='2',showlegend=True), row=1, col=2) fig.append_trace(go.Line(df3, name='Thrust', legendgroup='3',showlegend=False), row=2, col=1) fig.append_trace(go.Line(df4, name='Torque', legendgroup='4',showlegend=False), row=2, col=2) fig.update_xaxes(title_text="Radial Station", row=1, col=1) fig.update_yaxes(title_text="Velocity", row=1, col=1) fig.update_xaxes(title_text="Radial Station", row=1, col=2) fig.update_yaxes(title_text="Induced Velocity", row=1, col=2) fig.update_xaxes(title_text="Radial Station", row=2, col=1) fig.update_yaxes(title_text="Thrust, N", row=2, col=1) fig.update_xaxes(title_text="Radial Station", row=2, col=2) fig.update_yaxes(title_text="Torque, N-m", row=2, col=2) fig.update_layout(title_text="Rotor Performance", height=700) if save_figure: fig.write_image(save_filename + '_2D' + file_type) if show_figure: fig.write_html( save_filename + '.html', auto_open=True) return fig