File size: 3,114 Bytes
8989648
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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):
    # Constants (properties from the book, approximated for common fluids like water)
    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)

    # Extract properties
    cp_shell = fluid_properties[shell_fluid]["cp"]
    cp_tube = fluid_properties[tube_fluid]["cp"]

    # Heat duty
    heat_duty = flow_rate_shell * cp_shell * (outlet_temp_shell - inlet_temp_shell)

    # Estimate outlet temperature of tube-side fluid
    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))

    # Log Mean Temperature Difference (LMTD)
    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)

    # Required heat transfer area
    area = heat_duty / (U * LMTD)

    # Number of tubes
    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 (based on tube layout factor)
    shell_diameter = np.sqrt(number_of_tubes) * tube_outer_diameter * 1.25  # Approximation for tube bundle arrangement

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


# Gradio Interface
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 inputs and outputs for the Gradio app
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 the Gradio app
gr.Interface(fn=heat_exchanger_interface, inputs=inputs, outputs=outputs, title="Shell and Tube Heat Exchanger Design").launch()