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

# RCAIDE/Library/Plots/Energy/plot_battery_ragone_diagram.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
# ----------------------------------------------------------------------------------------------------------------------   
[docs] def plot_battery_ragone_diagram(battery, save_figure = False, save_filename = "Ragone_Plot", file_type = ".png", width = 11, height = 7): """ Creates a Ragone plot showing the relationship between specific power and specific energy of a battery. Parameters ---------- battery : Battery RCAIDE battery object containing Ragone characteristics save_figure : bool, optional Flag for saving the figure (default: False) save_filename : str, optional Name of file for saved figure (default: "Ragone_Plot") 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 Ragone plot Notes ----- The Ragone plot is a performance map showing the tradeoff between specific power and specific energy in energy storage devices. The plot uses logarithmic scales to display the wide range of values. **Major Assumptions** * Battery characteristics follow the Ragone relationship: P = const_1 * 10^(E * const_2) * Specific energy range is defined by upper and lower bounds * Values are converted to standard units (kW/kg and Wh/kg) **Definitions** 'Specific Power' Power output per unit mass (kW/kg) 'Specific Energy' Energy storage capacity per unit mass (Wh/kg) 'Ragone Plot' Performance visualization showing the tradeoff between power and energy density """ # 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) fig = plt.figure(save_filename) fig.set_size_inches(width,height) axis_1 = plt.subplot(1,1,1) esp_plot = np.linspace(battery.cell.ragone.lower_bound, battery.cell.ragone.upper_bound,50) psp_plot = battery.cell.ragone.const_1*10**(esp_plot*battery.cell.ragone.const_2) axis_1.plot(esp_plot/(Units.Wh/Units.kg),psp_plot/(Units.kW/Units.kg), color = 'black', marker = ps.markers[0], linewidth = ps.line_width, label= battery.tag) axis_1.set_ylabel('Specific Power (kW/kg)') axis_1.set_xlabel('Specific Energy (W-h/kg)') set_axes(axis_1) # set title of plot title_text = 'Battery Ragone Plot' fig.suptitle(title_text) if save_figure: plt.savefig(save_filename + file_type) return fig