|
import gradio as gr |
|
import numpy as np |
|
|
|
|
|
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}, |
|
} |
|
|
|
|
|
U = 500 |
|
tube_outer_diameter = 0.025 |
|
tube_inner_diameter = 0.022 |
|
tube_length = 4.0 |
|
|
|
|
|
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 |
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
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") |
|
|
|
|
|
gr.Interface(fn=heat_exchanger_interface, inputs=inputs, outputs=outputs, title="Shell and Tube Heat Exchanger Design").launch() |
|
|