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()