import streamlit as st import math import matplotlib.pyplot as plt import numpy as np # Function to calculate pipe diameter def calculate_diameter(flow_rate, velocity): # Formula to calculate pipe diameter (d = sqrt(4 * Q / (pi * v))) # Where Q is flow rate (in cubic meters per second) # v is the velocity (in meters per second) diameter = math.sqrt(4 * flow_rate / (math.pi * velocity)) return diameter # Function to plot the graph def plot_diameter_graph(): # Define a range of flow rates (Q) and velocities (v) flow_rate_values = np.linspace(0.01, 1.0, 100) # Range of flow rates (0.01 to 1.0 m³/s) velocity_values = np.linspace(0.1, 5.0, 50) # Range of velocities (0.1 to 5.0 m/s) # Create a meshgrid for the flow rates and velocities flow_rate_grid, velocity_grid = np.meshgrid(flow_rate_values, velocity_values) # Calculate the pipe diameter for each combination of flow rate and velocity diameter_values = np.sqrt(4 * flow_rate_grid / (np.pi * velocity_grid)) # Plotting the graph fig, ax = plt.subplots(figsize=(10, 6)) cp = ax.contourf(flow_rate_grid, velocity_grid, diameter_values, cmap='viridis') fig.colorbar(cp, ax=ax, label='Pipe Diameter (m)') ax.set_xlabel('Flow Rate (m³/s)') ax.set_ylabel('Velocity (m/s)') ax.set_title('Pipe Diameter vs. Flow Rate and Velocity') # Display the plot in Streamlit st.pyplot(fig) # Streamlit App def main(): # Set the page configuration with a title, icon, and layout style st.set_page_config( page_title="Pipe Sizing Helper", page_icon="💧", # Water-related icon layout="centered", # Center the content ) # Title and description st.title("Pipe Sizing Helper 💧") st.markdown("Enter the flow rate and permissible velocity to get the recommended pipe diameter.") # Input fields for flow rate and velocity flow_rate = st.number_input("Enter Flow Rate (m³/s):", min_value=0.0, step=0.01) velocity = st.number_input("Enter Permissible Velocity (m/s):", min_value=0.0, step=0.1) # Create a button to calculate the recommended pipe diameter if st.button("Generate Pipe Diameter"): # Check if both flow rate and velocity are greater than zero if flow_rate > 0 and velocity > 0: diameter = calculate_diameter(flow_rate, velocity) st.write(f"The recommended pipe diameter is: **{diameter:.2f} meters**") else: st.error("Please enter valid values for flow rate and velocity.") # Show the graphical visualization of pipe diameter vs flow rate and velocity st.subheader("Graphical Visualization") plot_diameter_graph() # Add some helpful info or tips st.markdown(""" ### Tips: - Flow rate (Q) is the volume of fluid passing through the pipe per unit of time (in cubic meters per second). - Permissible velocity (v) is the maximum allowable speed of the fluid inside the pipe (in meters per second). """) if __name__ == "__main__": main()