File size: 6,887 Bytes
decfa83
 
acbb6fc
 
decfa83
2a87d8a
 
b336ff1
 
 
 
 
 
 
 
 
 
 
9f0580b
2a87d8a
b336ff1
 
2a87d8a
 
b336ff1
2a87d8a
b336ff1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7169163
 
 
 
 
53ff380
 
 
 
 
 
 
 
 
 
9f0580b
 
acbb6fc
298db7a
acbb6fc
9f0580b
 
 
109b0f7
2a87d8a
afce455
2a87d8a
 
1268e31
afce455
6c744d2
1268e31
6c744d2
d8b513d
6c744d2
2a87d8a
6c744d2
 
 
 
b336ff1
705c60f
6c744d2
705c60f
 
6c744d2
705c60f
 
2a87d8a
b336ff1
 
 
 
 
 
705c60f
6c744d2
 
acbb6fc
decfa83
b336ff1
 
 
 
decfa83
b336ff1
 
decfa83
b336ff1
 
decfa83
b336ff1
 
acbb6fc
298db7a
b336ff1
 
0b6c6e6
b336ff1
acbb6fc
298db7a
 
6c744d2
 
b336ff1
705c60f
 
 
3f5612e
6c744d2
705c60f
 
 
 
 
6c744d2
b336ff1
6c744d2
decfa83
6c744d2
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import streamlit as st

# Constants
GRAVITY = 9.81  # Acceleration due to gravity in m/s²

# Predefined Fluid Properties (Density in kg/m³, Viscosity in cP)
FLUID_DATABASE = {
    "Acetone": {"density": 791, "viscosity": 0.3},
    "Alcohol (Ethanol)": {"density": 789, "viscosity": 1.2},
    "Ammonia (Liquid)": {"density": 682, "viscosity": 0.3},
    "Aniline": {"density": 1020, "viscosity": 1.0},
    "Benzene": {"density": 876, "viscosity": 0.65},
    "Butane": {"density": 580, "viscosity": 0.12},
    "Carbon Disulfide": {"density": 1078, "viscosity": 0.33},
    "Chlorobenzene": {"density": 1060, "viscosity": 1.1},
    "Chloroform": {"density": 1485, "viscosity": 0.55},
    "Coconut Oil": {"density": 920, "viscosity": 20},
    "Crude Oil": {"density": 870, "viscosity": 50},
    "Diesel": {"density": 830, "viscosity": 3},
    "Ethanol": {"density": 789, "viscosity": 1.2},
    "Fluorine (Liquid)": {"density": 1105, "viscosity": 0.1},
    "Gasoline": {"density": 750, "viscosity": 0.6},
    "Glycerin": {"density": 1261, "viscosity": 1000},
    "Honey": {"density": 1420, "viscosity": 5000},
    "Hydraulic Oil": {"density": 870, "viscosity": 35},
    "Hydrogen Peroxide": {"density": 1110, "viscosity": 1.2},
    "Kerosene": {"density": 820, "viscosity": 2},
    "Lard": {"density": 890, "viscosity": 6},
    "Lemon Juice": {"density": 1050, "viscosity": 1.0},
    "Liquefied Petroleum Gas (LPG)": {"density": 550, "viscosity": 0.15},
    "Milk": {"density": 1030, "viscosity": 3},
    "Mineral Oil": {"density": 860, "viscosity": 50},
    "Nitric Acid": {"density": 1510, "viscosity": 2.1},
    "Olive Oil": {"density": 910, "viscosity": 80},
    "Palm Oil": {"density": 920, "viscosity": 20},
    "Petrol": {"density": 750, "viscosity": 0.6},
    "Propane": {"density": 493, "viscosity": 0.1},
    "Red Wine": {"density": 990, "viscosity": 1.2},
    "Sodium Hydroxide (Liquid)": {"density": 1400, "viscosity": 3.5},
    "Sulfuric Acid (98%)": {"density": 1830, "viscosity": 21},
    "Toluene": {"density": 867, "viscosity": 0.6},
    "Water": {"density": 1000, "viscosity": 1},
    "Wheat Flour": {"density": 600, "viscosity": 20},
    "Xylene": {"density": 870, "viscosity": 0.6},
    "Glycol": {"density": 1060, "viscosity": 20},
    "Mercury": {"density": 13600, "viscosity": 1.5},
    "Sodium Carbonate": {"density": 1370, "viscosity": 5},
    "Benzene Solution": {"density": 875, "viscosity": 0.7},
    "Xylenes (Mixture)": {"density": 880, "viscosity": 0.65},
    "Acetic Acid": {"density": 1045, "viscosity": 1.4},
    "Barium Hydroxide": {"density": 1600, "viscosity": 3},
    "Calcium Chloride": {"density": 1600, "viscosity": 1.0},
    "Formic Acid": {"density": 1010, "viscosity": 1.3},
    "Methanol": {"density": 791, "viscosity": 0.6},
    "Sodium Chloride Solution": {"density": 1180, "viscosity": 2.5},
    "Silicon Oil": {"density": 975, "viscosity": 10},
    "Steam": {"density": 0.6, "viscosity": 0.02},
    "Sulfur": {"density": 2000, "viscosity": 25},
    "Vinyl Acetate": {"density": 920, "viscosity": 1.5},
}

