Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import math | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| from matplotlib.animation import FuncAnimation | |
| # Function to calculate pipe diameter | |
| def calculate_diameter(flow_rate, velocity): | |
| # Q = A * V, where A = pi * (D/2)^2, so D = sqrt(4 * Q / (pi * V)) | |
| diameter = math.sqrt((4 * flow_rate) / (math.pi * velocity)) | |
| return diameter | |
| # Function to draw pipe cross-section with animation | |
| def draw_pipe(diameter): | |
| fig, ax = plt.subplots() | |
| ax.set_xlim(-1.5, 1.5) | |
| ax.set_ylim(-1.5, 1.5) | |
| ax.set_aspect('equal') | |
| # Draw the initial circle (pipe) | |
| circle = plt.Circle((0, 0), diameter / 2, edgecolor='b', facecolor='lightblue', lw=2) | |
| ax.add_patch(circle) | |
| # Animation function to highlight the diameter | |
| def animate(i): | |
| ax.clear() | |
| ax.set_xlim(-1.5, 1.5) | |
| ax.set_ylim(-1.5, 1.5) | |
| ax.set_aspect('equal') | |
| # Draw the pipe circle | |
| ax.add_patch(circle) | |
| # Draw animated diameter line | |
| ax.plot([-diameter/2, diameter/2], [0, 0], 'r-', lw=2) | |
| ax.text(0, 0.1, f'Diameter: {diameter:.2f} m', fontsize=12, ha='center') | |
| # Create animation | |
| ani = FuncAnimation(fig, animate, frames=np.arange(0, 10), interval=500) | |
| # Display the plot | |
| st.pyplot(fig) | |
| # Streamlit UI | |
| st.title("Pipe Diameter Recommendation App") | |
| st.write(""" | |
| This application calculates the recommended diameter for a pipe based on the flow rate, liquid name, and velocity. | |
| """) | |
| # Get user inputs | |
| flow_rate = st.number_input("Enter the flow rate of the liquid (in m³/s):", min_value=0.0) | |
| velocity = st.number_input("Enter the velocity of the liquid (in m/s):", min_value=0.0) | |
| liquid_name = st.text_input("Enter the name of the liquid:") | |
| if st.button("Calculate Diameter"): | |
| # Calculate the diameter | |
| if flow_rate > 0 and velocity > 0: | |
| diameter = calculate_diameter(flow_rate, velocity) | |
| st.write(f"The recommended pipe diameter is {diameter:.2f} meters for {liquid_name}.") | |
| # Draw the cross-section of the pipe with animation | |
| draw_pipe(diameter) | |
| else: | |
| st.error("Please enter valid positive values for flow rate and velocity.") | |