Source code for RCAIDE.Library.Plots.Geometry.plot_rotor

# RCAIDE/Library/Plots/Geometry/plot_rotor.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------  
from RCAIDE.Framework.Core import Units

from plotly.subplots import make_subplots
import pandas as pd
import plotly.graph_objects as go

# ----------------------------------------------------------------------------------------------------------------------
#  PLOTS
# ----------------------------------------------------------------------------------------------------------------------  
[docs] def plot_rotor(prop, face_color = 'red', edge_color = 'black', show_figure = True, save_figure = False, save_filename = "Propeller_Geometry", file_type = ".png"): """ Creates a 2D visualization of rotor/propeller geometry distributions. Parameters ---------- prop : Propeller RCAIDE propeller/rotor data structure containing geometry information face_color : str, optional Color specification for plot faces (default: 'red') edge_color : str, optional Color specification for plot edges (default: 'black') show_figure : bool, optional Flag to display the figure (default: True) save_figure : bool, optional Flag for saving the figure (default: False) save_filename : str, optional Name of file for saved figure (default: "Propeller_Geometry") file_type : str, optional File extension for saved figure (default: ".png") Returns ------- fig : plotly.graph_objects.Figure Notes ----- Creates a four-panel plot showing: 1. Twist angle vs radial position 2. Chord length vs radial position 3. Maximum thickness vs radial position 4. Mid-chord alignment vs radial position **Major Assumptions** * Distributions are defined at consistent radial stations * Twist is in degrees * Chord and thickness are in meters * Mid-chord alignment is in meters **Definitions** 'Twist' Local blade angle relative to rotation plane 'Chord' Local blade section length 'Thickness' Maximum thickness of local blade section 'Mid-chord Alignment' Offset of section mid-chord from reference line """ # Initialize figure fig = make_subplots(rows=2, cols=2) df1 = pd.DataFrame(dict(x=prop.radius_distribution, y=prop.twist_distribution/Units.degrees)) df2 = pd.DataFrame(dict(x=prop.radius_distribution, y=prop.chord_distribution)) df3 = pd.DataFrame(dict(x=prop.radius_distribution, y=prop.max_thickness_distribution)) df4 = pd.DataFrame(dict(x=prop.radius_distribution, y=prop.mid_chord_alignment)) fig.append_trace(go.Line(df1), row=1, col=1) fig.append_trace(go.Line(df2), row=1, col=2) fig.append_trace(go.Line(df3), row=2, col=1) fig.append_trace(go.Line(df4), row=2, col=2) fig.update_xaxes(title_text="Radial Station", row=1, col=1) fig.update_yaxes(title_text="Twist (Deg)", row=1, col=1) fig.update_xaxes(title_text="Radial Station", row=1, col=2) fig.update_yaxes(title_text="Chord (m)", row=1, col=2) fig.update_xaxes(title_text="Radial Station", row=2, col=1) fig.update_yaxes(title_text="Thickness (m)", row=2, col=1) fig.update_xaxes(title_text="Radial Station", row=2, col=2) fig.update_yaxes(title_text="Mid Chord Alignment (m)", row=2, col=2) fig.update_layout(title_text="Propeller Geometry", height=700, showlegend=False) 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