File size: 3,068 Bytes
f32dd0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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()