Source code for RCAIDE.Library.Plots.Thermal_Management.plot_cross_flow_heat_exchanger_conditions

# RCAIDE/Library/Plots/Thermal_Management/plot_cross_flow_heat_exchanger_conditions.py
# 
# 
# Created:  Sep 2024, S. Shekar

# ----------------------------------------------------------------------------------------------------------------------
#  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 

# ----------------------------------------------------------------------------------------------------------------------
#   plot_heat_exchanger_system_conditions
# ----------------------------------------------------------------------------------------------------------------------   
[docs] def plot_cross_flow_heat_exchanger_conditions(cross_flow_hex, results, coolant_line, save_figure = False, show_legend = True, save_filename = "Cross_Flow_HEX_Conditions", file_type = ".png", width = 11, height = 7): """ Creates a multi-panel visualization of cross-flow heat exchanger operating conditions. Parameters ---------- cross_flow_hex : Component Cross-flow heat exchanger component containing: - tag : str Unique identifier for the heat exchanger results : Results RCAIDE results data structure containing: - segments[i].conditions.energy[coolant_line.tag][cross_flow_hex.tag] Heat exchanger data containing: - coolant_mass_flow_rate[:,0] Coolant flow rate in kg/s - effectiveness_HEX[:,0] Heat exchanger effectiveness - power[:,0] Heat transfer rate in watts - air_inlet_pressure[:,0] Air-side inlet pressure in Pa - inlet_air_temperature[:,0] Air inlet temperature in K - air_mass_flow_rate[:,0] Air flow rate in kg/s coolant_line : Component Coolant line component containing: - tag : str Unique identifier for the coolant circuit save_figure : bool, optional Flag for saving the figure (default: False) show_legend : bool, optional Flag to display segment legend (default: True) save_filename : str, optional Name of file for saved figure (default: "Cross_Flow_HEX_Conditions") 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 Handle to the generated figure containing six subplots arranged in a 3x2 grid: Notes ----- Creates visualization showing: * Thermal performance metrics * Flow conditions for both fluids * Heat transfer characteristics * Operating pressures and temperatures **Definitions** 'Effectiveness' Ratio of actual to maximum possible heat transfer 'NTU' Dimensionless measure of heat exchanger size 'Capacity Ratio' Ratio of minimum to maximum heat capacity rates 'Mass Flow Rate' Mass of fluid flowing per unit time See Also -------- RCAIDE.Library.Plots.Thermal_Management.plot_thermal_management_performance : Overall system performance RCAIDE.Library.Plots.Thermal_Management.plot_air_cooled_conditions : Air-cooled heat exchanger analysis """ # 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) axis_1 = plt.subplot(3,2,1) axis_2 = plt.subplot(3,2,2) axis_3 = plt.subplot(3,2,3) axis_4 = plt.subplot(3,2,4) axis_5 = plt.subplot(3,2,5) axis_6 = plt.subplot(3,2,6) for network in results.segments[0].analyses.energy.vehicle.networks: busses = network.busses for bus in busses: for b_i, battery in enumerate(bus.battery_modules): if b_i == 0 or bus.identical_battery_modules == False: for i in range(len(results.segments)): time = results.segments[i].conditions.frames.inertial.time[:,0] / Units.min cross_flow_hex_conditions = results.segments[i].conditions.energy[coolant_line.tag][cross_flow_hex.tag] coolant_mass_flow_rate = cross_flow_hex_conditions.coolant_mass_flow_rate[:,0] effectiveness_HEX = cross_flow_hex_conditions.effectiveness_HEX[:,0] power = cross_flow_hex_conditions.power[:,0] inlet_air_pressure = cross_flow_hex_conditions.air_inlet_pressure[:,0] inlet_air_temperature = cross_flow_hex_conditions.inlet_air_temperature[:,0] air_mass_flow_rate = cross_flow_hex_conditions.air_mass_flow_rate[:,0] if i == 0: axis_1.plot(time, effectiveness_HEX, color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width, label = cross_flow_hex.tag) else: axis_1.plot(time, effectiveness_HEX, color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width) axis_1.set_ylabel(r'Effectiveness') set_axes(axis_1) axis_2.plot(time, inlet_air_temperature, color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width) axis_2.set_ylabel(r'Air Temp. (K)') set_axes(axis_2) axis_3.plot(time, coolant_mass_flow_rate, color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width) axis_3.set_ylabel(r'Coolant $\dot{m}$ (kg/s)') set_axes(axis_3) axis_4.plot(time, air_mass_flow_rate, color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width) axis_4.set_ylabel(r'Air $\dot{m}$ (kg/s)') set_axes(axis_4) axis_5.plot(time, power/1000, color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width) axis_5.set_ylabel(r'HEX Power (KW)') axis_5.set_xlabel(r'Time (mins)') set_axes(axis_5) axis_6.plot(time, inlet_air_pressure/10e6 , color = line_colors[i], marker = ps.markers[b_i], linewidth = ps.line_width) axis_6.set_ylabel(r'Air Pres. (MPa)') axis_6.set_xlabel(r'Time (mins)') set_axes(axis_6) 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 = 'Heat_Exchanger_System' fig.suptitle(title_text) if save_figure: plt.savefig(save_filename + cross_flow_hex.tag + file_type) return fig