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