File size: 2,884 Bytes
06bc881
 
1b39983
06bc881
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1b39983
 
 
 
 
 
 
 
 
 
 
 
 
 
06bc881
1b39983
 
 
 
06bc881
1b39983
06bc881
 
1b39983
 
 
 
06bc881
 
1b39983
 
 
06bc881
1b39983
 
 
 
 
 
 
 
06bc881
1b39983
 
06bc881
1b39983
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
import streamlit as st

# Hazen-Williams equation: hf = 10.67 * (L / C^1.85) * (Q^1.85 / d^4.8655)
def calculate_velocity(pipe_diameter, flow_rate):
    # Convert pipe diameter from inches to feet
    diameter_feet = pipe_diameter / 12
    
    # Calculate the cross-sectional area of the pipe (A = π * r²)
    radius_feet = diameter_feet / 2
    area = 3.1416 * (radius_feet ** 2)
    
    # Convert flow rate from gallons per minute (GPM) to cubic feet per second (CFS)
    flow_cfs = flow_rate / 448.831
    
    # Calculate velocity (V = Q / A)
    if area > 0:
        velocity = flow_cfs / area
        return velocity
    else:
        return 0

def calculate_pressure_loss(pipe_diameter, flow_rate, pipe_length, c_value):
    # Convert pipe diameter from inches to feet
    diameter_feet = pipe_diameter / 12
    
    # Convert flow rate from gallons per minute (GPM) to cubic feet per second (CFS)
    flow_cfs = flow_rate / 448.831
    
    # Apply Hazen-Williams equation
    if diameter_feet > 0:
        hf = 10.67 * (pipe_length / (c_value ** 1.85)) * ((flow_cfs ** 1.85) / (diameter_feet ** 4.8655))
        return hf
    else:
        return 0

# Streamlit app
st.title("Pipe Velocity & Pressure Loss Calculator")
st.markdown("**A comprehensive tool to calculate pipe velocity and pressure loss using the Hazen-Williams equation.**")

st.header("Inputs")

# User inputs
pipe_diameter = st.number_input("Enter the pipe diameter (in inches):", min_value=0.0, step=0.1)
flow_rate = st.number_input("Enter the flow rate (in gallons per minute):", min_value=0.0, step=0.1)
pipe_length = st.number_input("Enter the pipe length (in feet):", min_value=0.0, step=1.0)
c_value = st.selectbox("Select the Hazen-Williams friction coefficient (C):", [100, 120, 130, 140, 150])
elevation_requirement = st.number_input("Enter the total elevation requirement (in feet):", min_value=0.0, step=1.0)
residual_pressure = st.number_input("Enter the residual pressure at the outlet (in psi):", min_value=0.0, step=0.1)

# Calculate button
if st.button("Calculate Results"):
    if pipe_diameter > 0 and flow_rate > 0 and pipe_length > 0:
        # Velocity calculation
        velocity = calculate_velocity(pipe_diameter, flow_rate)
        
        # Pressure loss calculation
        pressure_loss = calculate_pressure_loss(pipe_diameter, flow_rate, pipe_length, c_value)
        
        # Total pressure required (including elevation)
        total_pressure_required = pressure_loss + (elevation_requirement / 2.31) + residual_pressure
        
        # Display results
        st.success(f"Velocity in the pipe: {velocity:.2f} ft/s")
        st.success(f"Pressure loss due to friction: {pressure_loss:.2f} ft of water")
        st.success(f"Total pressure required: {total_pressure_required:.2f} psi")
    else:
        st.error("Please enter valid positive values for all inputs.")