CoolFace
Apppublic

MahmoodSaleem/ORIFICMETER_Simulation

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
app.py81 linesDownload Raw Back to root
1import numpy as np2import matplotlib.pyplot as plt3import streamlit as st4 5# Streamlit App Title6st.title("Orifice Meter Simulation")7 8# Define Constants9D_pipe = 0.1  # Pipe Diameter (m)10D_orifice = D_pipe * 0.5  # Orifice Diameter (50% of pipe)11A_pipe = np.pi * (D_pipe / 2) ** 212A_orifice = np.pi * (D_orifice / 2) ** 213rho = 1000  # Fluid Density (kg/m³)14mu = 0.001  # Fluid Viscosity (Pa.s)15g = 9.81  # Gravity (m/s²)16 17# Flow Rate Range (10% to 90% of max flow rate)18Q_max = 0.02  # Maximum flow rate (m³/s)19Q_range = np.linspace(0.1 * Q_max, 0.9 * Q_max, 20)20 21# Calculate Flow Parameters22Cd_values = []23dP_values = []24Re_values = []25 26for Q in Q_range:27    V1 = Q / A_pipe  # Velocity in pipe (m/s)28    V2 = Q / A_orifice  # Velocity through orifice (m/s)29    dP = 0.5 * rho * (V2 ** 2 - V1 ** 2)  # Pressure Drop (Pa)30    Re = (rho * V1 * D_pipe) / mu  # Reynolds Number31    Cd = Q / (A_orifice * np.sqrt(2 * dP / rho)) if dP > 0 else 0  # Discharge Coefficient32    33    Cd_values.append(Cd)34    dP_values.append(dP)35    Re_values.append(Re)36 37# Plot Cd vs Flow Rate38st.subheader("Discharge Coefficient vs Flow Rate")39fig1, ax1 = plt.subplots()40ax1.plot(Q_range, Cd_values, 'bo-', label='Discharge Coefficient')41ax1.set_xlabel('Flow Rate (m³/s)')42ax1.set_ylabel('Cd')43ax1.set_title('Discharge Coefficient vs Flow Rate')44ax1.legend()45ax1.grid()46st.pyplot(fig1)47 48# Plot Pressure Drop vs Flow Rate49st.subheader("Pressure Drop vs Flow Rate")50fig2, ax2 = plt.subplots()51ax2.plot(Q_range, dP_values, 'ro-', label='Pressure Drop')52ax2.set_xlabel('Flow Rate (m³/s)')53ax2.set_ylabel('Pressure Drop (Pa)')54ax2.set_title('Pressure Drop vs Flow Rate')55ax2.legend()56ax2.grid()57st.pyplot(fig2)58 59# Plot Velocity, Pressure, and Reynolds Number along Pipe Axis60x = np.linspace(-1.5 * D_pipe, 1.5 * D_pipe, 100)61V_x = np.piecewise(x, [x < -0.5 * D_pipe, (x >= -0.5 * D_pipe) & (x <= 0.5 * D_pipe), x > 0.5 * D_pipe],62                    [lambda x: Q_range[0] / A_pipe, lambda x: Q_range[0] / A_orifice, lambda x: Q_range[0] / A_pipe])63P_x = np.piecewise(x, [x < -0.5 * D_pipe, (x >= -0.5 * D_pipe) & (x <= 0.5 * D_pipe), x > 0.5 * D_pipe],64                    [lambda x: 101325 - 0.5 * rho * (Q_range[0] / A_pipe) ** 2, 65                     lambda x: 101325 - 0.5 * rho * (Q_range[0] / A_orifice) ** 2, 66                     lambda x: 101325 - 0.5 * rho * (Q_range[0] / A_pipe) ** 2])67Re_x = (rho * V_x * D_pipe) / mu68 69st.subheader("Variation along Pipe Axis")70fig3, ax3 = plt.subplots()71ax3.plot(x, V_x, 'g-', label='Velocity (m/s)')72ax3.plot(x, P_x / 1000, 'b-', label='Pressure (kPa)')73ax3.plot(x, Re_x / 1000, 'r-', label='Reynolds Number (x1000)')74ax3.set_xlabel('Pipe Axis (m)')75ax3.set_title('Variation along Pipe')76ax3.legend()77ax3.grid()78st.pyplot(fig3)79 80 81