|
|
import gradio as gr |
|
|
import time |
|
|
|
|
|
|
|
|
def calculate_reynolds_number(velocity, diameter, density, viscosity, velocity_unit, diameter_unit, density_unit, viscosity_unit): |
|
|
|
|
|
if velocity_unit == "cm/s": |
|
|
velocity_m = velocity / 100 |
|
|
elif velocity_unit == "ft/s": |
|
|
velocity_m = velocity * 0.3048 |
|
|
else: |
|
|
velocity_m = velocity |
|
|
|
|
|
if diameter_unit == "cm": |
|
|
diameter_m = diameter / 100 |
|
|
elif diameter_unit == "mm": |
|
|
diameter_m = diameter / 1000 |
|
|
elif diameter_unit == "ft": |
|
|
diameter_m = diameter * 0.3048 |
|
|
else: |
|
|
diameter_m = diameter |
|
|
|
|
|
if density_unit == "g/cm³": |
|
|
density_kgm3 = density * 1000 |
|
|
else: |
|
|
density_kgm3 = density |
|
|
|
|
|
if viscosity_unit == "cP": |
|
|
viscosity_pas = viscosity / 1000 |
|
|
else: |
|
|
viscosity_pas = viscosity |
|
|
|
|
|
try: |
|
|
reynolds_number = (velocity_m * diameter_m * density_kgm3) / viscosity_pas |
|
|
if reynolds_number < 2300: |
|
|
flow_type = "Laminar Flow" |
|
|
elif 2300 <= reynolds_number <= 4000: |
|
|
flow_type = "Transitional Flow" |
|
|
else: |
|
|
flow_type = "Turbulent Flow" |
|
|
|
|
|
return f"Reynolds Number: {reynolds_number:.2f} ({flow_type})" |
|
|
except ZeroDivisionError: |
|
|
return "Error: Viscosity cannot be zero." |
|
|
|
|
|
|
|
|
def simulate_name(): |
|
|
name_text = "Designed by Kamran Liaqat - 2k23-chE-05" |
|
|
spaces = " " * 10 |
|
|
scrolling_name = spaces + name_text + spaces |
|
|
result = [] |
|
|
|
|
|
for i in range(len(scrolling_name)): |
|
|
result.append(scrolling_name[i:] + scrolling_name[:i]) |
|
|
time.sleep(0.1) |
|
|
|
|
|
return result |
|
|
|
|
|
|
|
|
def calculate_pump_power(flow_rate, head, efficiency, density, flow_rate_unit, head_unit, density_unit): |
|
|
if flow_rate_unit == "L/s": |
|
|
flow_rate_m3s = flow_rate / 1000 |
|
|
elif flow_rate_unit == "gpm": |
|
|
flow_rate_m3s = flow_rate * 3.78541 / 60000 |
|
|
else: |
|
|
flow_rate_m3s = flow_rate / 3600 |
|
|
|
|
|
if head_unit == "ft": |
|
|
head_m = head * 0.3048 |
|
|
else: |
|
|
head_m = head |
|
|
|
|
|
if density_unit == "g/cm³": |
|
|
density_kgm3 = density * 1000 |
|
|
else: |
|
|
density_kgm3 = density |
|
|
|
|
|
try: |
|
|
g = 9.81 |
|
|
efficiency_decimal = efficiency / 100 |
|
|
hydraulic_power = density_kgm3 * g * flow_rate_m3s * head_m |
|
|
shaft_power = hydraulic_power / efficiency_decimal |
|
|
return f"Hydraulic Power: {hydraulic_power / 1000:.2f} kW, Shaft Power: {shaft_power / 1000:.2f} kW" |
|
|
except ZeroDivisionError: |
|
|
return "Error: Efficiency cannot be zero." |
|
|
|
|
|
|
|
|
def calculate_orifice_meter(diameter_pipe, diameter_orifice, flow_rate, pressure_drop, diameter_unit, flow_rate_unit, pressure_unit): |
|
|
if diameter_unit == "cm": |
|
|
diameter_pipe_m = diameter_pipe / 100 |
|
|
diameter_orifice_m = diameter_orifice / 100 |
|
|
elif diameter_unit == "mm": |
|
|
diameter_pipe_m = diameter_pipe / 1000 |
|
|
diameter_orifice_m = diameter_orifice / 1000 |
|
|
else: |
|
|
diameter_pipe_m = diameter_pipe |
|
|
diameter_orifice_m = diameter_orifice |
|
|
|
|
|
if flow_rate_unit == "L/s": |
|
|
flow_rate_m3s = flow_rate / 1000 |
|
|
elif flow_rate_unit == "gpm": |
|
|
flow_rate_m3s = flow_rate * 3.78541 / 60000 |
|
|
else: |
|
|
flow_rate_m3s = flow_rate |
|
|
|
|
|
if pressure_unit == "bar": |
|
|
pressure_pa = pressure_drop * 1e5 |
|
|
elif pressure_unit == "psi": |
|
|
pressure_pa = pressure_drop * 6894.76 |
|
|
else: |
|
|
pressure_pa = pressure_drop |
|
|
|
|
|
try: |
|
|
beta = diameter_orifice_m / diameter_pipe_m |
|
|
discharge_coefficient = 0.61 |
|
|
area_orifice = 3.14159 * (diameter_orifice_m / 2) ** 2 |
|
|
flow_rate_calculated = ( |
|
|
discharge_coefficient |
|
|
* area_orifice |
|
|
* (2 * pressure_pa / 1000) ** 0.5 |
|
|
) |
|
|
|
|
|
flow_rate_cgs = flow_rate_calculated * 1000000 |
|
|
flow_rate_imperial = flow_rate_calculated * 2118.88 |
|
|
|
|
|
return ( |
|
|
f"Flow Rate (SI): {flow_rate_calculated:.4f} m³/s, " |
|
|
f"Flow Rate (CGS): {flow_rate_cgs:.2f} cm³/s, " |
|
|
f"Flow Rate (Imperial): {flow_rate_imperial:.2f} gpm" |
|
|
) |
|
|
except ZeroDivisionError: |
|
|
return "Error: Diameter or pressure drop cannot be zero." |
|
|
|
|
|
|
|
|
def calculate_sedimentation_tank(flow_rate, length, width, depth, flow_rate_unit, length_unit, width_unit, depth_unit): |
|
|
if flow_rate_unit == "L/s": |
|
|
flow_rate_m3s = flow_rate / 1000 |
|
|
elif flow_rate_unit == "m³/h": |
|
|
flow_rate_m3s = flow_rate / 3600 |
|
|
else: |
|
|
flow_rate_m3s = flow_rate |
|
|
|
|
|
if length_unit == "cm": |
|
|
length_m = length / 100 |
|
|
elif length_unit == "mm": |
|
|
length_m = length / 1000 |
|
|
else: |
|
|
length_m = length |
|
|
|
|
|
if width_unit == "cm": |
|
|
width_m = width / 100 |
|
|
elif width_unit == "mm": |
|
|
width_m = width / 1000 |
|
|
else: |
|
|
width_m = width |
|
|
|
|
|
if depth_unit == "cm": |
|
|
depth_m = depth / 100 |
|
|
elif depth_unit == "mm": |
|
|
depth_m = depth / 1000 |
|
|
else: |
|
|
depth_m = depth |
|
|
|
|
|
try: |
|
|
tank_volume = length_m * width_m * depth_m |
|
|
detention_time = tank_volume / flow_rate_m3s |
|
|
return f"Tank Volume: {tank_volume:.2f} m³, Detention Time: {detention_time:.2f} seconds" |
|
|
except ZeroDivisionError: |
|
|
return "Error: Flow rate cannot be zero." |
|
|
|
|
|
|
|
|
def calculate_bernoulli(p1, p2, v1, v2, h1, h2, p_unit, v_unit, h_unit): |
|
|
|
|
|
if p_unit == "Pa": |
|
|
p1_pa = p1 |
|
|
p2_pa = p2 |
|
|
elif p_unit == "bar": |
|
|
p1_pa = p1 * 1e5 |
|
|
p2_pa = p2 * 1e5 |
|
|
elif p_unit == "psi": |
|
|
p1_pa = p1 * 6894.76 |
|
|
p2_pa = p2 * 6894.76 |
|
|
else: |
|
|
p1_pa = p1 |
|
|
p2_pa = p2 |
|
|
|
|
|
if v_unit == "m/s": |
|
|
v1_mps = v1 |
|
|
v2_mps = v2 |
|
|
elif v_unit == "cm/s": |
|
|
v1_mps = v1 / 100 |
|
|
v2_mps = v2 / 100 |
|
|
elif v_unit == "ft/s": |
|
|
v1_mps = v1 * 0.3048 |
|
|
v2_mps = v2 * 0.3048 |
|
|
else: |
|
|
v1_mps = v1 |
|
|
v2_mps = v2 |
|
|
|
|
|
if h_unit == "m": |
|
|
h1_m = h1 |
|
|
h2_m = h2 |
|
|
elif h_unit == "cm": |
|
|
h1_m = h1 / 100 |
|
|
h2_m = h2 / 100 |
|
|
elif h_unit == "ft": |
|
|
h1_m = h1 * 0.3048 |
|
|
h2_m = h2 * 0.3048 |
|
|
else: |
|
|
h1_m = h1 |
|
|
h2_m = h2 |
|
|
|
|
|
try: |
|
|
|
|
|
g = 9.81 |
|
|
rho = 1000 |
|
|
|
|
|
delta_p = (0.5 * rho * (v2_mps**2 - v1_mps**2)) + (rho * g * (h2_m - h1_m)) + (p1_pa - p2_pa) |
|
|
return f"Pressure Difference (ΔP): {delta_p:.2f} Pa" |
|
|
except ZeroDivisionError: |
|
|
return "Error: Zero value input encountered." |
|
|
|
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
|
|
|
gr.HTML(""" |
|
|
<style> |
|
|
body { |
|
|
background-color: #76c7c0; /* Reddish-green color */ |
|
|
} |
|
|
</style> |
|
|
""") |
|
|
|
|
|
|
|
|
gr.Markdown("# Designed by Kamran Liaqat - 2k23-chE-05") |
|
|
|
|
|
|
|
|
name_simulation = simulate_name() |
|
|
scrolling_text = gr.Textbox(value="", label="Scrolling Name", interactive=False) |
|
|
|
|
|
def update_scrolling_text(): |
|
|
for name in name_simulation: |
|
|
scrolling_text.update(value=name) |
|
|
time.sleep(0.1) |
|
|
|
|
|
|
|
|
gr.Markdown("<div style='font-size: small; color: #333;'>Supervised by Hidaytullah Mahar</div>") |
|
|
|
|
|
|
|
|
demo.load(update_scrolling_text) |
|
|
|
|
|
|
|
|
with gr.Tabs(): |
|
|
with gr.Tab("1. Reynolds Number Calculator"): |
|
|
gr.Markdown("# Reynolds Number Calculator") |
|
|
with gr.Row(): |
|
|
velocity = gr.Number(label="Fluid Velocity", value=1.0) |
|
|
velocity_unit = gr.Dropdown(["m/s", "cm/s", "ft/s"], label="Velocity Unit", value="m/s") |
|
|
with gr.Row(): |
|
|
diameter = gr.Number(label="Hydraulic Diameter", value=0.1) |
|
|
diameter_unit = gr.Dropdown(["m", "cm", "mm", "ft"], label="Diameter Unit", value="m") |
|
|
with gr.Row(): |
|
|
density = gr.Number(label="Fluid Density", value=1000.0) |
|
|
density_unit = gr.Dropdown(["kg/m³", "g/cm³"], label="Density Unit", value="kg/m³") |
|
|
with gr.Row(): |
|
|
viscosity = gr.Number(label="Dynamic Viscosity", value=0.001) |
|
|
viscosity_unit = gr.Dropdown(["Pa·s", "cP"], label="Viscosity Unit", value="Pa·s") |
|
|
reynolds_button = gr.Button("Calculate Reynolds Number") |
|
|
reynolds_result = gr.Textbox(label="Reynolds Number Result") |
|
|
reynolds_button.click( |
|
|
calculate_reynolds_number, |
|
|
inputs=[velocity, diameter, density, viscosity, velocity_unit, diameter_unit, density_unit, viscosity_unit], |
|
|
outputs=reynolds_result, |
|
|
) |
|
|
|
|
|
with gr.Tab("2. Centrifugal Pump Power Calculator"): |
|
|
gr.Markdown("# Centrifugal Pump Power Calculator") |
|
|
with gr.Row(): |
|
|
flow_rate = gr.Number(label="Flow Rate", value=10.0) |
|
|
flow_rate_unit = gr.Dropdown(["m³/h", "L/s", "gpm"], label="Flow Rate Unit", value="m³/h") |
|
|
with gr.Row(): |
|
|
head = gr.Number(label="Head", value=20.0) |
|
|
head_unit = gr.Dropdown(["m", "ft"], label="Head Unit", value="m") |
|
|
with gr.Row(): |
|
|
efficiency = gr.Number(label="Efficiency (%)", value=75.0) |
|
|
density = gr.Number(label="Fluid Density", value=1000.0) |
|
|
density_unit = gr.Dropdown(["kg/m³", "g/cm³"], label="Density Unit", value="kg/m³") |
|
|
pump_button = gr.Button("Calculate Pump Power") |
|
|
pump_result = gr.Textbox(label="Pump Power Result") |
|
|
pump_button.click( |
|
|
calculate_pump_power, |
|
|
inputs=[flow_rate, head, efficiency, density, flow_rate_unit, head_unit, density_unit], |
|
|
outputs=pump_result, |
|
|
) |
|
|
|
|
|
with gr.Tab("3. Orifice Meter Flow Calculator"): |
|
|
gr.Markdown("# Orifice Meter Flow Calculator") |
|
|
with gr.Row(): |
|
|
diameter_pipe = gr.Number(label="Pipe Diameter", value=0.1) |
|
|
diameter_orifice = gr.Number(label="Orifice Diameter", value=0.05) |
|
|
diameter_unit = gr.Dropdown(["m", "cm", "mm"], label="Diameter Unit", value="m") |
|
|
with gr.Row(): |
|
|
flow_rate = gr.Number(label="Flow Rate", value=10.0) |
|
|
flow_rate_unit = gr.Dropdown(["m³/s", "L/s", "gpm"], label="Flow Rate Unit", value="m³/s") |
|
|
with gr.Row(): |
|
|
pressure_drop = gr.Number(label="Pressure Drop", value=10.0) |
|
|
pressure_unit = gr.Dropdown(["Pa", "bar", "psi"], label="Pressure Unit", value="Pa") |
|
|
orifice_button = gr.Button("Calculate Orifice Flow Rate") |
|
|
orifice_result = gr.Textbox(label="Orifice Flow Rate Result") |
|
|
orifice_button.click( |
|
|
calculate_orifice_meter, |
|
|
inputs=[diameter_pipe, diameter_orifice, flow_rate, pressure_drop, diameter_unit, flow_rate_unit, pressure_unit], |
|
|
outputs=orifice_result, |
|
|
) |
|
|
|
|
|
with gr.Tab("4. Sedimentation Tank Calculator"): |
|
|
gr.Markdown("# Sedimentation Tank Calculator") |
|
|
with gr.Row(): |
|
|
flow_rate = gr.Number(label="Flow Rate", value=5.0) |
|
|
flow_rate_unit = gr.Dropdown(["L/s", "m³/h"], label="Flow Rate Unit", value="L/s") |
|
|
with gr.Row(): |
|
|
length = gr.Number(label="Length", value=5.0) |
|
|
width = gr.Number(label="Width", value=2.0) |
|
|
depth = gr.Number(label="Depth", value=3.0) |
|
|
length_unit = gr.Dropdown(["m", "cm", "mm"], label="Length Unit", value="m") |
|
|
width_unit = gr.Dropdown(["m", "cm", "mm"], label="Width Unit", value="m") |
|
|
depth_unit = gr.Dropdown(["m", "cm", "mm"], label="Depth Unit", value="m") |
|
|
sedimentation_button = gr.Button("Calculate Sedimentation Tank") |
|
|
sedimentation_result = gr.Textbox(label="Sedimentation Tank Result") |
|
|
sedimentation_button.click( |
|
|
calculate_sedimentation_tank, |
|
|
inputs=[flow_rate, length, width, depth, flow_rate_unit, length_unit, width_unit, depth_unit], |
|
|
outputs=sedimentation_result, |
|
|
) |
|
|
|
|
|
with gr.Tab("5. Bernoulli's Equation Calculation"): |
|
|
gr.Markdown("# Bernoulli's Equation Calculation") |
|
|
with gr.Row(): |
|
|
p1 = gr.Number(label="Pressure (P1)", value=101325.0) |
|
|
p2 = gr.Number(label="Pressure (P2)", value=90000.0) |
|
|
p_unit = gr.Dropdown(["Pa", "bar", "psi"], label="Pressure Unit", value="Pa") |
|
|
with gr.Row(): |
|
|
v1 = gr.Number(label="Velocity (V1)", value=5.0) |
|
|
v2 = gr.Number(label="Velocity (V2)", value=4.0) |
|
|
v_unit = gr.Dropdown(["m/s", "cm/s", "ft/s"], label="Velocity Unit", value="m/s") |
|
|
with gr.Row(): |
|
|
h1 = gr.Number(label="Height (H1)", value=10.0) |
|
|
h2 = gr.Number(label="Height (H2)", value=5.0) |
|
|
h_unit = gr.Dropdown(["m", "cm", "ft"], label="Height Unit", value="m") |
|
|
bernoulli_button = gr.Button("Calculate Pressure Difference") |
|
|
bernoulli_result = gr.Textbox(label="Bernoulli's Result") |
|
|
bernoulli_button.click( |
|
|
calculate_bernoulli, |
|
|
inputs=[p1, p2, v1, v2, h1, h2, p_unit, v_unit, h_unit], |
|
|
outputs=bernoulli_result, |
|
|
) |
|
|
|
|
|
|
|
|
demo.launch() |
|
|
|