import streamlit as st import numpy as np def get_fluid_properties(fluid): """Returns density (kg/m^3) and viscosity (Pa.s) of the fluid.""" properties = { "Water": {"density": 1000, "viscosity": 0.001}, "Oil": {"density": 800, "viscosity": 0.05}, "Air": {"density": 1.2, "viscosity": 1.8e-5}, } return properties.get(fluid, {"density": None, "viscosity": None}) def calculate_reynolds_number(density, velocity, diameter, viscosity): """Calculates the Reynolds number.""" return (density * velocity * diameter) / viscosity def calculate_pressure_drop(diameter, flow_rate, density, viscosity, length=1.0): """Calculates pressure drop in a straight pipe.""" # Calculate velocity area = np.pi * (diameter / 2) ** 2 velocity = flow_rate / area # Reynolds number reynolds = calculate_reynolds_number(density, velocity, diameter, viscosity) # Friction factor if reynolds < 2000: # Laminar flow friction_factor = 64 / reynolds else: # Turbulent flow (Blasius correlation) friction_factor = 0.3164 / (reynolds ** 0.25) # Pressure drop (Darcy-Weisbach equation) pressure_drop = (friction_factor * length * density * velocity**2) / (2 * diameter) return pressure_drop, reynolds # Streamlit App st.title("Pressure Drop Calculator for Straight Pipe") st.write(""" This tool calculates the pressure drop in a straight pipe for both laminar and turbulent flow conditions. Provide the necessary inputs below, and the app will determine the pressure drop and Reynolds number. """) # Inputs st.sidebar.header("Input Parameters") diameter = st.sidebar.slider("Pipe Diameter (m)", min_value=0.01, max_value=1.0, value=0.1, step=0.01) flow_rate = st.sidebar.slider("Flow Rate (L/s)", min_value=0.001, max_value=100.0, value=1.0, step=0.1) / 1000 # Convert to m^3/s fluid = st.sidebar.selectbox("Fluid Type", ["Water", "Oil", "Air"]) pipe_length = st.sidebar.slider("Pipe Length (m)", min_value=0.1, max_value=100.0, value=10.0, step=0.1) # Get fluid properties fluid_props = get_fluid_properties(fluid) if fluid_props["density"] and fluid_props["viscosity"]: density = fluid_props["density"] viscosity = fluid_props["viscosity"] # Calculate pressure drop pressure_drop, reynolds = calculate_pressure_drop(diameter, flow_rate, density, viscosity, pipe_length) # Output results st.subheader("Results") st.write(f"**Reynolds Number:** {reynolds:.2f}") st.write(f"**Pressure Drop:** {pressure_drop:.2f} Pa") # Flow type if reynolds < 2000: st.success("Flow Type: Laminar") else: st.success("Flow Type: Turbulent") else: st.error("Invalid fluid selected or missing properties.") st.write(""" --- ### How to Use 1. Adjust the input parameters using the sidebar. 2. View the calculated pressure drop and Reynolds number. **Note:** Ensure all inputs are within valid physical ranges. """)