# Function to calculate pump requirements
def calculate_pump_requirements(selected_distance, distance_value, fluid_properties, pipe_diameter):
    try:
        density = fluid_properties["density"]
        viscosity = fluid_properties["viscosity"]

        distance_value = float(distance_value)  # meters
        pipe_diameter = float(pipe_diameter) / 1000  # Convert mm to meters

        flow_rate = distance_value * 0.05  # m³/h (simplified assumption)
        flow_velocity = (flow_rate / 3600) / (3.14 * (pipe_diameter / 2) ** 2)  # m/s

        static_head = distance_value if selected_distance == "Vertical Distance (Height)" else 0
        friction_loss = (4 * 0.02 * distance_value * flow_velocity**2) / (2 * GRAVITY * pipe_diameter)  # Darcy formula for friction loss

        total_head = static_head + friction_loss

        hydraulic_power = (flow_rate / 3600) * density * GRAVITY * total_head / 1000  # kW (Required Power)

        # Select pump type based on head
        pump_type = "Centrifugal Pump" if total_head > 10 else "Positive Displacement Pump"

        # Determine cavitation risk
        cavitation_risk = "Possible" if total_head < 10 else "Low Risk"

        # Impeller size calculation (simplified)
        impeller_size = flow_rate / 100  # m (simplified formula)

        # Pump material selection
        pump_material = "Stainless Steel" if fluid_properties["density"] < 1000 else "Cast Iron"

        return {
            "Flow Rate (m³/h)": flow_rate,
            "Flow Velocity (m/s)": flow_velocity,
            "Total Head (m)": total_head,
            "Hydraulic Power (kW)": hydraulic_power,
            "Pump Type": pump_type,
            "Cavitation Risk": cavitation_risk,
            "Impeller Size (m)": impeller_size,
            "Pump Material": pump_material,
            "Friction Loss (m)": friction_loss
        }
    except ValueError:
        return "Invalid input, please enter numeric values."

# Streamlit app layout
st.title("Pump Design Calculator")

# Drop-down for fluid selection
fluid_list = sorted([fluid for fluid in FLUID_DATABASE.keys()])

selected_fluid = st.selectbox("Select Fluid Type", fluid_list)
fluid_properties = FLUID_DATABASE[selected_fluid]

# Drop-down for distance type (horizontal or vertical)
distance_type = st.selectbox("Select Distance Type", ["Vertical Distance (Height)", "Horizontal Distance"])

# Input for distance and pipe diameter
distance_value = st.text_input("Enter Distance (in meters)", "")
pipe_diameter = st.text_input("Enter Pipe Diameter (in mm)", "")

# Calculate and display pump requirements
if st.button("Calculate Pump Requirements"):
    if distance_value and pipe_diameter:
        results = calculate_pump_requirements(distance_type, distance_value, fluid_properties, pipe_diameter)

        # Display results
        if isinstance(results, dict):
            st.subheader("**Pump Requirements**")
            st.markdown(f"**Fluid Type**: {selected_fluid}")
            st.markdown(f"**Flow Rate**: {results['Flow Rate (m³/h)']} m³/h")
            st.markdown(f"**Flow Velocity**: {results['Flow Velocity (m/s)']} m/s")
            st.markdown(f"**Total Head**: {results['Total Head (m)']} m")
            st.markdown(f"**Hydraulic Power**: {results['Hydraulic Power (kW)']} kW")
            st.markdown(f"**Pump Type**: {results['Pump Type']}")
            st.markdown(f"**Cavitation Risk**: {results['Cavitation Risk']}")
            st.markdown(f"**Impeller Size**: {results['Impeller Size (m)']} m")
            st.markdown(f"**Pump Material**: {results['Pump Material']}")
            st.markdown(f"**Friction Loss**: {results['Friction Loss (m)']} m")
        else:
            st.error(results)  # If results are an error message, display it
    else:
        st.error("Please fill in all input fields correctly.")