sheikhzain185 commited on
Commit
8989648
·
verified ·
1 Parent(s): dd42644

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +76 -0
app.py ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import numpy as np
3
+
4
+ # Function to calculate heat exchanger parameters
5
+ def design_heat_exchanger(shell_fluid, tube_fluid, flow_rate_shell, inlet_temp_shell, inlet_temp_tube, outlet_temp_shell):
6
+ # Constants (properties from the book, approximated for common fluids like water)
7
+ fluid_properties = {
8
+ "Water": {"cp": 4186, "density": 997},
9
+ "Oil": {"cp": 2000, "density": 900},
10
+ "Air": {"cp": 1005, "density": 1.2},
11
+ }
12
+
13
+ # Assumptions
14
+ U = 500 # Overall heat transfer coefficient (W/m^2.K)
15
+ tube_outer_diameter = 0.025 # 25 mm (outer diameter)
16
+ tube_inner_diameter = 0.022 # 22 mm (inner diameter)
17
+ tube_length = 4.0 # 4 meters (standard length)
18
+
19
+ # Extract properties
20
+ cp_shell = fluid_properties[shell_fluid]["cp"]
21
+ cp_tube = fluid_properties[tube_fluid]["cp"]
22
+
23
+ # Heat duty
24
+ heat_duty = flow_rate_shell * cp_shell * (outlet_temp_shell - inlet_temp_shell)
25
+
26
+ # Estimate outlet temperature of tube-side fluid
27
+ flow_rate_tube = heat_duty / (cp_tube * (inlet_temp_tube - outlet_temp_shell))
28
+ outlet_temp_tube = inlet_temp_tube + (heat_duty / (flow_rate_tube * cp_tube))
29
+
30
+ # Log Mean Temperature Difference (LMTD)
31
+ delta_t1 = outlet_temp_shell - inlet_temp_tube
32
+ delta_t2 = inlet_temp_shell - outlet_temp_tube
33
+ LMTD = (delta_t1 - delta_t2) / np.log(delta_t1 / delta_t2)
34
+
35
+ # Required heat transfer area
36
+ area = heat_duty / (U * LMTD)
37
+
38
+ # Number of tubes
39
+ tube_cross_sectional_area = np.pi * (tube_outer_diameter / 2) ** 2
40
+ number_of_tubes = np.ceil(area / (tube_length * tube_cross_sectional_area))
41
+
42
+ # Shell diameter (based on tube layout factor)
43
+ shell_diameter = np.sqrt(number_of_tubes) * tube_outer_diameter * 1.25 # Approximation for tube bundle arrangement
44
+
45
+ # Results
46
+ results = {
47
+ "Heat Duty (kW)": heat_duty / 1000,
48
+ "Outlet Temp (Tube Side) [°C]": outlet_temp_tube,
49
+ "Log Mean Temp Diff (°C)": LMTD,
50
+ "Heat Transfer Area (m²)": area,
51
+ "Number of Tubes": int(number_of_tubes),
52
+ "Shell Diameter (m)": shell_diameter,
53
+ }
54
+ return results
55
+
56
+
57
+ # Gradio Interface
58
+ def heat_exchanger_interface(shell_fluid, tube_fluid, flow_rate_shell, inlet_temp_shell, inlet_temp_tube, outlet_temp_shell):
59
+ results = design_heat_exchanger(shell_fluid, tube_fluid, flow_rate_shell, inlet_temp_shell, inlet_temp_tube, outlet_temp_shell)
60
+ return results
61
+
62
+
63
+ # Define inputs and outputs for the Gradio app
64
+ inputs = [
65
+ gr.Dropdown(["Water", "Oil", "Air"], label="Shell Side Fluid"),
66
+ gr.Dropdown(["Water", "Oil", "Air"], label="Tube Side Fluid"),
67
+ gr.Number(label="Flow Rate (Shell Side) [kg/s]", value=1.0),
68
+ gr.Number(label="Inlet Temperature (Shell Side) [°C]", value=50.0),
69
+ gr.Number(label="Inlet Temperature (Tube Side) [°C]", value=20.0),
70
+ gr.Number(label="Outlet Temperature (Shell Side) [°C]", value=70.0),
71
+ ]
72
+
73
+ outputs = gr.JSON(label="Heat Exchanger Design Results")
74
+
75
+ # Launch the Gradio app
76
+ gr.Interface(fn=heat_exchanger_interface, inputs=inputs, outputs=outputs, title="Shell and Tube Heat Exchanger Design").launch()