Pump / app.py
Hidayatmahar's picture
Update app.py
299c21f verified
import gradio as gr
def design_pump(flow_rate, head, efficiency, pump_speed, impeller_diameter):
"""
Perform a complete design for a centrifugal pump.
Args:
flow_rate (float): Flow rate in m³/hr.
head (float): Head in meters.
efficiency (float): Efficiency in percentage.
pump_speed (float): Pump speed in RPM.
impeller_diameter (float): Impeller diameter in meters.
Returns:
tuple: Calculated pump parameters including power, NPSH, specific speed, and more.
"""
try:
# Validate efficiency
if efficiency <= 0 or efficiency > 100:
return "Error: Efficiency must be between 0 and 100.", "", "", "", "", "", "", ""
# Constants
density = 1000 # Water density (kg/m³)
gravity = 9.81 # Acceleration due to gravity (m/s²)
# Calculate flow rate in m³/s
flow_rate_m3s = flow_rate / 3600 # Convert m³/hr to m³/s
# Calculate output power (kW)
output_power = (flow_rate_m3s * head * density * gravity) / 1000 # Convert to kW
# Calculate input power considering efficiency
input_power = output_power / (efficiency / 100)
# Calculate NPSH
npsh = head * 0.1 # Example: assume 10% of the head as NPSH for simplicity
# Calculate specific speed (Ns)
specific_speed = (
pump_speed * (flow_rate_m3s ** 0.5) / (head ** 0.75)
) # Simplified formula for specific speed
# Calculate impeller peripheral velocity (U)
peripheral_velocity = (3.14 * impeller_diameter * pump_speed) / 60 # m/s
# Shaft power (mechanical power needed)
shaft_power = input_power * 1.1 # Add a safety factor of 10%
return (
f"{output_power:.2f} kW",
f"{input_power:.2f} kW",
f"{npsh:.2f} m",
f"{specific_speed:.2f} (dimensionless)",
f"{peripheral_velocity:.2f} m/s",
f"{shaft_power:.2f} kW",
f"{flow_rate_m3s:.4f} m³/s",
)
except Exception as e:
return f"Error: {str(e)}", "", "", "", "", "", ""
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# Comprehensive Centrifugal Pump Design Tool")
gr.Markdown("Enter the required specifications to calculate pump design parameters.")
with gr.Row():
flow_rate = gr.Number(label="Flow Rate (m³/hr)", value=50, precision=2)
head = gr.Number(label="Head (m)", value=20, precision=2)
efficiency = gr.Number(label="Efficiency (%)", value=75, precision=2)
pump_speed = gr.Number(label="Pump Speed (RPM)", value=1450, precision=0)
impeller_diameter = gr.Number(
label="Impeller Diameter (m)", value=0.3, precision=2
)
with gr.Row():
output_power = gr.Textbox(label="Output Power (kW)", interactive=False)
input_power = gr.Textbox(label="Input Power (kW)", interactive=False)
npsh = gr.Textbox(label="Net Positive Suction Head (NPSH) (m)", interactive=False)
specific_speed = gr.Textbox(label="Specific Speed (dimensionless)", interactive=False)
peripheral_velocity = gr.Textbox(label="Peripheral Velocity (m/s)", interactive=False)
shaft_power = gr.Textbox(label="Shaft Power (kW)", interactive=False)
flow_rate_m3s = gr.Textbox(label="Flow Rate (m³/s)", interactive=False)
calculate_button = gr.Button("Calculate")
calculate_button.click(
design_pump,
inputs=[flow_rate, head, efficiency, pump_speed, impeller_diameter],
outputs=[
output_power,
input_power,
npsh,
specific_speed,
peripheral_velocity,
shaft_power,
flow_rate_m3s,
],
)
if __name__ == "__main__":
demo.launch()