Source code for RCAIDE.Library.Plots.Energy.plot_crogenic_fuel_consumption

## @ingroup Library-Plots-Energy
# RCAIDE/Library/Plots/Energy/plot_fuel_consumption.py
# 
# 
# Created:  Jul 2023, M. Clarke 

# ----------------------------------------------------------------------------------------------------------------------
#  IMPORT
# ----------------------------------------------------------------------------------------------------------------------  
from RCAIDE.Framework.Core import Units
from RCAIDE.Library.Plots.Common import set_axes, plot_style
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np 

# ----------------------------------------------------------------------------------------------------------------------
#  PLOTS
# ----------------------------------------------------------------------------------------------------------------------   
## @ingroup Library-Plots-Performance-Energy-Fuel
[docs] def plot_fuel_consumption(results, save_figure = False, show_legend=True, save_filename = "Aircraft_Fuel_Burnt", file_type = ".png", width = 11, height = 7): """ Creates a plot showing aircraft fuel consumption over time, including standard and additional fuel if present. Parameters ---------- results : Results RCAIDE results structure containing segment data and fuel consumption information save_figure : bool, optional Flag for saving the figure (default: False) show_legend : bool, optional Flag for displaying plot legend (default: True) save_filename : str, optional Name of file for saved figure (default: "Aircraft_Fuel_Burnt") file_type : str, optional File extension for saved figure (default: ".png") width : float, optional Figure width in inches (default: 11) height : float, optional Figure height in inches (default: 7) Returns ------- fig : matplotlib.figure.Figure Figure handle containing the generated plot Notes ----- The function plots three curves when additional fuel is present: 1. Standard fuel consumption 2. Additional fuel consumption 3. Total fuel consumption (sum of standard and additional) When no additional fuel is present, only total fuel consumption is plotted. Different flight segments are distinguished by different colors. **Major Assumptions** * Fuel consumption is plotted as negative values to show depletion * Time is converted from seconds to minutes for plotting * Fuel mass is measured in kilograms * Previous segment fuel values are accumulated for continuous plotting **Definitions** 'Standard Fuel' Primary fuel used for propulsion 'Additional Fuel' Secondary or auxiliary fuel source if present 'Total Fuel' Combined mass of all fuel types consumed """ # get plotting style ps = plot_style() parameters = {'axes.labelsize': ps.axis_font_size, 'xtick.labelsize': ps.axis_font_size, 'ytick.labelsize': ps.axis_font_size, 'axes.titlesize': ps.title_font_size} plt.rcParams.update(parameters) # get line colors for plots line_colors = cm.inferno(np.linspace(0,0.9,len(results.segments))) fig = plt.figure(save_filename) fig.set_size_inches(width,height) prev_seg_fuel = 0 prev_seg_extra_fuel = 0 total_fuel = 0 axes = plt.subplot(1,1,1) for i in range(len(results.segments)): segment = results.segments[i] time = segment.conditions.frames.inertial.time[:,0] / Units.min segment_tag = results.segments[i].tag segment_name = segment_tag.replace('_', ' ') if "has_additional_fuel" in segment.conditions.weights and segment.conditions.weights.has_additional_fuel == True: fuel = segment.conditions.weights.fuel_mass[:,0] alt_fuel = segment.conditions.weights.additional_fuel_mass[:,0] if i == 0: plot_fuel = np.negative(fuel) plot_alt_fuel = np.negative(alt_fuel) axes.plot( time , plot_fuel , 'ro-', marker = ps.markers[0], linewidth = ps.line_width , label = 'fuel') axes.plot( time , plot_alt_fuel , 'bo-', marker = ps.markers[0], linewidth = ps.line_width, label = 'additional fuel' ) axes.plot( time , np.add(plot_fuel, plot_alt_fuel), 'go-', marker = ps.markers[0], linewidth = ps.line_width, label = 'total fuel' ) axes.legend(loc='center right') else: prev_seg_fuel += results.segments[i-1].conditions.weights.fuel_mass[-1] prev_seg_extra_fuel += results.segments[i-1].conditions.weights.additional_fuel_mass[-1] current_fuel = np.add(fuel, prev_seg_fuel) current_alt_fuel = np.add(alt_fuel, prev_seg_extra_fuel) axes.plot( time , np.negative(current_fuel) , 'ro-' , marker = ps.markers[0], linewidth = ps.line_width) axes.plot( time , np.negative(current_alt_fuel ), 'bo-', marker = ps.markers[0], linewidth = ps.line_width) axes.plot( time , np.negative(current_fuel + current_alt_fuel), 'go-', marker = ps.markers[0], linewidth = ps.line_width) else: initial_weight = results.segments[0].conditions.weights.total_mass[:,0][0] fuel = results.segments[i].conditions.weights.total_mass[:,0] time = results.segments[i].conditions.frames.inertial.time[:,0] / Units.min total_fuel = np.negative(results.segments[i].conditions.weights.total_mass[:,0] - initial_weight ) axes.plot( time, total_fuel, color = line_colors[i], marker = ps.markers[0], linewidth = ps.line_width, label = segment_name) axes.set_ylabel('Fuel (kg)') axes.set_xlabel('Time (min)') set_axes(axes) if show_legend: leg = fig.legend(bbox_to_anchor=(0.5, 0.95), loc='upper center', ncol = 4) leg.set_title('Flight Segment', prop={'size': ps.legend_font_size, 'weight': 'heavy'}) # Adjusting the sub-plots for legend fig.tight_layout() fig.subplots_adjust(top=0.8) # set title of plot title_text = 'Aircraft Fuel Burnt' fig.suptitle(title_text) if save_figure: plt.savefig(save_filename + file_type) return fig