Hyd.pump-power / app.py
mughal-88's picture
Update app.py
806292e verified
import streamlit as st
# Set page configuration
st.set_page_config(page_title="Hydraulic Pump Power Calculator", page_icon="\U0001F6E0", layout="centered")
# Unit conversion factors
UNIT_CONVERSIONS = {
"Displacement": {"cc/rev": 1, "in^3/rev": 16.387, "liters/rev": 1000},
"Pressure": {"bar": 1, "MPa": 10, "PSI": 0.0689476, "kPa": 0.01, "atm": 1.01325},
"Torque": {"Nm": 1, "lb-ft": 1.35582},
"Flow Rate": {"L/min": 1, "m^3/h": 16.6667, "GPM (US)": 3.78541, "GPM (UK)": 4.54609}
}
# Hydraulic Power Calculation and Missing Parameter Estimation
@st.cache
def calculate_hydraulic_parameters(displacement, pressure, rpm, torque, flow_rate,
displacement_unit, pressure_unit, torque_unit, flow_rate_unit):
# Convert inputs to base units
displacement_cc = displacement * UNIT_CONVERSIONS["Displacement"].get(displacement_unit, 1) if displacement else None
pressure_bar = pressure * UNIT_CONVERSIONS["Pressure"].get(pressure_unit, 1) if pressure else None
torque_nm = torque * UNIT_CONVERSIONS["Torque"].get(torque_unit, 1) if torque else None
flow_rate_lpm = flow_rate * UNIT_CONVERSIONS["Flow Rate"].get(flow_rate_unit, 1) if flow_rate else None
# Calculate missing parameters if possible
if displacement_cc and pressure_bar and rpm and not torque_nm:
torque_nm = (displacement_cc * pressure_bar) / (20 * 3.14159)
elif torque_nm and pressure_bar and rpm and not displacement_cc:
displacement_cc = (torque_nm * 20 * 3.14159) / pressure_bar
elif torque_nm and displacement_cc and rpm and not pressure_bar:
pressure_bar = (torque_nm * 20 * 3.14159) / displacement_cc
# Calculate power using available data
power_displacement = (displacement_cc * pressure_bar * rpm) / 600.0 if displacement_cc and pressure_bar and rpm else None
power_torque = (torque_nm * rpm) / 9549 if torque_nm and rpm else None
power_flow_rate = (flow_rate_lpm * pressure_bar) / 600.0 if flow_rate_lpm and pressure_bar else None
# Convert results to all available units
results = {
"displacement": {unit: displacement_cc / factor for unit, factor in UNIT_CONVERSIONS["Displacement"].items()} if displacement_cc else {},
"pressure": {unit: pressure_bar / factor for unit, factor in UNIT_CONVERSIONS["Pressure"].items()} if pressure_bar else {},
"torque": {unit: torque_nm / factor for unit, factor in UNIT_CONVERSIONS["Torque"].items()} if torque_nm else {},
"flow_rate": {unit: flow_rate_lpm / factor for unit, factor in UNIT_CONVERSIONS["Flow Rate"].items()} if flow_rate_lpm else {},
"power_displacement": power_displacement,
"power_torque": power_torque,
"power_flow_rate": power_flow_rate
}
return results, displacement_cc, pressure_bar, torque_nm, flow_rate_lpm
# Streamlit App
st.title("Hydraulic Pump Power Calculator")
st.sidebar.header("Input Units")
# Unit selection
displacement_unit = st.sidebar.selectbox("Displacement Unit:", ["cc/rev", "in^3/rev", "liters/rev"])
pressure_unit = st.sidebar.selectbox("Pressure Unit:", ["bar", "MPa", "PSI", "kPa", "atm"])
torque_unit = st.sidebar.selectbox("Torque Unit:", ["Nm", "lb-ft"])
flow_rate_unit = st.sidebar.selectbox("Flow Rate Unit:", ["L/min", "m^3/h", "GPM (US)", "GPM (UK)"])
st.sidebar.header("Input Parameters")
# User inputs
displacement = st.sidebar.number_input("Pump Displacement (cc/rev, in^3/rev, or liters/rev):", value=None, step=0.1, format="%.2f")
pressure = st.sidebar.number_input("Working Pressure (bar, MPa, PSI, kPa, or atm):", value=None, step=0.1, format="%.2f")
rpm = st.sidebar.number_input("Pump RPM:", value=None, step=1.0, format="%.0f")
torque = st.sidebar.number_input("Torque (Nm or lb-ft):", value=None, step=0.1, format="%.2f")
flow_rate = st.sidebar.number_input("Flow Rate (L/min, m^3/h, GPM (US), or GPM (UK)):", value=None, step=0.1, format="%.2f")
# Calculate parameters and power
if st.sidebar.button("Calculate"):
results, displacement_cc, pressure_bar, torque_nm, flow_rate_lpm = calculate_hydraulic_parameters(
displacement, pressure, rpm, torque, flow_rate,
displacement_unit, pressure_unit, torque_unit, flow_rate_unit
)
st.subheader("Results")
# Display formulas
st.write("### Formulas Used:")
if displacement_cc and pressure_bar and rpm:
st.write("Power based on Displacement: Power (kW) = (Displacement (cc/rev) × Pressure (bar) × RPM) / 600")
if torque_nm and rpm:
st.write("Power based on Torque: Power (kW) = (Torque (Nm) × RPM) / 9549")
if flow_rate_lpm and pressure_bar:
st.write("Power based on Flow Rate: Power (kW) = (Flow Rate (L/min) × Pressure (bar)) / 600")
# Display input conversions
st.write("### Converted Input Parameters:")
if displacement_cc:
st.write(f"Displacement: {displacement_cc:.2f} cc/rev")
if pressure_bar:
st.write(f"Pressure: {pressure_bar:.2f} bar")
if torque_nm:
st.write(f"Torque: {torque_nm:.2f} Nm")
if flow_rate_lpm:
st.write(f"Flow Rate: {flow_rate_lpm:.2f} L/min")
# Display results for all units
if results["displacement"]:
st.write("### Pump Displacement:")
for unit, value in results["displacement"].items():
st.write(f"{value:.2f} {unit}")
if results["pressure"]:
st.write("### Working Pressure:")
for unit, value in results["pressure"].items():
st.write(f"{value:.2f} {unit}")
if results["torque"]:
st.write("### Torque:")
for unit, value in results["torque"].items():
st.write(f"{value:.2f} {unit}")
if results["flow_rate"]:
st.write("### Flow Rate:")
for unit, value in results["flow_rate"].items():
st.write(f"{value:.2f} {unit}")
# Power results
st.write("### Hydraulic Power:")
if results['power_displacement']:
st.write(f"Based on Displacement: {results['power_displacement']:.2f} kW / {(results['power_displacement'] * 1.34102):.2f} HP")
else:
st.write("Power based on Displacement: Not calculable.")
if results['power_torque']:
st.write(f"Based on Torque: {results['power_torque']:.2f} kW / {(results['power_torque'] * 1.34102):.2f} HP")
else:
st.write("Power based on Torque: Not calculable.")
if results['power_flow_rate']:
st.write(f"Based on Flow Rate: {results['power_flow_rate']:.2f} kW / {(results['power_flow_rate'] * 1.34102):.2f} HP")
else:
st.write("Power based on Flow Rate: Not calculable.")
# Hugging Face Space Deployment Notice
st.sidebar.markdown("---")
st.sidebar.write("This app is ready for deployment on Hugging Face Spaces using Streamlit.")
st.sidebar.write("To deploy, include this `app.py` and `requirements.txt` in your Hugging Face Space repository.")