Spaces:
Sleeping
Sleeping
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.") |