HMZaheer's picture
Update app.py
2bedf16 verified
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.
""")