Spaces:
Sleeping
Sleeping
import gradio as gr | |
import numpy as np | |
# Function to calculate heat exchanger parameters | |
def design_heat_exchanger(shell_fluid, tube_fluid, flow_rate_shell, inlet_temp_shell, inlet_temp_tube, outlet_temp_shell): | |
fluid_properties = { | |
"Water": {"cp": 4186, "density": 997}, | |
"Oil": {"cp": 2000, "density": 900}, | |
"Air": {"cp": 1005, "density": 1.2}, | |
} | |
# Assumptions | |
U = 500 # Overall heat transfer coefficient (W/m^2.K) | |
tube_outer_diameter = 0.025 # 25 mm (outer diameter) | |
tube_inner_diameter = 0.022 # 22 mm (inner diameter) | |
tube_length = 4.0 # 4 meters (standard length) | |
cp_shell = fluid_properties[shell_fluid]["cp"] | |
cp_tube = fluid_properties[tube_fluid]["cp"] | |
heat_duty = flow_rate_shell * cp_shell * (outlet_temp_shell - inlet_temp_shell) | |
flow_rate_tube = heat_duty / (cp_tube * (inlet_temp_tube - outlet_temp_shell)) | |
outlet_temp_tube = inlet_temp_tube + (heat_duty / (flow_rate_tube * cp_tube)) | |
delta_t1 = outlet_temp_shell - inlet_temp_tube | |
delta_t2 = inlet_temp_shell - outlet_temp_tube | |
LMTD = (delta_t1 - delta_t2) / np.log(delta_t1 / delta_t2) | |
area = heat_duty / (U * LMTD) | |
tube_cross_sectional_area = np.pi * (tube_outer_diameter / 2) ** 2 | |
number_of_tubes = np.ceil(area / (tube_length * tube_cross_sectional_area)) | |
shell_diameter = np.sqrt(number_of_tubes) * tube_outer_diameter * 1.25 | |
results = { | |
"Heat Duty (kW)": heat_duty / 1000, | |
"Outlet Temp (Tube Side) [°C]": outlet_temp_tube, | |
"Log Mean Temp Diff (°C)": LMTD, | |
"Heat Transfer Area (m²)": area, | |
"Number of Tubes": int(number_of_tubes), | |
"Shell Diameter (m)": shell_diameter, | |
} | |
return results | |
# Interface function for Gradio | |
def heat_exchanger_interface(shell_fluid, tube_fluid, flow_rate_shell, inlet_temp_shell, inlet_temp_tube, outlet_temp_shell): | |
results = design_heat_exchanger(shell_fluid, tube_fluid, flow_rate_shell, inlet_temp_shell, inlet_temp_tube, outlet_temp_shell) | |
return results | |
# Define Gradio interface | |
inputs = [ | |
gr.Dropdown(["Water", "Oil", "Air"], label="Shell Side Fluid"), | |
gr.Dropdown(["Water", "Oil", "Air"], label="Tube Side Fluid"), | |
gr.Number(label="Flow Rate (Shell Side) [kg/s]", value=1.0), | |
gr.Number(label="Inlet Temperature (Shell Side) [°C]", value=50.0), | |
gr.Number(label="Inlet Temperature (Tube Side) [°C]", value=20.0), | |
gr.Number(label="Outlet Temperature (Shell Side) [°C]", value=70.0), | |
] | |
outputs = gr.JSON(label="Heat Exchanger Design Results") | |
# Launch Gradio interface | |
gr.Interface( | |
fn=heat_exchanger_interface, | |
inputs=inputs, | |
outputs=outputs, | |
title="Shell and Tube Heat Exchanger Design", | |
description="Calculate design parameters for a shell and tube heat exchanger with minimal inputs.", | |
).launch() |